forgetrail 0.5.4 → 0.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CONTINUATION_PROMPT.md +3 -3
  2. package/INITIAL_PROMPT.md +7 -7
  3. package/README.md +3 -3
  4. package/TRY_FORGETRAIL.md +2 -2
  5. package/WORKFLOW.md +15 -15
  6. package/content/AGENT_INTEGRATION_claude.md +1 -1
  7. package/content/AGENT_INTEGRATION_cursor.md +2 -3
  8. package/content/AGENT_INTEGRATION_generic.md +4 -4
  9. package/content/AGENT_INTEGRATION_grok.md +6 -6
  10. package/content/COMPANION_TOOLS.md +3 -3
  11. package/content/FORGETRAIL_LITE.md +16 -17
  12. package/content/FORGETRAIL_PROGRESS.md +1 -1
  13. package/content/GENESIS_SPEC_PROMPT.md +1 -1
  14. package/content/GENESIS_STUB.md +1 -1
  15. package/content/GREENFIELD_INTAKE.md +2 -2
  16. package/content/KICKOFF_WITHOUT_MCP.md +1 -1
  17. package/content/NEW_PROJECT_BOOTSTRAP.md +13 -13
  18. package/content/ONE_CLICK_DEV_SETUP.md +1 -1
  19. package/content/PLAN_MODE_PATTERNS.md +2 -2
  20. package/content/POCKETBASE_SCHEMA_SCRIPT.md +1 -1
  21. package/content/POST_BOOTSTRAP_USER_MESSAGE.md +2 -2
  22. package/content/SESSION_RESUME_MCP.md +1 -2
  23. package/content/SYSTEM_HEALTH_CHECKS.md +1 -1
  24. package/content/companion-tools.json +6 -1
  25. package/content/cursor-rules/forgetrail-phase-status.mdc +3 -3
  26. package/content/examples/two-session-continuity.md +3 -5
  27. package/content/hooks/README.md +4 -3
  28. package/content/hooks/appledger-bin.mjs +33 -0
  29. package/content/hooks/session-start.mjs +6 -1
  30. package/content/hooks/session-stop.mjs +76 -4
  31. package/content/hooks/validate-tracking.mjs +26 -0
  32. package/content/scripts/forgetrail-dev-launcher.mjs +1 -1
  33. package/content/skills/forgetrail/SKILL.md +6 -8
  34. package/docs/NPM.md +3 -3
  35. package/docs/PHASE_1_BRIEF.md +2 -2
  36. package/docs/SPEC_FEATURE_TEMPLATE.md +1 -1
  37. package/package.json +1 -1
  38. package/prompts/propagate-to-forgetrail.md +7 -7
  39. package/prompts/second-family-critique.md +1 -1
  40. package/scripts/forgetrail-cli.mjs +1 -1
  41. package/scripts/install.mjs +5 -4
  42. package/scripts/tracking-cutover.test.mjs +132 -5
@@ -11,7 +11,7 @@ I'm continuing work on [APP NAME]. You are following ForgeTrail, a structured ph
11
11
 
12
12
  1. Call ForgeTrail MCP **`getResumeSessionInstructions`** and follow it.
13
13
  2. Read **`appledger/profiles/forgetrail.yaml`** and the latest session record. If the phase is **plan**, read **`docs/PHASE_1_BRIEF.md`**. Otherwise read **`CONTEXT_PROMPT.md`** (if a later phase is current but CONTEXT is missing and the brief exists, **merge the brief into CONTEXT** first per the CONTEXT_PROMPT template).
14
- 3. Use **`getPhaseGuidance`** for the current phase. Do **not** update **`workflow_tracking.json`**. If that file exists and is not a pointer, run **`appledger migrate preview`** and then apply.
14
+ 3. Use **`getPhaseGuidance`** for the current phase.
15
15
 
16
16
  ### Local `_forgetrail/` folder
17
17
 
@@ -19,7 +19,7 @@ I'm continuing work on [APP NAME]. You are following ForgeTrail, a structured ph
19
19
 
20
20
  **Before doing anything else:**
21
21
 
22
- 1. Read **`appledger/profiles/forgetrail.yaml`** and the latest session record to see where we left off. Do not treat **`.forgetrail/workflow_tracking.json`** as the live record.
22
+ 1. Read **`appledger/profiles/forgetrail.yaml`** and the latest session record to see where we left off.
23
23
  2. Read `_forgetrail/WORKFLOW.md` for the full phase map, playbooks, and patterns.
24
24
  3. Read `_forgetrail/TRACKING_SCHEMA.md` for where project state lives. The legacy JSON shape in that file is for migration only.
25
25
  4. Read `CONTEXT_PROMPT.md` for the current architecture and project state — or **`docs/PHASE_1_BRIEF.md`** if still in Phase 1; if Phase 2+ and CONTEXT is empty but the brief exists, merge brief → CONTEXT first.
@@ -27,7 +27,7 @@ I'm continuing work on [APP NAME]. You are following ForgeTrail, a structured ph
27
27
  **Rules for this session:**
28
28
 
29
29
  - When you believe a phase's exit criteria are met, tell me explicitly: "I think we've completed [Phase X]. The exit criteria are met because [reasons]. Ready to move to [Phase Y]?" Wait for my confirmation.
30
- - After completing work, update **`appledger/`**: move satisfied criteria only when evidence exists, add decision records (with rationale), log lessons or questions, and update the session record. Do not write **`workflow_tracking.json`**.
30
+ - After completing work, update **`appledger/`**: move satisfied criteria only when evidence exists, add decision records (with rationale), log lessons or questions, and update the session record.
31
31
  - Keep `CONTEXT_PROMPT.md` updated as the source of truth for project architecture.
32
32
  - If something isn't working after 5 turns, propose a fundamentally different approach rather than continuing to patch.
33
33
 
package/INITIAL_PROMPT.md CHANGED
@@ -9,12 +9,12 @@ You are helping me build a full-stack web application. I use ForgeTrail, a struc
9
9
 
10
10
  ### MCP-first (recommended — no `_forgetrail/` copy in this repo)
11
11
 
12
- If **ForgeTrail is connected as an MCP server**, do **not** require a local `_forgetrail/` folder. Methodology, templates, and audits stay in the MCP server (open-source ForgeTrail install). Persist project state in **`appledger/`**. Do **not** create **`.forgetrail/workflow_tracking.json`**. Optional Cursor rules may live in this repo.
12
+ If **ForgeTrail is connected as an MCP server**, do **not** require a local `_forgetrail/` folder. Methodology, templates, and audits stay in the MCP server (open-source ForgeTrail install). Persist project state in **`appledger/`**. Optional Cursor rules may live in this repo.
13
13
 
14
14
  **Before doing anything else:**
15
15
 
16
16
  0. If **`docs/GENESIS.md`** exists, call **`ingestPlanArtifact`** with its contents and review the draft brief before scaffolding. If the user only has an idea, offer **`getGenesisSpecPrompt`** (they save as `docs/GENESIS.md`) or point them at **TRY_FORGETRAIL.md** when MCP is not the entry path.
17
- 1. Call the ForgeTrail MCP tool **`getNewProjectKickoff`** (set **`includeCursorRule`** to **false** if not using Cursor). When `appledger` is installed, run **`appledger init`** as that bundle describes. Do **not** write **`workflow_tracking.json`**. Write the Cursor rule when included. Keep the **first reply to the user** short per the bundle’s post-bootstrap section (no MCP tool list or raw JSON dump). **Alternatively:** call **`getNewProjectBootstrap`**, **`getInitialWorkflowTracking`**, **`getPostBootstrapUserMessage`**, and **`getForgeTrailCursorPhaseRule`** separately. `getInitialWorkflowTracking` does not return a JSON file to save.
17
+ 1. Call the ForgeTrail MCP tool **`getNewProjectKickoff`** (set **`includeCursorRule`** to **false** if not using Cursor). When `appledger` is installed, run **`appledger init`** as that bundle describes. Write the Cursor rule when included. Keep the **first reply to the user** short per the bundle’s post-bootstrap section (no MCP tool list or raw JSON dump). **Alternatively:** call **`getNewProjectBootstrap`**, **`getInitialWorkflowTracking`**, **`getPostBootstrapUserMessage`**, and **`getForgeTrailCursorPhaseRule`** separately. `getInitialWorkflowTracking` does not return a JSON file to save.
18
18
  2. In Phase 1, call **`getGreenfieldIntakePrompt`** alongside **`getChecklist`** (`before-session-1`) so exports (PDF / DOCX / PPTX, etc.), tenancy (e.g. consultants × clients), hybrid vs full spec, compliance tier, and hero flow are captured early in **`PHASE_1_BRIEF.md`** and as decision records (skip questions already answered in Genesis).
19
19
  3. Use **`getProgressiveDocSchedule`**, **`getPhaseGuidance`**, **`getChecklist`**, **`getTemplate`** (include **`PHASE_1_BRIEF`** in Phase 1; use `mode: "shell"` or `full` as needed), **`getTrackingSchema`**, **`runAudit`**, **`searchLessons`**, and **`getAntiPatterns`** as that bootstrap describes.
20
20
  4. We're starting with Phase 1 (Architecture + Planning).
