@haposoft/cafekit 0.16.0-rc.6 → 0.16.0-rc.7

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 (86) hide show
  1. package/README.md +21 -58
  2. package/bin/__tests__/change-firewall.semantic-firewall.test.js +4 -5
  3. package/bin/__tests__/codex-hooks.test.js +137 -0
  4. package/bin/__tests__/codex-native.test.js +130 -74
  5. package/bin/__tests__/develop-contract.test.js +155 -76
  6. package/bin/__tests__/installer-safety.test.js +19 -154
  7. package/bin/__tests__/package-inventory.test.js +10 -20
  8. package/bin/__tests__/release-preflight.semantic-firewall.test.js +2 -2
  9. package/bin/__tests__/validator-grounding.test.js +11 -11
  10. package/bin/install.js +2 -7
  11. package/bin/lib/context.js +0 -45
  12. package/bin/lib/copy-utils.js +1 -1
  13. package/bin/lib/i18n.js +0 -3
  14. package/bin/lib/manifest.js +1 -1
  15. package/bin/phases/claude-runtime.js +1 -3
  16. package/bin/phases/codex-runtime.js +4 -2
  17. package/bin/phases/copy-payload.js +3 -15
  18. package/bin/phases/post-install.js +5 -17
  19. package/bin/phases/root-config.js +2 -3
  20. package/bin/phases/select-platform.js +2 -5
  21. package/bin/phases/summary.js +0 -1
  22. package/package.json +2 -5
  23. package/src/claude/CLAUDE.md +19 -6
  24. package/src/claude/agents/project-manager.md +41 -9
  25. package/src/claude/agents/spec-maker.md +76 -155
  26. package/src/claude/gitignore +1 -1
  27. package/src/claude/hooks/__tests__/spec-gate.test.js +162 -0
  28. package/src/claude/hooks/lib/context.cjs +1 -1
  29. package/src/claude/hooks/lib/detect.cjs +1 -1
  30. package/src/claude/hooks/spec-gate.cjs +44 -9
  31. package/src/claude/hooks/spec-state.cjs +22 -11
  32. package/src/claude/hooks/task-scaffold-guard.cjs +1 -1
  33. package/src/claude/migration-manifest.json +17 -3
  34. package/src/claude/rules/manage-docs.md +43 -24
  35. package/src/claude/rules/state-sync.md +57 -62
  36. package/src/claude/rules/workflow.md +30 -13
  37. package/src/claude/scripts/change-firewall.cjs +2 -2
  38. package/src/claude/scripts/generate-skill-catalog.cjs +0 -1
  39. package/src/claude/scripts/spec-receipt.cjs +141 -1
  40. package/src/claude/scripts/spec-resolver.cjs +288 -0
  41. package/src/claude/skills/develop/SKILL.md +89 -125
  42. package/src/claude/skills/develop/references/parallel-waves.md +75 -162
  43. package/src/claude/skills/develop/references/quality-gate.md +61 -121
  44. package/src/claude/skills/develop/references/subagent-patterns.md +31 -38
  45. package/src/claude/skills/question/SKILL.md +1 -1
  46. package/src/claude/skills/specs/SKILL.md +142 -204
  47. package/src/claude/skills/specs/references/review.md +109 -243
  48. package/src/claude/skills/specs/references/templates.md +173 -0
  49. package/src/claude/skills/sync/SKILL.md +66 -90
  50. package/src/claude/skills/sync/references/sync-protocols.md +62 -83
  51. package/src/codex/AGENTS.md +20 -7
  52. package/src/codex/hooks/lib/spec-receipt.cjs +18 -0
  53. package/src/codex/hooks/lib/spec-utils.cjs +25 -0
  54. package/src/codex/hooks/spec-gate.cjs +46 -16
  55. package/src/codex/hooks/spec-state.cjs +22 -12
  56. package/src/codex/rules/state-sync.md +57 -61
  57. package/src/common/AGENTS.md +8 -1
  58. package/bin/__tests__/opencode-spec-gate.test.js +0 -799
  59. package/bin/lib/opencode-install.js +0 -899
  60. package/bin/phases/opencode-runtime.js +0 -38
  61. package/src/claude/skills/specs/references/archive-workflow.md +0 -74
  62. package/src/claude/skills/specs/references/ask-user-question-gates.md +0 -70
  63. package/src/claude/skills/specs/references/codebase-analysis.md +0 -102
  64. package/src/claude/skills/specs/references/cross-spec-dependency.md +0 -76
  65. package/src/claude/skills/specs/references/research-strategy.md +0 -107
  66. package/src/claude/skills/specs/references/scope-inquiry.md +0 -107
  67. package/src/claude/skills/specs/references/translation-mirror.md +0 -83
  68. package/src/claude/skills/specs/rules/design-discovery-full.md +0 -45
  69. package/src/claude/skills/specs/rules/design-discovery-light.md +0 -28
  70. package/src/claude/skills/specs/rules/design-principles.md +0 -138
  71. package/src/claude/skills/specs/rules/design-review.md +0 -55
  72. package/src/claude/skills/specs/rules/ears-format.md +0 -42
  73. package/src/claude/skills/specs/rules/phase-decision-matrix.md +0 -56
  74. package/src/claude/skills/specs/rules/task-scoring-rubric.md +0 -52
  75. package/src/claude/skills/specs/rules/tasks-generation.md +0 -189
  76. package/src/opencode/AGENTS.md +0 -41
  77. package/src/opencode/plugins/docs-sync.ts +0 -175
  78. package/src/opencode/plugins/inspect-block.ts +0 -164
  79. package/src/opencode/plugins/privacy-block.ts +0 -182
  80. package/src/opencode/plugins/rules.ts +0 -155
  81. package/src/opencode/plugins/session.ts +0 -179
  82. package/src/opencode/plugins/spec-gate.ts +0 -457
  83. package/src/opencode/plugins/spec-state.ts +0 -311
  84. package/src/opencode/plugins/state.ts +0 -253
  85. package/src/opencode/plugins/task-scaffold-guard.ts +0 -161
  86. package/src/opencode/plugins/usage.ts +0 -178
