create-harness-vibe-coding 0.8.13 → 0.8.17

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 (133) hide show
  1. package/CHANGELOG.md +174 -0
  2. package/README-CN.md +110 -107
  3. package/README.md +93 -44
  4. package/package.json +2 -1
  5. package/src/generator.js +609 -489
  6. package/src/index.js +5 -5
  7. package/templates/common/.claude/agents/architect-manager.md +1 -0
  8. package/templates/common/.claude/agents/architect.md +2 -1
  9. package/templates/common/.claude/agents/codebase-explorer.md +1 -0
  10. package/templates/common/.claude/agents/context-master.md +2 -1
  11. package/templates/common/.claude/agents/debugger.md +1 -0
  12. package/templates/common/.claude/agents/docs-researcher.md +2 -1
  13. package/templates/common/.claude/agents/explore-manager.md +1 -0
  14. package/templates/common/.claude/agents/implement-manager.md +1 -0
  15. package/templates/common/.claude/agents/implementer.md +1 -0
  16. package/templates/common/.claude/agents/memory-master.md +2 -1
  17. package/templates/common/.claude/agents/planner.md +3 -2
  18. package/templates/common/.claude/agents/reflector.md +1 -0
  19. package/templates/common/.claude/agents/researcher.md +1 -0
  20. package/templates/common/.claude/agents/review-manager.md +1 -0
  21. package/templates/common/.claude/agents/reviewer.md +2 -1
  22. package/templates/common/.claude/agents/task-scribe.md +1 -0
  23. package/templates/common/.claude/agents/tdd-guide.md +5 -4
  24. package/templates/common/.claude/agents/test-writer.md +6 -5
  25. package/templates/common/.claude/agents/verifier.md +1 -0
  26. package/templates/common/.claude/commands/wf-auto-spark.md +16 -0
  27. package/templates/common/.claude/commands/wf-auto.md +16 -0
  28. package/templates/{optional/skills/browser-e2e/.opencode → common/.claude}/commands/wf-browser.md +3 -2
  29. package/templates/common/.claude/commands/wf-help.md +9 -5
  30. package/templates/common/.claude/commands/wf-learn.md +16 -0
  31. package/templates/common/.claude/commands/wf-max.md +20 -0
  32. package/templates/common/.claude/commands/wf-readme.md +16 -0
  33. package/templates/common/.claude/commands/wf-remove.md +16 -0
  34. package/templates/common/.claude/commands/wf-review.md +16 -0
  35. package/templates/common/.claude/commands/wf-update.md +68 -10
  36. package/templates/common/.claude/commands/wf.md +16 -0
  37. package/templates/common/.claude/rules/ecc/common.md +6 -5
  38. package/templates/common/.claude/skills/subagent-orchestrator/SKILL.md +12 -6
  39. package/templates/common/.claude/skills/tdd/SKILL.md +5 -5
  40. package/templates/common/.claude/skills/wf/SKILL.md +13 -5
  41. package/templates/common/.claude/skills/wf-agents-docs/SKILL.md +119 -0
  42. package/templates/common/.claude/skills/wf-auto/SKILL.md +27 -7
  43. package/templates/common/.claude/skills/wf-auto-spark/SKILL.md +12 -5
  44. package/templates/common/.claude/skills/wf-browser/SKILL.md +176 -0
  45. package/templates/common/.claude/skills/wf-help/SKILL.md +30 -0
  46. package/templates/common/.claude/skills/wf-learn/SKILL.md +6 -0
  47. package/templates/common/.claude/skills/wf-max/SKILL.md +43 -14
  48. package/templates/common/.claude/skills/wf-readme/SKILL.md +8 -2
  49. package/templates/common/.claude/skills/wf-remove/SKILL.md +6 -0
  50. package/templates/common/.claude/skills/wf-review/SKILL.md +10 -3
  51. package/templates/common/.claude/skills/wf-update/SKILL.md +41 -4
  52. package/templates/common/.codex/config.toml +3 -5
  53. package/templates/common/.harness-version +326 -131
  54. package/templates/common/.opencode/agents/architect-manager.md +8 -1
  55. package/templates/common/.opencode/agents/architect.md +2 -1
  56. package/templates/common/.opencode/agents/codebase-explorer.md +1 -0
  57. package/templates/common/.opencode/agents/context-master.md +2 -1
  58. package/templates/common/.opencode/agents/debugger.md +1 -0
  59. package/templates/common/.opencode/agents/docs-researcher.md +2 -1
  60. package/templates/common/.opencode/agents/explore-manager.md +11 -1
  61. package/templates/common/.opencode/agents/implement-manager.md +6 -3
  62. package/templates/common/.opencode/agents/implementer.md +1 -0
  63. package/templates/common/.opencode/agents/memory-master.md +2 -1
  64. package/templates/common/.opencode/agents/planner.md +3 -2
  65. package/templates/common/.opencode/agents/reflector.md +1 -0
  66. package/templates/common/.opencode/agents/researcher.md +1 -0
  67. package/templates/common/.opencode/agents/review-manager.md +6 -2
  68. package/templates/common/.opencode/agents/reviewer.md +2 -1
  69. package/templates/common/.opencode/agents/task-scribe.md +1 -0
  70. package/templates/common/.opencode/agents/tdd-guide.md +5 -4
  71. package/templates/common/.opencode/agents/test-writer.md +6 -5
  72. package/templates/common/.opencode/agents/verifier.md +1 -0
  73. package/templates/common/.opencode/commands/wf-auto-spark.md +3 -2
  74. package/templates/common/.opencode/commands/wf-auto.md +3 -2
  75. package/templates/common/.opencode/commands/wf-browser.md +16 -0
  76. package/templates/common/.opencode/commands/wf-help.md +9 -5
  77. package/templates/common/.opencode/commands/wf-learn.md +3 -2
  78. package/templates/common/.opencode/commands/wf-max.md +12 -6
  79. package/templates/common/.opencode/commands/wf-readme.md +3 -2
  80. package/templates/common/.opencode/commands/wf-remove.md +3 -2
  81. package/templates/common/.opencode/commands/wf-review.md +3 -2
  82. package/templates/common/.opencode/commands/wf-update.md +68 -10
  83. package/templates/common/.opencode/commands/wf.md +3 -2
  84. package/templates/common/CLAUDE.md +15 -13
  85. package/templates/common/Harness/MEMORY.md +24 -21
  86. package/templates/common/Harness/README.md +50 -47
  87. package/templates/common/Harness/ownership.manifest.json +878 -0
  88. package/templates/common/Harness/{architecture.md → project/architecture.md} +1 -1
  89. package/templates/common/Harness/research/README.md +3 -3
  90. package/templates/common/Harness/scripts/archive-tasks.mjs +12 -220
  91. package/templates/common/Harness/scripts/context-budget.mjs +95 -0
  92. package/templates/common/Harness/scripts/l2-cache-telemetry.mjs +703 -0
  93. package/templates/common/Harness/scripts/scan-clean.mjs +16 -12
  94. package/templates/common/Harness/scripts/task-state.mjs +889 -0
  95. package/templates/common/Harness/scripts/validate-harness.mjs +553 -191
  96. package/templates/common/Harness/scripts/wf-remove.mjs +61 -35
  97. package/templates/common/Harness/scripts/wf-update-check.mjs +358 -45
  98. package/templates/common/Harness/settings.json +43 -0
  99. package/templates/common/Harness/{ECC-GUIDE.md → specs/guides/ECC-GUIDE.md} +4 -4
  100. package/templates/common/Harness/{SETUP.md → specs/guides/SETUP.md} +34 -37
  101. package/templates/common/Harness/{extension.md → specs/guides/extension.md} +3 -3
  102. package/templates/common/Harness/{lifecycle.md → specs/guides/lifecycle.md} +2 -2
  103. package/templates/common/Harness/specs/protocols/TASK_ARCHIVE.md +76 -0
  104. package/templates/common/Harness/{agent-workflow.md → specs/runtime/agent-workflow.md} +6 -6
  105. package/templates/common/Harness/{context-loading.md → specs/runtime/context-loading.md} +85 -21
  106. package/templates/common/Harness/{dispatch.md → specs/runtime/dispatch.md} +4 -3
  107. package/templates/common/Harness/{subagents.md → specs/runtime/subagents.md} +19 -10
  108. package/templates/common/Harness/{WF-AUTO-SPARK.md → specs/workflows/WF-AUTO-SPARK.md} +2 -2
  109. package/templates/common/Harness/{WF-AUTO.md → specs/workflows/WF-AUTO.md} +12 -7
  110. package/templates/common/Harness/{WF-KERNEL.md → specs/workflows/WF-KERNEL.md} +11 -1
  111. package/templates/common/Harness/{WF-MAX.md → specs/workflows/WF-MAX.md} +40 -7
  112. package/templates/common/Harness/specs/workflows/WF-STATE.md +141 -0
  113. package/templates/common/Harness/{WF.md → specs/workflows/WF.md} +12 -1
  114. package/templates/common/README.md +8 -6
  115. package/templates/common/memory/startup-hints.md +19 -17
  116. package/templates/common/opencode.json +1 -0
  117. package/templates/optional/catalog.json +2 -9
  118. package/templates/optional/skills/github-pr-review/.claude/skills/github-pr-review/SKILL.md +1 -1
  119. package/templates/optional/skills/python-backend/.claude/skills/python-backend/SKILL.md +1 -1
  120. package/templates/optional/skills/ts-react-frontend/.claude/skills/ts-react-frontend/SKILL.md +1 -1
  121. package/templates/optional/skills/ui-ux-review/.claude/skills/ui-ux-review/SKILL.md +1 -1
  122. package/templates/common/Harness/TASK_ARCHIVE.md +0 -56
  123. package/templates/common/Harness/WF-STATE.md +0 -83
  124. package/templates/optional/skills/browser-e2e/.claude/skills/browser-e2e/SKILL.md +0 -42
  125. package/templates/optional/skills/browser-e2e/.claude/skills/wf-browser/SKILL.md +0 -194
  126. package/templates/optional/skills/browser-e2e/Harness/workflows/browser-e2e.md +0 -119
  127. /package/templates/common/Harness/{ACCEPTANCE_PROTOCOL.md → specs/protocols/ACCEPTANCE_PROTOCOL.md} +0 -0
  128. /package/templates/common/Harness/{AGENT_ISOLATION.md → specs/protocols/AGENT_ISOLATION.md} +0 -0
  129. /package/templates/common/Harness/{DEBUG_PROTOCOL.md → specs/protocols/DEBUG_PROTOCOL.md} +0 -0
  130. /package/templates/common/Harness/{HARNESS_BRIDGE.md → specs/protocols/HARNESS_BRIDGE.md} +0 -0
  131. /package/templates/common/Harness/{MEMORY_PROTOCOL.md → specs/protocols/MEMORY_PROTOCOL.md} +0 -0
  132. /package/templates/common/Harness/{TDD-GUIDE.md → specs/protocols/TDD-GUIDE.md} +0 -0
  133. /package/templates/common/Harness/{WF-AUTO-ANGLES.md → specs/workflows/WF-AUTO-ANGLES.md} +0 -0