@@ -27,7 +27,7 @@ If **ForgeTrail is connected as an MCP server**, do **not** require a local `_fo
27
27
 
28
28
  **Optional — web search (live data):** If the app needs **up-to-date web search**, the user can sign up for **[Tavily](https://tavily.com/)** and/or the **[Brave Search API](https://api-dashboard.search.brave.com/)** (free or entry-level credits — see vendor pricing), add the key to **`.env`**, and ask you to wire **server-side** calls only. **`FORGETRAIL_LITE.md` §4.4** has the full note; log the provider choice as a decision record.
29
29
 
30
- **Phase 1 — project archetype:** classify the project as **`product`** (default — full 7-phase lifecycle), **`internal-tool`** (Phase 6 optional; Phase 7 drops payments/business-plan/marketing criteria), or **`one-shot`** (gift / event / demo — phases 5–7 collapse into one polish-and-ship gate). Infer from my description and confirm rather than interrogate. Record it in **`PHASE_1_BRIEF.md`**, as a decision record, and as **`archetype`** on **`appledger/profiles/forgetrail.yaml`**. Prune the non-applicable criteria on that profile and log the pruning as a decision. Do not write `workflow_tracking.json`. See **WORKFLOW.md §1d**. When the project **ends**, run the **wrap protocol** (WORKFLOW.md §1e): harvest lesson and decision records, propagate the generalizable ones, and set **`project_status`** to **`wrapped`** on the profile.
30
+ **Phase 1 — project archetype:** classify the project as **`product`** (default — full 7-phase lifecycle), **`internal-tool`** (Phase 6 optional; Phase 7 drops payments/business-plan/marketing criteria), or **`one-shot`** (gift / event / demo — phases 5–7 collapse into one polish-and-ship gate). Infer from my description and confirm rather than interrogate. Record it in **`PHASE_1_BRIEF.md`**, as a decision record, and as **`archetype`** on **`appledger/profiles/forgetrail.yaml`**. Prune the non-applicable criteria on that profile and log the pruning as a decision. See **WORKFLOW.md §1d**. When the project **ends**, run the **wrap protocol** (WORKFLOW.md §1e): harvest lesson and decision records, propagate the generalizable ones, and set **`project_status`** to **`wrapped`** on the profile.
31
31
 
32
32
  **Phase 1 — state persistence (web apps):** before locking PocketBase + auth, ask me *"Does any state need to outlive this browser — accounts, cross-device sync, shared data — or is per-user state fine in `localStorage`?"* If **local-only**: drop PocketBase + auth, target `adapter-static`, no deploy-time secrets. If **persistent**: full Default-A stack. Record the answer in **`PHASE_1_BRIEF.md` §4 (`State persistence:`)** and as a decision record. See **`FORGETRAIL_LITE.md` §7** (A-local vs A-persistent).
33
33
 
@@ -55,7 +55,7 @@ Skip the **“copy-paste paths”** section below unless we are using a **local*
55
55
 
56
56
  1. Read `_forgetrail/WORKFLOW.md` to understand the full phase map, playbooks, and patterns.
57
57
  2. Read `_forgetrail/TRACKING_SCHEMA.md` for where project state lives. The legacy JSON shape in that file is for migration only.
58
- 3. Read **`appledger/profiles/forgetrail.yaml`** and the latest session record. Do **not** create **`.forgetrail/workflow_tracking.json`**.
58
+ 3. Read **`appledger/profiles/forgetrail.yaml`** and the latest session record.
59
59
  4. If using **Cursor**, copy **`_forgetrail/content/cursor-rules/forgetrail-phase-status.mdc`** to **`.cursor/rules/forgetrail-phase-status.mdc`** (create folders if needed) so agents surface phase / next actions from `appledger/profiles/forgetrail.yaml`.
60
60
  5. We're starting with Phase 1 (Architecture + Planning).
61
61
 
@@ -63,7 +63,7 @@ Skip the **“copy-paste paths”** section below unless we are using a **local*
63
63
 
64
64
  - At the start of each session, read `appledger/profiles/forgetrail.yaml`, the latest session record, and `CONTEXT_PROMPT.md` (if it exists).
65
65
  - When you believe a phase's exit criteria are met, tell me explicitly: "I think we've completed [Phase X]. The exit criteria are met because [reasons]. Ready to move to [Phase Y]?" Wait for my confirmation.
66
- - After completing work, update **`appledger/`**: move satisfied criteria only when evidence exists, add decision records (with rationale), log lessons or questions, and update the session record. Do not write **`workflow_tracking.json`**.
66
+ - After completing work, update **`appledger/`**: move satisfied criteria only when evidence exists, add decision records (with rationale), log lessons or questions, and update the session record.
67
67
  - During Phase 1, create and lock **`docs/PHASE_1_BRIEF.md`**; mirror major decisions as decision records.
68
68
  - When we create `CONTEXT_PROMPT.md` (Phase 2), **merge `PHASE_1_BRIEF.md` into it** first (see template), then keep it updated as the source of truth.
69
69
  - If something isn't working after 5 turns, propose a fundamentally different approach rather than continuing to patch.
@@ -174,12 +174,12 @@ Phase 1 (Architecture + Planning):
174
174
  - Recommend what to skip for v1.
175
175
  - Wait for my confirmation on every architectural decision.
176
176
  - Create **`docs/PHASE_1_BRIEF.md`** from the ForgeTrail template (`_forgetrail/docs/` or MCP **`getTemplate("PHASE_1_BRIEF")`**). Fill and **lock** it before we exit Phase 1.
177
- - Record major commitments as **decision records in `appledger/`** so the next session does not depend on chat history. Do not write **`workflow_tracking.json`**.
177
+ - Record major commitments as **decision records in `appledger/`** so the next session does not depend on chat history.
178
178
 
179
179
  Phase 2 (Scaffolding + Core Build):
180
180
 
181
181
  - Only after I've confirmed the architecture and the brief is locked.
182
- - Read **`PHASE_1_BRIEF.md`**, **`appledger/profiles/forgetrail.yaml`**, and the latest session record first. Do not treat **`workflow_tracking.json`** as the live record.
182
+ - Read **`PHASE_1_BRIEF.md`**, **`appledger/profiles/forgetrail.yaml`**, and the latest session record first.
183
183
  - Build the **entire app skeleton in one pass**: project init, dependencies, services, routes, components — **do not defer the runnable spine or hero flow**.
184
184
  - Include an import script if there's existing data.
185
185
  - Wire up the hero flow end to end.
package/README.md CHANGED
@@ -33,7 +33,7 @@ The shortest supported first task is: create `appledger/`, draft `docs/PHASE_1_B
33
33
  | Path | Who uses it | What it is |
34
34
  | --- | --- | --- |
35
35
  | **Lite** | First path | One protocol file. The agent writes `appledger/`. |
36
- | **CLI** (`forgetrail`) | Node.js 20+ | Installer. Writes Lite and Cursor hooks, or the full template tree. It does not write a tracking JSON file. Skips files that already exist. Does not run the agent. |
36
+ | **CLI** (`forgetrail`) | Node.js 20+ | Installer. Writes Lite and Cursor hooks, or the full template tree. Skips files that already exist. Does not run the agent. |
37
37
  | **MCP** (`forgetrail-mcp`) | Cursor or Claude | Phase guidance, templates, and lessons search. The ledger still lives in the app repo. |
38
38
 
39
39
  ```bash
@@ -45,9 +45,9 @@ MCP: `npx -y forgetrail-mcp` (0.4.2 or later finds the methodology without `FORG
45
45
 
46
46
  ## What you get
47
47
 
48
- A 7-phase playbook, a ledger in `appledger/`, and templates pre-loaded with first-party production lessons. Each project leaves decisions, lessons, and a session handoff that future work follows. Those lesson notes are not independent adoption evidence. A new install does not create `.forgetrail/workflow_tracking.json`.
48
+ A 7-phase playbook, a ledger in `appledger/`, and templates pre-loaded with first-party production lessons. Each project leaves decisions, lessons, and a session handoff that future work follows. Those lesson notes are not independent adoption evidence.
49
49
 
