<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.goalstriving.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=CursorBot</id>
	<title>Knowledge Commons - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.goalstriving.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=CursorBot"/>
	<link rel="alternate" type="text/html" href="https://wiki.goalstriving.org/Special:Contributions/CursorBot"/>
	<updated>2026-09-12T03:51:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.goalstriving.org/index.php?title=Cursor_User_Onboarding_Implementation_Plan&amp;diff=346</id>
		<title>Cursor User Onboarding Implementation Plan</title>
		<link rel="alternate" type="text/html" href="https://wiki.goalstriving.org/index.php?title=Cursor_User_Onboarding_Implementation_Plan&amp;diff=346"/>
		<updated>2026-09-04T23:06:33Z</updated>

		<summary type="html">&lt;p&gt;CursorBot: Cursor: publish user onboarding implementation plan&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Implementation plan for the enhanced user onboarding experience. Requirements source: [[New User Onboarding]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scope for this plan:&#039;&#039;&#039; two environment choices only — &#039;&#039;&#039;Default wiki&#039;&#039;&#039; and &#039;&#039;&#039;Demo preload&#039;&#039;&#039;. PARA wiki is deferred. User-info enhancements (signup audit, name/avatar sync, timezone) are a separate track.&lt;br /&gt;
&lt;br /&gt;
Synced from git &amp;lt;code&amp;gt;docs/wikifam_community_roadmap.md&amp;lt;/code&amp;gt; §1 and Cursor planning session (September 2026).&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Goal !! Success criteria&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Choice&#039;&#039;&#039; || New user picks &#039;&#039;&#039;Default wiki&#039;&#039;&#039; or &#039;&#039;&#039;Demo preload&#039;&#039;&#039; before provisioning&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Demo preload&#039;&#039;&#039; || User sees demo Main Page hierarchy with &#039;&#039;&#039;Page&#039;&#039;&#039; + &#039;&#039;&#039;Contents&#039;&#039;&#039; checkboxes (all checked by default)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Granular import&#039;&#039;&#039; || Both checked → full page; Page only → first sentence + back-link; neither → page omitted&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Default wiki&#039;&#039;&#039; || Stock MediaWiki install, no demo import&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Reliability&#039;&#039;&#039; || Provisioning job carries selections; worker applies them deterministically&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Out of scope (this plan):&#039;&#039;&#039; PARA wiki path, Areas/Topics/Projects picker, filtered import driven by PARA selections.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Deferred (same requirements page, separate track):&#039;&#039;&#039; signup audit logging (IP/geo/browser), &amp;lt;code&amp;gt;wiki_registry&amp;lt;/code&amp;gt; name/avatar fields, &amp;lt;code&amp;gt;wiki_member_name_changes&amp;lt;/code&amp;gt;, timezone default from Google at registration.&lt;br /&gt;
&lt;br /&gt;
== Current state ==&lt;br /&gt;
&lt;br /&gt;
Today the flow is: Google login → slug on &amp;lt;code&amp;gt;goalstriving.org/get-started.php&amp;lt;/code&amp;gt; → async job → &amp;lt;code&amp;gt;create-wiki.sh&amp;lt;/code&amp;gt; → &#039;&#039;&#039;full&#039;&#039;&#039; &amp;lt;code&amp;gt;demo-template.xml&amp;lt;/code&amp;gt; import for every personal wiki.&lt;br /&gt;
&lt;br /&gt;
* No environment choice&lt;br /&gt;
* No page checklist&lt;br /&gt;
* Job JSON has no &amp;lt;code&amp;gt;environment&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;template_selection&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;import-wiki-template.sh&amp;lt;/code&amp;gt; only supports full XML dump import&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key repo files today:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Area !! Path !! Role&lt;br /&gt;
|-&lt;br /&gt;
| Portal UI || &amp;lt;code&amp;gt;portal/public/get-started.php&amp;lt;/code&amp;gt; || Slug form + job polling only&lt;br /&gt;
|-&lt;br /&gt;
| Jobs || &amp;lt;code&amp;gt;portal/lib/jobs.php&amp;lt;/code&amp;gt; || Async provision job JSON&lt;br /&gt;
|-&lt;br /&gt;
| Worker || &amp;lt;code&amp;gt;portal/bin/provision-wiki.php&amp;lt;/code&amp;gt; || Calls &amp;lt;code&amp;gt;create-wiki.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Provision || &amp;lt;code&amp;gt;scripts/create-wiki.sh&amp;lt;/code&amp;gt; || DB + MW install + full template import&lt;br /&gt;
|-&lt;br /&gt;
| Import || &amp;lt;code&amp;gt;scripts/import-wiki-template.sh&amp;lt;/code&amp;gt; || Full XML + uploads rsync&lt;br /&gt;
|-&lt;br /&gt;
| Template export || &amp;lt;code&amp;gt;scripts/export-demo-template.sh&amp;lt;/code&amp;gt; || Golden export from demo wiki&lt;br /&gt;
|-&lt;br /&gt;
| Registry || &amp;lt;code&amp;gt;sql/auth-schema.sql&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;wiki_members&amp;lt;/code&amp;gt;, invites, audit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Target user experience ==&lt;br /&gt;
&lt;br /&gt;
Multi-step wizard on &amp;lt;code&amp;gt;goalstriving.org/get-started.php&amp;lt;/code&amp;gt; (session-backed; CSRF on each POST):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 1 — Environment&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* ○ Default wiki (MediaWiki starter pages only)&lt;br /&gt;
* ● Demo preload (recommended) — outline + optional sample content&lt;br /&gt;
* ○ PARA wiki — &#039;&#039;disabled/greyed: “Coming in a future release”&#039;&#039; with link to [[New User Onboarding]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 2 — Wiki address&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[slug].goalstriving.org&amp;lt;/code&amp;gt; (existing validation)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 3 — Page checklist&#039;&#039;&#039; (only if Demo preload)&lt;br /&gt;
&lt;br /&gt;
* Hierarchical tree from demo Main Page&lt;br /&gt;
* Columns: &#039;&#039;&#039;Page&#039;&#039;&#039; ✓ and &#039;&#039;&#039;Contents&#039;&#039;&#039; ✓ (both default ON)&lt;br /&gt;
* Select all / Clear all + section expand/collapse&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Step 4 — Review &amp;amp; create&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Summary → submit → existing job polling UI&lt;br /&gt;
&lt;br /&gt;
=== Checkbox semantics ===&lt;br /&gt;
&lt;br /&gt;
Per [[New User Onboarding#Setup for Standard wiki with static templates]]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Page !! Contents !! Result&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || ✓ || Full demo revision for that title&lt;br /&gt;
|-&lt;br /&gt;
| ✓ || ✗ || Stub: first sentence only (same pattern as demo stubs)&lt;br /&gt;
|-&lt;br /&gt;
| ✗ || ✗ || Page not created; omitted from imported Main Page outline&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Always handled specially:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Main Page&#039;&#039;&#039; — Rebuilt after import to match selections (links only to pages that exist). Do not import demo Main Page verbatim then delete orphans.&lt;br /&gt;
* &#039;&#039;&#039;Shared infrastructure&#039;&#039;&#039; — Confirm demo export has no required Form/Template pages after PARA removal from demo; if clean, selective main-namespace import is sufficient.&lt;br /&gt;
&lt;br /&gt;
== Architecture overview ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Portal (wizard + manifest API)&lt;br /&gt;
    → job JSON&lt;br /&gt;
    → provision-wiki.php&lt;br /&gt;
    → create-wiki.sh&lt;br /&gt;
        → import-wiki-template.sh (default path / fallback)&lt;br /&gt;
        → import-wiki-selection.php (NEW — selective import)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Demo page manifest ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Problem:&#039;&#039;&#039; Wizard needs a stable tree independent of live demo edits during a deploy window.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; Generate &amp;lt;code&amp;gt;templates/demo-page-manifest.json&amp;lt;/code&amp;gt; on each &amp;lt;code&amp;gt;export-demo-template.sh&amp;lt;/code&amp;gt; run (server path: &amp;lt;code&amp;gt;/etc/goalstriving/templates/demo-page-manifest.json&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Example structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;exported_at&amp;quot;: &amp;quot;2026-09-04T21:39:14Z&amp;quot;,&lt;br /&gt;
  &amp;quot;main_page_title&amp;quot;: &amp;quot;Main Page&amp;quot;,&lt;br /&gt;
  &amp;quot;pages&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;title&amp;quot;: &amp;quot;Personal&amp;quot;,&lt;br /&gt;
      &amp;quot;parent&amp;quot;: &amp;quot;Main Page&amp;quot;,&lt;br /&gt;
      &amp;quot;depth&amp;quot;: 1,&lt;br /&gt;
      &amp;quot;first_sentence&amp;quot;: &amp;quot;This page contains notes about topics personal to me.&amp;quot;,&lt;br /&gt;
      &amp;quot;has_sample_content&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;tree&amp;quot;: { }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Generator:&#039;&#039;&#039; New script &amp;lt;code&amp;gt;scripts/build-demo-page-manifest.php&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# Read demo Main Page wikitext → parse &amp;lt;code&amp;gt;[[links]]&amp;lt;/code&amp;gt; hierarchy&lt;br /&gt;
# For each linked page in export XML, extract first sentence (text before first blank line / heading)&lt;br /&gt;
# Write manifest alongside &amp;lt;code&amp;gt;demo-template.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
# Optionally commit manifest to git for portal dev without EC2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Portal:&#039;&#039;&#039; &amp;lt;code&amp;gt;GET /api/demo-manifest.php&amp;lt;/code&amp;gt; (authenticated) returns manifest JSON for wizard Step 3.&lt;br /&gt;
&lt;br /&gt;
== Job schema extension ==&lt;br /&gt;
&lt;br /&gt;
Extend &amp;lt;code&amp;gt;startProvisioningJob()&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;portal/lib/jobs.php&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;provision&amp;quot;,&lt;br /&gt;
  &amp;quot;wiki_slug&amp;quot;: &amp;quot;alice&amp;quot;,&lt;br /&gt;
  &amp;quot;environment&amp;quot;: &amp;quot;default | demo_preload&amp;quot;,&lt;br /&gt;
  &amp;quot;template_selection&amp;quot;: {&lt;br /&gt;
    &amp;quot;pages&amp;quot;: {&lt;br /&gt;
      &amp;quot;Personal&amp;quot;: { &amp;quot;page&amp;quot;: true, &amp;quot;contents&amp;quot;: true },&lt;br /&gt;
      &amp;quot;Long-term goals&amp;quot;: { &amp;quot;page&amp;quot;: true, &amp;quot;contents&amp;quot;: false },&lt;br /&gt;
      &amp;quot;Biology 10&amp;quot;: { &amp;quot;page&amp;quot;: false, &amp;quot;contents&amp;quot;: false }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;environment: default&amp;lt;/code&amp;gt; → ignore &amp;lt;code&amp;gt;template_selection&amp;lt;/code&amp;gt;; skip template import entirely&lt;br /&gt;
* &amp;lt;code&amp;gt;environment: demo_preload&amp;lt;/code&amp;gt; → require &amp;lt;code&amp;gt;template_selection&amp;lt;/code&amp;gt;; default all true if omitted (backward compat during rollout)&lt;br /&gt;
&lt;br /&gt;
Pass to worker:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
create-wiki.sh &amp;quot;$SLUG&amp;quot; &amp;quot;$SITE_NAME&amp;quot; &amp;quot;$ADMIN&amp;quot; \&lt;br /&gt;
  --environment=demo_preload \&lt;br /&gt;
  --selection-file=/tmp/job-{id}-selection.json&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Backend: selective import ==&lt;br /&gt;
&lt;br /&gt;
=== Phase A — Default wiki path (small) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;create-wiki.sh&amp;lt;/code&amp;gt; changes:&lt;br /&gt;
&lt;br /&gt;
* Accept &amp;lt;code&amp;gt;--environment=default|demo_preload&amp;lt;/code&amp;gt;&lt;br /&gt;
* If &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;: skip &amp;lt;code&amp;gt;import-wiki-template.sh&amp;lt;/code&amp;gt;; verify page count ≥ 1; lower or bypass &amp;lt;code&amp;gt;TEMPLATE_MIN_PAGES&amp;lt;/code&amp;gt; check&lt;br /&gt;
* Store &amp;lt;code&amp;gt;environment&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;wiki_registry&amp;lt;/code&amp;gt; (new column &amp;lt;code&amp;gt;wiki_environment ENUM(&#039;default&#039;,&#039;demo_preload&#039;)&amp;lt;/code&amp;gt; — migration in &amp;lt;code&amp;gt;sql/&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Phase B — Selective demo import (core) ===&lt;br /&gt;
&lt;br /&gt;
Recommended: new &amp;lt;code&amp;gt;scripts/import-wiki-selection.php&amp;lt;/code&amp;gt; (Maintenance runner):&lt;br /&gt;
&lt;br /&gt;
{| Step !! Action&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Delete stock Main Page (existing behavior)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || For each selected title with &amp;lt;code&amp;gt;contents: true&amp;lt;/code&amp;gt;, import that page from XML&lt;br /&gt;
|-&lt;br /&gt;
| 3 || For &amp;lt;code&amp;gt;page: true, contents: false&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;edit.php&amp;lt;/code&amp;gt; stub from manifest &amp;lt;code&amp;gt;first_sentence&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Build Main Page wikitext from manifest tree + selections; &amp;lt;code&amp;gt;edit.php&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Sync uploads only for file titles referenced by selected pages with full content&lt;br /&gt;
|-&lt;br /&gt;
| 6 || &amp;lt;code&amp;gt;update --quick&amp;lt;/code&amp;gt;; reload httpd&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MVP fallback:&#039;&#039;&#039; Import full template, then delete unselected pages and overwrite stub-only pages from manifest — acceptable for Phase 2 if export is ~90 pages.&lt;br /&gt;
&lt;br /&gt;
=== Phase C — Uploads ===&lt;br /&gt;
&lt;br /&gt;
Only rsync upload files referenced by pages with &amp;lt;code&amp;gt;contents: true&amp;lt;/code&amp;gt; (parse &amp;lt;code&amp;gt;[[File:...]]&amp;lt;/code&amp;gt; in imported bodies).&lt;br /&gt;
&lt;br /&gt;
== Portal implementation ==&lt;br /&gt;
&lt;br /&gt;
{| File !! Change&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;portal/public/get-started.php&amp;lt;/code&amp;gt; || Multi-step wizard; store progress in &amp;lt;code&amp;gt;$_SESSION[&#039;onboarding&#039;]&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;portal/public/api/demo-manifest.php&amp;lt;/code&amp;gt; || &#039;&#039;&#039;New&#039;&#039;&#039; — serve manifest (auth required)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;portal/lib/jobs.php&amp;lt;/code&amp;gt; || Accept environment + selection; validate against manifest&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;portal/lib/onboarding.php&amp;lt;/code&amp;gt; || &#039;&#039;&#039;New&#039;&#039;&#039; — validation, defaults, tree helpers&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;portal/public/styles.css&amp;lt;/code&amp;gt; || Checklist table, indented tree, disabled PARA card&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;portal/bin/provision-wiki.php&amp;lt;/code&amp;gt; || Pass new args to &amp;lt;code&amp;gt;create-wiki.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Validation rules:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Slug rules unchanged&lt;br /&gt;
* Every manifest title appears at most once in selection&lt;br /&gt;
* If parent unchecked but child checked → auto-check parent &#039;&#039;&#039;Page&#039;&#039;&#039; (recommended)&lt;br /&gt;
* If user clears everything → allow but warn (“Your wiki will have an empty Main Page”)&lt;br /&gt;
&lt;br /&gt;
== Registry &amp;amp; observability ==&lt;br /&gt;
&lt;br /&gt;
{| Item !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;wiki_registry.wiki_environment&amp;lt;/code&amp;gt; || Analytics; support&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;admin_events&amp;lt;/code&amp;gt; / extend &amp;lt;code&amp;gt;wiki_provisioned&amp;lt;/code&amp;gt; payload || Log environment + page counts&lt;br /&gt;
|-&lt;br /&gt;
| Job JSON retain selection || Debugging failed provisions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Optional: store compact selection JSON in &amp;lt;code&amp;gt;wiki_registry.provisioning_options&amp;lt;/code&amp;gt; (TEXT).&lt;br /&gt;
&lt;br /&gt;
== Phased delivery ==&lt;br /&gt;
&lt;br /&gt;
=== Phase 1 — Foundation (1–2 weeks) ===&lt;br /&gt;
&lt;br /&gt;
* SQL migration: &amp;lt;code&amp;gt;wiki_environment&amp;lt;/code&amp;gt;, optional &amp;lt;code&amp;gt;provisioning_options&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;build-demo-page-manifest.php&amp;lt;/code&amp;gt; + hook into &amp;lt;code&amp;gt;export-demo-template.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;create-wiki.sh --environment=default&amp;lt;/code&amp;gt; (skip import)&lt;br /&gt;
* Wizard Steps 1–2–4 only (environment + slug; demo path still full import)&lt;br /&gt;
* Job schema + &amp;lt;code&amp;gt;provision-wiki.php&amp;lt;/code&amp;gt; wiring&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Deliverable:&#039;&#039;&#039; User can choose stock wiki vs full demo clone.&lt;br /&gt;
&lt;br /&gt;
=== Phase 2 — Page checklist UI (1 week) ===&lt;br /&gt;
&lt;br /&gt;
* Manifest API + Step 3 tree UI (checkboxes; defaults all on)&lt;br /&gt;
* Persist selection in job JSON&lt;br /&gt;
* PARA option shown disabled&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Deliverable:&#039;&#039;&#039; UI matches requirements; still full import if any page selected (temporary).&lt;br /&gt;
&lt;br /&gt;
=== Phase 3 — Selective import (2–3 weeks) ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;import-wiki-selection.php&amp;lt;/code&amp;gt; with Page/Contents semantics&lt;br /&gt;
* Generated Main Page from selections&lt;br /&gt;
* Upload filtering&lt;br /&gt;
* Adjust &amp;lt;code&amp;gt;TEMPLATE_MIN_PAGES&amp;lt;/code&amp;gt; logic (count only selected pages)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Deliverable:&#039;&#039;&#039; Full requirements for static template path on [[New User Onboarding]].&lt;br /&gt;
&lt;br /&gt;
=== Phase 4 — Polish (1 week) ===&lt;br /&gt;
&lt;br /&gt;
* User info: timezone prompt (optional; apply via MW user option after first login)&lt;br /&gt;
* Signup audit enrichment (IP/geo/browser) if desired&lt;br /&gt;
* Docs: update roadmap §1, &amp;lt;code&amp;gt;wiki-template.md&amp;lt;/code&amp;gt;, sync this page&lt;br /&gt;
* E2E test wiki slugs on staging&lt;br /&gt;
&lt;br /&gt;
== Testing plan ==&lt;br /&gt;
&lt;br /&gt;
{| Scenario !! Expected&lt;br /&gt;
|-&lt;br /&gt;
| Default wiki || Stock Main Page; ~1–5 core pages; no demo titles&lt;br /&gt;
|-&lt;br /&gt;
| Demo, all checked || Parity with current full import (~88 pages)&lt;br /&gt;
|-&lt;br /&gt;
| Demo, Page only everywhere || All titles exist; each body ≈ one sentence&lt;br /&gt;
|-&lt;br /&gt;
| Demo, mixed || Spot-check full vs stub vs absent&lt;br /&gt;
|-&lt;br /&gt;
| Demo, only Personal subtree || Main Page links only to selected branch&lt;br /&gt;
|-&lt;br /&gt;
| Re-run job failure || Job error surfaced; no partial registry orphan&lt;br /&gt;
|-&lt;br /&gt;
| Existing user || &amp;lt;code&amp;gt;get-started.php&amp;lt;/code&amp;gt; still shows “already have wiki”&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Automate: shell test that provisions &amp;lt;code&amp;gt;templatetest-default&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;templatetest-selective&amp;lt;/code&amp;gt; on EC2 after deploy.&lt;br /&gt;
&lt;br /&gt;
== Risks &amp;amp; mitigations ==&lt;br /&gt;
&lt;br /&gt;
{| Risk !! Mitigation&lt;br /&gt;
|-&lt;br /&gt;
| Manifest drift vs demo wiki || Regenerate on every &amp;lt;code&amp;gt;export-demo-template.sh&amp;lt;/code&amp;gt;; CI check manifest age&lt;br /&gt;
|-&lt;br /&gt;
| Main Page link rot || Generate Main Page programmatically, don’t filter by deletion&lt;br /&gt;
|-&lt;br /&gt;
| Long provisioning with full import then trim || Move to selective import in Phase 3; show progress in job UI&lt;br /&gt;
|-&lt;br /&gt;
| Parent/child checkbox UX || Auto-select ancestors; indent tree clearly&lt;br /&gt;
|-&lt;br /&gt;
| Large POST from 84+ pages || Store selection server-side in session; job references session id or compact bitset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What stays unchanged ==&lt;br /&gt;
&lt;br /&gt;
* Google OIDC / Authentik login&lt;br /&gt;
* One wiki per user&lt;br /&gt;
* Async job polling&lt;br /&gt;
* &amp;lt;code&amp;gt;GoalStrivingAccess&amp;lt;/code&amp;gt; ACL after first wiki login&lt;br /&gt;
* Demo wiki as golden source (&amp;lt;code&amp;gt;demo.goalstriving.org&amp;lt;/code&amp;gt; + export pipeline)&lt;br /&gt;
* PARA forms on personal wikis (installed by deploy; not part of onboarding wizard)&lt;br /&gt;
&lt;br /&gt;
== Recommended first PR slice ==&lt;br /&gt;
&lt;br /&gt;
Smallest useful increment: &#039;&#039;&#039;Phase 1&#039;&#039;&#039; — environment toggle + &amp;lt;code&amp;gt;--environment=default&amp;lt;/code&amp;gt;, plus manifest generator (no UI checklist yet). Unblocks users who want a blank wiki immediately while checklist work proceeds in parallel.&lt;br /&gt;
&lt;br /&gt;
== Republish from git ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo GOALSTRIVING_CURSOR_WIKI_PAGE=&amp;quot;Cursor User Onboarding Implementation Plan&amp;quot; \&lt;br /&gt;
  GOALSTRIVING_CURSOR_WIKI_SOURCE=/opt/goalstriving-wiki/templates/cursor-user-onboarding-implementation-plan.wiki \&lt;br /&gt;
  /usr/local/bin/publish-cursor-wiki-page.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>CursorBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.goalstriving.org/index.php?title=Cursor_Community_Roadmap&amp;diff=312</id>
		<title>Cursor Community Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.goalstriving.org/index.php?title=Cursor_Community_Roadmap&amp;diff=312"/>
		<updated>2026-08-27T23:30:54Z</updated>

		<summary type="html">&lt;p&gt;CursorBot: Cursor: sync community roadmap from git&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Living implementation plan for GoalStriving / WikiFam. Synced from git &amp;lt;code&amp;gt;docs/wikifam_community_roadmap.md&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements (human-owned):&#039;&#039;&#039; [[Wiki Page Types]] · [[New User Onboarding]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Current focus:&#039;&#039;&#039; Onboarding, PARA wiki, page properties, personal status page, community stats, VisualEditor UX, then connections/projects.&lt;br /&gt;
&lt;br /&gt;
== Priority work (complete first) ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! #&lt;br /&gt;
! Initiative&lt;br /&gt;
! Summary&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| &#039;&#039;&#039;Onboarding wizard&#039;&#039;&#039;&lt;br /&gt;
| Three environment choices; optional template import&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| &#039;&#039;&#039;PARA wiki&#039;&#039;&#039;&lt;br /&gt;
| Public &amp;lt;code&amp;gt;para.goalstriving.org&amp;lt;/code&amp;gt; exemplar with enforced properties&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| &#039;&#039;&#039;Page schema&#039;&#039;&#039;&lt;br /&gt;
| Mandatory Type + Status; optional Area + Topic on every page&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| &#039;&#039;&#039;Personal status page&#039;&#039;&#039;&lt;br /&gt;
| Snapshot + history of tracked productivity metrics&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| &#039;&#039;&#039;Community wiki stats&#039;&#039;&#039;&lt;br /&gt;
| Farm-wide stats and leaderboards on &amp;lt;code&amp;gt;community.goalstriving.org&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| &#039;&#039;&#039;VisualEditor UX&#039;&#039;&#039;&lt;br /&gt;
| PDF upload, highlights, link-type coloring, expand header&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| &#039;&#039;&#039;Connections &amp;amp; projects&#039;&#039;&#039;&lt;br /&gt;
| Social layer, branches, orgs, time-bounded project wikis&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 1. Onboarding wizard ===&lt;br /&gt;
&lt;br /&gt;
Source: [[New User Onboarding]]&lt;br /&gt;
&lt;br /&gt;
New users choose &#039;&#039;&#039;one of three environments&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Default wiki&#039;&#039;&#039; — stock MediaWiki pages; no further setup&lt;br /&gt;
# &#039;&#039;&#039;Static templates&#039;&#039;&#039; — user checks which demo template pages to install&lt;br /&gt;
# &#039;&#039;&#039;PARA wiki&#039;&#039;&#039; — enforced page properties + dynamic content (Second Brain / Zettelkasten)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wizard tasks&#039;&#039;&#039; (options 2 and 3):&lt;br /&gt;
&lt;br /&gt;
# Set timezone (default from Google when available)&lt;br /&gt;
# Choose default Areas; optionally add new Areas&lt;br /&gt;
# Optionally create Topics&lt;br /&gt;
# Optionally list Projects and assign Areas/Topics&lt;br /&gt;
# Optionally import template pages&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Option 3 (PARA)&#039;&#039;&#039; continues with multi-page Area/Topic picker (~20 options per screen), project list with Active/Inactive status, and a warning if Active projects + Areas &amp;amp;gt; 20.&lt;br /&gt;
&lt;br /&gt;
=== 2. PARA wiki (&amp;lt;code&amp;gt;para.goalstriving.org&amp;lt;/code&amp;gt;) ===&lt;br /&gt;
&lt;br /&gt;
Source: [[Wiki Page Types#PARA Wiki]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Requirement !! Detail&lt;br /&gt;
|-&lt;br /&gt;
| Hostname || &amp;lt;code&amp;gt;https://para.goalstriving.org&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Slug || &amp;lt;code&amp;gt;para&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Base content || Clone from &amp;lt;code&amp;gt;demo.goalstriving.org&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Properties || Assign Type, Status, Area, Topic per requirements table on [[Wiki Page Types]]&lt;br /&gt;
|-&lt;br /&gt;
| Read access || Public — no login required&lt;br /&gt;
|-&lt;br /&gt;
| Edit access || &amp;lt;code&amp;gt;matt.shell7777@gmail.com&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;matt@mshell.net&amp;lt;/code&amp;gt; only&lt;br /&gt;
|-&lt;br /&gt;
| Demo parity || Same access level as demo for demo users&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 3. Page schema — Type, Status, Area, Topic ===&lt;br /&gt;
&lt;br /&gt;
Source: [[Wiki Page Types]]&lt;br /&gt;
&lt;br /&gt;
Every page has four properties:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Property !! Rule&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Type&#039;&#039;&#039; || Required, exactly one. Six default types (users cannot add types).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status&#039;&#039;&#039; || Required, exactly one. Type-specific values (users cannot add statuses).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Area&#039;&#039;&#039; || Optional (0–3 recommended). Area pages with no parent Area appear in picker.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Topic&#039;&#039;&#039; || Optional (0–3 recommended). For lighter-weight grouping.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Six default types:&#039;&#039;&#039; Study, Journal, Idea, Project, Area, Resource — each with type-specific statuses (see [[Wiki Page Types#Page Type and Status]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Key rules:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Pages on a Project inherit its Area(s) by default&lt;br /&gt;
* Every page except Type=Area should have ≥1 Area or Topic&lt;br /&gt;
* Show inline notice + status-page alert when Area/Topic missing&lt;br /&gt;
* Area hierarchy supported (e.g. Photography under Hobbies)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Repo note:&#039;&#039;&#039; Demo currently ships Capture + Entity interim types; migrate toward Area + Resource per requirements.&lt;br /&gt;
&lt;br /&gt;
=== 4. Personal status page ===&lt;br /&gt;
&lt;br /&gt;
Per-user dashboard: &#039;&#039;&#039;current snapshot&#039;&#039;&#039; and &#039;&#039;&#039;historical trends&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Example metrics:&lt;br /&gt;
&lt;br /&gt;
* Average edits per day&lt;br /&gt;
* Pages without Area or Topic&lt;br /&gt;
* New captures per day&lt;br /&gt;
* Average time to process new captures&lt;br /&gt;
* Active vs archived counts by Type&lt;br /&gt;
* Project status breakdown&lt;br /&gt;
&lt;br /&gt;
=== 5. Community wiki — stats and leaderboards ===&lt;br /&gt;
&lt;br /&gt;
Existing: &amp;lt;code&amp;gt;community.goalstriving.org&amp;lt;/code&amp;gt; (login required; authenticated users edit).&lt;br /&gt;
&lt;br /&gt;
Add farm-wide stats, contributor leaderboards, and activity trend charts.&lt;br /&gt;
&lt;br /&gt;
=== 6. VisualEditor enhancements ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Feature !! Description&lt;br /&gt;
|-&lt;br /&gt;
| PDF upload || Confirm UX for PDF uploads in VE&lt;br /&gt;
|-&lt;br /&gt;
| Text highlighting || Yellow / Green / Blue / Red highlights&lt;br /&gt;
|-&lt;br /&gt;
| Link highlighting by page type || Toolbar button tints links by destination page Type (Cargo)&lt;br /&gt;
|-&lt;br /&gt;
| Expand header || Promote a section to its own page while editing&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Expand header:&#039;&#039;&#039; In VE, each heading (h2–h4) gets an Expand control. Source page loses the section (replaced by wikilink); new page created with backlink and &amp;lt;code&amp;gt;== Imported ==&amp;lt;/code&amp;gt; section.&lt;br /&gt;
&lt;br /&gt;
=== 7. Connections and projects ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;user_connections&amp;lt;/code&amp;gt; + portal dashboard&lt;br /&gt;
* Branch wikis (&amp;lt;code&amp;gt;parent_wiki_id&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Page-level grants to connections&lt;br /&gt;
* Organizations (multi-owner)&lt;br /&gt;
* Time-bounded project wikis (&amp;lt;code&amp;gt;ends_at&amp;lt;/code&amp;gt;, archival cron)&lt;br /&gt;
* &amp;lt;code&amp;gt;wiki_type&amp;lt;/code&amp;gt; registry column&lt;br /&gt;
&lt;br /&gt;
== Completed (summary) ==&lt;br /&gt;
&lt;br /&gt;
* CI/CD, registry, OAuth, wiki provisioning&lt;br /&gt;
* Default wiki template import/export&lt;br /&gt;
* Community wiki shell (&amp;lt;code&amp;gt;community.goalstriving.org&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Interim page-type forms on demo (Capture, Study, Entity, Journal, Idea, Project)&lt;br /&gt;
* Cargo, Page Forms, Scribunto, CategoryTree installed&lt;br /&gt;
* [[Cursor|CursorBot]] API for Knowledge Commons documentation&lt;br /&gt;
&lt;br /&gt;
== Later phases ==&lt;br /&gt;
&lt;br /&gt;
* Page sets (Vacation/Product exemplars)&lt;br /&gt;
* Email capture → wiki inbox&lt;br /&gt;
* Marketplace catalog (extends community stats)&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Cursor]] — CursorBot API and documentation guidelines&lt;br /&gt;
* [[Wiki Page Types]] — functional requirements (do not edit via CursorBot)&lt;br /&gt;
* [[New User Onboarding]] — onboarding requirements (do not edit via CursorBot)&lt;br /&gt;
&lt;br /&gt;
Republish from git: &amp;lt;code&amp;gt;sudo GOALSTRIVING_CURSOR_WIKI_PAGE=&amp;quot;Cursor Community Roadmap&amp;quot; GOALSTRIVING_CURSOR_WIKI_SOURCE=/opt/goalstriving-wiki/templates/cursor-community-roadmap.wiki /usr/local/bin/publish-cursor-wiki-page.sh&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>CursorBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.goalstriving.org/index.php?title=Cursor&amp;diff=311</id>
		<title>Cursor</title>
		<link rel="alternate" type="text/html" href="https://wiki.goalstriving.org/index.php?title=Cursor&amp;diff=311"/>
		<updated>2026-08-27T23:30:51Z</updated>

		<summary type="html">&lt;p&gt;CursorBot: Cursor: sync Cursor page from git&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page and other pages linked from it are maintained by Cursor AI to document the development and deployment of the entire project.&lt;br /&gt;
&lt;br /&gt;
=== Functional Requirements ===&lt;br /&gt;
&lt;br /&gt;
These pages provide details about how various features should work. Please do not edit these or any other existing pages.&lt;br /&gt;
&lt;br /&gt;
* [[Wiki Page Types]]&lt;br /&gt;
* [[New User Onboarding]]&lt;br /&gt;
&lt;br /&gt;
=== Guidelines ===&lt;br /&gt;
&lt;br /&gt;
* You may make as many additional pages as you need&lt;br /&gt;
* Prepend all page names with &amp;lt;code&amp;gt;Cursor &amp;lt;/code&amp;gt;&lt;br /&gt;
* Use edit summary prefix &amp;lt;code&amp;gt;Cursor:&amp;lt;/code&amp;gt; on all bot edits&lt;br /&gt;
&lt;br /&gt;
=== API access (CursorBot) ===&lt;br /&gt;
&lt;br /&gt;
Cursor edits Knowledge Commons through the [https://www.mediawiki.org/wiki/API:Main_page MediaWiki Action API] as &#039;&#039;&#039;CursorBot&#039;&#039;&#039;. Edits appear in page history as [[User:CursorBot]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login&#039;&#039;&#039; uses a [https://www.mediawiki.org/wiki/Manual:Bot_passwords bot password], not Google/Authentik:&lt;br /&gt;
&lt;br /&gt;
* API endpoint: &amp;lt;code&amp;gt;https://wiki.goalstriving.org/api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* Login name: &amp;lt;code&amp;gt;CursorBot@Cursor&amp;lt;/code&amp;gt;&lt;br /&gt;
* Password: on the EC2 server at &amp;lt;code&amp;gt;/etc/goalstriving/cursor-bot-credentials.php&amp;lt;/code&amp;gt; (not in git)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login flow&#039;&#039;&#039; (MediaWiki 1.43 — tokens required):&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;action=query&amp;amp;meta=tokens&amp;amp;type=login&amp;amp;format=json&amp;lt;/code&amp;gt; — get &amp;lt;code&amp;gt;logintoken&amp;lt;/code&amp;gt; (use a cookie jar)&lt;br /&gt;
# &amp;lt;code&amp;gt;action=login&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;lgname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lgpassword&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lgtoken&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;format=json&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;action=query&amp;amp;meta=tokens&amp;amp;type=csrf&amp;amp;format=json&amp;lt;/code&amp;gt; — get &amp;lt;code&amp;gt;csrftoken&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;action=edit&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;token&amp;lt;/code&amp;gt; (csrf), &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;format=json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scope:&#039;&#039;&#039; CursorBot may edit this page tree and create pages prefixed with &amp;lt;code&amp;gt;Cursor &amp;lt;/code&amp;gt;. Do not edit functional-requirements pages ([[Wiki Page Types]], [[New User Onboarding]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Server setup:&#039;&#039;&#039; after deploy, run once on EC2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo /usr/local/bin/provision-cursor-bot.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify API login on EC2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo /usr/local/bin/test-cursor-bot-login.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To republish this page from git after deploy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo /usr/local/bin/publish-cursor-wiki-page.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Repo reference: &amp;lt;code&amp;gt;docs/cursor-bot.md&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cursor documentation pages ===&lt;br /&gt;
&lt;br /&gt;
* [[Cursor Community Roadmap]] — implementation plan synced from git&lt;/div&gt;</summary>
		<author><name>CursorBot</name></author>
	</entry>
	<entry>
		<id>https://wiki.goalstriving.org/index.php?title=Cursor&amp;diff=310</id>
		<title>Cursor</title>
		<link rel="alternate" type="text/html" href="https://wiki.goalstriving.org/index.php?title=Cursor&amp;diff=310"/>
		<updated>2026-08-27T23:02:39Z</updated>

		<summary type="html">&lt;p&gt;CursorBot: Cursor: sync Cursor page from git&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page and other pages linked from it are maintained by Cursor AI to document the development and deployment of the entire project.&lt;br /&gt;
&lt;br /&gt;
=== Functional Requirements ===&lt;br /&gt;
&lt;br /&gt;
These pages provide details about how various features should work. Please do not edit these or any other existing pages.&lt;br /&gt;
&lt;br /&gt;
* [[Wiki Page Types]]&lt;br /&gt;
* [[New User Onboarding]]&lt;br /&gt;
&lt;br /&gt;
=== Guidelines ===&lt;br /&gt;
&lt;br /&gt;
* You may make as many additional pages as you need&lt;br /&gt;
* Prepend all page names with &amp;lt;code&amp;gt;Cursor &amp;lt;/code&amp;gt;&lt;br /&gt;
* Use edit summary prefix &amp;lt;code&amp;gt;Cursor:&amp;lt;/code&amp;gt; on all bot edits&lt;br /&gt;
&lt;br /&gt;
=== API access (CursorBot) ===&lt;br /&gt;
&lt;br /&gt;
Cursor edits Knowledge Commons through the [https://www.mediawiki.org/wiki/API:Main_page MediaWiki Action API] as &#039;&#039;&#039;CursorBot&#039;&#039;&#039;. Edits appear in page history as [[User:CursorBot]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login&#039;&#039;&#039; uses a [https://www.mediawiki.org/wiki/Manual:Bot_passwords bot password], not Google/Authentik:&lt;br /&gt;
&lt;br /&gt;
* API endpoint: &amp;lt;code&amp;gt;https://wiki.goalstriving.org/api.php&amp;lt;/code&amp;gt;&lt;br /&gt;
* Login name: &amp;lt;code&amp;gt;CursorBot@Cursor&amp;lt;/code&amp;gt;&lt;br /&gt;
* Password: on the EC2 server at &amp;lt;code&amp;gt;/etc/goalstriving/cursor-bot-credentials.php&amp;lt;/code&amp;gt; (not in git)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Login flow&#039;&#039;&#039; (MediaWiki 1.43 — tokens required):&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;action=query&amp;amp;meta=tokens&amp;amp;type=login&amp;amp;format=json&amp;lt;/code&amp;gt; — get &amp;lt;code&amp;gt;logintoken&amp;lt;/code&amp;gt; (use a cookie jar)&lt;br /&gt;
# &amp;lt;code&amp;gt;action=login&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;lgname&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lgpassword&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lgtoken&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;format=json&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;action=query&amp;amp;meta=tokens&amp;amp;type=csrf&amp;amp;format=json&amp;lt;/code&amp;gt; — get &amp;lt;code&amp;gt;csrftoken&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;action=edit&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;token&amp;lt;/code&amp;gt; (csrf), &amp;lt;code&amp;gt;summary&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;format=json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Scope:&#039;&#039;&#039; CursorBot may edit this page tree and create pages prefixed with &amp;lt;code&amp;gt;Cursor &amp;lt;/code&amp;gt;. Do not edit functional-requirements pages ([[Wiki Page Types]], [[New User Onboarding]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Server setup:&#039;&#039;&#039; after deploy, run once on EC2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo /usr/local/bin/provision-cursor-bot.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To verify API login on EC2:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo /usr/local/bin/test-cursor-bot-login.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To republish this page from git after deploy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo /usr/local/bin/publish-cursor-wiki-page.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Repo reference: &amp;lt;code&amp;gt;docs/cursor-bot.md&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>CursorBot</name></author>
	</entry>
</feed>