@@ -4,10 +4,15 @@ Purpose: coordinate subagents for speed without losing control of scope, evidenc
4
4
 
5
5
  Use this file when work needs multiple roles, parallel reading, independent review, broad context, repeated failures, or explicit `/wf` / `/wf-max` invocation.
6
6
 
7
+ Cache-first discipline: subagent context packs follow
8
+ `Harness/specs/runtime/context-loading.md#Cache-First Context Contract`. Inject only routed
9
+ docs and selected files, keep dispatch fields in deterministic order, defer
10
+ unused skill/tool schemas, and return bounded summaries instead of transcripts.
11
+
7
12
  project files are the only durable communication channel; chat/subagent transcript state is non-authoritative. Important assumptions, decisions, blockers, evidence, and handoffs must be written to `Harness/tasks/<task-id>/PROGRESS.md` and `Harness/tasks/<task-id>/PLAN.md`, the current feature doc, `Harness/MEMORY.md`, or `Harness/memory/*` as appropriate.
8
13
 
9
- Subagent work is acceptance-driven. Use [AGENT_ISOLATION.md](AGENT_ISOLATION.md)
10
- for role/context isolation and [ACCEPTANCE_PROTOCOL.md](ACCEPTANCE_PROTOCOL.md)
14
+ Subagent work is acceptance-driven. Use [AGENT_ISOLATION.md](../protocols/AGENT_ISOLATION.md)
15
+ for role/context isolation and [ACCEPTANCE_PROTOCOL.md](../protocols/ACCEPTANCE_PROTOCOL.md)
11
16
  for PRD-GATE, AC-GATE, CONTRACT-GATE, TEST-GATE, VALIDATION-GATE, and
12
17
  REVIEW-GATE.
13
18
 
@@ -82,7 +87,7 @@ Hard rule: implementer may not be the independent validator for the same AC ID.
82
87
 
83
88
  ## WF Default Fan-Out
84
89
 