50
- Optional hooks in [`content/hooks/`](content/hooks/README.md) load the current phase at session start in Cursor or Claude Code, validate tracking edits, and check for a session note at session stop. The agent still does the writing. Flags, MCP, and the phase table live in the [docs](https://forgetrail.dev/docs).
50
+ Optional hooks in [`content/hooks/`](content/hooks/README.md) load the current phase at session start in Cursor or Claude Code, check ledger edits, and check for a session note at session stop. The agent still does the writing. Flags, MCP, and the phase table live in the [docs](https://forgetrail.dev/docs).
51
51
 
52
52
  <!-- xfacts-label -->
53
53
 
package/TRY_FORGETRAIL.md CHANGED
@@ -29,14 +29,14 @@ Prove ForgeTrail in one sitting: write a **what, not how** spec in any AI chat,
29
29
  `pnpm dlx forgetrail install --lite`
30
30
  Stub for Genesis too:
31
31
  `pnpm dlx forgetrail install --lite --with-genesis-stub`
32
- The CLI writes the Lite protocol and Cursor hooks. It does not write a tracking JSON file. Project state belongs in `appledger/`. It skips files that already exist.
32
+ The CLI writes the Lite protocol and Cursor hooks. Project state belongs in `appledger/`. It skips files that already exist.
33
33
 
34
34
  5. **Save your spec as `docs/GENESIS.md`**
35
35
  Create `docs/` if needed. That path is the canonical handoff for ForgeTrail (not the repo root).
36
36
 
37
37
  6. **Open the folder in your coding agent** and paste this kickoff line:
38
38
 
39
- > Follow `.forgetrail/FORGETRAIL_LITE.md` as the project protocol. Treat `docs/GENESIS.md` as the product spec (what, not how). Create `appledger/` (manifest, profile, application record, session record) and draft `docs/PHASE_1_BRIEF.md` from the Genesis file, asking me only about gaps. Do not create `workflow_tracking.json`. Do not scaffold application code until I explicitly approve the Phase 1 brief.
39
+ > Follow `.forgetrail/FORGETRAIL_LITE.md` as the project protocol. Treat `docs/GENESIS.md` as the product spec (what, not how). Create `appledger/` (manifest, profile, application record, session record) and draft `docs/PHASE_1_BRIEF.md` from the Genesis file, asking me only about gaps. Do not scaffold application code until I explicitly approve the Phase 1 brief.
40
40
 
41
41
  7. **Approve the Phase 1 brief** before any app scaffold. If the agent starts writing application code early, stop it and paste the kickoff line again.
42
42
 
package/WORKFLOW.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  A persistent development system for building software with AI agents. A structured 7-phase workflow for solo developers building non-trivial full-stack apps with coding agents. Derived from 7 sessions and ~78,000 lines of real-world app development.
6
6
 
7
- **System of record:** Phase, decisions, lessons, and sessions live in `appledger/` (`profiles/forgetrail.yaml` and records). Do not create or update `.forgetrail/workflow_tracking.json`. If that file already exists and is not a pointer, run `appledger migrate preview` and then apply. Do not keep a second decision log. `.forgetrail/` is hooks and host integration.
7
+ **System of record:** Phase, decisions, lessons, and sessions live in `appledger/` (`profiles/forgetrail.yaml` and records). `.forgetrail/` is hooks and host integration.
8
8
 
9
9
  ---
10
10
 
@@ -104,7 +104,7 @@ These phases emerged from the actual build sequence across all sessions. They're
104
104
 
105
105
  **Principle:** **Phase 2** still means the **full app spine** in one pass — project init, dependencies, data path, routes, components, import/migration if needed, **hero flow end-to-end**. That spine should not be deferred.
106
106
 
107
- **ForgeTrail workspace:** Protocol, rules, and hooks live in **`.forgetrail/`** at the repo root — **`.forgetrail/IDEAS.md`**, platform rules (`AGENTS.md`, `CLAUDE.md`, optional `FORGETRAIL_LITE.md`). Project state lives in **`appledger/`**. Do not create `.forgetrail/workflow_tracking.json`. Product docs (`docs/PHASE_1_BRIEF.md`, `CONTEXT_PROMPT.md`, `README.md`, `TODO.md`, **`docs/FORGETRAIL_PROGRESS.md`**) stay outside `.forgetrail/`. Optionally gitignore `.forgetrail/` for a cleaner public repo or MCP-only boots (no vendored Lite). Commit `appledger/` with the app. See **`FORGETRAIL_LITE.md` §1.5** and **`NEW_PROJECT_BOOTSTRAP.md`**.
107
+ **ForgeTrail workspace:** Protocol, rules, and hooks live in **`.forgetrail/`** at the repo root — **`.forgetrail/IDEAS.md`**, platform rules (`AGENTS.md`, `CLAUDE.md`, optional `FORGETRAIL_LITE.md`). Project state lives in **`appledger/`**. Product docs (`docs/PHASE_1_BRIEF.md`, `CONTEXT_PROMPT.md`, `README.md`, `TODO.md`, **`docs/FORGETRAIL_PROGRESS.md`**) stay outside `.forgetrail/`. Optionally gitignore `.forgetrail/` for a cleaner public repo or MCP-only boots (no vendored Lite). Commit `appledger/` with the app. See **`FORGETRAIL_LITE.md` §1.5** and **`NEW_PROJECT_BOOTSTRAP.md`**.
108
108
 
109
109
  **Non-technical operators:** Phase 2 should add **setup/run/status** launchers (**`ONE_CLICK_DEV_SETUP.md`**) and **test-*** launchers per dependency (**`SYSTEM_HEALTH_CHECKS.md`**). Avoid hardcoded PocketBase versions (**§4.2.2**). Local Ollama: Granite 4.1 / Gemma 3 defaults, not thinking models unless required (**§4.8**).
110
110
 
@@ -160,7 +160,7 @@ Run **both** ForgeTrail's `runAudit("black-hat")` and gstack's `/cso` — they'r
160
160
 
161
161
  ### Key rule
162
162
 
163
- After every gstack sprint that completes meaningful work, **update `appledger/`** (criteria that have evidence, decision records, lessons, and the session record). Do not write `.forgetrail/workflow_tracking.json`. gstack does persist some sprint-level artifacts — design docs from `/office-hours` live in `~/.gstack/projects/`, retro snapshots in `.context/retros/`, review gate overrides per branch, and skill usage analytics. But gstack has **no lifecycle state** (what phase are we in?), **no decision rationale log** (why did we choose PocketBase over Supabase?), **no lesson capture** (what burned us and how did we fix it?), and **no architecture context document** (what does the file tree look like, what patterns do we use?). ForgeTrail's `appledger/` + `CONTEXT_PROMPT.md` fill exactly this gap — they are the system of record that lets the next session pick up where this one left off without replaying context from chat history.
163
+ After every gstack sprint that completes meaningful work, **update `appledger/`** (criteria that have evidence, decision records, lessons, and the session record). gstack does persist some sprint-level artifacts — design docs from `/office-hours` live in `~/.gstack/projects/`, retro snapshots in `.context/retros/`, review gate overrides per branch, and skill usage analytics. But gstack has **no lifecycle state** (what phase are we in?), **no decision rationale log** (why did we choose PocketBase over Supabase?), **no lesson capture** (what burned us and how did we fix it?), and **no architecture context document** (what does the file tree look like, what patterns do we use?). ForgeTrail's `appledger/` + `CONTEXT_PROMPT.md` fill exactly this gap — they are the system of record that lets the next session pick up where this one left off without replaying context from chat history.
164
164
 
165
165
  ---
166
166
 
@@ -220,7 +220,7 @@ Hosts differ in spawn syntax — call **`getAgentIntegrationGuide`** (`grok`, `c
220
220
 
221
221
  ### Key rule
222
222
 
223
- After subagent results return, the **parent must** update `appledger/` (criteria that have evidence, decision records, lessons, and the session record) and relevant progressive docs. Do not write `.forgetrail/workflow_tracking.json`. Subagents fix or explore in isolation but **do not** replace ForgeTrail as the system of record for lifecycle state, decision rationale, or lesson capture.
223
+ After subagent results return, the **parent must** update `appledger/` (criteria that have evidence, decision records, lessons, and the session record) and relevant progressive docs. Subagents fix or explore in isolation but **do not** replace ForgeTrail as the system of record for lifecycle state, decision rationale, or lesson capture.
224
224
 
225
225
  ---
226
226
 
@@ -256,7 +256,7 @@ The ledger collects lessons and decisions all project long — but nothing consu
256
256
 
257
257
  1. **Sweep the ledger.** Read every lesson and decision record plus `CONTEXT_PROMPT.md`'s lesson and pattern sections. For each, ask: *is this generalizable beyond this app?* Framework traps, CLI behavior changes, and integration surprises usually are; app-specific content decisions usually are not.
258
258
  2. **Run the propagation prompt** (`prompts/propagate-to-forgetrail.md`) with the harvest list as input — see its **Harvest mode** section, designed for exactly this sweep. Small projects without a product journal or full doc set use `appledger/` as the primary discovery source.
259
- 3. **Close the ledger.** Set `project_status` to `wrapped` on `appledger/profiles/forgetrail.yaml`, add a final session record summarizing end state and where things live (deploy URL, handoff notes), and make a final commit. Optionally tag the repo (`v1.0`, `shipped`). Do not write `.forgetrail/workflow_tracking.json`.
259
+ 3. **Close the ledger.** Set `project_status` to `wrapped` on `appledger/profiles/forgetrail.yaml`, add a final session record summarizing end state and where things live (deploy URL, handoff notes), and make a final commit. Optionally tag the repo (`v1.0`, `shipped`).
260
260
  4. **Log the propagation** in ForgeTrail's `update-log.md` as usual. A wrap with zero propagable lessons is legitimate — note "wrapped, nothing to propagate" in the final session record and skip steps 2 and 4.
261
261
 
262
262
  **Why this is a protocol and not a suggestion:** the compounding loop (README) only compounds if lessons actually flow back. One flagship project propagating regularly plus a dozen small projects propagating never is a leak — the small projects are often where the freshest scaffolding and framework gotchas surface, because they exercise the newest tool versions.
@@ -270,9 +270,9 @@ Catalyst Forge siblings (and Cloudflare as a default DNS/hosting suggestion) are
270
270
  - **ForgeTrail** = lifecycle + project memory.
271
271
  - **Companions** = one bounded job (publish Markdown, named ports, editorial review, quality score, labels, backup, voice journal).
272
272
 
273
- They are **never required**. Decline is success. Do not dump the shelf at kickoff. Suggest when a trigger is true; persist the outcome on the appledger session as `data.companion_outcomes`. Do not write `workflow_tracking.json`.
273
+ They are **never required**. Decline is success. Do not dump the shelf at kickoff. Suggest when a trigger is true; persist the outcome on the appledger session as `data.companion_outcomes`.
274
274
 
275
- **Subjects:** When an applicable subject exists — an application, a tool server, a skill package, an agent configuration, or a model variant — record a disposition with `appledger subjects`. A family with no subject is `not_applicable`, not a missing label. Do not generate or rewrite a label. A published xFacts label remains an offer when the product goes public or changes hands, and only if the user asks.
275
+ **Subjects:** When an applicable subject exists — an application, a tool server, a skill package, an agent configuration, or a model variant — record a disposition with `appledger subjects`. A family with no subject is `not_applicable`, not a missing label. Do not generate or rewrite a label. A published xFacts label remains an offer when the product goes public or changes hands, and only if the user asks. An [Efficacy](https://efficacy.dev) chain in `.efficacy/` is the same kind of offer when a later agent should record a measured use of that version.
276
276
 
277
277
  **Agents:** `getCompanionSuggestions` (`phase` or `situation`) plus the optional footer on `getPhaseGuidance`. Mapping: `content/COMPANION_TOOLS.md`. Shelf: [catalystforge.com/tools](https://catalystforge.com/tools/).
278
278
 
@@ -289,7 +289,7 @@ They are **never required**. Decline is success. Do not dump the shelf at kickof
289
289
  - Pre-launch newcomer check → Cold-eye
290
290
  - Quality / presentation of a tool, site, or page → CraftAssay
291
291
  - An applicable subject exists → record a disposition (`appledger subjects`). A missing family stays `not_applicable`. Do not generate a label.
292
- - Product going public or handed off, and the user asks → offer an xFacts label
292
+ - Product going public or handed off, and the user asks → offer an xFacts label, and an [Efficacy](https://efficacy.dev) chain if a later agent should inspect a measured use
293
293
  - Unpushed work you cannot lose → IngotVault
294
294
  - Spoken idea capture → DictaWhisper
295
295
 
@@ -303,8 +303,8 @@ ForgeTrail includes deterministic host hooks (`.forgetrail/hooks/` with `.cursor
303
303
 
304
304
  - **Shell guards:** Runs pre-commit verification (`pnpm run verify`), prevents package manager divergence (e.g. `npm`/`yarn` when `pnpm-lock.yaml` is present), gates `git push` on explicit user approval, and flags destructive operations (`git reset --hard`, `rm -rf`).
305
305
  - **Edit guards:** Requires user confirmation before mutating environment secrets (`.env*`) or canonical/completed specs (`specs/completed/**`).
306
- - **Session start injection:** Points the session at `appledger/` (profile phase and the latest session). It does not treat `.forgetrail/workflow_tracking.json` as the live phase.
307
- - **Tracking validation:** A pointer to `appledger/` is accepted. A writable `workflow_tracking.json` is a conflict and is not the system of record.
306
+ - **Session start injection:** Points the session at `appledger/` (profile phase and the latest session).
307
+ - **Ledger check:** After an edit under `appledger/`, runs `appledger check` when the command is on PATH.
308
308
 
309
309
  Where the host supports hooks, tool-level denial and injection take the load off agent context budgets.
310
310
 
@@ -342,7 +342,7 @@ Where the host supports hooks, tool-level denial and injection take the load off
342
342
  **Artifacts to create:**
343
343
 
344
344
  - **`PHASE_1_BRIEF.md`** in `docs/` (from `_forgetrail/docs/PHASE_1_BRIEF.md` template or ForgeTrail MCP `getTemplate({ name: "PHASE_1_BRIEF" })`). Fill every section; mark **locked** when accurate.
345
- - **`appledger/`**: a decision record for each major architectural commitment (with rationale); the session record carries the sign-off summary. Do not create `.forgetrail/workflow_tracking.json`.
345
+ - **`appledger/`**: a decision record for each major architectural commitment (with rationale); the session record carries the sign-off summary.
346
346
 
347
347
  **Verify before moving on:**
348
348
 
@@ -410,7 +410,7 @@ Where the host supports hooks, tool-level denial and injection take the load off
410
410
  - No **new** doc files. However:
411
411
  - Update **`CONTEXT_PROMPT.md`** with any patterns, env quirks, or workarounds discovered during stabilization.
412
412
  - Update **`README.md`** if setup steps changed (new env vars, revised install, required services).
413
- - Record a lesson in **`appledger/`** for every surprise (env, path, auth, integration) so the same mistake is never repeated. Do not write `.forgetrail/workflow_tracking.json`.
413
+ - Record a lesson in **`appledger/`** for every surprise (env, path, auth, integration) so the same mistake is never repeated.
414
414
 
415
415
  **Verify before moving on:**
416
416
 
@@ -567,7 +567,7 @@ Where the host supports hooks, tool-level denial and injection take the load off
567
567
  - No silent failures in core workflows
568
568
  - Docs alignment audit passed (MCP `runAudit({ type: "docs-alignment" })` or `_forgetrail/prompts/docs-alignment-audit.md`)
569
569
 
570
- **Optional companions:** Cold-eye for newcomer readiness; CraftAssay for a quality score of the presented work; FilePress + Cloudflare Pages for a Markdown or docs site; IngotVault before a rewrite. If an applicable subject exists, record a disposition; a missing family is `not_applicable`. Offer an xFacts label only when the product goes public or changes hands and the user asks. Do not generate a label. See §1f.
570
+ **Optional companions:** Cold-eye for newcomer readiness; CraftAssay for a quality score of the presented work; FilePress + Cloudflare Pages for a Markdown or docs site; IngotVault before a rewrite. If an applicable subject exists, record a disposition; a missing family is `not_applicable`. Offer an xFacts label only when the product goes public or changes hands and the user asks. Do not generate a label. An Efficacy chain in `.efficacy/` is optional in that same moment. See §1f.
571
571
 
572
572
  ---
573
573
 
@@ -869,7 +869,7 @@ Print this and work through it sequentially for each new project.
869
869
  - [ ] Use "paste the error" for debugging
870
870
  - [ ] Update CONTEXT_PROMPT.md before ending (especially decisions and their WHY)
871
871
  - [ ] Mark completed TODOs, add new ones
872
- - [ ] Update the appledger session, decisions, and lessons. Do not write workflow_tracking.json
872
+ - [ ] Update the appledger session, decisions, and lessons.
873
873
 
874
874
  ---
875
875
 
@@ -902,7 +902,7 @@ Full templates for each document live in `_forgetrail/docs/` (or ForgeTrail MCP
902
902
 
903
903
  ### Document Lifecycle
904
904
 
905
- **Phase 1 (Architecture):** Complete and lock **`PHASE_1_BRIEF.md`**; mirror commitments as decision records in **`appledger/`**. Do not write `.forgetrail/workflow_tracking.json`.
905
+ **Phase 1 (Architecture):** Complete and lock **`PHASE_1_BRIEF.md`**; mirror commitments as decision records in **`appledger/`**.
906
906
 
907
907
  **Phase 2 (Scaffold):** Full **app spine** in one pass. **Docs:** Merge brief → **`CONTEXT_PROMPT.md`**, then **`TODO.md`**, **`README.md`**, **`.forgetrail/IDEAS.md`** only (§1a). Minimal extra prose at first beyond the merge.
908
908
 
@@ -17,7 +17,7 @@ Claude-based coding agents integrate with ForgeTrail through MCP, extended plann
17
17
 
18
18
  **New project:**
19
19
  ```
20
- Call ForgeTrail getNewProjectKickoff, write appledger/, getGreenfieldIntakePrompt, getPhaseGuidance("1"). Do not write workflow_tracking.json.
20
+ Call ForgeTrail getNewProjectKickoff, write appledger/, getGreenfieldIntakePrompt, getPhaseGuidance("1").
21
21
  No app code until PHASE_1_BRIEF.md is locked.
22
22
  ```
23
23
 
@@ -23,7 +23,7 @@ Use plan mode for Phase 1 if available. Lock PHASE_1_BRIEF.md before scaffolding
23
23
 
24
24
  **Resume:**
25
25
  ```
26
- Call getResumeSessionInstructions. Read appledger/profiles/forgetrail.yaml, the latest session record, and CONTEXT_PROMPT.md. Do not update workflow_tracking.json.
26
+ Call getResumeSessionInstructions. Read appledger/profiles/forgetrail.yaml, the latest session record, and CONTEXT_PROMPT.md.
27
27
  ```
28
28
 
29
29
  ## Subagent patterns
@@ -41,8 +41,7 @@ Use `run_in_background` for long subagents when appropriate.
41
41
  ## Tracking sync
42
42
 
43
43
  After subagent or feature work:
44
- - Update `appledger/` (criteria, decision records, lessons, the session). Do not write `workflow_tracking.json`.
45
- - Run **`validateTracking`** only when a legacy tracking file is present. A missing file is expected.
44
+ - Update `appledger/` (criteria, decision records, lessons, the session).
46
45
  - Update `CONTEXT_PROMPT.md` when architecture or patterns change.
47
46
 
48
47
  ## Skills alternative
@@ -1,6 +1,6 @@
1
1
  # ForgeTrail Integration Guide (generic agents)
2
2
 
3
- Use this when no agent-specific guide is available. ForgeTrail is **agent-agnostic** — the lifecycle, tracking file, and MCP tools work with any capable coding agent.
3
+ Use this when no agent-specific guide is available. ForgeTrail is **agent-agnostic** — the lifecycle, the ledger, and MCP tools work with any capable coding agent.
4
4
 
5
5
  ## Core integration model
6
6
 
@@ -15,14 +15,14 @@ ForgeTrail owns **what** and **when**. The host agent owns **execution**.
15
15
 
16
16
  **New project:**
17
17
  ```
18
- Call ForgeTrail getNewProjectKickoff, write appledger/, then getPhaseGuidance("1"). Do not write workflow_tracking.json.
18
+ Call ForgeTrail getNewProjectKickoff, write appledger/, then getPhaseGuidance("1").
19
19
  Lock architecture in docs/PHASE_1_BRIEF.md before any app code.
20
20
  ```
21
21
 
22
22
  **Resume:**
23
23
  ```
24
24
  Call getResumeSessionInstructions. Read appledger/profiles/forgetrail.yaml, the latest session record, and CONTEXT_PROMPT.md.
25
- Continue from the current phase. Do not update workflow_tracking.json.
25
+ Continue from the current phase.
26
26
  ```
27
27
 
28
28
  ## When the host supports subagents
@@ -35,7 +35,7 @@ Prefer **read-only** subagents for analysis; parent or a single write-capable wo
35
35
 
36
36
  ## When the host supports plan mode
37
37
 
38
- Use native plan mode for **Phase 1** only. On approval, export to `PHASE_1_BRIEF.md` and decision records in `appledger/`. Do not write `workflow_tracking.json`. See **`getPlanModePatterns`**.
38
+ Use native plan mode for **Phase 1** only. On approval, export to `PHASE_1_BRIEF.md` and decision records in `appledger/`. See **`getPlanModePatterns`**.
39
39
 
40
40
  ## Persistent discipline
41
41
 
@@ -6,25 +6,25 @@ Grok Build (the agentic TUI/CLI from xAI) has excellent native primitives that m
6
6
 
7
7
  | Grok Primitive | ForgeTrail Phase(s) | How to Use |
8
8
  |-----------------------------|----------------------------|------------|
9
- | `/plan` + enter/exit_plan_mode + plan.md | Phase 1 (Architecture) | Use native plan mode for all Phase 1 work. On approval, export to `PHASE_1_BRIEF.md` and decision records in `appledger/`. Do not write `workflow_tracking.json`. See `PLAN_MODE_PATTERNS.md`. |
9
+ | `/plan` + enter/exit_plan_mode + plan.md | Phase 1 (Architecture) | Use native plan mode for all Phase 1 work. On approval, export to `PHASE_1_BRIEF.md` and decision records in `appledger/`. See `PLAN_MODE_PATTERNS.md`. |
10
10
  | `spawn_subagent` (explore/plan/general, capability_mode, isolation: worktree, background, resume_from, personas) | All phases, especially 4, 5, 7 | Use for parallel audits (black-hat, UX, code quality), research, stabilize debugging, and exploratory spikes. Call `suggestSubagentDecomposition` first. Prefer read-only for analysis subagents. |
11
- | `todo_write` + TODO panel | All phases | Mirror open criteria and next actions from `appledger/profiles/forgetrail.yaml`. The ledger is the durable record. Do not write `workflow_tracking.json`. |
11
+ | `todo_write` + TODO panel | All phases | Mirror open criteria and next actions from `appledger/profiles/forgetrail.yaml`. The ledger is the durable record. |
12
12
  | Skills (`/create-skill`, SKILL.md) | All sessions | Install the `forgetrail` skill (see `SKILL.md` in content/skills/forgetrail). It keeps phase discipline, tracking rules, and subagent patterns always active. |
13
13
  | Native MCP (search_tool + use_tool) | Methodology delivery | Register the ForgeTrail MCP server. Tools appear as `forgetrail__*`. Use `getNewProjectKickoff`, `getPhaseGuidance`, `getCompanionSuggestions`, `runAudit`, `searchLessons`, `validateTracking`, etc. |
14
14
  | Headless (`grok -p ... --output-format json`) | Automation / CI | Call kickoff/resume tools and have the agent produce structured phase state. Add exit-criteria validation in pipelines. |
15
15
  | `docx` / `pptx` / `xlsx` skills + image/video gen | Phase 1 intake, Phase 6/7 deliverables | Use for exports (PDF/DOCX/PPTX), landing pages, brand assets, and marketing materials called out in greenfield intake. |
16
- | Sessions + memory + AGENTS.md | Cross-session continuity | `appledger/` plus `CONTEXT_PROMPT.md` are the ForgeTrail equivalents. Update the session record at session end. Do not write `workflow_tracking.json`. |
16
+ | Sessions + memory + AGENTS.md | Cross-session continuity | `appledger/` plus `CONTEXT_PROMPT.md` are the ForgeTrail equivalents. Update the session record at session end. |
17
17
 
18
18
  ## Recommended Session Openers in Grok
19
19
 
20
20
  For a new project:
21
21
  ```
22
- Call ForgeTrail getNewProjectKickoff (includeCursorRule false), write appledger/, then start Phase 1 using native /plan mode. Read the generated plan on approval and produce PHASE_1_BRIEF.md plus decision records. Do not write workflow_tracking.json.
22
+ Call ForgeTrail getNewProjectKickoff (includeCursorRule false), write appledger/, then start Phase 1 using native /plan mode. Read the generated plan on approval and produce PHASE_1_BRIEF.md plus decision records.
23
23
  ```
24
24
 
25
25
  For resuming:
26
26
  ```
27
- Call ForgeTrail getResumeSessionInstructions. Read appledger/profiles/forgetrail.yaml, the latest session record, and CONTEXT_PROMPT.md. Continue from the current phase. Do not update workflow_tracking.json.
27
+ Call ForgeTrail getResumeSessionInstructions. Read appledger/profiles/forgetrail.yaml, the latest session record, and CONTEXT_PROMPT.md. Continue from the current phase.
28
28
  ```
29
29
 
30
30
  ## Subagent Patterns (Grok-specific)
@@ -45,7 +45,7 @@ Use `background: true` for long-running subagents and retrieve with `get_command
45
45
  ## Ledger sync
46
46
 
47
47
  After meaningful work (especially subagent results or feature completion):
48
- - Update `appledger/` (criteria, decision records, lessons, the session). Do not write `workflow_tracking.json`.
48
+ - Update `appledger/` (criteria, decision records, lessons, the session).
49
49
  - Use `todo_write` to surface the next 3–5 open items from the profile.
50
50
  - Update `CONTEXT_PROMPT.md` when patterns or architecture change.
51
51
 
@@ -4,7 +4,7 @@ ForgeTrail owns phases, tracking, and progressive docs. **Companions** do one bo
4
4
 
5
5
  Public shelf (current versions and install): [catalystforge.com/tools](https://catalystforge.com/tools/).
6
6
 
7
- **Agents:** call **`getCompanionSuggestions`** with a `phase` (`1`–`7`) or a `situation` id when a trigger below is true. `getPhaseGuidance` also appends a short optional-companions footer. Offer one sentence plus the homepage. Do **not** install unless the user asked. Do **not** name this file, MCP tools, or spec paths in the human-facing offer. After a run that matters, persist the outcome on the appledger session as `data.companion_outcomes` and in the matching progressive doc. Do not write `workflow_tracking.json`.
7
+ **Agents:** call **`getCompanionSuggestions`** with a `phase` (`1`–`7`) or a `situation` id when a trigger below is true. `getPhaseGuidance` also appends a short optional-companions footer. Offer one sentence plus the homepage. Do **not** install unless the user asked. Do **not** name this file, MCP tools, or spec paths in the human-facing offer. After a run that matters, persist the outcome on the appledger session as `data.companion_outcomes` and in the matching progressive doc.
8
8
 
9
9
  **Humans:** skip this file unless you already want a neighbor for a specific job.
10
10
 
@@ -17,7 +17,7 @@ Public shelf (current versions and install): [catalystforge.com/tools](https://c
17
17
  3. FilePress publishes **Markdown**. It does not replace an interactive SvelteKit app.
18
18
  4. LocalSlip and LocalHelm are for **two or more** local apps, not a first single project. If they accept LocalSlip, use the recipes below. Do not write `ensure-lease.mjs`.
19
19
  5. Practice skills: install the one that matches the current job, not the set.
20
- 6. Offer an xFacts label when a product ships (public URL or handoff). Generate one only if the user accepts. Record the subject disposition in `appledger/` either way.
20
+ 6. Offer an xFacts label when a product ships (public URL or handoff). Generate one only if the user accepts. Record the subject disposition in `appledger/` either way. Offer an [Efficacy](https://efficacy.dev) chain in `.efficacy/` when a later agent should record a measured use of that version. The chain is optional, and a passing verify does not make the claim true.
21
21
 
22
22
  ---
23
23
 
@@ -77,7 +77,7 @@ Do not migrate a working host the user already chose.
77
77
  | `hard-to-undo` | Delete data, lock persistence, rewrite git, lock a stack | [TemperPass](https://temperpass.dev) |
78
78
  | `never-do` | Destructive action, force-push, or history rewrite | [TemperPass](https://temperpass.dev), [IngotVault](https://ingotvault.dev) |
79
79
  | `unclear-cause` | Failure is real; cause is not earned | [Gap Last](https://gaplast.dev) |
80
- | `ship-label` | Product is going public or being handed off | [xFacts](https://xfacts.dev) (AppFacts and neighbors) |
80
+ | `ship-label` | Product is going public or being handed off | [xFacts](https://xfacts.dev) (AppFacts and neighbors), [Efficacy](https://efficacy.dev) |
81
81
  | `git-backup` | New project, or unpushed work you cannot lose; before rebase/rewrite | [IngotVault](https://ingotvault.dev) |
82
82
  | `voice-journal` | Builder captures ideas by voice, or wants a local journal | [DictaWhisper](https://dictawhisper.com) |
83
83
 
@@ -1,6 +1,6 @@
1
1
  # ForgeTrail Lite — portable kickoff for any agentic chat
2
2
 
3
- > **ForgeTrail Lite v2.2.1**
3
+ > **ForgeTrail Lite v2.2.2**
4
4
  > © Catalyst Forge, LLC — [www.catalystforge.com](https://www.catalystforge.com)
5
5
  > Part of the **ForgeTrail** open-source methodology ([Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0) in the upstream ForgeTrail repo).
6
6
  >
@@ -8,7 +8,7 @@
8
8
 
9
9
  A single self-contained file for starting a new project in **any** agent: Cursor, Claude Code, Claude Cowork, OpenAI Codex, Cline, Aider, Continue, Windsurf, etc. **No MCP server, no vendored methodology tree, no external fetches.** Drop this file into the repo (or paste it into chat), and the agent has enough structure to run a real project end to end.
10
10
 
11
- **System of record:** Phase, decisions, lessons, and sessions live in `appledger/` (`profiles/forgetrail.yaml` and records). Do not create or update `.forgetrail/workflow_tracking.json`. §11 is the legacy shape for `appledger migrate` only. If that file already exists and is not a pointer, run `appledger migrate preview` and then apply. Do not keep a second decision log. `.forgetrail/` is the protocol, rules, and hooks.
11
+ **System of record:** Phase, decisions, lessons, and sessions live in `appledger/` (`profiles/forgetrail.yaml` and records). `.forgetrail/` is the protocol, rules, and hooks.
12
12
 
13
13
  > **Maintainers:** Optional onboarding blocks in **§4.3**, **§4.4**, and **§7.1** are intentionally duplicated in root **`README.md`** and **`WORKFLOW.md`**. When you edit one, sync the others (see **`update-log.md`** — FORGETRAIL_LITE release checklist, item 3).
14
14
 
@@ -49,7 +49,7 @@ Any of the three works. A + C together is best. For a written pre-Phase-1 spec,
49
49
 
50
50
  ForgeTrail agent artifacts (protocol, tracking, platform rules) live in **`.forgetrail/`** at the repo root — **whether you bootstrap via ForgeTrail Lite file copy or MCP greenfield.**
51
51
 
52
- **Upstream ForgeTrail is open source** (Apache 2.0). In your app repo, **`.forgetrail/`** holds the protocol, rules, and hooks. Project state lives in **`appledger/`**. **MCP greenfield** does not need a tracking JSON file. **Lite file bootstrap** may copy `FORGETRAIL_LITE.md` here; you may **commit** `.forgetrail/` under the same license or **gitignore** it to keep the public repo focused on app code and to avoid duplicating a large protocol when MCP already serves updates. Never commit **secrets** (`.env`, API keys) inside the ledger or rules.
52
+ **Upstream ForgeTrail is open source** (Apache 2.0). In your app repo, **`.forgetrail/`** holds the protocol, rules, and hooks. Project state lives in **`appledger/`**. **Lite file bootstrap** may copy `FORGETRAIL_LITE.md` here; you may **commit** `.forgetrail/` under the same license or **gitignore** it to keep the public repo focused on app code and to avoid duplicating a large protocol when MCP already serves updates. Never commit **secrets** (`.env`, API keys) inside the ledger or rules.
53
53
 
54
54
  ```
55
55
  .forgetrail/
@@ -101,13 +101,13 @@ When a boot surfaces a gap in **ForgeTrail Lite itself** (not a one-off app bug)
101
101
 
102
102
  **Optional companions:** when a job matches (Markdown site, two or more local apps, local Ollama, copy review), you may offer a sibling from the Catalyst Forge shelf. Never required. Do not list them in the first message to the human. MCP: `getCompanionSuggestions`. Full mapping lives with ForgeTrail, not in this file.
103
103
 
104
- **Subjects:** When the project has an application, a tool server, a skill package, an agent configuration, or a model variant, record a disposition with `appledger subjects`. A family with no subject is `not_applicable`, not a missing label. Do not generate or publish a label unless the user asks. Offering an xFacts label when the product goes public or changes hands stays optional.
104
+ **Subjects:** When the project has an application, a tool server, a skill package, an agent configuration, or a model variant, record a disposition with `appledger subjects`. A family with no subject is `not_applicable`, not a missing label. Do not generate or publish a label unless the user asks. Offering an xFacts label when the product goes public or changes hands stays optional. An [Efficacy](https://efficacy.dev) chain in `.efficacy/` is the same kind of offer when a later agent should record a measured use of that version. The chain is not the project record.
105
105
 
106
106
  **Named ports (if they accept):** [LocalSlip](https://localslip.dev). FilePress: lease name = site `package.json` `name`. `localslip claim NAME --port N && filepress dev`. Do not pass `--port`. Vite: `localslip get` in `vite.config`, `strictPort`. Claim once. Do not write `ensure-lease.mjs`. Do not add the `localslip` package just to read a port.
107
107
 
108
108
  ### Who creates what
109
109
 
110
- The **human** only needs to do two things: copy ForgeTrail Lite into **`.forgetrail/`** (or paste this doc into chat), and tell the agent to follow it. **Everything else is created by the agent** as it works through the phases. You should never be asked to hand-write `appledger/`, `.forgetrail/AGENTS.md`, the brief, `CONTEXT_PROMPT.md`, or the Phase 2 baseline files — the agent writes them and shows them to you for review. Do not create `.forgetrail/workflow_tracking.json`.
110
+ The **human** only needs to do two things: copy ForgeTrail Lite into **`.forgetrail/`** (or paste this doc into chat), and tell the agent to follow it. **Everything else is created by the agent** as it works through the phases. You should never be asked to hand-write `appledger/`, `.forgetrail/AGENTS.md`, the brief, `CONTEXT_PROMPT.md`, or the Phase 2 baseline files — the agent writes them and shows them to you for review.
111
111
 
112
112
  | File / folder | Who creates it | When |
113
113
  |---|---|---|
@@ -161,7 +161,7 @@ Every project flows through these phases. The agent **pauses at every phase tran
161
161
 
162
162
  When archetype ≠ `product`, **prune** the non-applicable criteria in the profile once (and record that pruning as a decision) instead of annotating them "N/A" forever. If the project outgrows its archetype (a one-shot grows accounts), flag it and propose re-promoting to `product`.
163
163
 
164
- **Wrap (when the project ends):** Finishing a project includes **harvesting** it. When the app ships, is delivered, or is intentionally shelved: sweep lesson and decision records for lessons that generalize beyond this app (framework traps, CLI changes, integration surprises), record them in `FORGETRAIL_LITE_UPDATES.md` (§1.6) or propagate to the upstream ForgeTrail repo if you have one, set `project_status` to `wrapped`, and add a final session record with the end state (deploy URL, handoff notes). Small projects often surface the freshest tooling lessons — do not let them die in the repo. Optional: Cold-eye for a newcomer-readiness pass. A public xFacts label is still optional and only when the user asks. The subject disposition from the **Subjects** note above is already recorded.
164
+ **Wrap (when the project ends):** Finishing a project includes **harvesting** it. When the app ships, is delivered, or is intentionally shelved: sweep lesson and decision records for lessons that generalize beyond this app (framework traps, CLI changes, integration surprises), record them in `FORGETRAIL_LITE_UPDATES.md` (§1.6) or propagate to the upstream ForgeTrail repo if you have one, set `project_status` to `wrapped`, and add a final session record with the end state (deploy URL, handoff notes). Small projects often surface the freshest tooling lessons — do not let them die in the repo. Optional: Cold-eye for a newcomer-readiness pass. A public xFacts label is still optional and only when the user asks. An Efficacy chain is the same kind of offer. The subject disposition from the **Subjects** note above is already recorded.
165
165
 
166
166
  ### 3.1 Feature specs (Phase 4+)
167
167
 
@@ -307,7 +307,7 @@ Record anything non-obvious as a lesson in **`appledger/`** (for example, Playwr
307
307
 
308
308
  ### 4.2 Ordered first actions
309
309
 
310
- 1. **Read** `.forgetrail/FORGETRAIL_LITE.md` top to bottom. Also read `appledger/profiles/forgetrail.yaml`, the latest session record, `.forgetrail/AGENTS.md`, and `CONTEXT_PROMPT.md` if they already exist. Do not read a writable `workflow_tracking.json` as the live phase.
310
+ 1. **Read** `.forgetrail/FORGETRAIL_LITE.md` top to bottom. Also read `appledger/profiles/forgetrail.yaml`, the latest session record, `.forgetrail/AGENTS.md`, and `CONTEXT_PROMPT.md` if they already exist.
311
311
  2. **Ensure the folder is a git repo.** *(Skip this step if the user opted into no-git mode in §4.1.)* Check with `git rev-parse --is-inside-work-tree`. If it returns false or errors, run `git init -b main` (or `git init` + `git branch -m main` on older git) at the repo root. Never re-init an existing repo. **Apply §1.5 git policy** (default: **commit `.forgetrail/`** for Lite). Write a minimal `.gitignore` containing at least:
312
312
  ```
313
313
  node_modules/
@@ -320,7 +320,7 @@ Record anything non-obvious as a lesson in **`appledger/`** (for example, Playwr
320
320
  2. **`.forgetrail/cursor/rules/forgetrail-updates-log.mdc`** — use the §12.5 snippet verbatim. **Symlink or copy** into `.cursor/rules/` so Cursor reminds agents when to update `FORGETRAIL_LITE_UPDATES.md` (§1.6). Optional: copy the upstream **`FORGETRAIL_LITE_UPDATES.md`** starter into `.forgetrail/` when you expect protocol feedback during the project.
321
321
  3. **`.forgetrail/hooks/` and `.cursor/hooks.json`** — install host safety hooks (`content/hooks/`) into `.forgetrail/hooks/` and copy `cursor-hooks.json` to `.cursor/hooks.json`. On Cursor, this runs pre-commit verification, enforces pnpm lock consistency, gates git push at the tool level, and injects live phase context at session start. For Claude Code, add `claude-settings-hooks.json` into `.claude/settings.json`.
322
322
  If any of these already exists and its content conflicts with the Lite defaults, **do not overwrite** — flag the conflict to the user and ask how to reconcile. Record the reconciliation as a decision in `appledger/`.
323
- 4. **Create `appledger/`** if it does not exist. Run `pnpm dlx appledger init --name "<application name>"` (or `appledger init` when it is installed globally), then `pnpm dlx appledger check`. Init writes `manifest.yaml`, `profiles/forgetrail.yaml` with the `plan` phase `in_progress`, an application record, and a session record. It does not overwrite existing files. Init leaves the purpose as "Not supplied." Write the one-line purpose into the application record from what the user has already said, then run `check` again. Do **not** create `.forgetrail/workflow_tracking.json`. Criteria stay `pending` until evidence exists. **Without Node:** write the same four files by hand in the shape of the [minimal example ledger](https://github.com/Catalyst-Forge-LLC/appledger/tree/main/examples/minimal/appledger), and run `appledger check` once Node is available. A hand-written ledger is not checked until then.
323
+ 4. **Create `appledger/`** if it does not exist. Run `pnpm dlx appledger init --name "<application name>"` (or `appledger init` when it is installed globally), then `pnpm dlx appledger check`. Init writes `manifest.yaml`, `profiles/forgetrail.yaml` with the `plan` phase `in_progress`, an application record, and a session record. It does not overwrite existing files. Init leaves the purpose as "Not supplied." Write the one-line purpose into the application record from what the user has already said, then run `check` again. Criteria stay `pending` until evidence exists. **Without Node:** write the same four files by hand in the shape of the [minimal example ledger](https://github.com/Catalyst-Forge-LLC/appledger/tree/main/examples/minimal/appledger), and run `appledger check` once Node is available. A hand-written ledger is not checked until then.
324
324
  5. **If git was initialized in step 2**, make the first commit now so the user has a clean baseline. **What lands in the commit depends on §1.5:** if **committing `.forgetrail/`**, steps 3–4 artifacts are included; if **gitignoring `.forgetrail/`**, only `.gitignore` (and any `.cursor/rules/` copies) — the workspace stays local-only and that is expected, not a mistake. Example: `git add -A && git commit -m "chore: ForgeTrail Lite bootstrap"`. Skip this step if the repo already had history — do not squash or amend what's there. Skip entirely if the user is in no-git mode (§4.1).
325
325
  6. **Ask the §5 intake questions.** Do not write any project code yet. For the first user-facing reply, follow §9 (plain product language, one clear "reply with," no methodology jargon).
326
326
  7. **Create `docs/`** (if missing) and **draft `docs/PHASE_1_BRIEF.md`** from the §6 template using the user's answers. Show it to the user, iterate, then **lock it**: mark the brief criteria met in `appledger/profiles/forgetrail.yaml` only when the user has approved them, and record major commitments as decision records.
@@ -461,7 +461,7 @@ Output requirements
461
461
 
462
462
  ### 4.6 ForgeTrail phase progress (human-readable)
463
463
 
464
- **Source of truth:** **`appledger/profiles/forgetrail.yaml`** and the latest session record (agents update every session). Do not write `workflow_tracking.json`.
464
+ **Source of truth:** **`appledger/profiles/forgetrail.yaml`** and the latest session record (agents update every session).
465
465
 
466
466
  **For humans who are not in Cursor:**
467
467
 
@@ -469,7 +469,7 @@ Output requirements
469
469
  |-----------|----------------|
470
470
  | **`status.bat`** / **`status.sh`** / **`pnpm run forgetrail:status`** | Anyone — prints phase name, open exit criteria, last session; refreshes **`docs/FORGETRAIL_PROGRESS.md`** |
471
471
  | **`docs/FORGETRAIL_PROGRESS.md`** | Plain-language snapshot (template: upstream **`FORGETRAIL_PROGRESS.md`**) |
472
- | **`.cursor/rules/forgetrail-phase-status.mdc`** | Cursor agent footers from tracking JSON |
472
+ | **`.cursor/rules/forgetrail-phase-status.mdc`** | Cursor agent footers from `appledger/profiles/forgetrail.yaml` |
473
473
  | **Ask the agent** | *"What's our ForgeTrail phase and what's next?"* — it should read tracking first |
474
474
 
475
475
  **Agent:** After locking a phase or completing exit criteria, update tracking **and** either refresh **`docs/FORGETRAIL_PROGRESS.md`** or remind the user to run **status.bat**. On phase transitions, pause for explicit approval (§8 rule 1) — **status** output should not replace that conversation.
@@ -839,7 +839,7 @@ Full ForgeTrail expands this under **`docs/TECHNICAL_REFERENCE.md`** (*URL impor
839
839
  - **Letters** (A/B/C) = pick-one / "which first?" — avoids collision with numbered steps.
840
840
  6. **No interactive CLIs** in scripted commands. Pass non-interactive flags. Examples: `npm create vite@latest -- --template ...`, `gh repo create --confirm`. For SvelteKit in Lite, **prefer the manual scaffold** (§4.2 step 10 A.1) over `sv create` — by the time Phase 2 runs, the repo root is never empty and `sv create .` will hit an un-skippable **`Directory not empty. Continue?`** prompt and hang. If you do use `sv create` as a shortcut, target a **new empty subfolder** (`sv create app`), never `.`. A hanging prompt in an agent terminal is a dead session.
841
841
  7. **Five-turn rule.** If a bug or design problem has not converged in ~5 turns, **stop patching** and propose a different approach (different library, different data model, different scope cut). Announce the pivot explicitly.
842
- 8. **Update the ledger after substantive work.** Move criteria that have evidence, and update the session record. A stale `appledger/` after a busy session is a bug. Do not write `workflow_tracking.json`.
842
+ 8. **Update the ledger after substantive work.** Move criteria that have evidence, and update the session record. A stale `appledger/` after a busy session is a bug.
843
843
  9. **Git commits — clean messages and natural stopping points.** See **§8.9** for guidelines. Commit with phase-prefixed or descriptive messages (`git commit -m "phase-2: wire hero flow"` or `git commit -F path/to/msg.txt`). Always verify that types and checks pass cleanly before committing. Never leave uncommitted broken states across session boundaries.
844
844
 
845
845
  10. **Install/bootstrap scripts must branch on `process.platform` before shelling out to archive, network, or text tools.** Treat `tar`, `unzip`, `curl`, `sed`, `awk`, `openssl`, and similar as **platform-dependent on Windows** — never a drop-in from a Unix-only recipe. On `win32`, prefer PowerShell (`Expand-Archive`, `Invoke-WebRequest`) or call `C:\Windows\System32\tar.exe` by absolute path to bypass PATH shadowing; keep `tar` / `unzip` / `curl` for macOS/Linux branches. Layer fallbacks and end with a clear error that points the user at manual steps (e.g. “Extract All”) if automation cannot run. Full failure modes: §13 (Engineering).
@@ -862,7 +862,7 @@ Ensure that automated checks pass (`pnpm run verify` or project test suite) befo
862
862
 
863
863
  ## 9. First user-facing reply after bootstrap
864
864
 
865
- After you create `.forgetrail/AGENTS.md`, `appledger/`, and the git baseline, your **first message to the human** should be **short, plain-English, and ask only the opening round** of §5. Do not create `.forgetrail/workflow_tracking.json`. Do **not** dump the full intake checklist. Do **not** list MCP tools, internal file paths, ForgeTrail terms ("hero workflow," "architecture," "spine," "exit criteria," "brief," "phase"), or file inventories. Target **~80 words or fewer** — this is a conversation starter, not a form.
865
+ After you create `.forgetrail/AGENTS.md`, `appledger/`, and the git baseline, your **first message to the human** should be **short, plain-English, and ask only the opening round** of §5. Do **not** dump the full intake checklist. Do **not** list MCP tools, internal file paths, ForgeTrail terms ("hero workflow," "architecture," "spine," "exit criteria," "brief," "phase"), or file inventories. Target **~80 words or fewer** — this is a conversation starter, not a form.
866
866
 
867
867
  **The anchor round is always Round 1:** three small, numbered questions — project name, what it is, who it's for. Nothing else. Stagger the rest of §5 across follow-up messages once they answer.
868
868
 
@@ -1003,7 +1003,7 @@ Save this as `.forgetrail/AGENTS.md` so agents that auto-load it (Codex, Cursor,
1003
1003
 
1004
1004
  ```markdown
1005
1005
  <!--
1006
- Agent protocol based on ForgeTrail Lite v2.2.1.
1006
+ Agent protocol based on ForgeTrail Lite v2.2.2.
1007
1007
  © Catalyst Forge, LLC — www.catalystforge.com
1008
1008
  Licensed under Apache License 2.0 (upstream ForgeTrail repo).
1009
1009
  -->
@@ -1034,7 +1034,7 @@ This repository uses **ForgeTrail Lite** as its project kickoff and operating pr
1034
1034
  Initial `git init`, `pnpm init` / scaffolder, `pnpm install`, and the initial commit are all done by the agent per `.forgetrail/FORGETRAIL_LITE.md` §4. Do not ask the user to run setup commands by hand. If `git`, **Node.js**, **npm**, or **pnpm** are missing, follow §4.1 preflight (concrete install path; no-git mode for git only — never silently skip).
1035
1035
 
1036
1036
  ## Session start
1037
- 1. Read `appledger/profiles/forgetrail.yaml` and `CONTEXT_PROMPT.md` (if present). Do not treat `.forgetrail/workflow_tracking.json` as the live phase.
1037
+ 1. Read `appledger/profiles/forgetrail.yaml` and `CONTEXT_PROMPT.md` (if present).
1038
1038
  2. Check the current profile phase and the latest session record.
1039
1039
  3. Verify `.git/` and `package.json` exist if the phase calls for them; if missing, re-read `.forgetrail/FORGETRAIL_LITE.md` §4 (preflight + ordered actions) and catch up before proceeding. If a decision records that source control is deferred, respect no-git mode and remind the user git is still pending.
1040
1040
  4. If the previous session left exit criteria unmet, resume there — do not jump ahead.
@@ -1056,7 +1056,7 @@ These are the failures ForgeTrail sees most often. The agent should re-read this
1056
1056
  - **Skipping the Phase 1 brief.** Rewrites compound. If the user says "just start coding," offer to write a 10-line brief in 2 minutes first — it still pays off.
1057
1057
  - **Half-built spine.** Scaffolding a UI with mock data, or wiring a DB with no UI, and calling it Phase 2. The spine is end-to-end or it is not a spine.
1058
1058
  - **Silent stack swap.** Choosing a framework, DB, or language the user did not confirm. Always name the stack and get a "yes" before Phase 2.
1059
- - **Ledger rot.** Creating `appledger/` once and never updating it. Update the session record at the end of every substantive turn. Do not recreate `.forgetrail/workflow_tracking.json`.
1059
+ - **Ledger rot.** Creating `appledger/` once and never updating it. Update the session record at the end of every substantive turn.
1060
1060
  - **Turning the first reply into a methodology dump.** Users want a product answer, not a tour of decision records and exit criteria.
1061
1061
 
1062
1062
  **Engineering**
@@ -1119,7 +1119,6 @@ During Phase 2, create these once the spine is running. Keep them short and hone
1119
1119
  # CLAUDE.md
1120
1120
  # IDEAS.md
1121
1121
  # .cursor/rules/forgetrail-updates-log.mdc
1122
- # Do not symlink or recreate .forgetrail/workflow_tracking.json.
1123
1122
  # Project state is appledger/ and is committed with the app.
1124
1123
 
1125
1124
  # Deps
@@ -1179,4 +1178,4 @@ ForgeTrail Lite covers the shape of a project. The full **ForgeTrail MCP server*
1179
1178
 
1180
1179
  ---
1181
1180
 
1182
- **ForgeTrail Lite v2.2.1** · © Catalyst Forge, LLC · [www.catalystforge.com](https://www.catalystforge.com) · [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0)
1181
+ **ForgeTrail Lite v2.2.2** · © Catalyst Forge, LLC · [www.catalystforge.com](https://www.catalystforge.com) · [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0)
@@ -1,6 +1,6 @@
1
1
  # ForgeTrail progress
2
2
 
3
- _Human-readable snapshot for non-technical operators. **Source of truth:** `appledger/profiles/forgetrail.yaml` and the latest session record. The agent updates those. Do not write `.forgetrail/workflow_tracking.json`. This page is a snapshot, not the record._
3
+ _Human-readable snapshot for non-technical operators. **Source of truth:** `appledger/profiles/forgetrail.yaml` and the latest session record. The agent updates those. This page is a snapshot, not the record._
4
4
 
5
5
  ## Current phase
6
6
 
@@ -14,7 +14,7 @@ Use this **before** Phase 1, in **any** LLM chat — ChatGPT, Claude, Grok, a lo
14
14
 
15
15
  1. Save it in the project repo as **`docs/GENESIS.md`** (canonical path).
16
16
  2. Follow the human recipe in **`TRY_FORGETRAIL.md`** (ForgeTrail repo root), or feed the spec into ForgeTrail Phase 1:
17
- - **Automatic draft:** call **`ingestPlanArtifact`** with the full `GENESIS.md` text as `planContent`. It maps headings like *Problem statement*, *Goals and non-goals*, *Required background on the data/file format*, *Core domain concepts*, *Edge cases*, *Milestones*, and *Open questions* into `docs/PHASE_1_BRIEF.md` sections, and extracts any `D1.`/`D2.`-style decisions into decision records for `appledger/`. Do not write `workflow_tracking.json`. Sections without a clean home (e.g. **Acceptance criteria** — the brief has no dedicated section for it) land in a "Plan sections not auto-mapped" footer — fold that into **§12 Handoff checklist** or its own appendix by hand.
17
+ - **Automatic draft:** call **`ingestPlanArtifact`** with the full `GENESIS.md` text as `planContent`. It maps headings like *Problem statement*, *Goals and non-goals*, *Required background on the data/file format*, *Core domain concepts*, *Edge cases*, *Milestones*, and *Open questions* into `docs/PHASE_1_BRIEF.md` sections, and extracts any `D1.`/`D2.`-style decisions into decision records for `appledger/`. Sections without a clean home (e.g. **Acceptance criteria** — the brief has no dedicated section for it) land in a "Plan sections not auto-mapped" footer — fold that into **§12 Handoff checklist** or its own appendix by hand.
18
18
  - **Manual walkthrough:** read `docs/GENESIS.md` together with the agent as context, then run **`getGreenfieldIntakePrompt`** + `getChecklist(before-session-1)` to confirm delivery details the spec might not cover (tenancy, compliance, live search, content-generation pattern).
19
19
  3. Either way, **lock `docs/PHASE_1_BRIEF.md`** before Phase 2 scaffolding, per the normal Phase 1 exit criteria.
20
20
 
@@ -13,6 +13,6 @@ Replace this file with your **what, not how** build spec.
13
13
 
14
14
  See **TRY_FORGETRAIL.md** in the ForgeTrail repo for the full recipe. Short version:
15
15
 
16
- > Follow `.forgetrail/FORGETRAIL_LITE.md` as the project protocol. Treat `docs/GENESIS.md` as the product spec (what, not how). If `appledger` is installed, run `appledger init`. Otherwise create `appledger/` (manifest, profile, application record, session record). Draft `docs/PHASE_1_BRIEF.md` from the Genesis file, asking me only about gaps. Do not create `workflow_tracking.json`. Do not scaffold application code until I explicitly approve the Phase 1 brief.
16
+ > Follow `.forgetrail/FORGETRAIL_LITE.md` as the project protocol. Treat `docs/GENESIS.md` as the product spec (what, not how). If `appledger` is installed, run `appledger init`. Otherwise create `appledger/` (manifest, profile, application record, session record). Draft `docs/PHASE_1_BRIEF.md` from the Genesis file, asking me only about gaps. Do not scaffold application code until I explicitly approve the Phase 1 brief.
17
17
 
18
18
  Keep this file at **`docs/GENESIS.md`** (this path). Do not move it to the repo root.