create-harness-vibe-coding 0.2.0 → 0.3.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 (50) hide show
  1. package/README-CN.md +94 -0
  2. package/README.md +104 -21
  3. package/package.json +3 -2
  4. package/src/generator.js +2 -0
  5. package/templates/common/.claude/agents/context-master.md +78 -0
  6. package/templates/common/.claude/agents/debugger.md +1 -1
  7. package/templates/common/.claude/agents/docs-researcher.md +1 -1
  8. package/templates/common/.claude/agents/implementer.md +1 -1
  9. package/templates/common/.claude/agents/memory-master.md +67 -0
  10. package/templates/common/.claude/agents/planner.md +1 -1
  11. package/templates/common/.claude/agents/researcher.md +1 -1
  12. package/templates/common/.claude/agents/test-writer.md +1 -1
  13. package/templates/common/.claude/agents/verifier.md +1 -1
  14. package/templates/common/.claude/commands/update.md +11 -0
  15. package/templates/common/.claude/commands/wf.md +10 -4
  16. package/templates/common/.claude/rules/ecc/common.md +2 -2
  17. package/templates/common/.claude/skills/harness-build-loop/SKILL.md +2 -1
  18. package/templates/common/.claude/skills/harness-context/SKILL.md +2 -1
  19. package/templates/common/.claude/skills/harness-lifecycle/SKILL.md +2 -1
  20. package/templates/common/.claude/skills/harness-research/SKILL.md +2 -1
  21. package/templates/common/.claude/skills/harness-router/SKILL.md +2 -2
  22. package/templates/common/.claude/skills/readme-optimizer/SKILL.md +3 -2
  23. package/templates/common/.claude/skills/subagent-orchestrator/SKILL.md +9 -4
  24. package/templates/common/.claude/skills/wf-mode/SKILL.md +13 -6
  25. package/templates/common/.claude/skills/wf-update/SKILL.md +58 -0
  26. package/templates/common/.harness-version +8 -0
  27. package/templates/common/CLAUDE.md +15 -5
  28. package/templates/common/MEMORY.md +6 -1
  29. package/templates/common/README.md +2 -2
  30. package/templates/common/SETUP.md +34 -20
  31. package/templates/common/docs/README.md +24 -17
  32. package/templates/common/docs/domain/ports.md +3 -0
  33. package/templates/common/docs/features/_template.md +11 -1
  34. package/templates/common/docs/harness/PLAN.md +37 -88
  35. package/templates/common/docs/harness/PROGRESS.md +17 -0
  36. package/templates/common/docs/harness/WF.md +32 -14
  37. package/templates/common/docs/harness/agent-workflow.md +19 -7
  38. package/templates/common/docs/harness/architecture.md +31 -7
  39. package/templates/common/docs/harness/context-loading.md +17 -5
  40. package/templates/common/docs/harness/dispatch.md +9 -6
  41. package/templates/common/docs/harness/extension.md +4 -4
  42. package/templates/common/docs/harness/lifecycle.md +2 -2
  43. package/templates/common/docs/harness/state-machines.md +8 -0
  44. package/templates/common/docs/harness/subagents.md +50 -9
  45. package/templates/common/docs/research/README.md +3 -3
  46. package/templates/common/docs/tasks/_template/ARTIFACTS.md +3 -0
  47. package/templates/common/docs/tasks/_template/NOTES.md +3 -0
  48. package/templates/common/docs/tasks/_template/PLAN.md +40 -0
  49. package/templates/common/docs/tasks/_template/PROGRESS.md +29 -0
  50. package/templates/common/scripts/validate-harness.mjs +78 -7
@@ -4,7 +4,7 @@ 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 `/wf`.
6
6
 
