@warpgogol/forge 1.2.2 → 2.2.0

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.
@@ -7,15 +7,18 @@ detect:
7
7
  - package.json
8
8
  workspace:
9
9
  dirs:
10
- - games
10
+ - apps
11
11
  - packages
12
12
  - services
13
13
  - scripts
14
+ - tools
15
+ - missions
16
+ - systems-cache
14
17
  files:
15
18
  - path: pnpm-workspace.yaml
16
19
  content: |
17
20
  packages:
18
- - "games/*"
21
+ - "apps/*"
19
22
  - "packages/*"
20
23
  - "services/*"
21
24
  - path: turbo.json
@@ -201,10 +204,143 @@ workspace:
201
204
  }
202
205
 
203
206
  console.log(`Cleaned ${toDelete.length} directories.`);
207
+ - path: tools/kernel.config.ts
208
+ content: |
209
+ import { defineKernelConfig } from "@warpgogol/werkstatt/kernel/types";
210
+ import { werkstattGamePlugin } from "@warpgogol/werkstatt-game";
211
+
212
+ export default defineKernelConfig({
213
+ name: "__PROJECT_NAME__",
214
+ description: "__PROJECT_NAME__ workshop",
215
+ moduleLoaders: {
216
+ "forge-core": async () => (await import("@warpgogol/forge/os/core")).forgeCoreModule,
217
+ "forge-rfc": async () => (await import("@warpgogol/forge/os/rfc-module")).forgeRfcModule,
218
+ "forge-adr": async () => (await import("@warpgogol/forge/os/adr-module")).forgeAdrModule,
219
+ "forge-plan": async () => (await import("@warpgogol/forge/os/plan-module")).forgePlanModule,
220
+ "forge-audit": async () => (await import("@warpgogol/forge/os/audit-module")).forgeAuditModule,
221
+ "forge-compass": async () => (await import("@warpgogol/forge/os/compass")).forgeCompassModule,
222
+ "forge-naming": async () => (await import("@warpgogol/forge/os/naming-module")).forgeNamingModule,
223
+ "forge-workflow": async () => (await import("@warpgogol/forge/os/workflow-module")).forgeWorkflowModule,
224
+ "forge-session": async () => (await import("@warpgogol/forge/os/session-module")).forgeSessionModule,
225
+ "forge-mission": async () => (await import("@warpgogol/forge/os/mission-module")).forgeMissionModule,
226
+ "forge-spec": async () => (await import("@warpgogol/forge/os/spec-module")).forgeSpecModule,
227
+ "forge-exploration": async () => (await import("@warpgogol/forge/os/exploration")).forgeExplorationModule,
228
+ "forge-program": async () => (await import("@warpgogol/forge/os/program")).forgeProgramModule,
229
+ "forge-werkstatt": async () => (await import("@warpgogol/forge/os/werkstatt")).forgeWerkstattModule,
230
+ mission: async () => (await import("@warpgogol/werkstatt/mission-module")).createMissionModule(),
231
+ sternsystem: async () => (await import("@warpgogol/werkstatt/sternsystem-module")).createSternsystemModule(),
232
+ bordbuch: async () => (await import("@warpgogol/werkstatt/bordbuch-module")).createBordbuchModule(),
233
+ "artifact-store": async () => (await import("@warpgogol/werkstatt/artifact-store-module")).createArtifactStoreModule(),
234
+ release: async () => (await import("@warpgogol/werkstatt/release-module")).createReleaseModule(),
235
+ leitstand: async () => (await import("@warpgogol/werkstatt/leitstand-module")).createLeitstandModule(),
236
+ notausgang: async () => (await import("@warpgogol/werkstatt/notausgang-module")).createNotausgangModule(),
237
+ evidence: async () => (await import("@warpgogol/werkstatt/evidence-module")).createEvidenceModule(),
238
+ "werkstatt-plugin": async () => (await import("@warpgogol/werkstatt/os/werkstatt-plugin-module")).forgeWerkstattPluginModule,
239
+ "werkstatt-autonomy": async () => (await import("@warpgogol/werkstatt/os/werkstatt-autonomy-module")).werkstattAutonomyModule,
240
+ "__PROJECT_NAME__-plugin": async () => werkstattGamePlugin,
241
+ },
242
+ });
243
+ - path: .npmrc
244
+ content: |
245
+ # @warpgogol scoped registry — replace YOUR_NPM_TOKEN with a valid npm read token
246
+ @warpgogol:registry=https://registry.npmjs.org/
247
+ //registry.npmjs.org/:_authToken=YOUR_NPM_TOKEN
248
+ # Auto-approve build scripts so operators aren't prompted during install
249
+ dangerously-allow-all-builds=true
250
+ - path: eslint.config.js
251
+ content: |
252
+ export default [
253
+ {
254
+ rules: {},
255
+ },
256
+ ];
257
+ - path: .prettierrc.mjs
258
+ content: |
259
+ export default {
260
+ semi: true,
261
+ singleQuote: false,
262
+ trailingComma: "all",
263
+ printWidth: 100,
264
+ tabWidth: 2,
265
+ };
266
+ - path: .gitattributes
267
+ content: |
268
+ # No LFS patterns for this stack
269
+ - path: hooks/pre-commit
270
+ content: |
271
+ #!/bin/sh
272
+ # Platform-scope pre-commit guard
273
+ # Runs werkstatt autonomy and plugin validation before commits
274
+ echo "Pre-commit: running platform checks..."
275
+ pnpm exec werkstatt run werkstatt.autonomy.validate || exit 1
276
+ pnpm exec werkstatt run werkstatt.plugin.validate || exit 1
277
+ - path: systems-cache/.gitkeep
278
+ content: |
279
+ # Sternsystem cache directory (RFC-0790)
280
+ # Per-system config and state files live in systems-cache/<id>/
281
+ - path: missions/.gitkeep
282
+ content: ""
283
+ - path: .forge/pinned.yaml
284
+ content: |
285
+ # Pinned foundation files (DNA-62, RFC-0733)
286
+ # Protect mode: warns on delete/move. Freeze mode: blocks modify too.
287
+ entries:
288
+ - path: tools/kernel.config.ts
289
+ mode: protect
290
+ - path: forge.yaml
291
+ mode: protect
292
+ - path: pnpm-workspace.yaml
293
+ mode: protect
294
+ - path: turbo.json
295
+ mode: protect
296
+ - path: tsconfig.base.json
297
+ mode: protect
298
+ - path: systems-cache/.gitkeep
299
+ mode: protect
300
+ - path: README.md
301
+ content: |
302
+ # __PROJECT_NAME__
303
+
304
+ A Warpgogol workshop powered by the Werkstatt engine and the @warpgogol/werkstatt-game plugin.
305
+
306
+ ## Prerequisites
307
+
308
+ - Node.js 24+
309
+ - pnpm 10+
310
+
311
+ ## Setup
312
+
313
+ ### 1. Configure npm token
314
+
315
+ This workshop depends on private @warpgogol packages. Edit `.npmrc` and replace `YOUR_NPM_TOKEN` with a valid npm read token:
316
+
317
+ ```sh
318
+ sed -i 's/YOUR_NPM_TOKEN/your_actual_token/' .npmrc
319
+ ```
320
+
321
+ ### 2. Install dependencies
322
+
323
+ ```sh
324
+ pnpm install
325
+ ```
326
+
327
+ ### 3. Verify the workshop
328
+
329
+ ```sh
330
+ pnpm exec werkstatt run forge.doctor
331
+ pnpm exec werkstatt run werkstatt.plugin.validate
332
+ pnpm exec werkstatt run werkstatt.autonomy.validate
333
+ ```
334
+
335
+ ## Stack
336
+
337
+ - Engine: @warpgogol/werkstatt
338
+ - Plugin: @warpgogol/werkstatt-game
339
+ - Stack profile: phaser-turborepo
204
340
  install:
