@jamie-tam/forge 6.0.0 → 6.1.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.
Files changed (61) hide show
  1. package/README.md +73 -59
  2. package/agents/dreamer.md +5 -6
  3. package/agents/gotcha-hunter.md +1 -1
  4. package/agents/prototype-codifier.md +2 -2
  5. package/commands/{forge.md → discover.md} +11 -9
  6. package/commands/feature.md +50 -8
  7. package/commands/{evolve.md → forge-evolve.md} +3 -3
  8. package/commands/greenfield.md +5 -5
  9. package/commands/note.md +64 -0
  10. package/commands/{task-force.md → parallel.md} +15 -15
  11. package/commands/resume.md +2 -2
  12. package/commands/setup.md +18 -17
  13. package/commands/status.md +2 -2
  14. package/dist/__tests__/hooks.test.js +334 -0
  15. package/dist/__tests__/init.test.js +110 -0
  16. package/dist/__tests__/work-manifest.test.js +48 -14
  17. package/dist/cli.js +0 -0
  18. package/dist/hooks.js +88 -6
  19. package/dist/init.js +39 -1
  20. package/dist/uninstall.js +11 -5
  21. package/dist/work-manifest.js +63 -24
  22. package/hooks/hooks.json +14 -1
  23. package/hooks/scripts/pre-compact.sh +3 -6
  24. package/hooks/scripts/session-start.sh +1 -1
  25. package/hooks/templates/CLAUDE.md.template +6 -3
  26. package/package.json +1 -1
  27. package/references/common/phases.md +8 -6
  28. package/references/common/skill-authoring.md +1 -1
  29. package/rules/common/forge-system.md +42 -4
  30. package/skills/build-prototype/SKILL.md +4 -4
  31. package/skills/build-tdd/SKILL.md +14 -0
  32. package/skills/concept-slides/SKILL.md +11 -11
  33. package/skills/deliver-deploy/SKILL.md +1 -1
  34. package/skills/harden/SKILL.md +6 -6
  35. package/skills/quality-test-execution/SKILL.md +26 -1
  36. package/skills/quality-test-plan/SKILL.md +21 -1
  37. package/skills/support-debug/SKILL.md +1 -1
  38. package/skills/support-dream/SKILL.md +5 -5
  39. package/skills/support-gotcha/SKILL.md +3 -3
  40. package/skills/{support-task-force → support-parallel}/SKILL.md +22 -22
  41. package/skills/{support-task-force → support-parallel}/references/dispatch-pattern.md +10 -10
  42. package/skills/{support-task-force → support-parallel}/references/synthesis-template.md +10 -10
  43. package/skills/support-skill-validator/SKILL.md +5 -5
  44. package/skills/support-skill-validator/references/validation-checks.md +1 -1
  45. package/skills/support-system-guide/SKILL.md +4 -3
  46. package/skills/support-wiki-lint/scripts/lint.mjs +52 -0
  47. package/templates/README.md +1 -1
  48. package/templates/aiwiki/schemas/session.md +15 -14
  49. package/templates/manifests/bugfix.yaml +1 -1
  50. package/templates/manifests/feature.yaml +1 -1
  51. package/templates/manifests/greenfield.yaml +1 -1
  52. package/templates/manifests/hotfix.yaml +1 -1
  53. package/templates/manifests/refactor.yaml +1 -1
  54. package/templates/manifests/v5/SCHEMA.md +14 -17
  55. package/templates/manifests/v5/feature.yaml +1 -1
  56. package/templates/manifests/v6/SCHEMA.md +14 -10
  57. package/commands/abort.md +0 -25
  58. package/dist/__tests__/active-manifest.test.js +0 -272
  59. package/dist/__tests__/gate-check.test.js +0 -384
  60. package/dist/active-manifest.js +0 -229
  61. package/dist/gate-check.js +0 -326
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Forge system structure — skills (prefix-grouped), commands (orchestrate skills), .forge/ directory layout, context recovery. Auto-loaded every session so agents know the system they're operating in.
2
+ description: Forge system structure — skills (prefix-grouped), commands (orchestrate skills), .forge/ directory layout, aiwiki/ knowledge layer, context recovery. Auto-loaded every session so agents know the system they're operating in.
3
3
  ---
4
4
 
5
5
  # Forge System
@@ -23,14 +23,15 @@ v6 also adds phase skills: concept-slides, build-wireframe, build-prototype, ite
23
23
 
24
24
  | Command | When to use |
25
25
  |---------|------------|
26
- | `/forge` | One-screen discovery — installed capabilities, active work, suggested next |
26
+ | `/discover` | One-screen discovery — installed capabilities, active work, suggested next |
27
27
  | `/setup` | Detect stack, install matching language rules, and fill the project profile |
28
28
  | `/feature` | Full feature development |
29
29
  | `/greenfield` | New project from zero |
30
30
  | `/bugfix` | Fix a bug |
31
31
  | `/refactor` | Improve existing code |
32
32
  | `/hotfix` | Emergency production fix |
33
- | `/evolve` | Improve the forge system itself |
33
+ | `/note <text>` | Capture an ad-hoc research note or brainstorm to `aiwiki/raw/{date}.md` |
34
+ | `/forge-evolve` | Improve the forge system itself |
34
35
  | `/validate` | Check skill consistency |
35
36
 
36
37
  ## .forge/ Directory
@@ -46,10 +47,47 @@ v6 also adds phase skills: concept-slides, build-wireframe, build-prototype, ite
46
47
  state/ # Runtime state (notepad.md, telemetry, dream history)
