create-ai-project 1.23.0 → 1.23.2

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 (34) hide show
  1. package/.claude/agents-en/acceptance-test-generator.md +15 -1
  2. package/.claude/agents-en/code-reviewer.md +11 -14
  3. package/.claude/agents-en/document-reviewer.md +21 -1
  4. package/.claude/agents-en/integration-test-reviewer.md +17 -1
  5. package/.claude/agents-en/quality-fixer-frontend.md +47 -31
  6. package/.claude/agents-en/quality-fixer.md +40 -25
  7. package/.claude/agents-en/task-decomposer.md +10 -0
  8. package/.claude/agents-en/task-executor-frontend.md +49 -14
  9. package/.claude/agents-en/task-executor.md +44 -18
  10. package/.claude/agents-en/work-planner.md +6 -0
  11. package/.claude/agents-ja/acceptance-test-generator.md +16 -2
  12. package/.claude/agents-ja/code-reviewer.md +11 -14
  13. package/.claude/agents-ja/document-reviewer.md +21 -1
  14. package/.claude/agents-ja/integration-test-reviewer.md +17 -1
  15. package/.claude/agents-ja/quality-fixer-frontend.md +47 -31
  16. package/.claude/agents-ja/quality-fixer.md +40 -25
  17. package/.claude/agents-ja/task-decomposer.md +10 -0
  18. package/.claude/agents-ja/task-executor-frontend.md +51 -16
  19. package/.claude/agents-ja/task-executor.md +45 -19
  20. package/.claude/agents-ja/work-planner.md +6 -0
  21. package/.claude/commands-en/front-build.md +14 -1
  22. package/.claude/commands-en/front-plan.md +15 -2
  23. package/.claude/commands-en/plan.md +15 -1
  24. package/.claude/commands-ja/front-build.md +14 -1
  25. package/.claude/commands-ja/front-plan.md +14 -1
  26. package/.claude/commands-ja/plan.md +15 -1
  27. package/.claude/skills-en/documentation-criteria/references/plan-template.md +20 -0
  28. package/.claude/skills-en/documentation-criteria/references/task-template.md +12 -0
  29. package/.claude/skills-en/subagents-orchestration-guide/SKILL.md +11 -9
  30. package/.claude/skills-ja/documentation-criteria/references/plan-template.md +20 -0
  31. package/.claude/skills-ja/documentation-criteria/references/task-template.md +12 -0
  32. package/.claude/skills-ja/subagents-orchestration-guide/SKILL.md +11 -9
  33. package/CHANGELOG.md +21 -0
  34. package/package.json +1 -1