@@ -1,222 +1,160 @@
1
1
  ---
2
2
  name: hapo:specs
3
- description: "Author the smallest durable, grounded specification that removes product decisions from implementation."
3
+ description: "Turn a substantial feature idea into a bounded, reviewed plan and executable flat task files, with human decisions at scope, findings, and completion. Use when the work needs durable coordination; skip for a clear one-file or two-file change."
4
4
  user-invocable: true
5
- when_to_use: "Use when a change needs durable requirements or design before implementation."
6
- category: utilities
7
- keywords: [specs, requirements, design, tasks]
8
- argument-hint: "[<feature-description>] [--auto] | --status | --validate <feature> | --archive"
5
+ argument-hint: "<feature-description>"
9
6
  metadata:
10
7
  author: haposoft
11
- version: "2.1.0"
8
+ version: "3.0.0"
12
9
  ---
13
- # Specs — semantic kernel v2.1
14
-
15
- ## Canonical authoring contract
16
-
17
- `spec.json` is machine semantic authority. `requirements.md`, `design.md`,
18
- conditional `research.md`, and conditional task Markdown are human projections.
19
- Host state records authority/integrity only; it never supplies product semantics.
20
- Markdown edits that affect semantics must be synchronized back into `spec.json`
21
- and pass the same round-trip validation before readiness.
22
- Promote `semantic_model`, semantic review, and readiness together only through
23
- the explicit installed machine semantic-sync step, `spec-readiness.cjs`. Authors
24
- and reviewers never directly write or promote those authority fields; any later
25
- semantic Markdown edit invalidates the bound round-trip result.
26
-
27
- ```bash
28
- # Claude Code
29
- node .claude/scripts/spec-readiness.cjs specs/<feature> --review-result <review.json>
30
- # Codex
31
- node .codex/scripts/spec-readiness.cjs specs/<feature> --review-result <review.json>
32
- ```
10
+ # Specs — process-first planning
11
+
12
+ Quality comes from a short decision process; honesty comes from evidence. Keep
13
+ the human at exactly three gates and let the agent do the work between them.
14
+ The durable output is Markdown that can be read and edited without a compiler.
15
+
16
+ ## Step 0 — decide whether a plan earns its cost
17
+
18
+ Work directly when the cause and change are clear, isolated, reversible, and
19
+ likely limited to one or two files. Use this skill when the request crosses
20
+ components, contains a product or architecture choice, has meaningful failure
21
+ risk, or needs several tasks, sessions, or owners.
33
22
 
34
- `review.json` has exactly `reviewed_criteria` and `counterexamples`. The command
35
- projects current Markdown, validates structure, grounding, round-trip, and
36
- Strict authority, then writes atomically; failure preserves exact original bytes.
23
+ Do not create a plan merely because this skill was mentioned in surrounding
24
+ documentation. The user must invoke Specs or ask for durable planning.
37
25
 