85
- Explicit `/wf`, `$wf`, or `/skills wf` requires tier-specific role coverage per `Harness/WF.md`.
90
+ Explicit `/wf`, `$wf`, or `/skills wf` requires tier-specific role coverage per `Harness/specs/workflows/WF.md`.
86
91
  WF-Light: planner + test-writer + implementer + verifier.
87
92
  WF-Standard: adds research/docs + one review lens.
88
93
  WF-Full: complete role-chain coverage from `.claude/agents/` before closeout: plan,
@@ -106,7 +111,7 @@ Then add phase-specific agents:
106
111
  - `context-master` before closeout for knowledge extraction
107
112
  - `memory-master` after repeated failures and during closeout for consolidation
108
113
 
109
- Collaboration mode is determined by WF tier and concrete conditions, not a fixed ratio. See `Harness/WF.md` for the tier decision guide. Summary: WF-Light uses minimal roles. WF-Standard uses moderate roles with one review lens. WF-Full always uses the complete role chain. Non-WF complex work may still use subagents and planning without entering any WF mode. Repeated failure after two attempts escalates to next tier.
114
+ Collaboration mode is determined by WF tier and concrete conditions, not a fixed ratio. See `Harness/specs/workflows/WF.md` for the tier decision guide. Summary: WF-Light uses minimal roles. WF-Standard uses moderate roles with one review lens. WF-Full always uses the complete role chain. Non-WF complex work may still use subagents and planning without entering any WF mode. Repeated failure after two attempts escalates to next tier.
110
115
 
111
116
  ## Efficiency Ladder
112
117
 
@@ -125,11 +130,15 @@ Max parallelism removes the Harness default cap, not the runtime's physical or
125
130
  account cap. For WF-MAX, record the current runtime budget, use native
126
131
  subagents first, close completed agents before declaring the pool exhausted,
127
132
  then overflow to a peer CLI (`claude -p`, `codex exec`, or `opencode run --agent <role> --dir .`) with explicit
128
- dispatch packets. Generated Harness Codex config defaults to
129
- `agents.max_threads = 12` and `agents.max_depth = 1`; if that becomes the
130
- bottleneck, ask the user before raising `agents.max_threads` and keep
131
- `max_depth = 1` unless recursive delegation is explicitly approved. Do not rely
132
- on undocumented fork/derive bypasses as stable capacity.
133
+ dispatch packets. WF-MAX must attempt native subagent fan-out and record
134
+ `fanoutAttempted: true` before any solo fallback. Do not scaffold Codex scalar
135
+ `[agents]` capacity fields into `.codex/config.toml`; codex-cli 0.144.x can
136
+ reject them during TUI `skills/list`. Probe the installed runtime first and
137
+ manage Codex WF-MAX caps through the dispatch ledger unless the installed
138
+ version accepts the config shape. Generated OpenCode config defaults to
139
+ `subagent_depth = 2` so manager subagents can invoke worker subagents; manager
140
+ agents also need `permission.task` allowlists. Do not rely on undocumented
141
+ fork/derive bypasses as stable capacity.
133
142
 
134
143
  Default for explicit WF invocation: tier-based. WF-Light: planner + test-writer + implementer + verifier (bounded passes acceptable). WF-Standard: adds research/docs + one independent review lens. WF-Full: complete role chain, use bounded role passes as the recorded fallback when subagents are unavailable.
135
144
 
@@ -168,7 +177,7 @@ controller intake
168
177
 
169
178
  ## Dispatch Pack
170
179
 
171
- Use the canonical dispatch input and handoff format in `Harness/dispatch.md`. Every subagent dispatch must be self-contained - inject only the docs selected by `Harness/README.md` and `Harness/context-loading.md`. On session start, the controller reads `Harness/tasks/<task-id>/STATE.json` per [WF-STATE.md](WF-STATE.md) to resume the dispatch ledger and ready queue.
180
+ Use the canonical dispatch input and handoff format in `Harness/specs/runtime/dispatch.md`. Every subagent dispatch must be self-contained - inject only the docs selected by `Harness/README.md` and `Harness/specs/runtime/context-loading.md`. On session start, the controller reads `Harness/tasks/<task-id>/STATE.json` per [WF-STATE.md](../workflows/WF-STATE.md) to resume the dispatch ledger and ready queue.
172
181
 
173
182
  ## Parallelism Rules
174
183
 
@@ -22,7 +22,7 @@ But perpetual search without direction = drift. The **Roadmap** is the anchor.
22
22
 
23
23
  WF-AUTO-SPARK is a `/wf` variant layered on WF-AUTO: it inherits the WF-KERNEL contract via WF-AUTO and WF constraints, and does not define an independent heavy process. External spark search replaces discovery only; it does not replace acceptance, implementation, review, verification, reflection, or evidence.
24
24
 
25
- Accepted spark candidates re-enter the standard W2-W5 gates per [WF-KERNEL.md](WF-KERNEL.md): implementer (one file_claim, ≤3 files, ≤50 lines), verifier, reviewer(s), reflector. Spark searchers are read-only. Any implementation must use the dispatch packet from `Harness/dispatch.md` with explicit write set, forbidden truth files, AC IDs, and verification commands. A candidate with no verifier evidence or no reflector PASS is not accepted, even if the idea is valuable.
25
+ Accepted spark candidates re-enter the standard W2-W5 gates per [WF-KERNEL.md](WF-KERNEL.md): implementer (one file_claim, ≤3 files, ≤50 lines), verifier, reviewer(s), reflector. Spark searchers are read-only. Any implementation must use the dispatch packet from `Harness/specs/runtime/dispatch.md` with explicit write set, forbidden truth files, AC IDs, and verification commands. A candidate with no verifier evidence or no reflector PASS is not accepted, even if the idea is valuable.
26
26
 
27
27
  For task-state writes, CEO provides concise bullets and decisions; task-scribe formats task-state writes for roadmap, cycle PLAN, heartbeat, evidence pointers, and closeout. If task-scribe is unavailable, CEO may write the smallest durable checkpoint and must record that degradation in `PROGRESS.md`. This keeps the high-reasoning controller focused on decisions instead of spending tokens formatting process files.
28
28
 
@@ -313,7 +313,7 @@ This replaces the broken `/wf-auto` auto-continue. No silent drift across sessio
313
313
 
314
314
  | File | Purpose |
315
315
  |------|---------|
316
- | `Harness/WF-AUTO-SPARK.md` | This spec |
316
+ | `Harness/specs/workflows/WF-AUTO-SPARK.md` | This spec |
317
317
  | `Harness/tasks/auto/SPARK-ROADMAP.md` | Active roadmap (created at startup) |