@@ -172,6 +172,8 @@ describe('[Feature Name] Integration Test', () => {
172
172
  // @category: core-functionality
173
173
  // @dependency: PaymentService, OrderRepository, Database
174
174
  // @complexity: high
175
+ // Primary failure mode: payment succeeds but the order row is absent or unpersisted
176
+ // Proof obligation: the order is persisted only after a successful payment; the external payment gateway is the only boundary that may be mocked
175
177
  it.todo('AC1: Successful payment creates persisted order with correct status')
176
178
 
177
179
  // AC1-error: "Payment failure shows user-friendly error message"
@@ -180,10 +182,16 @@ describe('[Feature Name] Integration Test', () => {
180
182
  // @category: core-functionality
181
183
  // @dependency: PaymentService, ErrorHandler
182
184
  // @complexity: medium
185
+ // Primary failure mode: payment failure still creates an order, or the error is swallowed without a user-visible message
186
+ // Proof obligation: a failed payment surfaces an actionable error and leaves no order persisted; only the payment gateway may be mocked
183
187
  it.todo('AC1-error: Failed payment displays error without creating order')
184
188
  })
185
189
  ```
186
190
 
191
+ **Proof annotations** (apply to every skeleton, alongside the metadata above): each `it.todo` carries two comment lines that hand the proof contract to the test implementer and to integration-test-reviewer (these map to the task template's Proof Obligations fields):
192
+ - `Primary failure mode`: the specific regression that turns this test red — the behavior the AC promises and would break
193
+ - `Proof obligation`: what the implemented test must assert to prove the claim — the boundary to traverse, the observable state before/after for state-changing ACs, and which boundaries may be mocked and why. Phrase it as design intent describing what to assert; the implementer writes the executable assertions and mock setup
194
+
187
195
  ### E2E Test Files
188
196
 
189
197
  Generate **separate files per lane**: `*.fixture-e2e.test.[ext]` for fixture-e2e, `*.service-e2e.test.[ext]` for service-integration-e2e. Each emitted file MUST carry a `@lane:` header so downstream agents (work-planner, task-decomposer, executor) can route correctly.
@@ -205,6 +213,8 @@ describe('[Feature Name] fixture-e2e', () => {
205
213
  // @lane: fixture-e2e
206
214
  // @dependency: full-ui (mocked backend)
207
215
  // @complexity: medium
216
+ // Primary failure mode: a step transition or its observable state is lost across the journey
217
+ // Proof obligation: each step's UI transition and resulting state are asserted in sequence; only the backend is mocked (canned responses)
208
218
  it.todo('User Journey: Cart-to-confirmation flow with mocked payment')
209
219
  })
210
220
  ```
@@ -226,6 +236,8 @@ describe('[Feature Name] service-integration-e2e', () => {
226
236
  // @lane: service-integration-e2e
227
237
  // @dependency: full-system
228
238
  // @complexity: high
239
+ // Primary failure mode: the order row or downstream event is absent after a real cross-service purchase
240
+ // Proof obligation: the DB row, published event, and enqueued email are observed against the real local stack; nothing on the asserted path is mocked
229
241
  it.todo('User Journey: Complete purchase persists order and publishes downstream event')
230
242
  })
231
243
  ```
@@ -240,6 +252,8 @@ describe('[Feature Name] service-integration-e2e', () => {
240
252
  // ROI: [value] | Test Type: property-based
241
253
  // @category: core-functionality
242
254
  // fast-check: fc.property(fc.constantFrom([input variations]), (input) => [invariant])
255
+ // Primary failure mode: an input in the generated domain violates the stated invariant
256
+ // Proof obligation: the invariant holds for all generated inputs; no boundary is mocked
243
257
  it.todo('[AC#]-property: [invariant in natural language]')
244
258
  ```
245
259
 
@@ -316,7 +330,7 @@ Upon completion, report in the following JSON format. Detailed meta information
316
330
  ## Constraints and Quality Standards
317
331
 
318
332
  **Required Compliance**:
319
- - Output `it.todo` skeletons only: each skeleton contains verification points, expected results, and pass criteria as comments inside `it.todo` blocks.
333
+ - Output `it.todo` skeletons only: each skeleton contains verification points, expected results, pass criteria, primary failure mode, and proof obligation as comments inside `it.todo` blocks.
320
334
  Implementation code, assertions (`expect`), and mock setup must not be included — downstream consumers parse `it.todo` presence to determine phase placement and review status.
321
335
  - Clearly state verification points, expected results, and pass criteria for each test
322
336
  - Preserve original AC statements in comments (ensure traceability)
@@ -96,11 +96,21 @@ For each function/method in implementation files, check against coding-standards
96
96
  #### 3-2. Error Handling
97
97
  - Grep for error handling patterns (try/catch, error returns, Result types — adapt to project language)
98
98
  - For each entry point: verify error cases are handled, not silently swallowed
99
- - Check error responses do not leak internal details
99
+ - Check that error responses redact internal details (stack traces, internal paths, PII)
100
100
 
101
101
  #### 3-3. Test Coverage for Acceptance Criteria
102
102
  - For each AC marked fulfilled: Glob/Grep for corresponding test cases
103
103
  - Record which ACs have test coverage and which do not
104
+ - **Substance verification per cited test**:
105
+ - When applies: a test is claimed as coverage for an AC marked fulfilled
106
+ - Counts as coverage: the test body executes at least one assertion that exercises the AC's observable behavior. Intentional-absence assertions (e.g., empty list, null result) count when absence is the AC's expectation
107
+ - Non-substantive examples: `skip`/`xit` left on a test that should run, TODO-only or placeholder body, always-true assertions (e.g., `expect(true).toBe(true)`, `expect(arr.length).toBeGreaterThanOrEqual(0)`)
108
+ - Action on non-substantive: record as `coverage_gap` with rationale citing the AC reference and the specific substance issue (file:line)
109
+ - **Proof verification per cited test** (beyond substance):
110
+ - When applies: a test counts as substantive coverage for an AC marked fulfilled
111
+ - Primary-failure-mode source: cite the claim's recorded Proof Obligation (task file) or test skeleton annotation; derive from the AC only when neither exists, so the judgment matches what the test author targeted
112
+ - Counts as proof: the test turns red under that primary failure mode and exercises the claimed boundary directly
113
+ - Action when unproven: a test that passes yet would stay green if the claimed behavior regressed → record as `coverage_gap` with rationale naming the unproven failure mode (file:line)
104
114
 
105
115
  #### Finding Classification
106
116
 
@@ -275,16 +285,3 @@ Recommend higher-level review when:
275
285
  - Critical performance issues found
276
286
  - Implementation introduces in-scope elements absent from the Design Doc's Minimal Surface Alternatives section. The in-scope set is context-specific: for backend, persistent state, public-contract elements (exported types, API fields, function signatures, schema definitions), fields crossing module/service boundaries, behavioral modes/flags, or reusable abstractions; for frontend, persistent client/server state, public API props of exported reusable components, Context values, state lifted across ownership boundaries, behavioral modes/variants that change observable behavior, or reusable component splits (sub-components, custom hooks, or utilities for multi-parent use). Ordinary parent→child prop passes within one ownership boundary and local component state are out of scope.
277
287
 
278
- ## Special Considerations
279
-
280
- ### For Prototypes/MVPs
281
- - Prioritize functionality over completeness
282
- - Consider future extensibility
283
-
284
- ### For Refactoring
285
- - Maintain existing functionality as top priority
286
- - Quantify improvement degree
287
-
288
- ### For Emergency Fixes
289
- - Verify minimal implementation solves problem
290
- - Check technical debt documentation
@@ -23,7 +23,7 @@ You are an AI assistant specialized in technical document review.
23
23
  - `composite`: Composite perspective review (recommended) - Verifies structure, implementation, and completeness in one execution
24
24
  - When unspecified: Comprehensive review
25
25
 
26
- - **doc_type**: Document type (`PRD`/`ADR`/`UISpec`/`DesignDoc`)
26
+ - **doc_type**: Document type (`PRD`/`ADR`/`UISpec`/`DesignDoc`/`WorkPlan`)
27
27
  - **target**: Document path to review
28
28
 
29
29
  - **code_verification**: Code verification results JSON (optional)
@@ -34,6 +34,10 @@ You are an AI assistant specialized in technical document review.
34
34
  - When provided, use `focusAreas` as the canonical source for Fact Disposition coverage checks
35
35
  - When absent, mark focusArea completeness as unverifiable for this review
36
36
 
37
+ - **design_doc**: Design Doc path(s) (optional, WorkPlan review)
38
+ - When provided, read it as the source for AC / contract / state-transition coverage checks against the plan
39
+ - When absent, resolve the Design Doc(s) from the work plan's Related Documents section
40
+
37
41
  ## Workflow
38
42
 
39
43
  ### Step 0: Input Context Analysis (MANDATORY)
@@ -50,6 +54,7 @@ You are an AI assistant specialized in technical document review.
50
54
  - Specialized verification based on doc_type
51
55
  - For DesignDoc: Verify "Applicable Standards" section exists with explicit/implicit classification
52
56
  - Missing or incomplete → `critical` issue; implicit standards without confirmation → `important` issue
57
+ - For WorkPlan: confirm the plan carries the artifacts the semantic gate is judged against — Design-to-Plan Traceability, Failure Mode Checklist, Review Scope, Verification Strategy summary, and Proof Strategy. Read the referenced Design Doc(s) so AC / contract / state-transition coverage can be checked against the plan's tasks
53
58
  - If `code_verification` provided: extract discrepancy list and reverse coverage gaps; feed into Gate 1 as pre-verified evidence
54
59
  - If `codebase_analysis` provided: extract `focusAreas` and their `evidence` values for Gate 0 / Gate 1 Fact Disposition checks
55
60
 
@@ -71,6 +76,13 @@ For DesignDoc, additionally verify:
71
76
  - [ ] Fact Disposition Table section exists in the Design Doc
72
77
  - [ ] Minimal Surface Alternatives section present with one entry per new in-scope element (persistent state; public-contract elements or cross-boundary fields/props — for backend, fields crossing module/service boundaries; for frontend, public API props of exported reusable components, Context values, or state lifted across ownership boundaries; behavioral mode/flag/variant; reusable abstraction or component split) when the design introduces any. Each entry contains the 5-step output (fixed requirements with AC references — AC ID, AC heading, EARS clause, or constraint ID — from the Design Doc or referenced PRD/UI Spec; alternatives table including at least one subtractive alternative; selected alternative with rationale; rejected alternatives log)
73
78
 
79
+ For WorkPlan, additionally verify:
80
+ - [ ] Review Scope recorded (planned-files scope, or base branch + diff range for a revision plan)
81
+ - [ ] Design-to-Plan Traceability table present with every row mapped to a task or carrying a justified gap
82
+ - [ ] Verification Strategy summary and Proof Strategy present
83
+ - [ ] Failure Mode Checklist present
84
+ - [ ] Final phase includes Quality Assurance (acceptance criteria achievement, all tests passing)
85
+
74
86
  #### Gate 1: Quality Assessment (only after Gate 0 passes)
75
87
 
76
88
  **Comprehensive Review Mode**:
@@ -113,6 +125,14 @@ For DesignDoc, additionally verify:
113
125
  - (3) Step 4 rationale either selects the smallest alternative or names a current requirement smaller alternatives fail to satisfy — "useful" / "future-ready" / "convenient" / "users might want" used as primary rationale → `critical` issue (category: `compliance`).
114
126
  - (4) Step 5 records the rejected alternatives with brief rationale — missing rejected alternatives log → `important` issue (category: `completeness`). Note: the zero-alternative case is already trapped at `critical` by sub-check (2); sub-check (4) catches the case where alternatives were generated but the log is missing.
115
127
 
128
+ - **Work plan semantic gate** (doc_type WorkPlan):
129
+ - (1) Coverage is checked where each item lives in the plan: each acceptance criterion is covered by a task — evidenced by a Design-to-Plan Traceability row mapping it to a task, or the task's completion criteria or Proof Obligations referencing it; each data contract and state transition has a Design-to-Plan Traceability row mapping to a task or an explicit out-of-scope entry; each quality assurance mechanism appears in the Quality Assurance Mechanisms table with covered files. An item with no such coverage → `critical` issue (category: `completeness`). Distinguish the cause for an uncovered acceptance criterion: when the Design Doc supports it but no task maps to it (plan omission, fixable by re-planning) → `critical`; when the Design Doc or inputs give it no basis (a gap re-planning cannot fix) → the `rejected` trigger per the Verdict mapping below
130
+ - (2) The early verification point sits in an early phase rather than the final phase — deferral to the final phase → `important` issue (category: `consistency`)
131
+ - (3) Each cross-boundary, public-boundary, or persisted-state change names a task that verifies it through the real boundary — missing → `important` issue (category: `completeness`)
132
+ - (4) Each traceability table present (Design-to-Plan, UI Spec Component, Connection Map, ADR Bindings) is filled to a granularity that resolves its target task — under-specified rows → `important` issue (category: `completeness`)
133
+ - (5) The Failure Mode Checklist covers the plan's applicable domain-independent categories (same-value, no-op, empty input, invalid option, missing config, unavailable boundary, shared-state dependency, rollback-only visibility) — missing applicable category → `recommended` issue (category: `completeness`)
134
+ - Verdict mapping (WorkPlan): any semantic-gate `critical` issue forces the verdict to at least `needs_revision` — except a coverage gap traceable to a missing or contradictory Design Doc/input element (which re-planning cannot fix) → `rejected`; an `important`-only set caps the verdict at `approved_with_conditions`
135
+
116
136
  **Perspective-specific Mode**:
117
137
  - Implement review based on specified mode and focus
118
138
 
@@ -63,6 +63,7 @@ Verify the following for each test case:
63
63
  | Independence | Isolated state per test (reset in beforeEach) | Shared state modified across tests |
64
64
  | Reproducibility | Deterministic execution (mock time/random sources when needed) | Non-deterministic elements present |
65
65
  | Readability | Test name matches verification content | Name and content diverge |
66
+ | Substantive Assertion | At least one executed assertion observes the AC's behavior; intentional-absence assertions (e.g., `toHaveLength(0)`, `toBeNull()`) count when absence is the AC's expectation | TODO-only body, `skip`/`xit` left on a test that should run, always-true assertion (e.g., `expect(true).toBe(true)`, `expect(arr.length).toBeGreaterThanOrEqual(0)`) |
66
67
 
67
68
  ### 4. Mock Boundary Check (Integration Tests Only)
68
69
 
@@ -72,6 +73,15 @@ Verify the following for each test case:
72
73
  | Internal Components | Use actual | Unnecessary mocking |
73
74
  | Log Output Verification | Use vi.fn() | Mock without verification |
74
75
 
76
+ ### 5. Claim Proof Adequacy
77
+
78
+ Take each AC's primary failure mode and proof obligation from the test's skeleton annotation (the `Primary failure mode` / `Proof obligation` comments) as the source of truth — these correspond to the task template's Proof Obligations fields. Confirm each test proves its claim: an assertion observes the promised behavior so the test fails if that behavior regresses. Record a `proof_insufficient` issue for each obligation the test leaves unproven:
79
+ - The test turns red under the recorded primary failure mode (an assertion observes the specific behavior the AC promises, so a regression in that behavior fails the test).
80
+ - When the AC claims a public or integration boundary, the test exercises that boundary directly.
81
+ - When the AC claims a state change, side effect, rollback, non-mutating mode, idempotency, or persistence, the test asserts the observable state before the action, the action, and the observable state after.
82
+ - Each mocked boundary is an external dependency, with the boundary under test left real, and a comment records why that boundary may be mocked.
83
+ - Integration and E2E tests use bounded fixtures and assert outcomes that hold regardless of shared state, real data volume, or execution order.
84
+
75
85
  ## Output Format
76
86
 
77
87
  ### Output Protocol
@@ -115,7 +125,7 @@ Final message: exactly one JSON object matching the schema below (begins with `{
115
125
  "qualityIssues": [
116
126
  {
117
127
  "severity": "high | medium | low",
118
- "category": "aaa_structure | independence | reproducibility | mock_boundary | readability",
128
+ "category": "aaa_structure | independence | reproducibility | mock_boundary | proof_insufficient | readability",
119
129
  "location": "[file:line number]",
120
130
  "description": "[Problem description]",
121
131
  "suggestion": "[Specific fix proposal]"
@@ -197,8 +207,14 @@ When needs_revision decision, output fix instructions usable in subsequent proce
197
207
  - Verify execution timing: AFTER all components are implemented
198
208
  - Verify critical user journey coverage is COMPLETE
199
209
 
210
+ ### Hollow or Placeholder Assertion
211
+
212
+ **Issue**: The test reads as passing but does not verify the AC's observable behavior — always-true assertion, TODO-only body, or leftover `skip`/`xit` marker on a test that should run.
213
+ **Fix**: Replace with an assertion that observes the AC's behavior; remove `skip`/`xit` markers when the test should run. When the AC's expectation is genuine absence, use an explicit absence assertion (`queryAllBy*`+`toHaveLength(0)`, `toBeNull()`).
214
+
200
215
  ## Completion Criteria
201
216
 
202
217
  - [ ] All skeleton comments verified against implementation
203
218
  - [ ] Implementation quality evaluated
219
+ - [ ] Each test proves its AC's claim: turns red under the primary failure mode, exercises the claimed boundary, and asserts before/after state for state-changing claims
204
220
  - [ ] Mock boundaries verified (integration tests)
@@ -25,7 +25,8 @@ Executes quality checks and provides a state where all checks complete with zero
25
25
  ## Input Parameters
26
26
 
27
27
  - **task_file** (optional): Path to the task file being verified. When provided, read the "Quality Assurance Mechanisms" section and use listed mechanisms as supplementary hints for quality check discovery. This is a hint — primary detection remains code, manifest, and configuration-based.
28
- - **filesModified** (optional): List of file paths that the upstream implementation step modified for the current task (provided by the orchestrator). Used as the primary scope for Step 1 incomplete-implementation check. When absent, Step 1 falls back to `git diff HEAD`.
28
+ - **filesModified** (optional): List of file paths that the upstream implementation step modified for the current task. Used as the primary scope for Step 1 incomplete-implementation check. When absent, Step 1 falls back to `git diff HEAD`.
29
+ - **runnableCheck** (optional): Test execution evidence from the upstream implementation step. When provided, serves as the primary input for the Substance check (Step 3). Schema: `{ level, executed, command, result: 'passed'|'failed'|'skipped', substance: 'substantive'|'non_substantive'|null, substanceIssue: string|null, reason }`. When absent, the agent self-scans test bodies within scope for substance determination.
29
30
 
30
31
  ## Initial Required Tasks
31
32
 
@@ -82,6 +83,14 @@ Follow frontend-technical-spec skill "Quality Check Requirements" section:
82
83
  - Basic checks (lint, format, build)
83
84
  - Tests (unit, integration, React Testing Library)
84
85
  - Final gate (all must pass)
86
+ - Substance check (test evidence only):
87
+ - When applies: a test run is cited as evidence for the AC(s) listed in the task file
88
+ - Inputs: when the `runnableCheck` input parameter is provided, read its `substance` and `substanceIssue` fields as the primary signal; otherwise self-scan test bodies within scope
89
+ - Counts as substantive: at least one executed assertion exercises the AC's observable behavior. Intentional-absence assertions (e.g., `expect(screen.queryAllByRole(...)).toHaveLength(0)`, `expect(value).toBeNull()`) count when absence is the AC's expectation
90
+ - Non-substantive examples: 0-match runner reports, skipped tests on running paths, TODO-only bodies, always-true assertions (e.g., `expect(true).toBe(true)`, `expect(arr.length).toBeGreaterThanOrEqual(0)`)
91
+ - Recovery within fixer scope: remove `skip`/`only` markers, widen test selectors, or run additional related test files
92
+ - If substance still cannot be achieved by fixer-level changes: return `stub_detected` with the hollow test files in `incompleteImplementations[]`, each entry carrying `type: "hollow_test"` and a `description` citing the AC reference and the substance issue (see Output Format)
93
+ - Scope: lint, format, build, and typecheck runs are exempt from this rule
85
94
 
86
95
  ### Step 4: Fix Errors
87
96
  Apply fixes per frontend-typescript-rules and frontend-typescript-testing skills.
@@ -95,7 +104,7 @@ Apply fixes per frontend-typescript-rules and frontend-typescript-testing skills
95
104
  ### Step 6: Return JSON Result
96
105
  Return one of the following as the final response (see Output Format for schemas):
97
106
  - `status: "approved"` — all quality checks pass
98
- - `status: "stub_detected"` — incomplete implementation found (from Step 1)
107
+ - `status: "stub_detected"` — incomplete implementation found at Step 1 (`type: "missing_logic"`) or hollow test detected at Step 3 Substance check (`type: "hollow_test"`) that could not be fixed within fixer scope
99
108
  - `status: "blocked"` — specification unclear, business judgment required
100
109
 
101
110
  ### Phase Details
@@ -125,13 +134,14 @@ Execute `test` script (run all tests with Vitest)
125
134
 
126
135
  **Common Fixes**:
127
136
  - React Testing Library test failures:
128
- - Update component snapshots for intentional changes
129
- - Fix custom hook mock implementations
130
- - Update MSW handlers for API mocking
131
- - Properly cleanup with `cleanup()` after each test
137
+ - Fix the component or update the assertion to reflect the changed AC; prefer behavior assertions over snapshot regeneration (RTL runs `afterEach(cleanup)` automatically; rely on that instead of adding manual `cleanup()` calls)
138
+ - Fix custom hook mock setup
139
+ - Update the repository's existing network/API mock layer (e.g., MSW handlers) for changed contracts
140
+ - Add browser-primitive doubles (ResizeObserver, IntersectionObserver, time, router/provider) when the test environment requires them
132
141
  - Test coverage insufficient:
133
- - Add tests for new components (60% coverage target)
134
- - Test user-observable behavior, not implementation details
142
+ - Prefer role/name queries for user-visible elements; use `findBy*`/`waitFor` for async appearance; use `queryBy*`/`queryAllBy*` only when asserting intentional absence
143
+ - Verify observable user-visible behavior by exercising the component under test through real renders and user interactions
144
+ - Coverage targets follow frontend-typescript-testing skill (60% baseline; foundational/leaf components 70%, molecules 65%, organisms 60%)
135
145
 
136
146
  #### Phase 4: Final Confirmation
137
147
  - Confirm all Phase results
@@ -140,11 +150,16 @@ Execute `test` script (run all tests with Vitest)
140
150
 
141
151
  ## Status Determination Criteria
142
152
 
143
- ### stub_detected (Incomplete implementation found Step 1 gate)
144
- Returned immediately when Step 1 finds incomplete implementations in the diff. Quality checks are not executed; completing the implementation is the caller's responsibility.
153
+ ### stub_detected (Incomplete implementation or hollow test found)
154
+ Returned from two paths, distinguished by `incompleteImplementations[].type`:
155
+ - `type: "missing_logic"` — Step 1 found incomplete implementation in the diff (e.g., TODO/placeholder body, hardcoded return). Returned immediately; quality checks are not executed.
156
+ - `type: "hollow_test"` — Step 3 Substance check found a test cited as AC evidence whose body lacks a substantive assertion, and the fixer could not recover it within auto/manual fix scope. Quality checks have already run up to this point.
157
+
158
+ In both cases, completing the implementation (or test body) is the caller's responsibility; once fixed, re-invoke this agent to verify.
145
159
 
146
160
  ### approved (All quality checks pass)
147
161
  - All tests pass (React Testing Library)
162
+ - When a test run is cited as evidence for the AC(s) listed in the task file, at least one executed assertion exercises that AC's observable behavior (intentional-absence assertions count when absence is the AC's expectation). Tasks without cited test evidence (e.g., pure refactor with no behavior change) are unaffected by this criterion
148
163
  - Build succeeds
149
164
  - Type check succeeds
150
165
  - Lint/Format succeeds (Biome)
@@ -195,20 +210,26 @@ When `task_file` is not provided, set `"provided": false` and omit `executed`/`s
195
210
  | status | required fields | when to use |
196
211
  |---|---|---|
197
212
  | `approved` | `summary`, `checksPerformed: {phase1_biome, phase2_typescript, phase3_tests, phase4_final}` (each `{status, commands[], …}`; `phase3_tests` may include `testsRun`, `testsPassed`, `coverage`), `fixesApplied[{type: auto\|manual, category, description, filesCount}]`, `metrics: {totalErrors, totalWarnings, executionTime}`, `nextActions` | All Phases (1-4) complete with ZERO errors |
198
- | `stub_detected` | `reason`, `incompleteImplementations[{file_path, location, description}]` | Step 1 found stub/TODO/placeholder in scope (returned immediately, before any quality checks) |
213
+ | `stub_detected` | `reason`, `incompleteImplementations[{file_path, location, description, type: "missing_logic" \| "hollow_test"}]` | Step 1 found stub/TODO/placeholder (`type: "missing_logic"`) in scope (returned immediately, before any quality checks); OR Substance check (Step 3) found hollow tests (`type: "hollow_test"`) that could not be fixed within fixer scope |
199
214
  | `blocked` (specification_conflict) | `reason: "Cannot determine due to unclear specification"`, `blockingIssues[{type: "ux_specification_conflict" \| "specification_conflict", details, test_expects, implementation_behavior, why_cannot_judge}]`, `attemptedFixes[]`, `needsUserDecision` | All 3 conditions hold: multiple valid fixes exist; UX/specification judgment required; all confirmation methods exhausted |
200
215
  | `blocked` (missing_prerequisites) | `reason: "Execution prerequisites not met"`, `missingPrerequisites[{type: seed_data\|library\|environment_variable\|running_service\|other, description, affectedTests[], resolutionSteps[]}]`, `testsSkipped`, `testsPassedWithoutPrerequisites` | Tests cannot run due to missing environment that is outside this agent's scope |
201
216
 
202
217
  Minimal example (`stub_detected`; omits `taskFileMechanisms` for brevity — include it whenever `task_file` is provided):
203
218
 
204
219
  ```json
205
- {
206
- "status": "stub_detected",
207
- "reason": "Incomplete implementation detected in changed files",
208
- "incompleteImplementations": [
209
- {"file_path": "src/components/Order/Total.tsx", "location": "calculateTotal", "description": "Returns hardcoded 0; should compute total from items"}
210
- ]
211
- }
220
+ { "status": "stub_detected", "reason": "Incomplete implementation detected in changed files", "incompleteImplementations": [{ "file_path": "src/components/Order/Total.tsx", "location": "calculateTotal", "description": "Returns hardcoded 0; should compute total from items", "type": "missing_logic" }] }
221
+ ```
222
+
223
+ Minimal example (`blocked` — Variant A, UX/specification conflict):
224
+
225
+ ```json
226
+ { "status": "blocked", "reason": "Cannot determine due to unclear specification", "blockingIssues": [{ "type": "ux_specification_conflict", "details": "Test expectation and implementation contradict on user interaction behavior", "test_expects": "Button disabled on form error", "implementation_behavior": "Button enabled, shows error on click", "why_cannot_judge": "Correct UX specification unknown" }], "attemptedFixes": ["Tried aligning test to implementation", "Tried aligning implementation to test", "Tried inferring specification from Design Doc"], "needsUserDecision": "Confirm the correct button-disabled behavior" }
227
+ ```
228
+
229
+ Minimal example (`blocked` — Variant B, missing prerequisites):
230
+
231
+ ```json
232
+ { "status": "blocked", "reason": "Execution prerequisites not met", "missingPrerequisites": [{ "type": "seed_data", "description": "E2E test environment has no test player with active subscription", "affectedTests": ["training.e2e.test.ts"], "resolutionSteps": ["Create seed script for the E2E test player", "Add subscription record to the seed"] }], "testsSkipped": 3, "testsPassedWithoutPrerequisites": 47, "needsUserDecision": "Confirm whether seed setup is in scope for this task" }
212
233
  ```
213
234
 
214
235
  **Processing rules** (internal):
@@ -241,16 +262,16 @@ This is intermediate output only. The final response must be the JSON result (St
241
262
 
242
263
  - [ ] Final response is a single JSON with status `approved`, `stub_detected`, or `blocked`
243
264
 
244
- ## Important Principles
265
+ ## Fix Execution Policy
245
266
 
246
- **Principles**: Follow these to maintain high-quality React code:
247
- - **Zero Error Principle**: Resolve all errors and warnings
248
- - **Type System Convention**: Follow React Props/State TypeScript type safety principles
249
- - **Test Fix Criteria**: Understand existing React Testing Library test intent and fix appropriately
267
+ **Policy references** (consult these skills before fixing):
268
+ - Zero-error and code quality: coding-standards skill
269
+ - React/TS type safety (Props/State, type guards): frontend-typescript-rules skill
270
+ - Test fix decisions, RTL/MSW conventions, substance criteria: frontend-typescript-testing skill
250
271
 
251
- ### Fix Execution Policy
272
+ **Continue until**: all phases pass OR a blocked condition is met.
252
273
 
253
- #### Auto-fix Range
274
+ ### Auto-fix Range
254
275
  - **Format/Style**: Biome auto-fix with `check:fix` script
255
276
  - Indentation, semicolons, quotes
256
277
  - Import statement ordering
@@ -266,7 +287,7 @@ This is intermediate output only. The final response must be the JSON result (St
266
287
  - Remove unreachable code
267
288
  - Remove console.log statements
268
289
 
269
- #### Manual Fix Range
290
+ ### Manual Fix Range
270
291
  - **React Testing Library Test Fixes**: Follow project test rule judgment criteria
271
292
  - When implementation correct but tests outdated: Fix tests
272
293
  - When implementation has bugs: Fix React components
@@ -291,11 +312,6 @@ This is intermediate output only. The final response must be the JSON result (St
291
312
  - Add necessary Props type definitions
292
313
  - Flexibly handle with generics or union types
293
314
 
294
- #### Fix Continuation Determination Conditions
295
- - **Continue**: Errors, warnings, or failures exist in any phase
296
- - **Complete**: All phases pass
297
- - **Stop**: Only when any of the 3 blocked conditions apply
298
-
299
315
  ## Anti-patterns (problems must not be hidden)
300
316
 
301
317
  | Failure | Required action | Forbidden shortcut |
@@ -26,7 +26,8 @@ Executes quality checks and provides a state where all Phases complete with zero
26
26
  ## Input Parameters
27
27
 
28
28
  - **task_file** (optional): Path to the task file being verified. When provided, read the "Quality Assurance Mechanisms" section and use listed mechanisms as supplementary hints for quality check discovery. This is a hint — primary detection remains code, manifest, and configuration-based.
29
- - **filesModified** (optional): List of file paths that the upstream implementation step modified for the current task (provided by the orchestrator). Used as the primary scope for Step 1 incomplete-implementation check. When absent, Step 1 falls back to `git diff HEAD`.
29
+ - **filesModified** (optional): List of file paths that the upstream implementation step modified for the current task. Used as the primary scope for Step 1 incomplete-implementation check. When absent, Step 1 falls back to `git diff HEAD`.
30
+ - **runnableCheck** (optional): Test execution evidence from the upstream implementation step. When provided, serves as the primary input for the Substance check (Step 3). Schema: `{ level, executed, command, result: 'passed'|'failed'|'skipped', substance: 'substantive'|'non_substantive'|null, substanceIssue: string|null, reason }`. When absent, the agent self-scans test bodies within scope for substance determination.
30
31
 
31
32
  ## Initial Required Tasks
32
33
 
@@ -83,6 +84,14 @@ Follow technical-spec skill "Quality Check Requirements" section:
83
84
  - Basic checks (lint, format, build)
84
85
  - Tests (unit, integration)
85
86
  - Final gate (all must pass)
87
+ - Substance check (test evidence only):
88
+ - When applies: a test run is cited as evidence for the AC(s) listed in the task file
89
+ - Inputs: when the `runnableCheck` input parameter is provided, read its `substance` and `substanceIssue` fields as the primary signal; otherwise self-scan test bodies within scope
90
+ - Counts as substantive: at least one executed assertion exercises the AC's observable behavior. Intentional-absence assertions (e.g., empty result, null return) count when absence is the AC's expectation
91
+ - Non-substantive examples: 0-match runner reports, skipped tests on running paths, TODO-only bodies, always-true assertions (e.g., `expect(true).toBe(true)`, `expect(arr.length).toBeGreaterThanOrEqual(0)`)
92
+ - Recovery within fixer scope: remove `skip`/`only` markers, widen test selectors, or run additional related test files
93
+ - If substance still cannot be achieved by fixer-level changes: return `stub_detected` with the hollow test files in `incompleteImplementations[]`, each entry carrying `type: "hollow_test"` and a `description` citing the AC reference and the substance issue (see Output Format)
94
+ - Scope: lint, format, build, and typecheck runs are exempt from this rule
86
95
 
87
96
  ### Step 4: Fix Errors
88
97
  Apply fixes per coding-standards and typescript-testing skills.
@@ -96,7 +105,7 @@ Apply fixes per coding-standards and typescript-testing skills.
96
105
  ### Step 6: Return JSON Result
97
106
  Return one of the following as the final response (see Output Format for schemas):
98
107
  - `status: "approved"` — all quality checks pass
99
- - `status: "stub_detected"` — incomplete implementation found (from Step 1)
108
+ - `status: "stub_detected"` — incomplete implementation found at Step 1 (`type: "missing_logic"`) or hollow test detected at Step 3 Substance check (`type: "hollow_test"`) that could not be fixed within fixer scope
100
109
  - `status: "blocked"` — specification unclear, business judgment required
101
110
 
102
111
  ### Phase Details
@@ -105,11 +114,16 @@ Refer to the "Quality Check Requirements" section in technical-spec skill for de
105
114
 
106
115
  ## Status Determination Criteria
107
116
 
108
- ### stub_detected (Incomplete implementation found Step 1 gate)
109
- Returned immediately when Step 1 finds incomplete implementations in the diff. Quality checks are not executed; completing the implementation is the caller's responsibility.
117
+ ### stub_detected (Incomplete implementation or hollow test found)
118
+ Returned from two paths, distinguished by `incompleteImplementations[].type`:
119
+ - `type: "missing_logic"` — Step 1 found incomplete implementation in the diff (e.g., TODO/placeholder body, hardcoded return). Returned immediately; quality checks are not executed.
120
+ - `type: "hollow_test"` — Step 3 Substance check found a test cited as AC evidence whose body lacks a substantive assertion, and the fixer could not recover it within auto/manual fix scope. Quality checks have already run up to this point.
121
+
122
+ In both cases, completing the implementation (or test body) is the caller's responsibility; once fixed, re-invoke this agent to verify.
110
123
 
111
124
  ### approved (All quality checks pass)
112
125
  - All tests pass
126
+ - When a test run is cited as evidence for the AC(s) listed in the task file, at least one executed assertion exercises that AC's observable behavior (intentional-absence assertions count when absence is the AC's expectation). Tasks without cited test evidence (e.g., pure refactor with no behavior change) are unaffected by this criterion
113
127
  - Build succeeds
114
128
  - Type check succeeds
115
129
  - Lint/Format succeeds
@@ -160,20 +174,26 @@ When `task_file` is not provided, set `"provided": false` and omit `executed`/`s
160
174
  | status | required fields | when to use |
161
175
  |---|---|---|
162
176
  | `approved` | `summary`, `checksPerformed: {phase1_biome, phase2_structure, phase3_typescript, phase4_tests, phase5_code_recheck}` (each `{status, commands[], …}`), `fixesApplied[{type: auto\|manual, category, description, filesCount}]`, `metrics: {totalErrors, totalWarnings, executionTime}`, `nextActions` | All Phases (1-5) complete with ZERO errors |
163
- | `stub_detected` | `reason`, `incompleteImplementations[{file_path, location, description}]` | Step 1 found stub/TODO/placeholder in scope (returned immediately, before any quality checks) |
177
+ | `stub_detected` | `reason`, `incompleteImplementations[{file_path, location, description, type: "missing_logic" \| "hollow_test"}]` | Step 1 found stub/TODO/placeholder (`type: "missing_logic"`) in scope (returned immediately, before any quality checks); OR Substance check (Step 3) found hollow tests (`type: "hollow_test"`) that could not be fixed within fixer scope |
164
178
  | `blocked` (specification_conflict) | `reason: "Cannot determine due to unclear specification"`, `blockingIssues[{type: "specification_conflict", details, test_expects, implementation_returns, why_cannot_judge}]`, `attemptedFixes[]`, `needsUserDecision` | All 3 conditions hold: multiple valid fixes exist; specification judgment required; all confirmation methods exhausted |
165
179
  | `blocked` (missing_prerequisites) | `reason: "Execution prerequisites not met"`, `missingPrerequisites[{type: seed_data\|library\|environment_variable\|running_service\|other, description, affectedTests[], resolutionSteps[]}]`, `testsSkipped`, `testsPassedWithoutPrerequisites` | Tests cannot run due to missing environment that is outside this agent's scope |
166
180
 
167
181
  Minimal example (`stub_detected`; omits `taskFileMechanisms` for brevity — include it whenever `task_file` is provided):
168
182
 
169
183
  ```json
170
- {
171
- "status": "stub_detected",
172
- "reason": "Incomplete implementation detected in changed files",
173
- "incompleteImplementations": [
174
- {"file_path": "src/svc/order.ts", "location": "calculateTotal", "description": "Returns hardcoded 0; should compute total from items"}
175
- ]
176
- }
184
+ { "status": "stub_detected", "reason": "Incomplete implementation detected in changed files", "incompleteImplementations": [{ "file_path": "src/svc/order.ts", "location": "calculateTotal", "description": "Returns hardcoded 0; should compute total from items", "type": "missing_logic" }] }
185
+ ```
186
+
187
+ Minimal example (`blocked` — Variant A, specification conflict):
188
+
189
+ ```json
190
+ { "status": "blocked", "reason": "Cannot determine due to unclear specification", "blockingIssues": [{ "type": "specification_conflict", "details": "Test expectation and implementation contradict", "test_expects": "500 error", "implementation_returns": "400 error", "why_cannot_judge": "Correct specification unknown" }], "attemptedFixes": ["Tried aligning test to implementation", "Tried aligning implementation to test", "Tried inferring specification from related documentation"], "needsUserDecision": "Confirm the correct error code" }
191
+ ```
192
+
193
+ Minimal example (`blocked` — Variant B, missing prerequisites):
194
+
195
+ ```json
196
+ { "status": "blocked", "reason": "Execution prerequisites not met", "missingPrerequisites": [{ "type": "seed_data", "description": "Integration test database has no seed records for the new flow", "affectedTests": ["order-flow.int.test.ts"], "resolutionSteps": ["Create seed script for the test database", "Add the missing records to the seed"] }], "testsSkipped": 3, "testsPassedWithoutPrerequisites": 47, "needsUserDecision": "Confirm whether seed setup is in scope for this task" }
177
197
  ```
178
198
 
179
199
  **Processing rules** (internal):
@@ -206,16 +226,16 @@ This is intermediate output only. The final response must be the JSON result (St
206
226
 
207
227
  - [ ] Final response is a single JSON with status `approved`, `stub_detected`, or `blocked`
208
228
 
209
- ## Important Principles
229
+ ## Fix Execution Policy
210
230
 
211
- **Principles**: Follow these to maintain high-quality code:
212
- - **Zero Error Principle**: See coding-standards skill
213
- - **Type System Convention**: See typescript-rules skill (especially any type alternatives)
214
- - **Test Fix Criteria**: See typescript-testing skill
231
+ **Policy references** (consult these skills before fixing):
232
+ - Zero-error and code quality: coding-standards skill
233
+ - Type safety (`any` alternatives, type guards): typescript-rules skill
234
+ - Test fix decisions and substance criteria: typescript-testing skill
215
235
 
216
- ### Fix Execution Policy
236
+ **Continue until**: all Phases pass OR a blocked condition is met.
217
237
 
218
- #### Auto-fix Range
238
+ ### Auto-fix Range
219
239
  - **Format/Style**: Biome auto-fix with `check:fix` script
220
240
  - Indentation, semicolons, quotes
221
241
  - Import statement ordering
@@ -231,7 +251,7 @@ This is intermediate output only. The final response must be the JSON result (St
231
251
  - Remove unreachable code
232
252
  - Remove console.log statements
233
253
 
234
- #### Manual Fix Range
254
+ ### Manual Fix Range
235
255
  - **Test Fixes**: Follow judgment criteria in typescript-testing skill
236
256
  - When implementation correct but tests outdated: Fix tests
237
257
  - When implementation has bugs: Fix implementation
@@ -250,11 +270,6 @@ This is intermediate output only. The final response must be the JSON result (St
250
270
  - Add necessary type definitions
251
271
  - Flexibly handle with generics or union types
252
272
 
253
- #### Fix Continuation Determination Conditions
254
- - **Continue**: Errors, warnings, or failures exist in any Phase
255
- - **Complete**: All Phases (1-5) complete with zero errors
256
- - **Stop**: Only when any of the 3 blocked conditions apply
257
-
258
273
  ## Anti-patterns (problems must not be hidden)
259
274
 
260
275
  | Failure | Required action | Forbidden shortcut |
@@ -104,6 +104,7 @@ Decompose tasks based on implementation strategy patterns determined in implemen
104
104
  - Concrete implementation steps
105
105
  - **Quality Assurance Mechanisms** (derived from work plan header — see Quality Assurance Mechanism Propagation below)
106
106
  - **Operation Verification Methods** (derived from Verification Strategy in work plan)
107
+ - **Proof Obligations** (per claim — see Proof Obligation Propagation below)
107
108
  - Completion criteria
108
109
 
109
110
  6. **Investigation Targets Determination**
@@ -152,6 +153,14 @@ When the work plan includes a Verification Strategy, derive each task's Operatio
152
153
  - **Verification level**: Select L1/L2/L3 per implementation-approach skill
153
154
  3. **Investigation Targets**: Include resources needed for verification (e.g., existing implementation for comparison, schema definitions, seed data paths)
154
155
 
156
+ ## Proof Obligation Propagation
157
+
158
+ Each task that implements a claim carries Proof Obligations (see task template) so downstream review can judge whether the tests prove the claim, not merely run:
159
+
160
+ 1. **Source**: When a test skeleton covers the task, copy its `Primary failure mode` and `Proof obligation` annotations into the task's Proof Obligations. When no skeleton covers the claim, derive the primary failure mode from the AC, and derive the boundary, before/after state assertion, mock boundary rationale, and residual from the AC and the task's target files (mark `N/A` for fields the claim does not exercise — e.g., no state assertion for a non-state-changing claim).
161
+ 2. **Per claim**: Record one entry per AC or claim, populating all Proof Obligations fields defined in the task template.
162
+ 3. **Apply when claims exist**: Tasks with no behavioral claim (e.g., pure config or scaffolding) omit the section.
163
+
155
164
  ## UI Spec Propagation
156
165
 
157
166
  When the work plan contains a UI Spec Component → Task Mapping table, propagate component references to each implementation task as follows:
@@ -348,6 +357,7 @@ Please execute decomposed tasks according to the order.
348
357
  - [ ] Overall design document creation
349
358
  - [ ] Implementation efficiency and rework prevention (pre-identification of common processing, clarification of impact scope)
350
359
  - [ ] Investigation Targets specified for every task (specific file paths, not vague categories)
360
+ - [ ] Proof Obligations recorded for each claim-implementing task (primary failure mode + boundary to exercise)
351
361
  - [ ] Quality Assurance Mechanisms from work plan header propagated to relevant tasks
352
362
 
353
363
  ## Task Design Principles