38
- Persist `planning_depth`, `assurance_level`, `classified_minimum`, normalized
39
- `risks`, and contract `version`. Planning and assurance are independent:
26
+ ## The three human gates
40
27
 
41
- | Axis | Values | Decides |
28
+ | Gate | Timing | Human decision |
42
29
  |---|---|---|
43
- | `planning_depth` | `None`, `Compact`, `Full` | Durable artifact/detail topology. |
44
- | `assurance_level` | `Routine`, `Elevated`, `Strict` | Review and verification depth. |
45
-
46
- `Direct`, `Standard`, and `Critical` are derived compatibility views. Risk may
47
- raise assurance without creating artifacts; decomposition may raise planning
48
- depth without inventing risk. Reclassify before persistence. A persisted
49
- same-feature baseline is monotonic and never contaminates another feature.
50
-
51
- Any non-empty normalized risk raises the automatic assurance floor from Routine
52
- to Elevated. Strict is opt-in: select it only when the user or project policy
53
- explicitly requires independent audit, or after the user confirms a concrete,
54
- scope-specific audit need. A keyword, risk severity, Full depth, or model
55
- preference never selects Strict by itself.
56
-
57
- Canonical lifecycle is exactly `in_progress`, `paused`, `blocked`, `done`.
58
- Legacy aliases are read compatibility only. `ready_for_implementation` means
59
- technical authoring readiness; it is not lifecycle completion, implementation
60
- permission, execution proof, or closeout. `done` belongs to final-state
61
- authority after execution closeout.
62
-
63
- ## Artifact router
64
-
65
- Decide this table before loading discovery rules or creating files:
66
-
67
- | Depth | Durable core | Research route | Task route | Design expansion |
68
- |---|---|---|---|---|
69
- | `None` | none | absent | absent | none |
70
- | `Compact` | `spec.json`, `requirements.md`, `design.md` | only on a research trigger | only on a typed topology trigger | bounded core sections |
71
- | `Full` | `spec.json`, `requirements.md`, `design.md` | only on a research trigger | only on a typed topology trigger | only sections activated by scoped behavior |
72
-
73
- Research triggers are: unresolved material uncertainty that can change
74
- requirements/design; an external-current fact that must be grounded; or an
75
- explicit user request. Otherwise `authoring.research=absent`, omit the pointer,
76
- and create no file or placeholder. Repository scouting may inform requirements
77
- or design without producing `research.md`.
78
-
79
- Task triggers are typed ownership, dependency, transition, proof, or parallel
80
- boundaries that require separate execution packets. Requirement count, size,
81
- planning depth, assurance level, risk label, architectural layers, and habit do
82
- not trigger tasks. `coordination.boundaries` is machine authority.
83
-
84
- Full selects potential detail, never automatic discovery ceremony. It does not
85
- automatically search the web, invoke a researcher, dump discovery results, create
86
- research, create tasks, or retain unused template sections.
87
-
88
- ## Artifact profiles
89
-
90
- - `None`: create no spec directory, registry, research, task, phase, report, or
91
- receipt artifact.
92
- - `Compact` and `Full`: create the routed core and only optional artifacts whose
93
- trigger is present.
94
- - Research, task, and phase metadata must disappear when their trigger is absent.
95
- - `feature-receipt.md` and task execution receipts belong to execution closeout,
96
- not authoring or readiness.
97
-
98
- Forbidden authoring artifacts include `init.json`, `spec-state.json`,
99
- `hydration.md`, `phase-*.md`, and shorthand task filenames.
100
-
101
- ## Route
102
-
103
- 1. Resolve the request and active feature; ambiguity fails closed.
104
- Ambiguous active candidates fail closed: multiple active specs require an
105
- explicit target. Do not rely on first-directory selection or guess from the
106
- first active directory.
107
- 2. Classify both axes and run the artifact router before loading discovery.
108
- 3. Establish `scope_lock` with source, in/out scope, and
109
- `expansion_policy=requires-user-approval`.
110
- 4. Author requirements, then design, then conditional research/tasks as their
111
- actual dependency requires; do not create empty artifacts to reserve them.
112
- 5. Review the final graph, synchronize machine and Markdown projections, then
113
- run deterministic gates.
114
- 6. Pause for unresolved product/scope decisions instead of inventing semantics.
115
-
116
- Investigate a `repository_fact` and record grounding. Choose the simplest
117
- `reversible_assumption` and record its bounded reversal boundary. Ask the user
118
- for a `user_owned` product, scope, security, data, or irreversible decision.
119
- Persist only actual items in optional `spec.json.decisions`; omit it when none
120
- exist. Unresolved `user_owned` entries block readiness.
121
-
122
- Supported flags are `--auto`, `--validate`, `--status`, and `--archive`; bare
123
- `status`, `archive`, and `resume` are compatibility aliases.
124
-
125
- ## Requirements
126
-
127
- Load `rules/ears-format.md` and `templates/requirements.md`.
128
-
129
- - Use `Requirement N` and literal `RN.M`; task mappings use numeric `N.M`.
130
- - State scoped outcomes and non-goals before detailed criteria.
131
- - Every behavior has measurable acceptance and relevant negative/error cases.
132
- - Add only feature-specific measurable non-functional constraints.
133
- - User story, rationale, and scenarios are conditional, not ceremony.
134
-
135
- ## Design and discovery
136
-
137
- Load `rules/design-principles.md` plus the routed light/full discovery rule.
138
- Load research guidance only when the artifact router selected research.
139
-
140
- - Compact keeps boundary, six-column typed anchors, decisions/invariants, and
141
- verification. Full adds only triggered contract/flow/data/error/security/
142
- migration sections.
143
- - Define each implementation-significant contract once and reference its stable
144
- `D`/`I`/`C` ID.
145
- - For retention/lifecycle and API contracts, follow `rules/design-principles.md` (clock anchor/source/timezone/precision/comparator/inclusivity/boundary + wrong-clock/boundary counterexample; method/route/auth/headers/schema/response/error/idempotency).
146
- - Keep exactly one parser-visible `## Verification Definitions` section. Each
147
- single-line V definition starts with `Criteria ...; Owner ...;` and traces
148
- exact decision refs, method,
149
- expected result, negative/failure case, and reachability/grounding.
150
- - Add `Proof criteria ...; Proof owner ...; Evidence anchor ...;` only for a
151
- typed proof boundary; ordinary verification stays in the owner boundary.
152
- - Delete unused optional sections. Ground repository facts to exact anchors;
153
- ground external-current decisions to primary sources.
154
-
155
- ## Tasks and lightweight phases
156
-
157
- Load `rules/tasks-generation.md` and `templates/task.md` only when at least one
158
- typed topology trigger exists. Size, risk labels, and tradition alone do not
159
- create tasks. Keep `Direct`/`Compact` light: do not coerce a task when no typed
160
- boundary exists, and never invent a task to justify structure.
161
-
162
- Each task has exactly seven H2 sections: Outcome, Scope, Anchors and Ownership, Changes, Acceptance, Dependencies, and Verification Plan. The only ownership table is `ID | Type | Target | Role | Access | Action`. Planned verification is not execution evidence. Every executable task must own a concrete test file/artifact anchor (write create/modify) or share proof via a typed proof boundary; bare npm test is not ownership.
163
-
164
- Typed `coordination.boundaries` entries (`ownership`, `dependency`,
165
- `transition`, `proof`, `parallel`) are the sole topology authority. Legacy
166
- priority markers, trigger fields, related-file lists, and prose labels are inert
167
- read compatibility, never canonical authoring.
168
-
169
- Each `RN.M` has exactly one implementation owner. A proof subject implements
170
- its criterion; its verifier owns a separate proof criterion/artifact, references
171
- the same V definition, and never duplicates the subject acceptance claim.
172
-
173
- Phases are optional task-ID groups only for a complex Full task graph. They do
174
- not create files, repeat prose, or replace typed edges.
175
-
176
- ## Review and readiness
177
-
178
- Load `references/review.md`. Review the whole graph and inventory every blocker; presentation may be concise, but finding count is never capped. Each `RN.M` receives a concrete counterexample mapped to real `D`/`I`/`C` and `V` refs. For any retention/lifecycle rule, include a counterexample where the wrong clock (for example creation time instead of terminal/state-transition) would violate the policy.
179
-
180
- Routine and Elevated have no reviewer ceremony. Strict requires an independent, allowlisted reviewer capability observed by the host hook. The author cannot self-attest Strict. If that host event is unavailable, pause once with the exact capability blocker; do not retry reviewer loops, self-attest, downgrade, or simulate the event. This is an honest-agent guardrail, not host-attested evidence or a security boundary. Two-review target is advisory: after two failed semantic rounds, pause for unresolved product/security/architecture uncertainty or repeated non-convergence; one bounded mechanical correction without weakening gates is allowed; budgets never override correctness.
181
-
182
- For Strict, the reviewer binds its host-observed event to the read-only candidate
183
- digest from `node .claude/scripts/validate-spec-output.cjs specs/<feature> --semantic-digest` (Claude Code) or `node .codex/scripts/validate-spec-output.cjs specs/<feature> --semantic-digest` (Codex);
184
- finalization then verifies that current observation.
185
-
186
- Run final-byte validation and grounding for every durable spec:
187
-
188
- ```bash
189
- # Claude Code
190
- node .claude/scripts/validate-spec-output.cjs specs/<feature>
191
- # Codex
192
- node .codex/scripts/validate-spec-output.cjs specs/<feature>
30
+ | C1 — Scope | before writing the plan | EXPAND, KEEP, or CUT the proposed minimum change |
31
+ | C2 — Findings | after adversarial review | accept, reject, or revise each deduplicated finding |
32
+ | C3 — Done | after execution | accept completion from current command output and receipts |
33
+
34
+ Ask once at each gate. Do not ask for routine implementation choices between
35
+ the gates. If new evidence invalidates the scope, return to C1 instead of
36
+ silently expanding it.
37
+
38
+ ## Primary output layout
39
+
40
+ Create one direct child of the repository's `specs/` directory:
41
+
42
+ ```text
43
+ specs/<feature>/
44
+ ├── plan.md
45
+ ├── task-01-<slug>.md
46
+ └── task-02-<slug>.md
193
47
  ```
194
48
 
195
- Exit 0 proves only implemented structural/grounding checks. It does not prove
196
- semantic quality, product correctness, execution PASS, or closeout.
49
+ Task files are flat beside `plan.md`. Do not create a nested task directory.
50
+ Use safe lowercase feature and task slugs. Read
51
+ [`references/templates.md`](references/templates.md) before authoring these
52
+ files.
53
+
54
+ ## Flow
55
+
56
+ ### 1. Challenge scope, then open C1
57
+
58
+ Inspect the repository before drafting. Answer three questions with current
59
+ `path:line` evidence:
60
+
61
+ 1. What already exists and can be reused?
62
+ 2. What is the smallest change set that delivers the requested outcome?
63
+ 3. What signals expansion: more than eight touched files, more than two new
64
+ services/classes, or more than three independent work groups?
65
+
66
+ Present the answers and ask the user to EXPAND, KEEP, or CUT. Record the chosen
67
+ scope and explicit exclusions in `plan.md`.
68
+
69
+ ### 2. Write the plan and task packets
70
+
71
+ Keep `plan.md` as the short index: C1 decision, EARS acceptance criteria,
72
+ explicit exclusions, and a task table. Every acceptance criterion receives a
73
+ stable ID, and every task row lists the criteria it satisfies.
74
+
75
+ Make each task small enough for one owner to hold in one reading: one outcome,
76
+ normally no more than about five owned files, explicit dependencies, measurable
77
+ acceptance, and a runnable verification command. A task must deliver usable
78
+ behavior; do not create preparation-only tasks.
79
+
80
+ When an outcome is uncertain, write a question rather than guessing. When a
81
+ rule remains ambiguous, add two or three concrete examples and resolve the rule
82
+ at C1 or C2.
83
+
84
+ ### 3. Review adversarially, then open C2
85
+
86
+ Read [`references/review.md`](references/review.md) and run its fresh-context
87
+ review. Every finding needs a reproducible `path:line` citation and a concrete
88
+ failure scenario. Deduplicate, rank, and cap the list at 15.
89
+
90
+ Ask the user to accept, reject, or revise each finding. Apply only accepted
91
+ decisions. After every plan edit, run the consistency sweep across all plan and
92
+ task files. Stop after two paper-review rounds; later findings require runtime
93
+ evidence.
94
+
95
+ ### 4. Execute one task at a time
96
+
97
+ An implementation workflow owns execution. It selects one unblocked task,
98
+ changes its single `Status:` field to `in_progress`, respects owned paths, runs
99
+ the task's verification, and appends a real inline `## Receipt` only after the
100
+ command finishes.
101
+
102
+ Parallel work is allowed only for tasks with disjoint write ownership and
103
+ satisfied dependencies. One file has one writer in a wave. The controller is
104
+ the sole writer of task status and receipts.
105
+
106
+ ### 5. Prove completion, then open C3
107
+
108
+ A task may say `Status: done` only when its inline receipt contains the exact
109
+ command, `Exit: 0`, `Verification: PASS`, runtime-bound Base and Head values,
110
+ and a non-empty fenced command-output block. Placeholder or remembered output
111
+ is not evidence.
112
+
113
+ Show the user the current evidence and unresolved limitations. The user decides
114
+ at C3 whether the feature is done. A passing command proves only what it ran;
115
+ it does not invent product approval, review independence, or runtime coverage.
116
+
117
+ ## Ten operating laws
197
118
 