318
318
  | `Harness/tasks/auto/PLAN.md` | Per-cycle change spec |
319
319
  | `Harness/tasks/auto/PROGRESS.md` | Cycle log, heartbeat, evidence ledger |
@@ -296,11 +296,16 @@ Every cycle writes one entry to `Harness/tasks/auto/PROGRESS.md`:
296
296
 
297
297
  IMMEDIATELY return to W0. No pause between cycles — the only breaks are the adaptive Intent Checkpoint and the A-GATE.
298
298
 
299
- ### WF-AUTO Hook Exception
299
+ ### Runtime Hook Boundaries
300
300
 
301
- Runtime hooks are disabled by default across the Harness scaffold. The only
302
- allowed exception is an explicitly enabled `/wf-auto` tick hook for long-running
303
- auto-optimization.
301
+ Execution-control hooks are disabled by default across the Harness scaffold.
302
+ Startup update-check hooks are not execution-control hooks. Only an explicitly
303
+ enabled `/wf-auto` tick hook may drive long-running auto-optimization.
304
+
305
+ Manual or benchmark-driven single-cycle `/wf-auto` runs use the same bounded
306
+ tick contract: they may stop because the caller explicitly requested one tick,
307
+ but they still MUST create or update `Harness/tasks/auto/PLAN.md` and
308
+ `Harness/tasks/auto/PROGRESS.md` before returning.
304
309
 
305
310
  The hook is not a role-enforcement mechanism, not a memory injection mechanism,
306
311
  and not WF-MAX state. It is only a bounded tick trigger:
@@ -316,8 +321,8 @@ wf-auto hook event
316
321
 
317
322
  Hard boundaries:
318
323
 
319
- - no hook is installed or registered by default
320
- - only `/wf-auto` may use a runtime hook
324
+ - no execution-control hook is installed or registered by default
325
+ - only `/wf-auto` may use a runtime hook to drive auto-optimization
321
326
  - the hook must run one bounded tick, not an unbounded process
322
327
  - the hook must respect `Harness/tasks/auto/STOP`, `state=paused`, user stop,
323
328
  and the Adaptive Coverage Exhaustion Gate
@@ -368,7 +373,7 @@ Spark is NOT a separate optimization engine. It is a **candidate provider** plug
368
373
  - User explicitly requests `/wf-auto-spark` → full perpetual inspiration mode (see `WF-AUTO-SPARK.md`)
369
374
  - User says "I don't know" at an Intent Checkpoint
370
375
 
371
- **`/wf-auto-spark` is a standalone perpetual mode** (spec: `Harness/WF-AUTO-SPARK.md`). Unlike vanilla spark which is a candidate provider inside `/wf-auto`, the standalone mode:
376
+ **`/wf-auto-spark` is a standalone perpetual mode** (spec: `Harness/specs/workflows/WF-AUTO-SPARK.md`). Unlike vanilla spark which is a candidate provider inside `/wf-auto`, the standalone mode:
372
377
  - Never auto-stops — only user can stop it
373
378
  - Requires a roadmap (North Star + staged milestones) declared at startup
374
379
  - Enforces ≤50% deviation guard against North Star
@@ -2,6 +2,16 @@
2
2
 
3
3
  The WF Kernel is the shared engine for `/wf`, `/wf-max`, `/wf-auto`, `/wf-auto-spark`, `/wf-review`, and `/wf-browser`. Variants extend the kernel; they do not duplicate the orchestration logic.
4
4
 
5
+ ## Cache-First Context Contract
6
+
7
+ All WF variants preserve prompt-cache shape: stable workflow instructions and
8
+ deterministic dispatch schema first; task-specific state, current runtime facts,
9
+ and latest tool outputs last. Use
10
+ `Harness/specs/runtime/context-loading.md#Cache-First Context Contract` for load ordering.
11
+ Dispatch packets keep canonical field order, load only selected skills/tools,
12
+ and return bounded summaries through `MaxReturnTokens` and `ReturnSchema`
13
+ instead of transcripts.
14
+
5
15
  ## Role / Model Matrix
6
16
 
7
17
  The orchestrator dispatches agents by role, model tier, and task type. No single agent type handles all work.
@@ -121,7 +131,7 @@ ReturnSchema:
121
131
 
122
132
  | Task Type | Primary Agents | Skills |
123
133
  |---|---|---|
124
- | UI/browser behavior | test-writer, implementer, verifier, reviewer | browser-e2e, wf-browser |
134
+ | UI/browser behavior | test-writer, implementer, verifier, reviewer | wf-browser |
125
135
  | API/backend | docs-researcher, test-writer, implementer, verifier, reviewer (security) | tdd |
126
136
  | Architecture/migration | architect, codebase-explorer, planner, reviewer | — |
127
137
  | Docs/README | wf-readme, reviewer, task-scribe | wf-readme |
@@ -18,14 +18,37 @@ WF-MAX is **explicit only**. Enter ONLY when the user explicitly types `/wf-max`
18
18
 
19
19
  ## Fan-Out Modes
20
20
 
21
- **WF-Max-Useful** (default): fan-out only where writeSets or review lenses are meaningfully independent. Overhead > 0.30 degrades a wave to flat role pass. CEO uses D-GATE but Manager/Worker fan-out is gated by actual independence.
21
+ **WF-Max-Useful** (default): fan-out only where writeSets or review lenses are meaningfully independent. Overhead > 0.30 degrades a wave to flat role pass. This does not authorize CEO source edits: source implementation still goes through an implementer/Worker role, or the run records an honest downgrade before editing.
22
22
 
23
23
  **WF-Max-Strict** (explicit `--strict`, `strict wf-max`, or `strict mode`): unconditional fan-out per span formula. Every file gets a Worker.
24
24
 
25
+ ## Mandatory Fan-Out Contract
26
+
27
+ `/wf-max` MUST attempt native subagent fan-out before implementation planning is considered complete. A solo controller path is allowed only after an explicit degradation record.
28
+
29
+ Minimum W0 attempt:
30
+
31
+ - Start `task-scribe` when available to maintain task state and the dispatch ledger.
32
+ - Start at least one independent read-only planning/exploration/review lane. For real multi-domain tasks, prefer `explore-manager` plus scoped researchers or codebase explorers.
33
+ - Record `fanoutAttempted: true`, runtime, channel tried, agents requested, configured/runtime limit facts, result, and degradation reason in the task PLAN or PROGRESS.
34
+
35
+ Mode interaction:
36
+
37
+ - WF-Max-Useful may shrink the fan-out after the first native attempt when write sets or review lenses are not meaningfully independent. It may not silently skip the attempt.
38
+ - WF-Max-Strict continues through the span formula until the Harness caps, runtime caps, user budget, or safety gates stop dispatch.
39
+ - If native manager fan-out is unavailable, the controller dispatches leaf agents directly with exact WF-MAX dispatch packets; if no independent channel exists, stop honestly and ask the user.
40
+
41
+ OpenCode-specific requirement: project `opencode.json` must set `subagent_depth >= 2` for manager -> worker nesting, and WF-MAX manager agents must expose `permission.task` allowlists for their child agents. Without those two settings, OpenCode may accept `/wf-max` but fail to fan out from manager subagents.
42
+
25
43
  ## CEO Contract