205
341
  - pnpm add -D typescript turbo @warpgogol/forge @warpgogol/werkstatt @warpgogol/werkstatt-shared @warpgogol/werkstatt-game prettier
206
342
  firstWorkspace:
207
- path: games/my-game
343
+ path: apps/my-game
208
344
  files:
209
345
  - path: package.json
210
346
  content: |
@@ -164,6 +164,61 @@ When the operator says any session-end trigger phrase (e.g. "Завершаем
164
164
 
165
165
  The `fo-session-retro` skill IS the session-end protocol — it runs transcript save, temp cleanup, docs.archive, clean tree check, RFC verification, insight triage, and produces the closing block. Do not substitute it with a manual summary. The closing block comes from `fo-session-retro`, not from the agent directly.
166
166
 
167
+ ## Pre-pipeline checkpoint
168
+
169
+ When a pipeline skill (`fo-idea-i-just-want-to-see-the-result`, `fo-idea-i-just-want-to-see-the-plan`, `fo-idea-implement`) is invoked after substantial pre-existing session context — discussion, code exploration, document creation, debugging — the agent performs a pre-pipeline checkpoint to release that context before the pipeline starts. The pipeline is self-sufficient: it reads the RFC/ADR, plan, AGENTS.md, and DNA invariants fresh. Pre-existing session context is no longer actionable once the pipeline begins.
170
+
171
+ ### When to emit
172
+
173
+ Emit the pre-pipeline checkpoint when **both** conditions are met:
174
+
175
+ 1. **Pre-existing context exists** — the session has accumulated context from prior work (discussion, file reads, search results, document creation, debugging). If the skill is invoked at the start of a session with no prior context, skip the checkpoint — there is nothing to release.
176
+ 2. **The skill runs a pipeline** — `fo-idea-i-just-want-to-see-the-result` (full or `stopAfter: plan`), `fo-idea-i-just-want-to-see-the-plan`, or `fo-idea-implement`. Skills that perform a single action (e.g. `fo-idea-audit`, `fo-idea-enhance`) do not need this checkpoint.
177
+
178
+ **Double-checkpoint guard:** If a pre-pipeline checkpoint was already emitted by a calling orchestrator (e.g. `fo-idea-i-just-want-to-see-the-result` emitted one, then invoked `fo-idea-implement`), the called skill MUST skip its own checkpoint — the context was already released. Scan conversation output for an existing `checkpoint: pre-pipeline` block before emitting a new one.
179
+
180
+ **Wrapper skills:** `fo-idea-i-just-want-to-see-the-plan` delegates to `fo-idea-i-just-want-to-see-the-result` and does not emit its own checkpoint — the orchestrator handles it.
181
+
182
+ ### How to emit
183
+
184
+ 1. **Emit pre-pipeline checkpoint block** — output a YAML-formatted block in conversation output with the following fields:
185
+
186
+ ```yaml
187
+ ---
188
+ checkpoint: pre-pipeline
189
+ documents:
190
+ - id: RFC-XXXX
191
+ type: RFC
192
+ status: accepted
193
+ operatorConstraints:
194
+ - "explicit constraints from the operator not captured in the document"
195
+ aiLanguage: uk
196
+ sessionSummary: >
197
+ 1-3 sentences capturing key decisions, edge cases, and mental models
198
+ from the pre-pipeline discussion that are not in the document text.
199
+ ---
200
+ ```
201
+
202
+ 2. **Preserve critical fields** — the following must survive the context release:
203
+ - `documents` — id, type, and status of each document to process (needed by the pipeline's step 0 detection)
204
+ - `operatorConstraints` — explicit constraints or preferences the operator stated in conversation that are not written into the RFC/ADR (e.g. "don't touch packages/foo", "use approach Y"). Empty if none.
205
+ - `aiLanguage` — the operator's AI language preference (to avoid re-reading `PREFERENCES.md`)
206
+ - `sessionSummary` — 1-3 freeform sentences capturing key decisions, edge cases, and mental models from the discussion. This mitigates the session-affinity risk: the `fo-idea-implement` skill warns that "session context contains edge cases and mental models not fully captured in the plan text." The summary preserves the most important ones.
207
+
208
+ 3. **Release pre-existing context** — explicitly treat all detailed context from before the checkpoint as no longer actionable: discussion text, codebase search results, file reads, edit operations, intermediate reasoning, debug output. Retain only the checkpoint block and `PREFERENCES.md` settings.
209
+
210
+ 4. **Fresh start** — begin the pipeline with a fresh read phase: re-read the RFC/ADR file and all related documents (amends, supersedes, related RFCs, DNA invariants, AGENTS.md sections).
211
+
212
+ ### What NOT to release
213
+
214
+ - **`PREFERENCES.md` settings** — `aiLanguage`, `documentationLanguage`, and other preferences remain active.
215
+ - **The checkpoint block itself** — it is the resume marker and the only link to pre-pipeline context.
216
+ - **Operator constraints** — if the operator said "don't touch X" or "use approach Y" in conversation, these must be respected throughout the pipeline.
217
+
218
+ ### Resume behavior
219
+
220
+ When resuming an interrupted session, scan conversation output for the last pre-pipeline checkpoint block. If found, extract `documents`, `operatorConstraints`, `aiLanguage`, and `sessionSummary` to restore the pre-pipeline context without re-reading the full conversation history. Then proceed with the pipeline's own resume logic (detecting completed steps via git log, file inspection, frontmatter status).
221
+
167
222
  ## Context checkpoint between batch items
168
223
 
169
224
  When the orchestrator skill processes multiple documents (>=2), perform a context checkpoint after completing one document and before starting the next:
@@ -249,8 +249,8 @@ Skills that delegate to `fo-doc-audit`:
249
249
 
250
250
  - **`fo-fix`** step 5 ("Documentation audit") — invokes `fo-doc-audit`.
251
251
  - **`fo-fix`** merge conflict resolution step 4 ("Documentation audit") — invokes `fo-doc-audit`.
252
- - **`fo-idea-implement`** step 3.9 ("Documentation audit") — invokes `fo-doc-audit`.
253
- - **`fo-idea-implement`** ADR-FLOW step 4.6 ("Documentation audit") — invokes `fo-doc-audit`.
252
+ - **`fo-idea-implement`** step 4.9 ("Documentation audit") — invokes `fo-doc-audit`.
253
+ - **`fo-idea-implement`** ADR-FLOW step 5.6 ("Documentation audit") — invokes `fo-doc-audit`.
254
254
 
255
255
  ## Constraints
256
256
 
@@ -19,6 +19,8 @@ See `_shared/fo-pipeline-conventions.md` §Language policy.
19
19
 
20
20
  Thin wrapper around `fo-idea-i-just-want-to-see-the-result`. Invokes the orchestrator with `stopAfter: plan`, which runs steps 0–3 only (idea → audit → enhance → plan). Step 4 (implement, which includes review and fix) is not run.
21
21
 
22
+ The orchestrator handles the pre-pipeline checkpoint per `_shared/fo-pipeline-conventions.md` §Pre-pipeline checkpoint — no separate checkpoint is needed in this wrapper.
23
+
22
24
  ## ADR documents
23
25
 
24
26
  ADRs skip audit, enhance, and plan. The orchestrator stops after step 0 (idea creation) with the message: "ADR does not require a plan. Run `/fo-idea-implement` to implement."
@@ -50,7 +50,11 @@ Determine whether the operator provided a raw idea or a document id:
50
50
 
51
51
  Record the document id(s) and type(s) (RFC or ADR). If multiple documents were created in a series, process them in dependency order — the same order `fo-idea` created them.
52
52
 
53
- ### 1. Run the pipeline
53
+ ### 1. Pre-pipeline checkpoint
54
+
55
+ Before starting the pipeline, perform a pre-pipeline checkpoint per `_shared/fo-pipeline-conventions.md` §Pre-pipeline checkpoint. If pre-existing session context exists (discussion, document creation, debugging), emit the checkpoint block, release pre-existing context, and start the pipeline with a fresh read phase. If the session has no prior context, skip the checkpoint.
56
+
57
+ ### 2. Run the pipeline
54
58
 
55
59
  For each document, run the full pipeline inline. The pipeline differs for RFCs and ADRs.
56
60
 
@@ -120,7 +124,7 @@ Do not invoke `fo-review` or `fo-fix` separately — they are built into `fo-ide
120
124
 
121
125
  This fallback ensures review and fix are never skipped, even if `fo-idea-implement` failed to execute them internally.
122
126
 
123
- ### 2. Report and stop
127
+ ### 3. Report and stop
124
128
 
125
129
  After the pipeline is complete (or if it was interrupted and resumed), present a single summary in `aiLanguage`. **Translate all labels and headings to `aiLanguage`** — the template below is structural only. Only identifiers (RFC-XXXX, ADR-XXXX, file paths) stay untranslated.
126
130
 
@@ -142,7 +146,7 @@ If multiple documents were processed, present one summary block per document.
142
146
 
143
147
  **Stop.** Do not invoke `/grilling` or any other skill after the pipeline is complete. The operator asked to "just see the result" — the result is the summary above.
144
148
 
145
- ### 3. Resume if interrupted
149
+ ### 4. Resume if interrupted
146
150
 
147
151
  If the session was interrupted (agent stopped, context limit, crash, checkpoint summary) and the operator re-invokes this skill or continues the session:
148
152
 
@@ -41,15 +41,19 @@ Determine the document type by:
41
41
 
42
42
  If the type cannot be determined, ask the user.
43
43
 
44
- ### 3. RFC implementation flow
44
+ ### 3. Pre-pipeline checkpoint
45
45
 
46
- #### 3.1. Prerequisite checks (per RFC)
46
+ Before starting implementation, perform a pre-pipeline checkpoint per `_shared/fo-pipeline-conventions.md` §Pre-pipeline checkpoint. If pre-existing session context exists (discussion, document creation, debugging, prior pipeline steps), emit the checkpoint block, release pre-existing context, and start implementation with a fresh read phase. If the session has no prior context (e.g. this skill was invoked at the start of a session), skip the checkpoint. If a pre-pipeline checkpoint was already emitted by a calling orchestrator (e.g. `fo-idea-i-just-want-to-see-the-result`), skip this step — the checkpoint was already done.
47
+
48
+ ### 4. RFC implementation flow
49
+
50
+ #### 4.1. Prerequisite checks (per RFC)
47
51
 
48
52
  The pipeline is: create → audit → enhance → plan → implement. Audit, enhance, and a plan are **mandatory** — no RFC may proceed to implementation without all three being completed. The RFC must also be `accepted` — this skill does not transition `draft` to `accepted`; that is the responsibility of `fo-idea-plan`.
49
53
 
50
54
  Before running the implementation on each RFC, perform these checks **in order**. If any check fails, record the RFC as **skipped** in the batch summary with the reason, and immediately proceed to the next RFC in the batch. Do not stop the entire batch — skip and report.
51
55
 
52
- 1. **Prefix check** — if the id starts with `ADR-`, this is not an RFC. Skip with message: `ADR-XXXX is an ADR, not an RFC. Use the ADR implementation flow (step 4 below) for ADR-XXXX.`
56
+ 1. **Prefix check** — if the id starts with `ADR-`, this is not an RFC. Skip with message: `ADR-XXXX is an ADR, not an RFC. Use the ADR implementation flow (step 5 below) for ADR-XXXX.`
53
57
  2. **RFC file exists** — look for `docs/rfcs/rfc-XXXX-*.md`. If no file is found, skip with message: `RFC-XXXX not found in docs/rfcs/. Run /fo-idea-create-rfc first.`
54
58
  3. **Terminal status check** — read the RFC's `status` frontmatter. If the status is `implemented`, skip with message: `RFC-XXXX is already implemented. Nothing to do.` If the status is `rejected` or `superseded`, skip with message: `RFC-XXXX is <status> (terminal). Terminal RFCs cannot be implemented. To change this decision, create a new RFC with supersedes: [RFC-XXXX] via /fo-idea-create-rfc.`
55
59
  4. **Audit check** — look for `docs/audits/audit-rfc-XXXX-*.md`. If no audit file exists, skip with message: `No audit report found for RFC-XXXX in docs/audits/. Run /fo-idea-audit RFC-XXXX first. The pipeline is: create → audit → enhance → plan → implement.`
@@ -57,15 +61,15 @@ Before running the implementation on each RFC, perform these checks **in order**
57
61
  6. **Accepted status check** — if the status is not `accepted` (e.g. `draft` or `reviewing`), skip with message: `RFC-XXXX is <status>, not accepted. Run /fo-idea-plan RFC-XXXX first — it will transition the RFC to accepted and create the plan. The pipeline is: create → audit → enhance → plan → implement.`
58
62
  7. **Plan check** — look for `docs/plans/plan-rfc-XXXX-*.md`. If no plan file exists, skip with message: `No plan file found for RFC-XXXX in docs/plans/. Run /fo-idea-plan RFC-XXXX first. The pipeline is: create → audit → enhance → plan → implement.`
59
63
 
60
- If all checks pass, proceed to step 3.2.
64
+ If all checks pass, proceed to step 4.2.
61
65
 
62
- #### 3.2. Read the RFC and related context
66
+ #### 4.2. Read the RFC and related context
63
67
 
64
68
  Read the RFC fully and all RFCs listed in its `amends[]`, `related[]`, and `supersedes[]`. Read the plan fully. Read the closest `AGENTS.md` for each impacted package. Read `ref(forge.yaml bindings.paths.invariantsFile)` entries for every DNA invariant in `satisfies[]`.
65
69
 
66
70
  If the plan or RFC has genuine ambiguities that would cause wrong implementation, ask the user **before starting implementation**. Use `ask_user_question` with a recommended option first. Once implementation begins, stop asking — make autonomous decisions.
67
71
 
68
- #### 3.3. Implement step by step
72
+ #### 4.3. Implement step by step
69
73
 
70
74
  Execute the plan's step sequence in order. For each step:
71
75
 
@@ -96,7 +100,7 @@ Stage only the files touched by this step. Do not stage unrelated changes — an
96
100
  - **Compass scaffolding.** New non-trivial source files in `apps/` or `packages/` must carry `MODULE_CONTRACT` and `CHANGE_SUMMARY` scaffolding. Check the project's invariants file for the canonical Compass markup rule.
97
101
  - **Compass terminology.** Use Compass (not GRACE) in all new code, documentation, and log messages.
98
102
 
99
- #### 3.4. Run heavy checks
103
+ #### 4.4. Run heavy checks
100
104
 
101
105
  After **all** plan steps are complete, run the heavy validation suite in order:
102
106
 
@@ -122,9 +126,9 @@ Use the `packagesImpacted` and `appsImpacted` frontmatter lists to determine whi
122
126
 
123
127
  **Do not run a full root `root build` or `turbo run build`.** The success criterion is that all impacted workspaces pass their scoped checks, not that the entire ecosystem builds. See root AGENTS.md §Build verification discipline.
124
128
 
125
- #### 3.5. Fix errors
129
+ #### 4.5. Fix errors
126
130
 
127
- If any check in step 3.4 fails, fix every error:
131
+ If any check in step 4.4 fails, fix every error:
128
132
 
129
133
  1. Read the error output.
130
134
  2. Identify the root cause.
@@ -142,7 +146,7 @@ If any check in step 3.4 fails, fix every error:
142
146
 
143
147
  Continue until all impacted checks pass.
144
148
 
145
- #### 3.6. Check acceptance criteria
149
+ #### 4.6. Check acceptance criteria
146
150
 
147
151
  Read the RFC's `## Acceptance criteria` section. For each checkbox:
148
152
 
@@ -153,9 +157,9 @@ Read the RFC's `## Acceptance criteria` section. For each checkbox:
153
157
  5. **If a criterion cannot be met** (e.g., requires an external dependency not yet available, requires a pilot that is not registered), do NOT mark it `[x]` and do NOT stamp `implemented`. Instead, split the deferred work into a follow-up RFC via `rfc.supersede.propose`. An RFC with unchecked `[ ]` criteria cannot transition to `implemented` — this is enforced by V-26.
154
158
  6. **Ensure `reviewers` is non-empty** — `rfc.validate` enforces V-25: implemented RFCs with an empty `reviewers` field fail validation. Add at least one reviewer (e.g. `human:<name>`) before stamping `implemented`.
155
159
 
156
- Do not proceed to step 3.7 until every acceptance criterion checkbox is checked with evidence.
160
+ Do not proceed to step 4.7 until every acceptance criterion checkbox is checked with evidence.
157
161
 
158
- #### 3.7. Run acceptance probes and emit evidence
162
+ #### 4.7. Run acceptance probes and emit evidence
159
163
 
160
164
  If the RFC declares `acceptance:` probes in frontmatter:
161
165
 
@@ -181,7 +185,7 @@ Emit per-RFC verification evidence for RFC-XXXX implementation.
181
185
 
182
186
  Stage `docs/rfcs/verification/rfc-xxxx.generated.json`.
183
187
 
184
- #### 3.8. Stamp implemented
188
+ #### 4.8. Stamp implemented
185
189
 
186
190
  Transition the RFC to `implemented` using the `rfc.implement.stamp` command. Direct edits to `status`, `implementedAt`, and `updatedAt` are prohibited for all actors.
187
191
 
@@ -208,7 +212,7 @@ Transition the RFC to `implemented` using the `rfc.implement.stamp` command. Dir
208
212
 
209
213
  Stage only the RFC file. The implementation commit and the stamp commit MUST be separate.
210
214
 
211
- #### 3.8b. Regenerate command manifest (MANDATORY)
215
+ #### 4.8b. Regenerate command manifest (MANDATORY)
212
216
 
213
217
  If the RFC added, changed, or removed commands (check `commands.added`, `commands.changed`, `commands.removed` in the RFC frontmatter), regenerate the command manifest so that `rfc.validate` does not report `RFC-CMD-02` (command listed but not registered):
214
218
 
@@ -228,26 +232,26 @@ If the RFC has no `commands.*` changes (e.g. it only changes schemas, docs, or i
228
232
 
229
233
  This step is MANDATORY for any RFC with `commands.added`, `commands.changed`, or `commands.removed`. A stale manifest causes `RFC-CMD-02` violations that block `rfc.validate` for all implemented RFCs.
230
234
 
231
- #### 3.9. Documentation audit (fo-doc-audit)
235
+ #### 4.9. Documentation audit (fo-doc-audit)
232
236
 
233
237
  After implementation is complete and all checks pass, invoke `fo-doc-audit` via the `skill` tool. It analyzes the session's changes, checks all documentation surfaces (AGENTS.md, README, Compass XML, architecture-dna.md, templates, generated artifacts, COMMANDS.md/PACKAGE_GRAPH.md), applies needed updates, and commits them separately. Wait for it to complete.
234
238
 
235
239
  If `fo-doc-audit` reports that no updates are needed, proceed to the next step.
236
240
 
237
- #### 3.10. Code review (fo-review)
241
+ #### 4.10. Code review (fo-review)
238
242
 
239
243
  After the documentation audit, invoke `fo-review` via the `skill` tool. It performs a cross-session fitness check of the code diff against Forge standards (DNA, forward-only, Compass, agent clarity, pragmatism). The review covers all code changes made in this session since the first implementation commit.
240
244
 
241
245
  1. Determine the diff range: `git diff <merge-base-of-session>...HEAD` — where merge-base is the commit before the first `implement:` commit for this RFC.
242
246
  2. Invoke `fo-review` with the diff range. Wait for it to complete (persist + commit the review report in `docs/reviews/code/`).
243
- 3. Read the review report. If the verdict is `approved` **and** the report contains zero findings across all axes, proceed to step 3.12.
244
- 4. If the review has **any** findings — even a single cosmetic observation on any axis — proceed to step 3.11 (fix). Do not interpret an `approved` verdict as "no findings" — read the axis sections and count every finding, including ones labelled "minor" or "cosmetic".
247
+ 3. Read the review report. If the verdict is `approved` **and** the report contains zero findings across all axes, proceed to step 4.12.
248
+ 4. If the review has **any** findings — even a single cosmetic observation on any axis — proceed to step 4.11 (fix). Do not interpret an `approved` verdict as "no findings" — read the axis sections and count every finding, including ones labelled "minor" or "cosmetic".
245
249
 
246
250
  **This step is MANDATORY.** Do not skip it, even if the implementation seems clean. The review is the quality gate that catches DNA misalignment, forward-only violations, Compass drift, and agent clarity issues that implementation authors miss.
247
251
 
248
- #### 3.11. Fix review findings (fo-fix)
252
+ #### 4.11. Fix review findings (fo-fix)
249
253
 
250
- If `fo-review` (step 3.10) reported **any** findings (even cosmetic ones on axes A/C/F/G), invoke `fo-fix` via the `skill` tool. It applies the review findings iteratively: fix → typecheck → commit → re-check.
254
+ If `fo-review` (step 4.10) reported **any** findings (even cosmetic ones on axes A/C/F/G), invoke `fo-fix` via the `skill` tool. It applies the review findings iteratively: fix → typecheck → commit → re-check.
251
255
 
252
256
  1. Invoke `fo-fix` with the review report. Wait for it to complete.
253
257
  2. After `fo-fix` returns, re-run `fo-review` to confirm all findings are resolved.
@@ -256,18 +260,18 @@ If `fo-review` (step 3.10) reported **any** findings (even cosmetic ones on axes
256
260
 
257
261
  If `fo-review` reported truly zero findings (the report explicitly states "No issues." on every axis), skip this step. An `approved` verdict with any finding text on any axis does NOT qualify as zero findings.
258
262
 
259
- #### 3.11b. Implementation status gate (RFC)
263
+ #### 4.11b. Implementation status gate (RFC)
260
264
 
261
265
  Before reporting completion, verify the RFC has been stamped as `implemented`:
262
266
 
263
267
  1. Read the RFC frontmatter — confirm `status: implemented` and `implementedAt` is set.
264
268
  2. Run `ref(forge.yaml bindings.commands.validateRfc) --id RFC-XXXX --json` — confirm zero errors.
265
- 3. If status is not `implemented`, go back to step 3.8 (Stamp implemented) and run the stamp command.
269
+ 3. If status is not `implemented`, go back to step 4.8 (Stamp implemented) and run the stamp command.
266
270
  4. If `rfc.validate` reports errors, fix them before proceeding.
267
271
 
268
- This gate is MANDATORY. Do not proceed to step 3.12 (report) until the RFC is `implemented`.
272
+ This gate is MANDATORY. Do not proceed to step 4.12 (report) until the RFC is `implemented`.
269
273
 
270
- #### 3.12. RFC report
274
+ #### 4.12. RFC report
271
275
 
272
276
  After implementation is complete, report in `aiLanguage`. **Translate all labels and headings to `aiLanguage`** — the template below is structural only. Only identifiers (RFC-XXXX, file paths, skill names) stay untranslated.
273
277
 
@@ -284,11 +288,11 @@ After implementation is complete, report in `aiLanguage`. **Translate all labels
284
288
  ### Status: implemented (<date>)
285
289
  ```
286
290
 
287
- ### 4. ADR implementation flow
291
+ ### 5. ADR implementation flow
288
292
 
289
293
  Execute this flow when the document is an ADR (prefix `ADR-`, or file in `docs/adrs/`).
290
294
 
291
- #### 4.1. Read the ADR
295
+ #### 5.1. Read the ADR
292
296
 
293
297
  Read the ADR file. Extract:
294
298
 
@@ -298,7 +302,7 @@ Read the ADR file. Extract:
298
302
  - **Consequences** — what the decision implies for the codebase.
299
303
  - **Related** — any RFCs, ADRs, or DNA invariants referenced.
300
304
 
301
- #### 4.2. Transition to accepted (if needed)
305
+ #### 5.2. Transition to accepted (if needed)
302
306
 
303
307
  If the ADR is `proposed` or `reviewing`, transition it to `accepted`:
304
308
 
@@ -317,7 +321,7 @@ If the ADR is `proposed` or `reviewing`, transition it to `accepted`:
317
321
 
318
322
  If the ADR is already `accepted`, proceed directly.
319
323
 
320
- #### 4.3. Implement the decision
324
+ #### 5.3. Implement the decision
321
325
 
322
326
  Read the `## Decision` section and implement it in code. **For each decision point, verify whether the code already exists** — ADRs may declare fields or extensions that related RFCs did not fully implement. Do not assume associated RFCs covered everything; check each decision against the actual codebase and implement any gaps. Follow the same principles as RFC implementation:
323
327
 
@@ -335,7 +339,7 @@ Read the `## Decision` section and implement it in code. **For each decision poi
335
339
 
336
340
  - If a tool call fails with a recoverable error, recover autonomously: split content, use `edit`/`multi_edit`, decompose files, and retry immediately.
337
341
 
338
- #### 4.4. Run scoped build checks
342
+ #### 5.4. Run scoped build checks
339
343
 
340
344
  After implementation is complete, run heavy checks for the impacted workspaces only:
341
345
 
@@ -359,7 +363,7 @@ After implementation is complete, run heavy checks for the impacted workspaces o
359
363
 
360
364
  **MUST NOT run a full root `root build` or `turbo run build`.** Only check the workspaces this ADR touches. See root AGENTS.md §Build verification discipline.
361
365
 
362
- #### 4.5. Fix errors
366
+ #### 5.5. Fix errors
363
367
 
364
368
  If any check fails, fix every error:
365
369
 
@@ -377,26 +381,26 @@ If any check fails, fix every error:
377
381
 
378
382
  Continue until all impacted checks pass.
379
383
 
380
- #### 4.6. Documentation audit (fo-doc-audit)
384
+ #### 5.6. Documentation audit (fo-doc-audit)
381
385
 
382
386
  After implementation is complete and all checks pass, invoke `fo-doc-audit` via the `skill` tool. It analyzes the session's changes, checks all documentation surfaces, applies needed updates, and commits them separately. Wait for it to complete.
383
387
 
384
388
  If `fo-doc-audit` reports that no updates are needed, proceed to the next step.
385
389
 
386
- #### 4.7. Code review (fo-review)
390
+ #### 5.7. Code review (fo-review)
387
391
 
388
392
  After the documentation audit, invoke `fo-review` via the `skill` tool. It performs a cross-session fitness check of the code diff against Forge standards. The review covers all code changes made in this session.
389
393
 
390
394
  1. Determine the diff range: `git diff <merge-base-of-session>...HEAD`.
391
395
  2. Invoke `fo-review` with the diff range. Wait for it to complete (persist + commit the review report).
392
- 3. Read the review report. If the verdict is `approved` **and** the report contains zero findings across all axes, proceed to step 4.9.
393
- 4. If the review has **any** findings — even a single cosmetic observation on any axis — proceed to step 4.8 (fix). Do not interpret an `approved` verdict as "no findings" — read the axis sections and count every finding.
396
+ 3. Read the review report. If the verdict is `approved` **and** the report contains zero findings across all axes, proceed to step 5.9.
397
+ 4. If the review has **any** findings — even a single cosmetic observation on any axis — proceed to step 5.8 (fix). Do not interpret an `approved` verdict as "no findings" — read the axis sections and count every finding.
394
398
 
395
399
  **This step is MANDATORY.** Do not skip it.
396
400
 
397
- #### 4.8. Fix review findings (fo-fix)
401
+ #### 5.8. Fix review findings (fo-fix)
398
402
 
399
- If `fo-review` (step 4.7) reported **any** findings (even cosmetic ones), invoke `fo-fix` via the `skill` tool.
403
+ If `fo-review` (step 5.7) reported **any** findings (even cosmetic ones), invoke `fo-fix` via the `skill` tool.
400
404
 
401
405
  1. Invoke `fo-fix` with the review report. Wait for it to complete.
402
406
  2. After `fo-fix` returns, re-run `fo-review` to confirm all findings are resolved.
@@ -405,7 +409,7 @@ If `fo-review` (step 4.7) reported **any** findings (even cosmetic ones), invoke
405
409
 
406
410
  If `fo-review` reported truly zero findings (the report explicitly states "No issues." on every axis), skip this step. An `approved` verdict with any finding text on any axis does NOT qualify as zero findings.
407
411
 
408
- #### 4.9. ADR code-trace
412
+ #### 5.9. ADR code-trace
409
413
 
410
414
  Before stamping `implemented`, verify that the ADR is mentioned in the codebase — this leaves a trace linking code back to the decision record, just as RFCs leave traces.
411
415
 
@@ -413,7 +417,7 @@ Before stamping `implemented`, verify that the ADR is mentioned in the codebase
413
417
  - **COMPASS block comments** — `MODULE_CONTRACT`, `CHANGE_SUMMARY`, or other Compass scaffolding comments that reference the ADR id.
414
418
  - **Inline code mentions** — comments, docstrings, or annotations in source files that reference the ADR id.
415
419
 
416
- 2. **If mentions are found** — the trace exists. Proceed to step 4.10.
420
+ 2. **If mentions are found** — the trace exists. Proceed to step 5.10.
417
421
 
418
422
  3. **If no mentions are found** — attempt to find the most relevant file(s) where the decision was implemented. If the file(s) can be identified:
419
423
  - Add a Compass block comment referencing the ADR id to the file's `MODULE_CONTRACT` or `CHANGE_SUMMARY` section. For example: `<item>ADR-XXXX: <brief note on what this ADR decided for this module.</item>`
@@ -426,13 +430,13 @@ Before stamping `implemented`, verify that the ADR is mentioned in the codebase
426
430
  Add ADR-XXXX reference to <file> to link the decision to the code.
427
431
  ```
428
432
 
429
- - Proceed to step 4.10.
433
+ - Proceed to step 5.10.
430
434
 
431
435
  4. **If the relevant file(s) cannot be identified** — ask the operator: `ADR-XXXX was implemented but no code mention was found. Please point to the file(s) where this ADR's decision was applied so I can add a trace reference.` After the operator provides the file(s), add the trace as described in step 3, commit, and proceed.
432
436
 
433
437
  **For already-implemented ADRs** (if this step is reached for an ADR that was already `implemented`): this check is informational — attempt to find the trace and add it if missing, but do not block on it.
434
438
 
435
- #### 4.10. Stamp implemented
439
+ #### 5.10. Stamp implemented
436
440
 
437
441
  After all checks pass and documentation is updated, transition the ADR to `implemented` using `adr.implement.stamp` as required by the ADR lifecycle contract. Direct edits to ADR `status`, `implementedAt`, and `updatedAt` are prohibited — use the stamp command instead.
438
442
 
@@ -456,18 +460,18 @@ After all checks pass and documentation is updated, transition the ADR to `imple
456
460
 
457
461
  Stage only the ADR file. The implementation commit and the stamp commit MUST be separate.
458
462
 
459
- #### 4.10b. Implementation status gate (ADR)
463
+ #### 5.10b. Implementation status gate (ADR)
460
464
 
461
465
  Before reporting completion, verify the ADR has been transitioned to `implemented`:
462
466
 
463
467
  1. Read the ADR frontmatter — confirm `status: implemented` and `implementedAt` is set.
464
468
  2. Run `ref(forge.yaml bindings.commands.validateAdr) --id ADR-XXXX --json` — confirm zero errors.
465
- 3. If status is not `implemented`, go back to step 4.10 (Stamp implemented) and run `adr.implement.stamp`.
469
+ 3. If status is not `implemented`, go back to step 5.10 (Stamp implemented) and run `adr.implement.stamp`.
466
470
  4. If `adr.validate` reports errors, fix them before proceeding.
467
471
 
468
- This gate is MANDATORY. Do not proceed to step 4.11 (report) until the ADR is `implemented`.
472
+ This gate is MANDATORY. Do not proceed to step 5.11 (report) until the ADR is `implemented`.
469
473
 
470
- #### 4.11. Report
474
+ #### 5.11. Report
471
475
 
472
476
  After implementation is complete, report in `aiLanguage`. **Translate all labels and headings to `aiLanguage`** — the template below is structural only.
473
477
 
@@ -482,7 +486,7 @@ After implementation is complete, report in `aiLanguage`. **Translate all labels
482
486
  ### Status: implemented (<date>)
483
487
  ```
484
488
 
485
- ### 5. Batch summary
489
+ ### 6. Batch summary
486
490
 
487
491
  If multiple documents were processed, present a single batch summary at the very end in `aiLanguage`. **Translate all labels, headings, and column names to `aiLanguage`** — the template below is structural only.
488
492
 
@@ -518,5 +522,5 @@ When an RFC was planned in this session, prefer implementing it in this session
518
522
  - **Do not weaken DNA invariants.** If implementation reveals an invariant conflict, escalate via `rfc.supersede.propose` instead of working around it.
519
523
  - **Compass scaffolding on new files.** Non-trivial new source files in `apps/` or `packages/` must carry `MODULE_CONTRACT` and `CHANGE_SUMMARY`. Check the project's invariants file for the canonical Compass markup rule.
520
524
  - **Compass terminology, not GRACE.** Use Compass in all new code, docs, and log messages.
521
- - **Review and fix are MANDATORY.** After implementation and doc-audit, always run `fo-review` (step 3.10 / 4.7) and `fo-fix` (step 3.11 / 4.8) if **any** findings exist in the review report — including cosmetic or minor findings. Do not stamp `implemented` without a review report in `docs/reviews/code/`. An `approved` verdict does NOT mean "skip fix" — read every axis section and count every finding. This is the quality gate that catches DNA misalignment, forward-only violations, and Compass drift.
525
+ - **Review and fix are MANDATORY.** After implementation and doc-audit, always run `fo-review` (step 4.10 / 5.7) and `fo-fix` (step 4.11 / 5.8) if **any** findings exist in the review report — including cosmetic or minor findings. Do not stamp `implemented` without a review report in `docs/reviews/code/`. An `approved` verdict does NOT mean "skip fix" — read every axis section and count every finding. This is the quality gate that catches DNA misalignment, forward-only violations, and Compass drift.
522
526
  - **No `draft → accepted` transition for RFCs.** This skill requires RFC `status: accepted` and does not transition RFCs. Use `/fo-idea-plan` for that transition.
@@ -178,10 +178,10 @@ For each identified RFC, read the frontmatter `status` field from `docs/rfcs/rfc
178
178
 
179
179
  | Option | Description |
180
180
  | --- | --- |
181
- | Complete now | The agent proceeds to finish the remaining `fo-idea-implement` steps (3.6–3.8: check acceptance criteria with evidence, stamp implemented). This may require running validators, fixing errors, and committing the stamp. |
181
+ | Complete now | The agent proceeds to finish the remaining `fo-idea-implement` steps (4.6–4.8: check acceptance criteria with evidence, stamp implemented). This may require running validators, fixing errors, and committing the stamp. |
182
182
  | Leave as-is | The operator explicitly acknowledges the RFC remains in its current non-terminal status with unchecked acceptance criteria. No further action is taken on the RFC. |
183
183
 
184
- If the operator chooses "Complete now", execute `fo-idea-implement` steps 3.6–3.8 for that RFC before proceeding. If multiple RFCs are in this state, ask about each one (or present them as a batch with `allowMultiple: true`).
184
+ If the operator chooses "Complete now", execute `fo-idea-implement` steps 4.6–4.8 for that RFC before proceeding. If multiple RFCs are in this state, ask about each one (or present them as a batch with `allowMultiple: true`).
185
185
 
186
186
  **4d. Report:**
187
187
 
@@ -76,7 +76,7 @@ The agent updates `.agents/operator-profile.md` immediately when the operator ex
76
76
  The current register is **{{register}}**.
77
77
 
78
78
  - **Business register:** core behavioral layer only — professional, efficient communication.
79
- - **Creative register:** core + extended behavioral layer (RFC-0549) — creative partnership, emotional support, companion mode.
79
+ - **Creative register:** core + extended behavioral layer — creative partnership, emotional support, companion mode.
80
80
  - The register can be changed at any time via live operator feedback. The change takes effect immediately.
81
81
 
82
82
  ### Pushback policy
@@ -110,7 +110,7 @@ The agent handles performance, accessibility, SEO, and optimization automaticall
110
110
 
111
111
  ### First creation moment
112
112
 
113
- The first creation moment is special — the agent celebrates the operator's first creation and sets a welcoming tone. See RFC-0547 for the first-creation-moment protocol.
113
+ The first creation moment is special — the agent celebrates the operator's first creation and sets a welcoming tone.
114
114
 
115
115
  ### Creative health and time awareness
116
116
 
@@ -152,8 +152,7 @@ Everything the operator creates belongs to them. The agent makes ownership expli
152
152
  In the creative register, the agent commits all changes automatically after each completed logical step (e.g. after implementing a feature, after fixing a bug, after creating a file). The operator is never asked about git, commits, or version control. No dirty files remain at any pause point. In the business register, the agent asks before committing.
153
153
 
154
154
  - **Auto-commit does not skip verification** — the agent still runs typecheck/build before committing. Auto-commit means the agent does not ask for permission, not that it skips quality checks.
155
- - **Auto-commit does not fire in companion mode** (RFC-0549) — companion mode is pure creative exploration without code changes, so there is nothing to commit.
156
- - **Auto-commit applies to forge projects** (bootstrapped projects using `forge create`). It does not affect Warpgogol mission workpiece commits, which use `mission.git.commit` per the mission lifecycle.
157
- - **RFC implementation preserves separate commits** — the separate implementation commit and RFC stamp commit pattern is preserved. Auto-commit fires after the implementation step, and the stamp is a separate commit.
155
+ - **Auto-commit does not fire in companion mode** — companion mode is pure creative exploration without code changes, so there is nothing to commit.
156
+ - **Auto-commit applies to forge projects** (bootstrapped projects using `forge create`).
158
157
 
159
158
  {{extendedLayer}}<!-- forge:end behavioral-layer -->