47
48
  ```
48
49
 
49
- Project knowledge (ADRs, gotchas) lives under `aiwiki/` — see `aiwiki/decisions/` and `aiwiki/gotchas/`. The `.forge/` directory retains operational state only (manifests, telemetry, dream history).
50
+ The `.forge/` directory retains operational state only (manifests, telemetry, dream history). Project knowledge lives in `aiwiki/` (next section).
50
51
 
51
52
  Work items are identified by `{type}/{name}` — names may collide across types.
52
53
 
54
+ ## aiwiki/ (knowledge layer)
55
+
56
+ `aiwiki/` accumulates lasting project knowledge — separate from `.forge/` which is operational state. Subagents read these pages to inform their work, so the typed pages have schemas enforced by `wiki-lint`.
57
+
58
+ | Page type | Purpose | Written by |
59
+ |---|---|---|
60
+ | `decisions/` | ADRs — architecture decisions + rationale | `plan-brainstorm`, `harden`, manual |
61
+ | `gotchas/` | Recurring failure modes with reproducible fixes | `iterate-prototype`, `quality-code-review`, manual |
62
+ | `conventions/` | Established patterns in this codebase | `iterate-prototype`, `harden`, manual |
63
+ | `architecture/` | Component maps, sequence diagrams | `harden`, manual |
64
+ | `sessions/` | Per-session work notes (index-of-links) | manual or `harden` at codify; session-checkpoint hooks deferred |
65
+ | `oracle/` | Trusted external references (RFCs, vendor docs) | manual |
66
+ | `raw/` | Append-only research/brainstorm capture (no schema) | `/note <text>`, manual |
67
+
68
+ **Auto-capture during phases.** `iterate-prototype` (Phase 4) writes gotchas and conventions surfaced during prototype iteration. Phases 1 (concept) and 2 (wireframe) have **no auto-capture** — use `/note <text>` to land research/brainstorm in `aiwiki/raw/{date}.md`.
69
+
70
+ **Lint** (`wiki-lint` PostToolUse hook). Fires on every `aiwiki/**.md` write (Edit/Write/MultiEdit). Validates frontmatter, required H2 sections, line caps, citation hash drift, and possible-secret patterns in cited content against the page's schema. Skips `aiwiki/raw/` (no schema) and `aiwiki/proposed/` (lint runs there separately at dream-complete). Findings surface on stderr — non-blocking, but the next edit should address them.
71
+
72
+ **Dream** (`support-dream` skill). Async consolidation:
73
+ - **PreCompact** (~85% context): consolidates `aiwiki/raw/` + recently-touched typed pages before lossy compaction. (Session-file refinement deferred until session-checkpoint hooks ship — see `aiwiki/sessions/` row above.)
74
+ - **Phase-close** (Phase 4/5/6/7 lock): promotes phase outputs into curated wiki state. The next phase **blocks** until the user reviews the proposed dream.
75
+ - **Manual `/dream`**: user-driven cleanup.
76
+
77
+ Dream outputs to `aiwiki/proposed/{dream_id}/` — input store is never modified. User atomically accepts (swap) or rejects (discard) via `forge wiki accept` / `reject`.
78
+
79
+ ### When the AI should write to aiwiki
80
+
81
+ The default is **don't**. The user-customizable `aiwiki/CLAUDE.md` (auto-loaded when `aiwiki/` is scaffolded by `/setup`) carries the per-page-type writing rules; respect them. Three reminders that override any temptation to over-capture:
82
+
83
+ 1. **Never write speculation, conversation history, or "we might want to revisit this" notes.** This is the strongest rule in `aiwiki/CLAUDE.md`. Wiki pages answer recurring questions; conversational asides do not.
84
+ 2. **Typed pages need durable, reusable knowledge.** Decisions go to `aiwiki/decisions/` only after the decision is finalized (architectural, public-surface, security, schema, or other hard-to-reverse choice). Gotchas to `aiwiki/gotchas/` only when the failure mode is reproducible with a concrete fix. Conventions to `aiwiki/conventions/` only when the pattern is established across multiple sites. If the knowledge isn't yet durable, it doesn't belong in a typed page.
85
+ 3. **Ad-hoc research, half-formed thoughts, deferred decisions, comparison notes — these go to `aiwiki/raw/` ONLY when the user explicitly invokes `/note <text>`.** The AI does not autonomously decide to write conversational content to raw. The user is the gate.
86
+
87
+ If a typed-page-worthy insight emerges mid-conversation (e.g., "this is a real gotcha"), you MAY write it to the correct typed page — but only if it meets that page's durability test. When in doubt, ask the user.
88
+
89
+ **Session-end handoff.** Forge has no automated session-end capture mechanism. If a session produced durable knowledge that warrants persisting, the AI should OFFER to write the appropriate typed pages before ending the session — never silently. The user accepts or declines.
90
+
53
91
  ## Context Recovery
54
92
 
55
93
  If `.forge/state/notepad.md` exists, read it FIRST before doing anything else.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: build-prototype
3
- description: "Use to scaffold a working POC from a locked wireframe. Produces a runnable Vite + React + TS app at pocs/{name}-prototype/ with seed data, in-memory state, and screens that mirror the wireframe states. The prototype is the verification surface for concept + UX before any production code is written."
3
+ description: "Use to scaffold a working POC from a locked wireframe — triggered by phrases like 'build the prototype', 'scaffold the POC', 'wireframe is locked, start the prototype', 'turn the wireframe into something I can run', 'make it interactive', or by the wireframe-lock event in /feature and /greenfield (Phase 2 → Phase 3 transition). Produces a runnable Vite + React + TS + Tailwind + Zustand app at pocs/{name}-prototype/ with seed data, in-memory state, and screens mirroring the wireframe's locked states. The prototype is the verification surface for concept + UX before any production code is written. Skip if the wireframe is not locked (run build-wireframe first), if a prototype already exists at the target path (use iterate-prototype for changes), or if the work is production code under TDD (use build-tdd at Phase 6)."
4
4
  ---
5
5
 
6
6
  # Build Prototype
@@ -15,7 +15,7 @@ Once a wireframe is locked, the prototype turns it into something the user can r
15
15
 
16
16
  ## When to Use
17
17
 
18
- - Phase 4 of a prototype-driven flow (after wireframe is locked, before Phase 5 codification)
18
+ - Phase 3 of a prototype-driven flow (after wireframe is locked, before Phase 4 iteration and Phase 5 codification)
19
19
  - For `/feature` on existing apps: scaffold a `pocs/{feature-name}-prototype/` mini-prototype branch of the existing app's tech stack — same skill, smaller scope
20
20
  - Ad-hoc when a wireframe is mature enough to validate via running code
21
21
 
@@ -176,7 +176,7 @@ Capture findings in `pocs/{name}-prototype/.forge/feedback.md` if there's any dr
176
176
 
177
177
  ### Step 5: side-effect capture during iteration
178
178
 
179
- Phase 4 is also when real gotchas + conventions emerge. During iteration:
179
+ Phase 3 (prototype build) and Phase 4 (iteration) are when real gotchas + conventions emerge. During the build and iteration cycles:
180
180
 
181
181
  - **Gotchas**: every time prototype-builder hits a state-management surprise, library quirk, framework mounting issue, or type-system pothole, write to `aiwiki/gotchas/{date}-{slug}.md` per the gotcha schema. The wiki-lint hook validates on save.
182
182
  - **Conventions**: when patterns settle (file naming, import order, state-shape conventions, design-token usage), write to `aiwiki/conventions/{slug}.md`. The `prototype-reviewer` flags new conventions emerging across iteration cycles.
@@ -249,7 +249,7 @@ Document the choice in `pocs/{name}-prototype/README.md` so Phase 5 codification
249
249
 
250
250
  | Caller | When |
251
251
  |---|---|
252
- | Wireframe-lock event in `/feature` and `/greenfield` | Phase 3 → Phase 4 transition |
252
+ | Wireframe-lock event in `/feature` and `/greenfield` | Phase 2 → Phase 3 transition |
253
253
  | Manual invocation | When a wireframe is mature enough to verify via running code |
254
254
 
255
255
  | Dispatches | For |
@@ -67,6 +67,20 @@ Do not ask the user. The decision was persisted at task decompose handoff.
67
67
 
68
68
  When architecture artifacts exist (from `plan-architecture` or `harden`), use them to set unit-test expectations for shapes, constraints, and error behavior. Treat those contracts as the source of truth for assertions at the unit boundary. Integration tests at boundaries identified by `harden`'s slice graph are required per the Wiring Coverage subsection above — they are not optional even when the task description omits them.
69
69
 
70
+ ## Oracle Satisfaction
71
+
72
+ When `harden` (Phase 5) ran, it captured prototype behavior as integration-test oracles at `aiwiki/oracles/{slug}.md` — one per slice or subsystem. These are the load-bearing contract: production code must reproduce the oracle's `Setup → Trigger → Assertions`. They close the wiring gap that mock-heavy unit tests miss (the Flux/REACH dogfood signal that drove v6).
73
+
74
+ **Before writing the first RED test for a slice:**
75
+
76
+ 1. Read every oracle whose `slug` or `prototype_path` matches the slice being built (the slice graph entry produced by harden references its oracles).
77
+ 2. For each oracle, design at least one test that exercises its `Setup → Trigger → Assertions`. That test counts as the boundary integration test for Wiring Coverage above — so the oracle test and the wiring test are usually the same test.
78
+ 3. If the slice crosses a wiring boundary (CLI ↔ filesystem, process exec, manifest I/O, external services) and **no oracle exists for that boundary**, halt and surface to the user. Do NOT invent oracles inline; do NOT proceed against an empty oracle directory. Missing oracles mean harden has not closed — re-run harden to capture them, or surface to the user that the slice is being built without a verified prototype contract.
79
+
80
+ When this skill dispatches the **builder** subagent (manifest's `execution.mode: subagent`), the agent enforces the same discipline (see [agents/builder.md](../../agents/builder.md) "Oracles Are Load-Bearing"). When running inline, the orchestrator (this skill) is responsible — load the oracles before the first RED.
81
+
82
+ If `phase_plan.codify: skipped` for this work item (typical for trivial bugfixes that bypass harden), no oracles are expected — note the skip in the work-item notes and proceed.
83
+
70
84
  ## Codex Integration
71
85
 
72
86
  **Mode:** Delegate | **Protocol:** `protocols/codex.md`
@@ -15,7 +15,7 @@ A concept deck is the cheapest artifact in the pipeline. It exists to verify the
15
15
 
16
16
  ## When to Use
17
17
 
18
- - Phase 2 of a prototype-driven flow (after discovery, before wireframing)
18
+ - Phase 1 of a prototype-driven flow (after discovery, before wireframing)
19
19
  - For `/feature` on existing apps: a 1-3 slide mini-deck — what the feature is, where it sits, the visual sketch. Often a single slide.
20
20
  - Ad-hoc when a user wants to put a concept on paper before building anything
21
21
 
@@ -46,8 +46,8 @@ The deck is rendered with `marp` and previewed in HTML so the user can click thr
46
46
 
47
47
  ## What concept-slides does NOT produce
48
48
 
49
- - A wireframe (Phase 3 deliverable; uses `build-wireframe` skill)
50
- - A prototype (Phase 4 deliverable; uses `build-prototype` skill)
49
+ - A wireframe (Phase 2 deliverable; uses `build-wireframe` skill)
50
+ - A prototype (Phase 3 deliverable; uses `build-prototype` skill)
51
51
  - An architecture doc (Phase 5 deliverable; uses `harden`)
52
52
  - A finalized pitch deck (use `marp-slides` directly for finalized presentations)
53
53
 
@@ -58,7 +58,7 @@ If the user asks for "a real deck for the leadership pitch," use `marp-slides` w
58
58
  | Source | Required | Purpose |
59
59
  |---|---|---|
60
60
  | Rough concept brief from the user | yes | One-sentence to one-paragraph description of what's being built |
61
- | Discovery output (if existing repo) | if Phase 1 ran | Codebase conventions, existing UX patterns to align with |
61
+ | Discovery output (if existing repo) | if discovery ran | Codebase conventions, existing UX patterns to align with |
62
62
  | Reference decks the user likes | optional | Style/composition reference (links or paths) |
63
63
 
64
64
  ## Process
@@ -119,13 +119,13 @@ Re-dispatch the subagent with the feedback as part of the prompt; rewrite the de
119
119
 
120
120
  ### Step 5: lock
121
121
 
122
- When the user emits "concept locked" (or equivalent), the phase closes. The locked deck is the input to Phase 3 (`build-wireframe`).
122
+ When the user emits "concept locked" (or equivalent), the phase closes. The locked deck is the input to Phase 2 (`build-wireframe`).
123
123
 
124
124
  Update the manifest at `.forge/work/{type}/{name}/manifest.yaml`:
125
125
  - `artifacts.concept.deck_path: decks/{name}/slides.md`
126
126
  - `artifacts.concept.locked_at: <ISO-8601 timestamp>`
127
127
 
128
- Presence of `artifacts.concept.locked_at` is the lock signal that Phase 3 (`build-wireframe`) reads to confirm the concept is locked before proceeding.
128
+ Presence of `artifacts.concept.locked_at` is the lock signal that Phase 2 (`build-wireframe`) reads to confirm the concept is locked before proceeding.
129
129
 
130
130
  ## Visual sketch guidance
131
131
 
@@ -146,7 +146,7 @@ Avoid:
146
146
  | Mistake | Fix |
147
147
  |---|---|
148
148
  | Treating the deck as a finalized pitch | It's a draft; lower the polish bar to "sketch-grade" |
149
- | Embedding real UI mockups | Move that to Phase 3 wireframe; sketches in the deck are boxes-and-arrows |
149
+ | Embedding real UI mockups | Move that to Phase 2 wireframe; sketches in the deck are boxes-and-arrows |
150
150
  | Producing a 30-slide deck | Cap at 15 for full products, 3 for features. Cut or split. |
151
151
  | Skipping the "out of scope" slide | The deferral list IS the spec — what NOT to build is as important as what to build |
152
152
  | Iterating with the user before the first render | Render first, get feedback against something concrete; don't iterate against imagined slides |
@@ -158,7 +158,7 @@ Avoid:
158
158
  - Build a polished marketing deck under this skill (different intent — use `marp-slides` directly)
159
159
  - Skip the "out of scope" slide — defining what's NOT built is half the value
160
160
  - Iterate without rendering — text-only edits invite imaginary feedback
161
- - Carry a draft to Phase 3 without an explicit user lock
161
+ - Carry a draft to Phase 2 without an explicit user lock
162
162
 
163
163
  **Always:**
164
164
  - Render to HTML and let the user click through — that's the iteration surface
@@ -172,13 +172,13 @@ Avoid:
172
172
  | **Requires** | User brief, target output path, optional discovery output |
173
173
  | **Produces** | `decks/{name}/slides.md` (marp source) + `decks/{name}/slides.html` (rendered preview) |
174
174
  | **Updates manifest** | `artifacts.concept.{deck_path, locked_at}` |
175
- | **Feeds into** | `build-wireframe` (Phase 3 — wireframe extends the visual sketches into clickable HTML) |
175
+ | **Feeds into** | `build-wireframe` (Phase 2 — wireframe extends the visual sketches into clickable HTML) |
176
176
 
177
177
  ## Integration
178
178
 
179
179
  | Caller | When |
180
180
  |---|---|
181
- | Phase 2 of `/feature` and `/greenfield` | Default flow entry point for prototype-driven work |
181
+ | Phase 1 of `/feature` and `/greenfield` | Default flow entry point for prototype-driven work |
182
182
  | Manual invocation | When a concept needs sketching outside a workflow |
183
183
 
184
184
  | Dispatches | For |
@@ -188,5 +188,5 @@ Avoid:
188
188
  | Pairs with | For |
189
189
  |---|---|
190
190
  | `marp-slides` (user-level skill) | Underlying rendering engine — concept-slides specializes the format |
191
- | `build-wireframe` | Phase 3 successor — wireframer reads the locked deck as input |
191
+ | `build-wireframe` | Phase 2 successor — wireframer reads the locked deck as input |
192
192
  | `discover-codebase-analysis` | If existing repo, supplies UX/convention context |
@@ -298,7 +298,7 @@ VERDICT: Ready to deploy
298
298
  3. **Trigger Post-Deploy Skills**
299
299
  - If documentation needs updating, flag for `deliver-onboarding`
300
300
  - If any issues were encountered during deploy, invoke `support-gotcha`
301
- - If deployment revealed process improvements, note for `/evolve`
301
+ - If deployment revealed process improvements, note for `/forge-evolve`
302
302
 
303
303
  ## Rollback Procedures
304
304
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: harden
3
- description: "Use after a working prototype is locked and the user says 'codify', 'harden', 'ready to productionize', 'extract decisions', 'time to build for real', or runs /feature past the prototype phase. Extracts architecture, ADRs, design system, slice graph, and convention/gotcha promotions FROM the working prototype — does not invent them. Skip if prototype is still iterating or has been abandoned — re-iterate or restart instead."
3
+ description: "Use after a working prototype is locked and the user says 'codify', 'harden', 'ready to productionize', 'extract decisions', 'time to build for real', or runs /feature past the prototype phase. Extracts architecture, ADRs, design system, slice graph, and convention/gotcha promotions FROM the working prototype — does not invent them. Skip if prototype is still iterating — re-iterate or restart instead."
4
4
  ---
5
5
 
6
6
  # Harden
@@ -48,7 +48,7 @@ The expected total is short: ~200-400 lines across all architecture files combin
48
48
  - Does NOT run gates (LINT runs on the wiki output; reachability runs on production code later)
49
49
  - Does NOT modify the prototype (it's the source of truth — leave it alone)
50
50
  - Does NOT pre-promote raw entries from `aiwiki/raw/` to typed pages (dream's job at phase close)
51
- - Does NOT skip the adversarial-review step on ADRs — every production ADR is reviewed inline at Step 2 (the dedicated `/second-opinion` slash command + `support-second-opinion` skill are *planned, not yet implemented*; until they ship, harden inlines the review pass and records reviewer, objections, resolutions, verdict in the ADR `review:` block before promoting to `accepted`)
51
+ - Does NOT skip the adversarial-review step on ADRs — every production ADR is reviewed inline at Step 2: harden runs the review pass and records reviewer, objections, resolutions, and verdict in the ADR `review:` block before promoting to `accepted`. If Codex is configured (`protocols/codex.md`), the review pass may dispatch Codex in verify mode; otherwise Claude performs the pass directly.
52
52
 
53
53
  ## Inputs
54
54
 
@@ -102,7 +102,7 @@ The subagent does NOT write the files itself — it returns the proposals. The m
102
102
 
103
103
  Each proposed ADR represents a decision that's hard to reverse — by definition, ADR-worthy. The `prototype-codifier` agent only proposes ADRs that match the adversarial-review trigger list (the canonical list lives in `agents/prototype-codifier.md` Phase 4); every proposal therefore arrives flagged for review.
104
104
 
105
- For each proposed ADR, run an adversarial review pass and write a structured `review:` block (reviewers, objections, resolutions, verdict) into the draft. The dedicated `/second-opinion` slash command + `support-second-opinion` skill that would package this work are *planned, not yet implemented* — until they ship, perform the review inline within harden (interrogate the decision against the trigger list's failure modes, surface objections explicitly, and either record resolutions or escalate to the user).
105
+ For each proposed ADR, run an adversarial review pass and write a structured `review:` block (reviewers, objections, resolutions, verdict) into the draft. The review is performed inline within harden: interrogate the decision against the trigger list's failure modes, surface objections explicitly, and either record resolutions or escalate to the user. If Codex is configured (`protocols/codex.md`), dispatch it in verify mode to perform the review pass and merge its findings; otherwise Claude runs the pass directly.
106
106
 
107
107
  Only ADRs with `verdict: approved` get written as `status: accepted`. ADRs with `verdict: escalate` are surfaced to the user for resolution before the phase closes. ADRs with `verdict: reject` are dropped from the proposal set.
108
108
 
@@ -153,7 +153,7 @@ The user reviews ALL outputs as a unit, not piecemeal. The codified plan is shor
153
153
 
154
154
  ## Adversarial review integration
155
155
 
156
- Every production-only decision is an ADR-worthy decision; the prototype-codifier subagent flags them all. Adversarial review runs on each proposed ADR before it's written as `accepted`. This is non-optional — production code that ships against an ADR with no recorded review is silent debt. The dedicated `/second-opinion` skill that will eventually own this work is *planned, not yet implemented* (see docs/V6-PLAN.md §11); today the review pass runs inline within harden Step 2 and writes the verdict directly into the ADR.
156
+ Every production-only decision is an ADR-worthy decision; the prototype-codifier subagent flags them all. Adversarial review runs on each proposed ADR before it's written as `accepted`. This is non-optional — production code that ships against an ADR with no recorded review is silent debt. The review pass runs inline within harden Step 2 and writes the verdict directly into the ADR. When Codex is configured (`protocols/codex.md`), the pass may be dispatched to Codex in verify mode; otherwise Claude performs it directly.
157
157
 
158
158
  Decisions that don't make the trigger list (variable naming, inline-vs-extract, choosing between known-good libraries with no real tradeoff) don't need ADRs at all and are NOT proposed by the subagent.
159
159
 
@@ -164,7 +164,7 @@ Decisions that don't make the trigger list (variable naming, inline-vs-extract,
164
164
  | Generating architecture from imagination instead of citing the prototype | Every claim about a component cites `prototype-dir/path/to/file.ts:line@<sha7>` — if you can't cite, the claim is premature |
165
165
  | One giant `aiwiki/architecture.md` file | Split by subsystem: `data-layer.md`, `auth-flow.md`, `event-bus.md`. Each <400 lines. |
166
166
  | Writing ADRs for non-trigger-list decisions | Variable naming and inline-vs-extract are NOT ADRs. Use the trigger list strictly. |
167
- | Skipping adversarial review because "the decision is obvious" | If the decision is obvious it doesn't need an ADR; if it needs an ADR it needs review (today inline; `/second-opinion` dedicated surface planned) |
167
+ | Skipping adversarial review because "the decision is obvious" | If the decision is obvious it doesn't need an ADR; if it needs an ADR it needs review (performed inline at Step 2, optionally via Codex verify mode) |
168
168
  | Pre-promoting raw entries during codification | Raw entries are dream's territory; harden writes to typed pages directly, raw stays raw until dream consolidates |
169
169
  | Modifying the prototype during codification | The prototype is the source of truth — leave it alone. Annotation goes in the architecture file, not in prototype source |
170
170
  | Treating the gate as advisory | Phase 6 reads these outputs; if codification is incomplete, the production build is improvising. Block until the user accepts. |
@@ -203,7 +203,7 @@ Decisions that don't make the trigger list (variable naming, inline-vs-extract,
203
203
  | Dispatches | For |
204
204
  |---|---|
205
205
  | `prototype-codifier` subagent | Bulk codification work in own context window |
206
- | `support-second-opinion` (`/second-opinion`) *(planned, not yet implemented)* | Adversarial review on each proposed ADR — until shipped, harden inlines this pass at Step 2 |
206
+ | Codex (verify mode, via `protocols/codex.md`) | Optional adversarial review on each proposed ADR — if Codex is not configured, harden runs the review pass inline at Step 2 |
207
207
  | `support-dream` | Focused dream over touched subfolders after writes |
208
208
  | `support-wiki-lint` | Synchronous validation on every wiki write |
209
209
 
@@ -63,6 +63,31 @@ Now that the test plan is parsed and files are verified, run the Codex consent f
63
63
  - **Takeover:** Dispatch Codex with the test plan to execute tests and produce the results report. Claude reviews test quality and coverage.
64
64
  - **Verify** or **Skip / Codex unavailable:** Proceed with the steps below. The Codex Verify note in Step 9 will dispatch Codex to review test quality (Verify only).
65
65
 
66
+ ### Step 1.6: Oracle Coverage Check
67
+
68
+ Before any test runs, verify that every oracle in `aiwiki/oracles/` for this work item is mapped to a test in the plan. Oracles are the Phase 5 (harden) contract — production code must reproduce the prototype's verified behavior. This is the load-bearing closure of the mock-pass / real-break wiring gap; running tests without checking oracle coverage re-creates the gap.
69
+
70
+ 1. Enumerate `aiwiki/oracles/*.md`. Filter to oracles whose `prototype_path` is within this work item's scope (typically `pocs/{name}-prototype/`).
71
+ 2. For each in-scope oracle, find the matching test ID(s) in the test plan's "Map Oracles to Tests" table (produced by `quality-test-plan` Step 2.3).
72
+ 3. **If any in-scope oracle is unmapped, halt:**
73
+
74
+ ```
75
+ ORACLE COVERAGE FAILURE:
76
+ Unmapped oracle: aiwiki/oracles/auth-login-success.md
77
+ Type: interaction
78
+ prototype_path: pocs/myapp-prototype/src/auth/Login.tsx
79
+ No test in test-plan.md cites this oracle.
80
+
81
+ Cannot execute the test plan. Mock-heavy tests pass while real integration
82
+ breaks (the wiring gap) — the chain closes only when every oracle has a
83
+ test. Resolve by:
84
+ (a) Returning to quality-test-plan and adding a test that satisfies the
85
+ oracle, OR
86
+ (b) Re-running harden if the oracle is stale or out of scope.
87
+ ```
88
+
89
+ 4. **Skip condition:** If no oracles exist for this work item (the test plan recorded "No oracles in scope" in Step 2.3, or `aiwiki/oracles/` is empty for the scope), record "No oracles in scope" in the results and proceed. The check is non-blocking when oracle capture wasn't part of the lifecycle.
90
+
66
91
  ### Step 2: External Service Availability Check
67
92
 
68
93
  Before executing any tests, determine which external services are available for real testing.
@@ -393,7 +418,7 @@ Do not execute only unit tests and declare success. All test types from the plan
393
418
 
394
419
  | Field | Value |
395
420
  |---|---|
396
- | **Requires** | Test plan (`.forge/work/{type}/{name}/test-plan.md`) + implementation code (from `build-tdd`) + architecture artifacts (`.forge/work/{type}/{name}/architecture/api-contract.md` for external service verification) |
421
+ | **Requires** | Test plan (`.forge/work/{type}/{name}/test-plan.md`) + implementation code (from `build-tdd`) + architecture artifacts (`.forge/work/{type}/{name}/architecture/api-contract.md` for external service verification) + oracle pages (`aiwiki/oracles/*.md` from harden Step 2.5) when codify ran |
397
422
  | **Produces** | `.forge/work/{type}/{name}/test-results.md` |
398
423
  | **Feeds into** | `deliver-deploy` (via quality gate -- zero failures required) |
399
424
  | **Updates manifest** | `artifacts.test-results: test-results.md`, `phases.quality.test-execution: { status: complete, gate-passed: true }` |
@@ -96,6 +96,26 @@ Create a traceability matrix:
96
96
 
97
97
  **Rule:** Every acceptance criterion MUST have at least one test. If a criterion has no test, the plan is incomplete.
98
98
 
99
+ ### Step 2.3: Map Oracles to Tests
100
+
101
+ If `aiwiki/oracles/` contains oracle pages for slices in this work item, every in-scope oracle MUST appear in the traceability matrix with at least one mapped test. Oracles are the prototype-derived behavioral contract from Phase 5 (harden); production code is not "tested" if oracles are unverified. This is the load-bearing closure of the mock-pass / real-break wiring gap (Flux/REACH dogfood signal).
102
+
103
+ For each `aiwiki/oracles/{slug}.md` whose `prototype_path` is within this work item's scope (typically `pocs/{name}-prototype/`):
104
+
105
+ ```markdown
106
+ | Oracle | Type | Setup → Trigger → Assertions cite | Mapped tests |
107
+ |---|---|---|---|
108
+ | `auth-login-success` | interaction | `pocs/myapp-prototype/src/auth/Login.tsx:42` | IT-003, E2E-001 |
109
+ | `dashboard-renders-empty-state` | render | `pocs/myapp-prototype/src/Dashboard.tsx:18` | IT-005 |
110
+ | `checkout-applies-discount-code` | golden-trace | `pocs/myapp-prototype/src/checkout/apply.ts:67` | IT-012, CONTRACT-004 |
111
+ ```
112
+
113
+ **Rule:** Every in-scope oracle MUST have at least one test that exercises its `Setup → Trigger → Assertions`. Unmapped oracles fail this step — either add tests to cover them, or surface to the user that harden's oracle capture missed a slice.
114
+
115
+ The mapped test SHOULD be an integration or E2E test (oracles describe boundary behavior; unit tests with mocks at the boundary don't satisfy them). A pure-unit test mapping is acceptable only when the oracle is itself a unit-level invariant (rare).
116
+
117
+ **Skip condition:** If `phase_plan.codify: skipped` for this work item or `aiwiki/oracles/` is empty for the work scope, record "No oracles in scope" in the plan and proceed. The check is non-blocking when oracle capture wasn't part of the lifecycle (e.g. trivial bugfix routed past harden).
118
+
99
119
  ### Step 2.5: Map User Journeys to E2E Scenarios
100
120
 
101
121
  If the requirements document includes a User Journeys section, create a business flow traceability table. Every journey MUST map to an E2E test scenario. Gaps are flagged before test execution.
@@ -237,7 +257,7 @@ If the critic identifies coverage gaps or missing scenarios, address them before
237
257
 
238
258
  | Field | Value |
239
259
  |---|---|
240
- | **Requires** | Implementation code (from `build-tdd`), architecture artifacts (`.forge/work/{type}/{name}/architecture/`), requirements (`.forge/work/{type}/{name}/requirements.md`) |
260
+ | **Requires** | Implementation code (from `build-tdd`), architecture artifacts (`.forge/work/{type}/{name}/architecture/`), requirements (`.forge/work/{type}/{name}/requirements.md`), oracle pages (`aiwiki/oracles/*.md` from harden Step 2.5) when codify ran |
241
261
  | **Produces** | `.forge/work/{type}/{name}/test-plan.md` |
242
262
  | **Feeds into** | `quality-test-execution` (test plan drives execution) |
243
263
  | **Updates manifest** | `artifacts.test-plan: test-plan.md` |
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: support-debug
3
- description: "Use when encountering any bug, test failure, error, crash, or unexpected behavior — enforces systematic root cause investigation."
3
+ description: "Use when a bug, test failure, error, crash, or unexpected behavior needs systematic investigation triggered by phrases like 'debug this', 'why is X failing', 'trace this error', 'figure out what's wrong', 'investigate the failure', 'this is broken', 'help me debug'. Enforces a four-phase process (fact-check → root-cause investigation → hypothesis testing → implementation) with a 3-fix threshold that stops the random-fix spiral. Skip when the user is asking a design or architecture question (not a failure to investigate), when the failure is a known limitation already documented, or when the work is prototype iteration where the lightweight feedback loop in iterate-prototype is the right shape."
4
4
  ---
5
5
 
6
6
  # Support: Debug
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: support-dream
3
- description: "Use when the user asks to 'consolidate the wiki', 'clean up aiwiki', 'merge duplicate notes', 'prune stale gotchas', or when /evolve runs maintenance. Also auto-fires on phase-close or when context approaches compaction (~85%). Merges aiwiki duplicates, resolves contradictions, refreshes the session index. Output goes to aiwiki/proposed/ for user review — input is never modified."
3
+ description: "Use when the user asks to 'consolidate the wiki', 'clean up aiwiki', 'merge duplicate notes', 'prune stale gotchas', or when /forge-evolve runs maintenance. Also auto-fires on phase-close or when context approaches compaction (~85%). Merges aiwiki duplicates, resolves contradictions, refreshes the session index. Output goes to aiwiki/proposed/ for user review — input is never modified."
4
4
  ---
5
5
 
6
6
  # Support: Dream (Wiki Consolidation)
@@ -22,7 +22,7 @@ Three triggers, distinct intents:
22
22
  | Trigger | Intent | Scope |
23
23
  |---|---|---|
24
24
  | **Phase close** (Phase 4 (iterate) lock, Phase 5 (codify) lock, Phase 6 (production-build) per-slice close, Phase 7 (deliver) retrospective) | Promote phase outputs into curated wiki state | Subfolders touched by the phase |
25
- | **PreCompact hook fire** (~85% context utilization) | Consolidate session signal into durable form before lossy compaction | `aiwiki/sessions/{current}` + `aiwiki/raw/` + recently-touched typed pages |
25
+ | **PreCompact hook fire** (~85% context utilization) | Consolidate signal into durable form before lossy compaction | `aiwiki/raw/` + recently-touched typed pages. If `aiwiki/sessions/{current}.md` exists, refine it too; if not, skip (session-checkpoint hooks deferred — see `templates/aiwiki/schemas/session.md`). |
26
26
  | **Manual `/dream`** | User-driven cleanup (after major refactor, branch merge, accumulated noise) | User-specified |
27
27
 
28
28
  **Do NOT skip when:**
@@ -57,12 +57,12 @@ Fired by phase-close hooks (after user emits the phase-lock signal):
57
57
 
58
58
  Fired by forge's existing pre-compact hook (~85% context):
59
59
 
60
- 1. Hook calls skill with scope `[aiwiki/sessions/{current}, aiwiki/raw/, recently-touched-typed-pages]`
61
- 2. **Sync prerequisite** — session checkpoint hook has already updated `aiwiki/sessions/{current}.md` with all events. Dream IMPROVES this file; does not produce its existence.
60
+ 1. Hook calls skill with scope `[aiwiki/raw/, recently-touched-typed-pages]`. If `aiwiki/sessions/{current}.md` exists, ALSO include it in scope.
61
+ 2. **Conditional session prerequisite** — if `aiwiki/sessions/{current}.md` exists (session-checkpoint hooks shipped and active), dream IMPROVES it; does not produce its existence. If it does NOT exist (current state — session-checkpoint hooks deferred), dream SKIPS session-file refinement and consolidates raw/typed pages only. No `SESSION_FILE_MISSING` failure.
62
62
  3. Dispatches `dreamer` subagent
63
63
  4. Output to `aiwiki/proposed/{dream_id}/`
64
64
  5. LINT runs on proposed output
65
- 6. Native compaction proceeds (does not wait for user review — the consolidated session file is already on disk)
65
+ 6. Native compaction proceeds (does not wait for user review — the consolidated raw/typed pages are already on disk)
66
66
 
67
67
  ### Manual /dream trigger
68
68
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: support-gotcha
3
- description: "Use when a subtle bug, surprising behavior, or hard-won lesson is uncovered that could recur records it as a typed wiki page for future prevention."
3
+ description: "Use when a reproducible failure mode, hard-won lesson, or surprising behavior with a concrete trigger emerges and is worth preventing next time — triggered by phrases like 'record this gotcha', 'save this lesson', 'capture this finding', 'we should remember this', 'this is a gotcha', 'log this for future', or automatically after support-debug closes a non-trivial bug. Writes a typed page to aiwiki/gotchas/{date}-{slug}.md with reproduction steps, root cause, and concrete fix; promotes to a rule when the same pattern recurs (N=3). Skip for speculation or half-formed thoughts (use /note for those); skip if the failure mode is not reproducible — a gotcha needs a concrete trigger, not a vibe."
4
4
  ---
5
5
 
6
6
  # Support: Gotcha
@@ -43,7 +43,7 @@ Every bug fixed, every failed approach, every "I wish I'd known that earlier" mo
43
43
  | **Requires** | Concrete lesson: what broke, why, how to prevent |
44
44
  | **Produces** | Gotcha page in `aiwiki/gotchas/{YYYY-MM-DD}-{slug}.md` (project) or `~/.claude/gotchas/{YYYY-MM-DD}-{slug}.md` (global) |
45
45
  | **Schema** | `aiwiki/schemas/gotcha.md` — LINT validates frontmatter + sections on write |
46
- | **Feeds into** | Future sessions (prevention), `gotcha-hunter` agent (surfaces relevant entries to reviewers), `/evolve` (skill improvement) |
46
+ | **Feeds into** | Future sessions (prevention), `gotcha-hunter` agent (surfaces relevant entries to reviewers), `/forge-evolve` (skill improvement) |
47
47
 
48
48
  ### Storage tiers
49
49
 
@@ -234,7 +234,7 @@ When no pending promotions exist, `gotcha-hunter` (separate agent) reads `aiwiki
234
234
  | `gotcha-hunter` (agent) | Reads `aiwiki/gotchas/` and surfaces diff-relevant entries to reviewers; never writes |
235
235
  | `support-wiki-lint` | Validates frontmatter + sections on every write |
236
236
  | `support-dream` | At phase-close / PreCompact: consolidates raw entries, may merge similar gotchas, prunes retired entries (writes proposals to `aiwiki/proposed/{dream_id}/` for user review) |
237
- | `/evolve` command | Reads gotchas to identify skill improvement opportunities |
237
+ | `/forge-evolve` command | Reads gotchas to identify skill improvement opportunities |
238
238
 
239
239
  ## Quick reference
240
240
 
@@ -1,28 +1,28 @@
1
1
  ---
2
- name: support-task-force
3
- description: "Use when the user prompts a punch list of independent tasks (numbered or bulleted, ≥3 items) OR explicitly invokes /task-force. Classifies each task by type, assembles the right specialist team per task, dispatches all in parallel, aggregates results. Phase-aware: light teams during prototype phases (fast iteration), full crew during harden/production (no shortcuts). Optional Codex adversarial pairing when consent is on. REFUSES command-shaped work — routes feature/bugfix/refactor items to their owning commands instead."
2
+ name: support-parallel
3
+ description: "Use when the user prompts a punch list of independent tasks (numbered or bulleted, ≥3 items) OR explicitly invokes /parallel. Classifies each task by type, assembles the right specialist team per task, dispatches all in parallel, aggregates results. Phase-aware: light teams during prototype phases (fast iteration), full crew during harden/production (no shortcuts). Optional Codex adversarial pairing when consent is on. REFUSES command-shaped work — routes feature/bugfix/refactor items to their owning commands instead."
4
4
  ---
5
5
 
6
- # Task Force
6
+ # Parallel
7
7
 
8
8
  ## Overview
9
9
 
10
10
  Users don't always invoke `/feature` or `/bugfix`. The daily reality is a paste-in punch list: "do these 10 things: 1. update README; 2. explore option X; 3. add a test for Y; 4. ...". Doing those in series in one context window is slow, conflict-prone, and skips the Codex second-opinion that catches real bugs.
11
11
 
12
- This skill assembles a **task-force per item** — a specialist team sized for the task's type and the project's current phase — and dispatches them in parallel. Each task-force has a Claude reviewer/builder paired with a Codex sibling (when the task is non-trivial). The skill REFUSES to swallow command-shaped work; items that look like features/bugfixes/refactors get routed to their owning commands.
12
+ This skill assembles a **team per item** — sized for the task's type and the project's current phase — and dispatches them in parallel. Each team has a Claude reviewer/builder paired with a Codex sibling (when the task is non-trivial). The skill REFUSES to swallow command-shaped work; items that look like features/bugfixes/refactors get routed to their owning commands.
13
13
 
14
14
  **Core principle:** match team size to task complexity AND to the project's current phase. Prototype phases iterate fast with light teams. Production phases demand the full crew.
15
15
 
16
- **Announce at start:** "I'm using support-task-force to dispatch N task-forces in parallel — M routed to commands, K running in light mode, L running in full mode." If `!max` / `--full-power` detected: "...running in `!max` mode — production teams enforced regardless of phase."
16
+ **Announce at start:** "I'm using support-parallel to dispatch N teams in parallel — M routed to commands, K running in light mode, L running in full mode." If `!max` / `--full-power` detected: "...running in `!max` mode — production teams enforced regardless of phase."
17
17
 
18
18
  ## When to Use
19
19
 
20
20
  Fire when **any** of:
21
- - User types `/task-force` explicitly
21
+ - User types `/parallel` explicitly
22
22
  - User prompt contains a numbered list (`1. xxx 2. xxx 3. xxx`) with ≥3 items
23
23
  - User prompt contains a bulleted list (`- xxx / - xxx / - xxx`) with ≥3 items AND items look like work-tasks (not casual mentions)
24
24
 
25
- Confirm with user before dispatching if auto-detected (one-line: "Detected a 5-item task list; dispatching task-forces — say 'no' to cancel").
25
+ Confirm with user before dispatching if auto-detected (one-line: "Detected a 5-item task list; dispatching teams — say 'no' to cancel").
26
26
 
27
27
  Do NOT use for:
28
28
  - A single task (use the appropriate command or skill directly)
@@ -33,7 +33,7 @@ Do NOT use for:
33
33
 
34
34
  ### Step 0: Codex consent (per `protocols/codex.md`)
35
35
 
36
- Run the Codex consent flow ONCE for the whole task-force run. The choice (Verify / Takeover / Skip / Never) propagates to every per-task dispatch. Record in `.forge/task-force/{run-id}/codex.yaml`.
36
+ Run the Codex consent flow ONCE for the whole parallel run. The choice (Verify / Takeover / Skip / Never) propagates to every per-task dispatch. Record in `.forge/parallel/{run-id}/codex.yaml`.
37
37
 
38
38
  ### Step 1: Detect repo phase (or honor full-power override)
39
39
 
@@ -100,7 +100,7 @@ For each task, apply this classifier in order — first match wins:
100
100
  | ≥4 subsystems touched OR ≥3 verbs combined | **complex** |
101
101
  | Anything else | **ambiguous** (ask user) |
102
102
 
103
- Command-shaped items get **routed out** — they do NOT get a task-force. Surface them to the user with: "Item X looks like a `/feature` — running it as a forge command instead. The remaining items continue as task-forces." User can override.
103
+ Command-shaped items get **routed out** — they do NOT get a team. Surface them to the user with: "Item X looks like a `/feature` — running it as a forge command instead. The remaining items continue as teams." User can override.
104
104
 
105
105
  ### Step 4: Assemble team per task
106
106
 
@@ -136,20 +136,20 @@ Apply both the **task type** AND the **phase mode**:
136
136
 
137
137
  Ask the user: "Is this a prototype or production task list?" Then proceed with the matching template.
138
138
 
139
- ### Step 5: Dispatch all task-forces in parallel
139
+ ### Step 5: Dispatch all teams in parallel
140
140
 
141
141
  For each non-routed task:
142
142
  1. Compose the prompt: include the task text, the detected type, phase mode, the team composition.
143
143
  2. Fire each agent in the team as a background subagent (`run_in_background: true`).
144
144
  3. For tasks whose team includes "dispatch X skill", spawn ONE agent that invokes that skill (the skill handles its own internal multi-agent chain).
145
- 4. Tag each agent with `task-force/{run-id}/{task-n}/{role}` for telemetry.
145
+ 4. Tag each agent with `parallel/{run-id}/{task-n}/{role}` for telemetry.
146
146
 
147
147
  Batched dispatch ceiling: 20-25 agents per `<function_calls>` block. For 10 tasks × 4 agents = 40 agents, plan 2 dispatch rounds.
148
148
 
149
149
  ### Step 6: Accumulate
150
150
 
151
151
  Background notifications arrive asynchronously:
152
- - Save each agent's result to `.forge/task-force/{run-id}/task-{n}/{role}.md`
152
+ - Save each agent's result to `.forge/parallel/{run-id}/task-{n}/{role}.md`
153
153
  - Maintain a per-task status line: `Task 3 of 10: 2 of 3 agents complete (1 pending)`
154
154
  - DO NOT narrate every individual agent completion to the user — batch updates every ≥3 returns
155
155
 
@@ -161,14 +161,14 @@ When all agents for a task return, synthesize:
161
161
  - If only one returned (other failed/timeout) → mark `complete-single-source`, flag for user attention
162
162
  - If both failed → mark `failed`, recommend retry or single-task fallback
163
163
 
164
- Per-task output goes to `.forge/task-force/{run-id}/task-{n}/verdict.md`.
164
+ Per-task output goes to `.forge/parallel/{run-id}/task-{n}/verdict.md`.
165
165
 
166
166
  ### Step 8: Run summary
167
167
 
168
168
  After all tasks finish (or hit batch limit), produce one consolidated report:
169
169
 
170
170
  ```
171
- Task-Force Run {run-id} — {N} tasks, {M} routed to commands
171
+ Parallel Run {run-id} — {N} tasks, {M} routed to commands
172
172
 
173
173
  | # | Task | Type | Team size | Status | Conflicts |
174
174
  |---|------|------|-----------|--------|-----------|
@@ -186,7 +186,7 @@ Followups:
186
186
  - Run /feature for item 4 when ready
187
187
  ```
188
188
 
189
- Write the summary to `.forge/task-force/{run-id}/run-summary.md` and surface to user.
189
+ Write the summary to `.forge/parallel/{run-id}/run-summary.md` and surface to user.
190
190
 
191
191
  ### Step 9: Stop
192
192
 
@@ -197,8 +197,8 @@ This skill does ONE run per invocation. If the user wants to iterate on findings
197
197
  | Field | Value |
198
198
  |---|---|
199
199
  | Requires | A user-provided task list (parsed in Step 2); optionally an active manifest for phase detection |
200
- | Produces | `.forge/task-force/{run-id}/codex.yaml`, `.forge/task-force/{run-id}/tasks.yaml` (classification), `.forge/task-force/{run-id}/task-{n}/{role}.md` per agent, `.forge/task-force/{run-id}/task-{n}/verdict.md` per task, `.forge/task-force/{run-id}/run-summary.md` |
201
- | Updates manifest | If a feature/bugfix manifest is active, append `phases.{phase}.task-force-runs: [{run-id}]`. Otherwise no manifest update — task-force runs are not phase-gated. |
200
+ | Produces | `.forge/parallel/{run-id}/codex.yaml`, `.forge/parallel/{run-id}/tasks.yaml` (classification), `.forge/parallel/{run-id}/task-{n}/{role}.md` per agent, `.forge/parallel/{run-id}/task-{n}/verdict.md` per task, `.forge/parallel/{run-id}/run-summary.md` |
201
+ | Updates manifest | If a feature/bugfix manifest is active, append `phases.{phase}.parallel-runs: [{run-id}]`. Otherwise no manifest update — parallel runs are not phase-gated. |
202
202
  | Feeds into | `/feature`, `/bugfix`, `/refactor` (for routed items); `support-gotcha` (for recurring patterns surfaced across tasks) |
203
203
 
204
204
  ## Agent Dispatch
@@ -224,11 +224,11 @@ Raw agents it dispatches directly:
224
224
  | Step | Skill / Command | Why |
225
225
  |---|---|---|
226
226
  | Pre-dispatch consent | `protocols/codex.md` | Codex pairing requires consent ONCE per run |
227
- | Task routing-out | `/feature`, `/bugfix`, `/refactor`, `/greenfield`, `/hotfix` | Command-shaped items must use commands, not task-forces |
227
+ | Task routing-out | `/feature`, `/bugfix`, `/refactor`, `/greenfield`, `/hotfix` | Command-shaped items must use commands, not teams |
228
228
  | Per-task dev | `quality-code-review` skill | Production dev tasks get the full review chain |
229
229
  | Per-task debug | `support-debug` skill | Debug tasks get tracer + gotcha-hunter |
230
230
  | Per-task security | `quality-security-audit` skill | Security tasks get the OWASP-aware audit chain |
231
- | Post-run gotcha | `support-gotcha` | Patterns surfaced across multiple task-forces deserve a recorded lesson |
231
+ | Post-run gotcha | `support-gotcha` | Patterns surfaced across multiple teams deserve a recorded lesson |
232
232
 
233
233
  ## Red Flags
234
234
 
@@ -239,12 +239,12 @@ Raw agents it dispatches directly:
239
239
  | Codex consent skipped silently | Means no second-opinion across the whole run — for production-mode tasks this is a regression |
240
240
  | 0 conflicts across all tasks | Either every task was trivial OR Claude+Codex are echoing each other; sample-check |
241
241
  | Complex tasks in prototype mode | Probably should be a /feature; warn user before proceeding |
242
- | Run-id directories never get cleaned | Add a periodic prune; aiwiki/dream or /evolve should handle it |
242
+ | Run-id directories never get cleaned | Add a periodic prune; aiwiki/dream or /forge-evolve should handle it |
243
243
  | Soft cap warning ignored repeatedly | User has misframed work — recommend splitting into milestones |
244
244
 
245
245
  ## Anti-Patterns
246
246
 
247
- **Swallowing command-shaped work.** If the user types "add a payment feature, then audit security, then ship", DO NOT run a task-force — that's three workflows pretending to be three tasks. Route them: `/feature` → `quality-security-audit` → `/feature` deploy phase. Task-force is for items that DON'T fit a workflow.
247
+ **Swallowing command-shaped work.** If the user types "add a payment feature, then audit security, then ship", DO NOT dispatch a parallel run — that's three workflows pretending to be three tasks. Route them: `/feature` → `quality-security-audit` → `/feature` deploy phase. `/parallel` is for items that DON'T fit a workflow.
248
248
 
249
249
  **Phase-blind sizing.** Spawning the full crew on a Phase-4 prototype task wastes tokens AND violates the prototype-throwaway principle. Always read phase first.
250
250
 
@@ -252,7 +252,7 @@ Raw agents it dispatches directly:
252
252
 
253
253
  **Ignoring divergent verdicts.** Claude+Codex disagreement is a SIGNAL, not noise. Surface it. Let the user adjudicate.
254
254
 
255
- **Letting `.forge/task-force/` grow forever.** Each run leaves a directory. Add to `support-dream` consolidation scope, or document a cleanup pattern.
255
+ **Letting `.forge/parallel/` grow forever.** Each run leaves a directory. Add to `support-dream` consolidation scope, or document a cleanup pattern.
256
256
 
257
257
  **Auto-dispatching without confirmation when auto-detected.** Numbered lists in user prose aren't always task lists (could be a survey of options, a sequence diagram, etc.). Confirm before firing 40 agents.
258
258