26
44
 
27
45
  CEO reads, plans, dispatches, synthesizes, and writes task state only.
28
46
  - **CEO never writes production source code.** All source edits are delegated to Workers.
47
+ - Any new task capsule uses `task-<verb>-<noun>[-detail]` under
48
+ `Harness/tasks/<task-id>/`; never use bare `fix-*` task ids.
49
+ - When updating `Harness/PROGRESS.md`, preserve required headings such as
50
+ `## Active Task`, `## Task Index`, and `## Cross-Task Decisions`; append or
51
+ update rows instead of replacing the file skeleton.
29
52
  - CEO spawns task-scribe (haiku) by default to maintain dispatch ledger, heartbeat, and evidence pointers; if unavailable, CEO records the degradation and writes only the smallest durable checkpoint.
30
53
  - CEO may spawn codebase-explorer(s) (haiku) for scoped source discovery.
31
54
 
@@ -45,7 +68,7 @@ WF-MAX Workers MUST execute as **independent agent contexts** — never as in-pr
45
68
 
46
69
  When delegating source edits to a Worker, try channels in order; descend on failure; when all independent channels are unavailable, stop honestly and ask the user — do NOT fall back to an in-process MCP tool:
47
70
 
48
- 0. **Probe first** — before dispatching any Worker, run `node Harness/scripts/probe-worker-channels.mjs` and read the live matrix (`Harness/tasks/auto/CHANNEL-MATRIX.md`). Degrade based on facts, not assumptions. Start the chain at the highest-priority channel the probe reports `available`.
71
+ 0. **Use proven channels only** — prefer the current runtime's native subagent channel when it has already returned successfully in this session. If a peer CLI is needed, follow `.claude/skills/wf-agents-docs/SKILL.md`, keep output on stdout, and return an Evidence-Packet instead of scratch files.
49
72
  1. native subagent (preferred — independent context, bounded writeSet)
50
73
  2. `claude -p` peer CLI (independent process)
51
74
  3. `codex exec` peer CLI (independent process)
@@ -57,11 +80,11 @@ When delegating source edits to a Worker, try channels in order; descend on fail
57
80
 
58
81
  ### Timeout & Retry
59
82
 
60
- Every channel probe is bounded to ≤15s via `Promise.race` (see `probe-worker-channels.mjs`). A Worker dispatch that returns `unavailable-timeout` or `unavailable-error` (transient) is retried **once**; a second failure descends to the next channel in the chain. WF-MAX MUST NEVER hang on an unresponsive channel (historical failure: a 300s Codex read-only query hang, `tasks/task-framework-metrics-and-entry-contract/PLAN.md`). Bounded probes + single retry + honest descent replace silent hangs.
83
+ Every Worker dispatch or peer-CLI call must be bounded by the controller's command timeout. A Worker dispatch that returns `unavailable-timeout` or `unavailable-error` (transient) is retried **once**; a second failure descends to the next channel in the chain. WF-MAX MUST NEVER hang on an unresponsive channel (historical failure: a 300s Codex read-only query hang, `tasks/task-framework-metrics-and-entry-contract/PLAN.md`). Bounded calls + single retry + honest descent replace silent hangs.
61
84
 
62
- ### Probe the current environment
85
+ ### Capability Evidence
63
86
 
64
- Run `node Harness/scripts/probe-worker-channels.mjs` to get the live availability + independence matrix (see `tasks/auto/CHANNEL-MATRIX.md`). Degrade based on facts, not assumptions.
87
+ Record the channel actually used, command/tool form, timeout, exit status, and a <=250 token Evidence-Packet in the task capsule. Do not create ad hoc probe scripts or write peer-CLI output to `%TEMP%`; persistent evidence belongs only under the current task's `evidence/` directory when it is intentionally part of the task record.
65
88
 
66
89
  ## Parallelism Priority
67
90
 
@@ -99,11 +122,21 @@ WF-MAX fan-out is bounded. Unbounded worker dispatch is forbidden.
99
122
  - **Overflow discipline**: Cross-CLI overflow (Codex → Claude, Claude → Codex) is allowed only after native subagent pool is genuinely exhausted (not just busy). Each overflow dispatch costs context; prefer closing completed agents first.
100
123
  - **Idle workers**: Close completed agents before declaring the pool exhausted. Do not spawn new workers while idle capacity is available.
101
124
 
125
+ ## Runtime Capacity Map
126
+
127
+ Harness treats vendor/runtime limits as outer ceilings, not as permission to exceed the WF-MAX caps above.
128
+
129
+ | Runtime | Native limit/config surface | Harness rule |
130
+ | --- | --- | --- |
131
+ | Claude Code | Official docs describe subagent caps for session total `CLAUDE_CODE_MAX_SUBAGENTS_PER_SESSION` (default 200), concurrency `CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS` (default 20), and spawn depth `CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH` (default 3); use current Claude Code agent/subagent settings when available. | Record the detected limit/source when known; Harness WF-MAX caps still apply unless the user approves a task-local override. Do not raise environment limits without user approval. |
132
+ | Codex | Official manual documents `[agents].max_concurrent_threads_per_session`; `agents.max_threads` is a legacy alias. Local codex-cli 0.144.x can reject scalar `[agents]` caps from project `.codex/config.toml` during TUI `skills/list`. | Do not scaffold Codex scalar agent caps into `.codex/config.toml`. Probe the installed runtime first; Harness manages a conservative task-local cap through the dispatch ledger unless `codex --strict-config doctor` verifies the config shape. |
133
+ | OpenCode | Official config uses `subagent_depth`; default `1` permits primary -> subagent but blocks subagent -> subagent. `0` disables subagent launches; `2` permits one nested manager -> worker level. No official concurrent-count cap was found in the current docs. | Generated config sets `subagent_depth = 2`; Harness manages total/per-wave counts through WF-MAX caps and manager `permission.task` allowlists. |
134
+
102
135
  ## Organization Model