7
- 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/PLAN.md`, the current feature doc, `Harness/MEMORY.md`, or `Harness/memory/*` as appropriate.
7
+ 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
8
 
9
9
  ## Source Attribution
10
10
 
@@ -28,12 +28,52 @@ The main agent is the controller. It owns:
28
28
  - intent confidence and user questions
29
29
  - task decomposition
30
30
  - read/write set boundaries
31
- - dispatch table in `Harness/PLAN.md`
31
+ - dispatch table in `Harness/tasks/<task-id>/PLAN.md#Subagent Dispatch`
32
32
  - integration of returned summaries
33
33
  - final verification and closeout
34
34
 
35
35
  Subagents provide bounded work. They do not own final scope, architecture, release claims, or user-facing decisions.
36
36
 
37
+ ## Built-in Agent Roster
38
+
39
+ Use the installed roster under `.claude/agents/` before inventing ad hoc roles.
40
+
41
+ | Agent | Default Use |
42
+ | --- | --- |
43
+ | `planner` | decompose goals, map unknowns, define success criteria and write sets |
44
+ | `researcher` | local/external ecosystem context, comparable projects, current facts |
45
+ | `docs-researcher` | official docs, SDK/API behavior, browser/tool constraints |
46
+ | `architect` | boundaries, interface decoupling, state ownership, data flow, migration risk |
47
+ | `test-writer` | failing tests, manual check contracts, browser/API evidence plan |
48
+ | `implementer` | bounded code or doc changes after the second plan |
49
+ | `reviewer` | spec compliance, code quality, maintainability, security, missing tests |
50
+ | `debugger` | reproduced failures, root cause isolation, smallest safe fix |
51
+ | `verifier` | command execution, real browser/API checks, final evidence |
52
+ | `memory-master` | write/consolidate memory entries, dedup, cross-project extraction; dispatched on repeated failures, user corrections, and WF closeout |
53
+ | `context-master` | analyze context usage, recommend compression at ~85% window, extract durable session knowledge during closeout |
54
+
55
+ ## WF Default Fan-Out
56
+
57
+ Explicit `/wf`, `wf mode`, `workflow mode`, or `wk mode` requires at least 3 distinct agents from `.claude/agents/` before second planning.
58
+
59
+ Default starter set:
60
+
61
+ - `planner` for decomposition and local map
62
+ - `architect` for boundaries, interfaces, and state impact
63
+ - `researcher` or `docs-researcher` depending whether the unknowns are project/ecosystem facts or official tool/API behavior
64
+
65
+ Then add phase-specific agents:
66
+
67
+ - `test-writer` before implementation
68
+ - `implementer` for the serial write lane
69
+ - `reviewer` for spec and code-quality gates
70
+ - `debugger` after a reproduced verification failure
71
+ - `verifier` for final command/browser/API evidence
72
+ - `context-master` before closeout for knowledge extraction
73
+ - `memory-master` after repeated failures and during closeout for consolidation
74
+
75
+ The default decision ratio is a 7:3 collaboration bias: choose multi-agent collaboration for substantial or uncertain work about 70% of the time; choose solo mode only for clearly local, low-risk work that is not explicitly in WF/WK mode.
76
+
37
77
  ## Efficiency Ladder
38
78
 
39
79
  Choose the cheapest coordination level that is safe.
@@ -46,13 +86,13 @@ Choose the cheapest coordination level that is safe.
46
86
  | Serial build lane | normal feature or fix | test-writer -> implementer -> reviewers -> verifier |
47
87
  | Isolated lanes | disjoint write sets or competing approaches | separate worktrees, then review and merge |
48
88
 
49
- Default: at most three active subagents. More agents increase coordination cost and conflict risk.
89
+ Default for automatic WF triggers: 3-5 active read-only agents before second planning. For explicit WF/WK mode, never use the solo pass unless subagents are unavailable; use bounded role passes as the recorded fallback.
50
90
 
51
91
  ## WF Orchestration Shape
52
92
 
53
93
  ```text
54
94
  controller intake
55
- -> parallel explorer/researcher/docs-researcher/architect passes
95
+ -> parallel planner/researcher/docs-researcher/architect subagents
56
96
  -> controller synthesis
57
97
  -> second plan with dependencies and write sets
58
98
  -> test-writer
@@ -91,8 +131,9 @@ Do not make a subagent rediscover the entire project or read the whole harness.
91
131
  - Read-only agents may run in parallel.
92
132
  - Writing agents run serially unless write sets are disjoint and the controller has chosen an isolated worktree.
93
133
  - Reviewers may run in parallel after implementation, but spec compliance is evaluated before code-quality approval.
94
- - Do not let two agents edit `Harness/PLAN.md`, `Harness/MEMORY.md`, or `Harness/memory/*` concurrently. The controller writes durable state.
95
- - If two agents disagree, the controller records the conflict in `Harness/PLAN.md` and chooses the smallest reversible next step.
134
+ - Subagents are readers and reporters. They return findings and PLAN patch suggestions. Only the controller (main agent) commits state changes to task files.
135
+ - Do not let two agents edit `Harness/tasks/<task-id>/PROGRESS.md`, `Harness/tasks/<task-id>/PLAN.md`, `Harness/MEMORY.md`, or `Harness/memory/*` concurrently. The controller writes durable state.
136
+ - If two agents disagree, the controller records the conflict in `Harness/tasks/<task-id>/PLAN.md` and chooses the smallest reversible next step.
96
137
 
97
138
  ## Review Gates
98
139
 
@@ -108,7 +149,7 @@ If either reviewer finds issues, the implementer or debugger fixes them and the
108
149
  | Status | Controller Action |
109
150
  | --- | --- |
110
151
  | `DONE` | start review gates |
111
- | `DONE_WITH_CONCERNS` | read concerns, decide whether to address before review, record in `PLAN.md` |
152
+ | `DONE_WITH_CONCERNS` | read concerns, decide whether to address before review, record in `Harness/tasks/<task-id>/PROGRESS.md` |
112
153
  | `NEEDS_CONTEXT` | provide only missing context and re-dispatch |
113
154
  | `BLOCKED` | change something: add context, split task, upgrade reasoning, use debugger, or ask user |
114
155
 
@@ -117,14 +158,14 @@ Never retry the same failed prompt unchanged.
117
158
  ## Failure Recovery
118
159
 
119
160
  - First failed verification: record evidence, dispatch debugger with the smallest reproduced failure.
120
- - Second same-class failure: narrow scope, update `PLAN.md#Heartbeat`, and add a reviewer before another fix.
161
+ - Second same-class failure: narrow scope, update `Harness/tasks/<task-id>/PROGRESS.md#Heartbeat`, and add a reviewer before another fix.
121
162
  - Third same-class failure: stop blind fixes. Present evidence-backed options to the user.
122
163
 
123
164
  The recovery loop must preserve the same evidence standard as the main workflow: real commands, real browser/API checks when applicable, and recorded logs or artifacts.
124
165
 
125
166
  ## Synthesis Output
126
167
 
127
- After subagents return, the controller writes one synthesis into `Harness/PLAN.md`:
168
+ After subagents return, the controller writes one synthesis into `Harness/tasks/<task-id>/PLAN.md`:
128
169
 
129
170
  ```text
130
171
  Agents used:
@@ -6,7 +6,7 @@ Purpose: guide agent research. Record conclusions in [research-results.md](resea
6
6
 
7
7
  Use this before PRD, stack choice, external API use, public dependency choice, pricing/legal/security assumptions, or any fact likely to change.
8
8
 
9
- Skip only when the task is local, narrow, and fully answerable from existing project files. Record the skip reason in `Harness/PLAN.md`.
9
+ Skip only when the task is local, narrow, and fully answerable from existing project files. Record the skip reason in `Harness/tasks/<task-id>/PROGRESS.md`.
10
10
 
11
11
  ## Research Agent
12
12
 
@@ -21,7 +21,7 @@ Built-in agents:
21
21
  - `.claude/agents/researcher.md`: product, market, open-source, dependency, pricing, policy, and ecosystem research.
22
22
  - `.claude/agents/docs-researcher.md`: official docs, API, SDK, config, limits, errors, and examples verification.
23
23
 
24
- For multi-agent research plus build work, create the dispatch table in `Harness/PLAN.md` and follow `Harness/dispatch.md`.
24
+ For multi-agent research plus build work, create the dispatch table in `Harness/tasks/<task-id>/PLAN.md` and follow `Harness/dispatch.md`.
25
25
 
26
26
  Research Agent input:
27
27
 
@@ -104,7 +104,7 @@ Use these patterns when turning research into PRD or feature docs:
104
104
 
105
105
  ## Write Target
106
106
 
107
- - Research process, queries, and limitations: this file or `Harness/PLAN.md`.
107
+ - Research process, queries, and limitations: this file or `Harness/tasks/<task-id>/PROGRESS.md`.
108
108
  - Final research decisions: [research-results.md](research-results.md).
109
109
  - Product scope: [PRD.md](PRD.md).
110
110
  - Architecture consequences: `Harness/architecture.md` and `Harness/domain/ports.md`.
@@ -0,0 +1,3 @@
1
+ # {{TASK_ID}} — Artifacts
2
+
3
+ Optional: screenshots, logs, API responses, links. Create only when evidence is too large for this task's PLAN.md verification table.
@@ -0,0 +1,3 @@
1
+ # {{TASK_ID}} — Notes
2
+
3
+ Optional: exploration notes, design alternatives, research leads. Create only when notes are too long for this task's PLAN.md.
@@ -0,0 +1,40 @@
1
+ # {{TASK_ID}} — PLAN
2
+
3
+ Task-level implementation plan and evidence. Main agent writes after second planning; implementer reads before coding.
4
+
5
+ ## Goal
6
+
7
+ ## Acceptance Criteria
8
+
9
+ - [ ]
10
+
11
+ ## Scope
12
+
13
+ Allowed write set:
14
+ -
15
+
16
+ Forbidden:
17
+ -
18
+
19
+ ## Loaded Context
20
+
21
+ -
22
+
23
+ ## Subagent Dispatch
24
+
25
+ | Agent | Mode | Read Set | Write Set | Status |
26
+ |-------|------|----------|-----------|--------|
27
+
28
+ ## Subagent Synthesis
29
+
30
+ Agents used:
31
+ Findings accepted:
32
+ Findings rejected:
33
+ Conflicts:
34
+ Decisions:
35
+ Residual risk:
36
+
37
+ ## Verification
38
+
39
+ | Check | Result | Notes |
40
+ |-------|--------|-------|
@@ -0,0 +1,29 @@
1
+ # {{TASK_ID}} — PROGRESS
2
+
3
+ Task-level progress and heartbeat. Main agent updates; subagents read only.
4
+
5
+ ## Current Goal
6
+
7
+ ## Phase
8
+
9
+ Current: Intake
10
+
11
+ ## Heartbeat
12
+
13
+ Last beat:
14
+ Current phase: Intake
15
+ Current blocker: none
16
+ Next beat trigger:
17
+ Failure count: 0
18
+ Recovery action: none
19
+
20
+ ## Tasks
21
+
22
+ | # | Task | Owner | Verify | Status |
23
+ |---|------|-------|--------|--------|
24
+ | 1 | Define goal and scope | main agent | recorded above | Pending |
25
+
26
+ ## Agent Handoffs
27
+
28
+ | Agent | Role | Context Pack | Result |
29
+ |-------|------|-------------|--------|
@@ -25,6 +25,8 @@ const commonAgents = [
25
25
  'debugger',
26
26
  'reviewer',
27
27
  'verifier',
28
+ 'memory-master',
29
+ 'context-master',
28
30
  ];
29
31
 
30
32
  const commonSkills = [
@@ -34,6 +36,7 @@ const commonSkills = [
34
36
  'harness-context',
35
37
  'harness-build-loop',
36
38
  'wf-mode',
39
+ 'wf-update',
37
40
  'subagent-orchestrator',
38
41
  'readme-optimizer',
39
42
  ];
@@ -57,6 +60,7 @@ const required = [
57
60
  ...commonAgents.map(agent => `.claude/agents/${agent}.md`),
58
61
  ...commonSkills.map(skill => `.claude/skills/${skill}/SKILL.md`),
59
62
  'Harness/README.md',
63
+ 'Harness/PROGRESS.md',
60
64
  'Harness/PLAN.md',
61
65
  'Harness/lifecycle.md',
62
66
  'Harness/subagents.md',
@@ -72,10 +76,13 @@ const required = [
72
76
  'Harness/research/research-results.md',
73
77
  'Harness/research/PRD.md',
74
78
  'Harness/domain/ports.md',
79
+ '.claude/skills/wf-update/SKILL.md',
80
+ '.claude/commands/update.md',
81
+ 'Harness/.harness-version',
75
82
  ];
76
83
 
77
84
  const projectFacts = [
78
- 'Harness/PLAN.md',
85
+ 'Harness/PROGRESS.md',
79
86
  'Harness/research/PRD.md',
80
87
  'Harness/research/research-results.md',
81
88
  'Harness/architecture.md',
@@ -93,6 +100,8 @@ const contextPacks = [
93
100
  'Reviewer:',
94
101
  'Debugger:',
95
102
  'Verifier:',
103
+ 'Memory Master:',
104
+ 'Context Master:',
96
105
  ];
97
106
 
98
107
  const durableCommunicationDocs = [
@@ -181,6 +190,37 @@ for (const rel of required) {
181
190
  }
182
191
  }
183
192
 
193
+ // Task capsule template files
194
+ const taskTemplateDir = path.join(root, 'Harness', 'tasks', '_template');
195
+ if (!fs.existsSync(taskTemplateDir)) {
196
+ errors.push('missing directory: Harness/tasks/_template/');
197
+ } else {
198
+ for (const f of ['PROGRESS.md', 'PLAN.md']) {
199
+ if (!fs.existsSync(path.join(taskTemplateDir, f))) {
200
+ errors.push(`missing task template file: Harness/tasks/_template/${f}`);
201
+ }
202
+ }
203
+ }
204
+
205
+ // Cross-reference: DONE files in task PLAN.md must exist on disk
206
+ const taskDirs = fs.existsSync(path.join(root, 'Harness', 'tasks'))
207
+ ? fs.readdirSync(path.join(root, 'Harness', 'tasks'), { withFileTypes: true })
208
+ .filter(e => e.isDirectory() && e.name !== '_template')
209
+ .map(e => e.name)
210
+ : [];
211
+ for (const taskDir of taskDirs) {
212
+ const planPath = `Harness/tasks/${taskDir}/PLAN.md`;
213
+ const planText = read(planPath);
214
+ if (!planText) continue;
215
+ const donePattern = /`([^`]+\.(?:md|mjs|js|ts|json|html|css))`[^\n]*DONE/gi;
216
+ for (const match of planText.matchAll(donePattern)) {
217
+ const claimedFile = match[1];
218
+ if (!fs.existsSync(path.join(root, claimedFile))) {
219
+ errors.push(`${planPath} claims '${claimedFile}' is DONE but file does not exist`);
220
+ }
221
+ }
222
+ }
223
+
184
224
  if (fs.existsSync(path.join(root, 'Harness/research/scaffolds.md'))) {
185
225
  errors.push('legacy research file should be renamed: Harness/research/scaffolds.md -> Harness/research/research-results.md');
186
226
  }
@@ -218,17 +258,26 @@ requireText('CLAUDE.md', 'Harness/MEMORY.md` is the memory/resource router', 'me
218
258
  requireText('CLAUDE.md', 'Harness/README.md#Load By Task', 'Harness task router');
219
259
  requireText('CLAUDE.md', 'Harness/SETUP.md` exists, follow it before normal project work', 'setup bootstrap contract');
220
260
  requireText('CLAUDE.md', 'subagent-orchestrator` and `Harness/subagents.md', 'subagent orchestrator entry trigger');
261
+ requireText('CLAUDE.md', 'Harness/PROGRESS.md` is the global task index', 'PROGRESS global task index');
262
+ requireText('CLAUDE.md', 'Harness/tasks/', 'task capsule directory reference');
263
+ requireText('CLAUDE.md', 'Subagents are readers and reporters', 'subagent state committer rule');
221
264
  for (const heading of ['## 2. Think Before Coding', '## 3. Simplicity First', '## 4. Surgical Changes', '## 5. Goal-Driven Execution']) {
222
265
  requireText('CLAUDE.md', heading, `Karpathy-style rule heading: ${heading}`);
223
266
  }
224
267
 
268
+ // Root PROGRESS.md structure check
269
+ const progress = read('Harness/PROGRESS.md');
270
+ if (progress) {
271
+ for (const heading of ['## Active Task', '## Task Index', '## Cross-Task Decisions']) {
272
+ if (!progress.includes(heading)) errors.push(`Harness/PROGRESS.md missing heading: ${heading}`);
273
+ }
274
+ }
275
+
276
+ // Legacy PLAN.md deprecation check (it exists as stub, no longer requires active task headings)
225
277
  const plan = read('Harness/PLAN.md');
226
278
  if (plan) {
227
- for (const heading of ['## Current Goal', '## Phase', '## Heartbeat', '## Success Criteria', '## Loaded Context', '## Tasks', '## Parallel Dispatch', '## Subagent Synthesis', '## Verification']) {
228
- if (!plan.includes(heading)) errors.push(`Harness/PLAN.md missing heading: ${heading}`);
229
- }
230
- for (const marker of ['Next beat trigger', 'Recovery action']) {
231
- if (!plan.includes(marker)) errors.push(`Harness/PLAN.md missing heartbeat marker: ${marker}`);
279
+ if (!plan.includes('DEPRECATED')) {
280
+ errors.push('Harness/PLAN.md should be a deprecation stub; see Harness/PROGRESS.md');
232
281
  }
233
282
  }
234
283
 
@@ -349,13 +398,25 @@ for (const agent of commonAgents) {
349
398
  }
350
399
 
351
400
  requireText('Harness/extension.md', 'Skills should extend the harness');
352
- requireText('Harness/agent-workflow.md', 'Harness/PLAN.md');
401
+ requireText('Harness/agent-workflow.md', 'Harness/tasks/<task-id>/PROGRESS.md');
353
402
  requireText('Harness/research/README.md', 'research-results.md');
354
403
  requireText('Harness/WF.md', 'Ralph-style harness loop', 'WF loop description');
355
404
  requireText('Harness/WF.md', 'Heartbeat Protocol', 'heartbeat protocol');
405
+ requireText('Harness/WF.md', 'WF mode requires multi-subagent orchestration by default', 'WF multi-subagent default');
406
+ requireText('Harness/WF.md', 'Explicit `/wf`, `wf mode`, `workflow mode`, or `wk mode` MUST spawn at least 3 distinct subagents', 'explicit WF/WK subagent minimum');
407
+ requireText('Harness/WF.md', '.claude/agents/', 'WF built-in agent roster path');
408
+ requireText('Harness/WF.md', '7:3 collaboration bias', 'WF collaboration bias');
409
+ requireText('Harness/WF.md', 'Harness/tasks/', 'WF task directory reference');
410
+ requireText('Harness/README.md', '`/wf`, `wf mode`, `workflow mode`, or `wk mode`', 'WF/WK router aliases');
411
+ requireText('Harness/README.md', 'explicit WF/WK loads subagent docs immediately', 'explicit WF/WK router output');
412
+ requireText('.claude/skills/harness-router/SKILL.md', '`/wf`, `wf mode`, `workflow mode`, `wk mode`', 'harness-router WF/WK aliases');
356
413
  requireText('.claude/skills/wf-mode/SKILL.md', 'Harness/WF.md', 'wf-mode loads WF document');
357
414
  requireText('.claude/skills/wf-mode/SKILL.md', 'Harness/subagents.md', 'wf-mode loads subagent orchestration');
415
+ requireText('.claude/skills/wf-mode/SKILL.md', 'wk mode', 'wf-mode wk alias');
416
+ requireText('.claude/skills/wf-mode/SKILL.md', 'spawn at least 3 distinct subagents from `.claude/agents/`', 'wf-mode subagent minimum');
358
417
  requireText('.claude/skills/subagent-orchestrator/SKILL.md', 'Harness/subagents.md', 'subagent-orchestrator loads subagents doc');
418
+ requireText('.claude/skills/subagent-orchestrator/SKILL.md', '.claude/agents/', 'subagent-orchestrator built-in agent roster path');
419
+ requireText('.claude/skills/subagent-orchestrator/SKILL.md', '`workflow mode`, `wk mode`', 'subagent-orchestrator WF/WK aliases');
359
420
  requireText('.claude/skills/harness-context/SKILL.md', 'Harness/subagents.md', 'harness-context loads subagents doc');
360
421
  requireText('.claude/skills/readme-optimizer/SKILL.md', 'README.md', 'readme-optimizer loads README');
361
422
  requireText('.claude/skills/readme-optimizer/SKILL.md', 'Harness/architecture.md', 'readme-optimizer links architecture docs');
@@ -363,8 +424,18 @@ requireText('Harness/subagents.md', '## Source Attribution', 'subagent source at
363
424
  requireText('Harness/subagents.md', 'npx skills find', 'find-skills discovery attribution');
364
425
  requireText('Harness/subagents.md', 'superpowers:dispatching-parallel-agents', 'parallel-agent source attribution');
365
426
  requireText('Harness/subagents.md', 'superpowers:subagent-driven-development', 'subagent-driven source attribution');
427
+ requireText('Harness/subagents.md', '## Built-in Agent Roster', 'built-in agent roster');
428
+ requireText('Harness/subagents.md', '## WF Default Fan-Out', 'WF default fan-out');
429
+ requireText('Harness/subagents.md', '7:3 collaboration bias', 'subagent collaboration bias');
430
+ requireText('Harness/subagents.md', 'parallel planner/researcher/docs-researcher/architect subagents', 'WF roster orchestration shape');
366
431
  requireText('Harness/subagents.md', '## Efficiency Ladder', 'subagent efficiency ladder');
367
432
  requireText('Harness/subagents.md', '## Review Gates', 'subagent review gates');
433
+ requireText('Harness/architecture.md', '## 2. Interface Decoupling', 'architecture interface decoupling');
434
+ requireText('Harness/architecture.md', '## 3. State Design', 'architecture state design');
435
+ requireText('Harness/architecture.md', 'Avoid speculative abstraction', 'anti-overengineering architecture rule');
436
+ requireText('CLAUDE.md', 'Use explicit interfaces or state models only when they protect a real boundary', 'CLAUDE interface/state simplicity rule');
437
+ requireText('CLAUDE.md', '/wf update', 'wf update startup instruction');
438
+ requireText('Harness/README.md', 'Need harness update', 'update routing row');
368
439
 
369
440
  if (errors.length) {
370
441
  console.error(`Harness validation failed${strict ? ' (strict)' : ''}:`);