198
- The installed atomic finalizer may set `ready_for_implementation = true`
199
- only after routed artifacts match policy, all projections round-trip, the full
200
- blocker inventory is resolved, every required authoring state is `validated`,
201
- semantic review coverage is exact, and every deterministic gate passes. The
202
- author must not write this authority conclusion directly. This flag is technical
203
- artifact readiness only.
204
- Specs never invokes or auto-chains into Develop; only a fresh explicit user
205
- invocation of Develop starts implementation. Specs-only never creates or
206
- updates docs; record doc impact as a brief recommendation and leave creation or
207
- update to the docs workflow. Never fabricate execution proof. On failure, keep lifecycle state unfinished and report the exact blocker.
119
+ 1. **A1 — Scope once.** Raise scope pressure at C1; reopen only with new proof.
120
+ 2. **A2 — Small packets.** One task, one outcome, one owner, one proof command.
121
+ 3. **A3 — One fact, one home.** Reference decisions; never copy mutable lists.
122
+ 4. **A4 — Files are state.** `plan.md` and flat task files are canonical and
123
+ hand-editable; indexes are disposable views.
124
+ 5. **B1 — Cite the repository.** Codebase claims carry current `path:line`
125
+ evidence or an explicit `[UNVERIFIED]` marker.
126
+ 6. **B2 — Review from fresh context.** The author does not impersonate the
127
+ independent adversarial reviewer.
128
+ 7. **B3 — Sweep after edits.** Search renamed concepts, rejected assumptions,
129
+ ownership, dependencies, criteria IDs, and copied prose across every file.
130
+ 8. **B4 — Stop paper churn.** Two pre-code review rounds maximum; later claims
131
+ need runtime evidence.
132
+ 9. **C1 — Done is derived.** Status follows fresh proof, never confidence.
133
+ 10. **C2 — Rules pay rent.** Add a rule or machine check only when it prevents a
134
+ cited real incident; reassess rules when the primary model changes.
208
135
 