103
136
 
104
137
  ```
105
138
  CEO(1) -> Manager_1(span) -> Worker_1..n
106
- -> Manager_2(span) -> Sub-Manager(span) -> Worker_1..n
139
+ -> Manager_2(span) -> Worker_1..n
107
140
  ```
108
141
 
109
142
  ## D-GATE
@@ -116,7 +149,7 @@ D-GATE is mandatory before implementation waves per [WF-KERNEL.md](WF-KERNEL.md)
116
149
  2. Close completed agents; fill idle slots immediately.
117
150
  3. Cross-CLI overflow: use an available peer CLI with explicit dispatch packets: `claude -p`, `codex exec`, or `opencode run --agent <role> --dir .`.
118
151
  4. Bounded-pass fallback only when subagents and overflow are exhausted.
119
- 5. Generated Codex config defaults to `agents.max_threads = 12` and `agents.max_depth = 1`. Ask the user before raising `agents.max_threads` above that default. Keep `max_depth = 1` unless recursive delegation is explicitly approved.
152
+ 5. Codex compatibility guard: do not write scalar `[agents]` capacity fields into project `.codex/config.toml` by default. Probe the installed version first; local codex-cli 0.144.x has been observed to reject those fields during TUI `skills/list`. Harness manages Codex WF-MAX concurrency through the dispatch ledger and asks the user before any project/global Codex config change.
120
153
  6. Do not rely on Codex++, undocumented config, environment variables, forked/derived conversations, or third-party forks as stable capacity.
121
154
 
122
155
  ## Anti-Patterns and Sizing
@@ -0,0 +1,141 @@
1
+ # WF-STATE - Lightweight Resumable State Machine
2
+
3
+ Purpose: persist resumable workflow state across compaction, new Claude Code
4
+ windows, new terminals, and project reopen. It is NOT a scheduler, daemon, lock
5
+ manager, async runtime, or graph framework.
6
+
7
+ ## State Files
8
+
9
+ | File | Role |
10
+ |------|------|
11
+ | `Harness/PROGRESS.md` | Derived global active pointer and Task Index |
12
+ | `Harness/tasks/<task-id>/STATE.json` | Canonical machine-readable resume truth |
13
+ | `Harness/tasks/<task-id>/PROGRESS.md` | Human-readable summary |
14
+ | `Harness/tasks/<task-id>/PLAN.md` | Plan, decisions, scope context |
15
+
16
+ Task id convention: new task capsules MUST use
17
+ `task-<verb>-<noun>[-detail]` (kebab-case, 2-5 words after the prefix), for
18
+ example `task-fix-login-flow`. Do not create bare task names such as
19
+ `fix-login-flow`.
20
+
21
+ ## Enums
22
+
23
+ ### status
24
+
25
+ `active`, `blocked`, `in_progress`, `running`, `pending`,
26
+ `needs-user-decision`, `complete`, `verified`, `archived`, `abandoned`,
27
+ `obsolete`, `done`, `closed`, `closeout`, `skipped`, `failed`
28
+
29
+ ### phase
30
+
31
+ `intake`, `clarify`, `requirements`, `prd`, `acceptance`, `plan`, `explore`,
32
+ `implement`, `verify`, `review`, `fix`, `reflect`, `closeout`, `blocked`,
33
+ `verified`, `archived`
34
+
35
+ Legacy aliases such as `Implementation`, `Validation`, and
36
+ `Verified/Complete` are normalized by `task-state.mjs`.
37
+
38
+ ### item status (queues)
39
+
40
+ `pending`, `ready`, `running`, `done`, `blocked`, `skipped`, `failed`
41
+
42
+ ### mode
43
+
44
+ `direct`, `wf`, `wf-max`, `wf-auto`, `wf-auto-spark`, `wf-review`,
45
+ `wf-browser`
46
+
47
+ ### tier
48
+
49
+ `none`, `light`, `standard`, `full`, `max-useful`, `max-strict`
50
+
51
+ ## Rules
52
+
53
+ 1. **STATE.json is machine-readable resume truth.** On session start, the agent
54
+ reads it to know where it left off.
55
+ 2. **PROGRESS.md is human-readable summary.** It mirrors key state but is
56
+ secondary for machine reasoning and may be rewritten from state.
57
+ 3. **PLAN.md is plan/decision context.** Load only when decisions or scope need
58
+ review.
59
+ 4. **On every phase transition, dispatch return, blocker, verification result,
60
+ review finding, or closeout, update STATE.json through
61
+ `Harness/scripts/task-state.mjs` when the command covers the change.**
62
+ task-scribe or controller writes; production agents never write task state.
63
+ 5. **Long logs/transcripts never go into STATE.json.** Store paths only.
64
+ 6. **task-scribe may update STATE.json and task summaries; production agents may
65
+ not.**
66
+ 7. **If STATE.json conflicts with PLAN/PROGRESS, controller stops and reconciles
67
+ before continuing.**
68
+
69
+ ## CLI Contract
70
+
71
+ Use `Harness/scripts/task-state.mjs` as the deterministic state writer:
72
+
73
+ - `node Harness/scripts/task-state.mjs list --json`
74
+ - `node Harness/scripts/task-state.mjs validate --json`
75
+ - `node Harness/scripts/task-state.mjs reconcile --dry-run --json`
76
+ - `node Harness/scripts/task-state.mjs reconcile --apply`
77
+ - `node Harness/scripts/task-state.mjs set-active <task-id>`
78
+ - `node Harness/scripts/task-state.mjs transition <task-id> --status <status> --phase <phase>`
79
+ - `node Harness/scripts/task-state.mjs archive --keep 5 --dry-run --json`
80
+ - `node Harness/scripts/task-state.mjs archive --keep 5 --apply`
81
+
82
+ Do not rely on prompt instructions alone to keep active task, task `STATE.json`,
83
+ task `PROGRESS.md`, and root `Harness/PROGRESS.md` synchronized.
84
+
85
+ ## Resume Protocol
86
+
87
+ New window / session start:
88
+
89
+ 1. Read `CLAUDE.md`.
90
+ 2. If user says "continue", "resume", "last task", "current task", "status",
91
+ or the work is not a simple direct task:
92
+ - Read `Harness/PROGRESS.md` and find Active Task.
93
+ - If Active Task exists, read `Harness/tasks/<active-task>/STATE.json`.
94
+ - Read `Harness/tasks/<active-task>/PROGRESS.md`.
95
+ - Read `Harness/tasks/<active-task>/PLAN.md` only if decisions/scope need review.
96
+ 3. From STATE.json, determine:
97
+ - Current phase, gate, tier.
98
+ - activeQuestion (needs user answer before proceeding).
99
+ - Queues: ready (can dispatch immediately), running (awaiting results),
100
+ blocked (needs resolution), done.
101
+ - nextAction (what to do next).
102
+ 4. Do NOT bulk-read `Harness/tasks/` to find context. Use the active pointer.
103
+ 5. Direct simple tasks may skip STATE/PLAN/PROGRESS unless the user says
104
+ "continue"/"resume".
105
+
106
+ ## State Transitions
107
+
108
+ ```text
109
+ intake -> clarify -> requirements -> prd -> acceptance -> plan
110
+ -> explore -> implement -> verify -> review
111
+ -> (fix -> verify -> review loop)
112
+ -> reflect -> closeout
113
+ ```
114
+
115
+ Any phase may transition to `blocked` if a dependency, user decision, or external
116
+ input is required.
117
+
118
+ ## Dispatch Ledger
119
+
120
+ Every dispatch packet MUST have an `id`. On return, controller or task-scribe
121
+ updates the ledger item:
122
+
123
+ - `id`, `agent`, `role`, `phase`, `status` (`pending`, `ready`, `running`,
124
+ `done`, `blocked`, `skipped`, `failed`), `evidence`
125
+
126
+ See [WF-KERNEL.md](WF-KERNEL.md) for the dispatch packet format.
127
+
128
+ ## Integration with /wf and /wf-max
129
+
130
+ - `/wf` uses the STATE ready queue for dynamic orchestration.
131
+ - `/wf-max` uses the SAME STATE ready queue for maximum safe fan-out.
132
+ - When a subagent returns or goes idle, controller immediately dispatches the
133
+ next ready item.
134
+ - task-scribe is the exception for task-state writes.
135
+ - Production source agents do not write STATE/PLAN/PROGRESS unless explicitly
136
+ dispatched as task-scribe.
137
+
138
+ ## Template
139
+
140
+ See `Harness/tasks/_template/STATE.json` for the canonical template. On task
141
+ creation, copy and populate from the template.
@@ -17,6 +17,10 @@ All WF variants (`/wf`, `/wf-max`, `/wf-auto`, `/wf-auto-spark`, `/wf-review`, `
17
17
 
18
18
  Resumable state follows [WF-STATE.md](WF-STATE.md): STATE.json is the machine-readable resume truth; the ready queue is persisted there across sessions.
19
19
 
20
+ New task capsules MUST use task ids matching `task-<verb>-<noun>[-detail]`
21
+ and live under `Harness/tasks/<task-id>/`; never create bare task directories
22
+ like `fix-login`.
23
+
20
24
  This file defines the `/wf` user contract, tiers, and the standard orchestration loop.
21
25
 
22
26
  ## Trigger
@@ -34,6 +38,13 @@ These are NOT WF triggers:
34
38
  2. Load `Harness/memory/*` only when `MEMORY_PROTOCOL.md` scenario hints match.
35
39
  3. Record `Memory preflight: done` and `Memory hints: none | <file/path + reason>`.
36
40
 
41
+ ## Cache Discipline
42
+
43
+ Follow `Harness/specs/runtime/context-loading.md#Cache-First Context Contract`: keep the
44
+ listed router/workflow loads in stable order, load only routed skills/tools, and
45
+ append task state, current runtime facts, and latest tool output after the
46
+ stable docs. Do not bulk-load skill bodies, tool schemas, or `Harness/`.
47
+
37
48
  ## Standard Orchestration Loop
38
49
 
39
50
  The `/wf` kernel follows a dependency-driven ready-queue, NOT a fixed serial phase list.
@@ -126,7 +137,7 @@ Second wave — after synthesis:
126
137
 
127
138
  ## Browser and API Evidence
128
139
 
129
- See [HARNESS_BRIDGE.md](HARNESS_BRIDGE.md) and [WF-KERNEL.md](WF-KERNEL.md) Task Type Routing for UI/browser and API/backend task types.
140
+ See [HARNESS_BRIDGE.md](../protocols/HARNESS_BRIDGE.md) and [WF-KERNEL.md](WF-KERNEL.md) Task Type Routing for UI/browser and API/backend task types.
130
141
 
131
142
  Agents live under `.claude/agents/` and `.opencode/agents/`. Task state lives under `Harness/tasks/<task-id>/`.
132
143
 
@@ -26,21 +26,23 @@ Replace the examples with the real commands discovered from this project. If a c
26
26
 
27
27
  - Keep branch, commit, pull request, CI, and release conventions in this README.
28
28
  - Do not place build scripts, git policy, or project maintenance instructions in `CLAUDE.md`.
29
- - Keep code architecture notes in `Harness/architecture.md` or feature docs.
29
+ - Keep code architecture notes in `Harness/project/architecture.md` or feature docs.
30
30
  - For README improvements, use `.claude/skills/wf-readme/SKILL.md`; preserve public docs unless a rewrite is approved.
31
31
 
32
32
  ## Harness
33
33
 
34
34
  The agentic engineering harness lives in `Harness/`.
35
35
 
36
- - Follow `Harness/SETUP.md` before normal work while it exists.
37
- - Start at `Harness/README.md`.
38
- - Load memory and resource registrations from `Harness/MEMORY.md`.
36
+ - Normal agent sessions start from `CLAUDE.md`.
37
+ - Use `Harness/specs/guides/SETUP.md` only for install/bootstrap guidance, migration, upgrade decisions, or explicit setup requests.
38
+ - Use `Harness/README.md` as the Harness workflow router when a routed task needs it.
39
+ - Load memory and resource registrations from `Harness/MEMORY.md` only when routed.
39
40
  - Track active work in `Harness/PROGRESS.md` and `Harness/tasks/<task-id>/PROGRESS.md`.
40
- - Use `Harness/WF.md` only when the user explicitly invokes a WF command such as `/wf` or `/wf-max`; complex work may still use direct planning, tests, and subagents without entering WF.
41
+ - Use `/wf-update` or `$wf-update` for Harness upgrades; the agent should report version, changed files, validation results, and release highlights from update metadata.
42
+ - Use `Harness/specs/workflows/WF.md` only when the user explicitly invokes a WF command such as `/wf` or `/wf-max`; complex work may still use direct planning, tests, and subagents without entering WF.
41
43
  - Claude Code: invoke the `wf` skill with `/wf`.
42
44
  - Codex: invoke the `wf` skill with `$wf` or `/skills`.
43
- - Use `Harness/subagents.md` when coordinating multiple agents.
45
+ - Use `Harness/specs/runtime/subagents.md` when coordinating multiple agents.
44
46
 
45
47
  Tool discovery files stay at the repository root:
46
48
 
@@ -1,32 +1,34 @@
1
1
  # Startup Hints (L2 Memory Digest)
2
2
 
3
- > L2 = 启动极简 memory digest。每次 Harness 会话启动可读此文件,但不要加载完整 Harness/MEMORY.md Harness/README.md。
3
+ > L2 = lightweight startup memory digest. New Harness sessions may read this
4
+ > file after `CLAUDE.md`, but must not load full `Harness/MEMORY.md`,
5
+ > `Harness/README.md`, or `Harness/PROGRESS.md` during thin startup.
4
6
 
5
7
  ## Core Principles
6
8
 
7
- - Memory 是短场景规则,不是 task log
8
- - 时间戳默认不要写;只有 superseded / conflict / time-sensitive 才写。
9
- - Broad runtime hooks 禁止;只有 `/wf-auto` bounded tick hook 例外。
10
- - Direct mode 不加载完整 Harness router,但 startup-hints 是允许的轻量启动提示。
11
- - 详细 memory 仍按 `MEMORY_PROTOCOL.md` 场景命中后再读。
9
+ - Memory is short scenario guidance, not a task log.
10
+ - Do not write timestamps by default; write only durable, reusable guidance.
11
+ - Broad runtime hooks are forbidden. The only Harness exception is the bounded `/wf-auto` tick hook.
12
+ - Direct mode must not load the full Harness router. `startup-hints.md` is the lightweight startup allowance.
13
+ - Detailed memory still loads only when routed through `MEMORY_PROTOCOL.md`.
12
14
 
13
15
  ## Memory Candidate Detection
14
16
 
15
- 用户说以下触发词时,识别为 memory candidate:
17
+ Treat these as memory candidates:
16
18
 
17
- **英文**: remember, next time, don't, do not, never, always, I prefer, I want you to
18
- **中文**: 记住, 下次, 以后, 不要再, 总是, 永远不要, 我偏好, 我希望你以后
19
+ - English: remember, next time, don't, do not, never, always, I prefer, I want you to
20
+ - Chinese: 记住, 下次, 以后, 不要再, 总是, 永远不要, 我偏好, 我希望你以后
19
21
 
20
22
  ## When to Write Memory
21
23
 
22
- - **Explicit user preference**: 清晰、安全、场景明确时,可立即写入 L3,不必等 `/wf-learn`。
23
- - **Repeated implicit correction**: 同一假设/模式被纠正 2+ 次。
24
- - **Tool/command failure**: 同类工具/命令失败 3+ 次。
25
- - **Review/debug lesson**: 只有可复用、能防回归时才写。
24
+ - Explicit user preference: write immediately only when clear, safe, and reusable.
25
+ - Repeated implicit correction: same assumption or pattern corrected 2+ times.
26
+ - Tool/command failure: same tool or command pattern fails 3+ times.
27
+ - Review/debug lesson: write only when it is reusable and can prevent regressions.
26
28
 
27
29
  ## What NOT to Write
28
30
 
29
- - Task log、过程总结、一次性情绪
30
- - Raw logstranscripts
31
- - Secrets, tokens, credentials, private data
32
- - 临时偏好、无复用价值的笔记
31
+ - Task logs, process summaries, or one-off emotions.
32
+ - Raw logs or transcripts.
33
+ - Secrets, tokens, credentials, or private data.
34
+ - Temporary preferences or notes with no reusable value.
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "$schema": "https://opencode.ai/config.json",
3
3
  "instructions": [".claude/rules/ecc/common.md"],
4
+ "subagent_depth": 2,
4
5
  "permission": {
5
6
  "bash": {
6
7
  "*": "ask",
@@ -1,12 +1,5 @@
1
1
  {
2
2
  "skills": [
3
- {
4
- "id": "browser-e2e",
5
- "title": "Browser E2E",
6
- "description": "Mandatory real-browser smoke workflow using Playwright, Chrome DevTools/CDP, or documented manual evidence.",
7
- "files": ["skills/browser-e2e"],
8
- "tags": ["e2e", "browser", "playwright", "cdp"]
9
- },
10
3
  {
11
4
  "id": "ui-ux-review",
12
5
  "title": "UI/UX Review",
@@ -37,8 +30,8 @@
37
30
  }
38
31
  ],
39
32
  "presets": {
40
- "web-app": ["ts-react-frontend", "browser-e2e", "ui-ux-review"],
41
- "fullstack": ["ts-react-frontend", "python-backend", "browser-e2e", "github-pr-review"]
33
+ "web-app": ["ts-react-frontend", "ui-ux-review"],
34
+ "fullstack": ["ts-react-frontend", "python-backend", "github-pr-review"]
42
35
  },
43
36
  "externalRecommendations": [
44
37
  {
@@ -37,4 +37,4 @@ Update `Harness/tasks/<task-id>/PLAN.md` only when the PR review is part of a tr
37
37
 
38
38
  ## dispatch.md Usage
39
39
 
40
- Use `Harness/dispatch.md` when independent review areas can be assigned separately, such as backend, frontend, and CI.
40
+ Use `Harness/specs/runtime/dispatch.md` when independent review areas can be assigned separately, such as backend, frontend, and CI.
@@ -37,4 +37,4 @@ Update `Harness/tasks/<task-id>/PLAN.md` only when executing a tracked plan item
37
37
 
38
38
  ## dispatch.md Usage
39
39
 
40
- Use `Harness/dispatch.md` for separable backend work such as API implementation, database changes, and test coverage.
40
+ Use `Harness/specs/runtime/dispatch.md` for separable backend work such as API implementation, database changes, and test coverage.
@@ -40,4 +40,4 @@ Update `Harness/tasks/<task-id>/PLAN.md` only when executing a tracked task or r
40
40
 
41
41
  ## dispatch.md Usage
42
42
 
43
- Use `Harness/dispatch.md` when independent frontend tasks can run in parallel, such as components, tests, and browser checks.
43
+ Use `Harness/specs/runtime/dispatch.md` when independent frontend tasks can run in parallel, such as components, tests, and browser checks.
@@ -37,4 +37,4 @@ Update current task `tasks/<id>/PLAN.md` only for tracked review tasks or when r
37
37
 
38
38
  ## dispatch.md Usage
39
39
 
40
- Use `Harness/dispatch.md` only for independent review streams such as separate routes or breakpoints.
40
+ Use `Harness/specs/runtime/dispatch.md` only for independent review streams such as separate routes or breakpoints.