209
- ## Platform acceptance and handoff
136
+ ## Machine boundary
210
137
 
211
- Semantic acceptance covers Claude Code and Codex. Validate both installed
212
- instruction projections and use native vocabulary for each runtime.
138
+ The shared workflow resolver recognizes only a regular `plan.md` plus one or
139
+ more regular flat `task-*.md` files inside one direct feature directory. The
140
+ Stop gate revalidates every done task's inline Receipt and provenance. The old
141
+ task-scaffold guard remains limited to the older nested layout; flat v3 tasks
142
+ do not invoke that kernel path.
213
143
 
214
- After readiness, report the optional handoff without invoking it:
144
+ These checks are a final safety net, not a substitute for C1-C3 judgment. Do
145
+ not add a new schema, approval field, readiness bit, or review state to make the
146
+ Markdown look more authoritative.
215
147
 
216
- - Claude Code: `/hapo:develop <feature>`
217
- - Codex: `$hapo-develop <feature>`
148
+ ## Legacy compatibility
149
+
150
+ Existing features that contain `spec.json`, nested task files, or separate
151
+ receipt files stay on the installed legacy adapters. Do not migrate or rewrite
152
+ them while authoring an unrelated v3 feature. New Specs output always uses the
153
+ flat layout above and never requires the legacy kernel.
218
154
 
219
- For an early stop, keep readiness false and explain how to resume. `--auto` may
220
- set technical readiness after every gate passes, but must stop in Specs. Never
221
- claim proof, authority, approval, readiness, or closeout from placeholders,
222
- self-authored receipts, chat state, or stale validation.
155
+ ## Maintenance
156
+
157
+ Keep this entrypoint focused on routing and invariants. Put templates and
158
+ examples in `references/templates.md`; put review mechanics in
159
+ `references/review.md`. Before adding guidance, identify the observed failure
160
+ it prevents and remove duplicated wording elsewhere.