@runecraft/grimoire 1.0.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.
- package/LICENSE +21 -0
- package/README.md +21 -0
- package/catalog.json +9 -0
- package/dist/grimoire.js +1758 -0
- package/package.json +54 -0
- package/references/definition-of-done.md +67 -0
- package/references/testing-patterns.md +260 -0
- package/skills/code-review-and-quality/README.md +13 -0
- package/skills/code-review-and-quality/SKILL.md +389 -0
- package/skills/code-simplification/README.md +13 -0
- package/skills/code-simplification/SKILL.md +338 -0
- package/skills/debugging-and-error-recovery/README.md +13 -0
- package/skills/debugging-and-error-recovery/SKILL.md +343 -0
- package/skills/debugging-and-error-recovery/scripts/__pycache__/triage_state.cpython-314.pyc +0 -0
- package/skills/debugging-and-error-recovery/scripts/triage_state.py +206 -0
- package/skills/deprecation-and-migration/README.md +13 -0
- package/skills/deprecation-and-migration/SKILL.md +248 -0
- package/skills/deprecation-and-migration/scripts/__pycache__/migration_tracker.cpython-314.pyc +0 -0
- package/skills/deprecation-and-migration/scripts/migration_tracker.py +237 -0
- package/skills/doubt-driven-development/README.md +13 -0
- package/skills/doubt-driven-development/SKILL.md +251 -0
- package/skills/git-commit-learning/.skill-meta.json +14 -0
- package/skills/git-commit-learning/README.md +205 -0
- package/skills/git-commit-learning/SKILL.md +435 -0
- package/skills/git-commit-learning/references/commit-patterns.md +595 -0
- package/skills/git-worktree/README.md +13 -0
- package/skills/git-worktree/SKILL.md +220 -0
- package/skills/idea-refine/README.md +13 -0
- package/skills/idea-refine/SKILL.md +186 -0
- package/skills/interview-me/README.md +13 -0
- package/skills/interview-me/SKILL.md +233 -0
- package/skills/linkedin-audit/SKILL.md +98 -0
- package/skills/linkedin-audit/references/dashboard-spec.md +43 -0
- package/skills/memory-management/README.md +13 -0
- package/skills/memory-management/SKILL.md +198 -0
- package/skills/security-and-hardening/README.md +13 -0
- package/skills/security-and-hardening/SKILL.md +472 -0
- package/skills/shipping-and-launch/README.md +13 -0
- package/skills/shipping-and-launch/SKILL.md +317 -0
- package/skills/skill-forge/README.md +153 -0
- package/skills/skill-forge/SKILL.md +291 -0
- package/skills/skill-forge/assets/SKILL.template.md +73 -0
- package/skills/skill-forge/references/authoring-patterns.md +249 -0
- package/skills/skill-forge/references/description-optimization.md +171 -0
- package/skills/skill-forge/references/output-evaluation.md +276 -0
- package/skills/skill-forge/references/scripts-guide.md +232 -0
- package/skills/skill-forge/references/spec.md +175 -0
- package/skills/skill-forge/scripts/validate.py +536 -0
- package/skills/spec-driven/.skill-meta.json +14 -0
- package/skills/spec-driven/README.md +335 -0
- package/skills/spec-driven/SKILL.md +174 -0
- package/skills/spec-driven/references/code-analysis.md +98 -0
- package/skills/spec-driven/references/coding-principles.md +56 -0
- package/skills/spec-driven/references/context-limits.md +31 -0
- package/skills/spec-driven/references/design.md +199 -0
- package/skills/spec-driven/references/discuss.md +136 -0
- package/skills/spec-driven/references/implement.md +425 -0
- package/skills/spec-driven/references/lessons.md +113 -0
- package/skills/spec-driven/references/memory.md +126 -0
- package/skills/spec-driven/references/specify.md +210 -0
- package/skills/spec-driven/references/sub-agents.md +96 -0
- package/skills/spec-driven/references/tasks.md +484 -0
- package/skills/spec-driven/references/validate.md +350 -0
- package/skills/spec-driven/scripts/__pycache__/lessons.cpython-314.pyc +0 -0
- package/skills/spec-driven/scripts/lessons.py +370 -0
- package/skills/spec-loop/README.md +36 -0
- package/skills/spec-loop/SKILL.md +61 -0
- package/skills/test-driven-development/README.md +13 -0
- package/skills/test-driven-development/SKILL.md +388 -0
- package/skills/typescript-patterns/README.md +13 -0
- package/skills/typescript-patterns/SKILL.md +346 -0
- package/skills/using-agent-skills/README.md +13 -0
- package/skills/using-agent-skills/SKILL.md +187 -0
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
# Execute: Validate & Verify
|
|
2
|
+
|
|
3
|
+
**Goal**: Verify implementation meets spec AND coding principles. This is NOT a separate phase — verification is part of every task's completion within Execute.
|
|
4
|
+
|
|
5
|
+
**Three levels of verification:**
|
|
6
|
+
|
|
7
|
+
1. **Per-task verification (always, author self-check):** After implementing each task, verify its "Done when" criteria before committing. This is mandatory and automatic. The implementer runs it.
|
|
8
|
+
|
|
9
|
+
2. **Feature-level validation (independent Verifier sub-agent, always-on, never prompted):** After all tasks for a feature (or priority group) are done, validation runs automatically — the orchestrator dispatches a **fresh Verifier sub-agent** (see [sub-agents.md](sub-agents.md)). Do NOT ask the user whether to run it; it is the safety net, not an opt-in. User interaction is limited to interactive UAT (for user-facing features) and acting on a FAIL verdict ("fix these gaps now?"). The Verifier:
|
|
10
|
+
- Runs **read-only** over the real implementation and tests — mutations run in a scratch/throwaway state only (see Discrimination Sensor section)
|
|
11
|
+
- Scopes coverage to the feature's **git diff surface** (not the full repository)
|
|
12
|
+
- Re-derives coverage independently using **evidence-or-zero**: every AC must be traced to a `file:line` + assertion expression; a criterion with no `file:line` citation counts as NOT covered
|
|
13
|
+
- Runs the **spec-anchored outcome check** and the **discrimination sensor** (both described below)
|
|
14
|
+
- Writes `.specs/features/[feature]/validation.md` with the full evidence report
|
|
15
|
+
- Returns a compact verdict + ranked gap list to the orchestrator in chat
|
|
16
|
+
- Gaps become **fix tasks** routed back to an implementer; re-verification follows with a maximum of **3 fix→re-verify iterations** before escalating to the user
|
|
17
|
+
|
|
18
|
+
3. **Interactive UAT (for user-facing features only):** The feature has complex user-facing behavior where human judgment matters (UI flows, interaction patterns, visual design). For backend-only or infrastructure work, automated checks are sufficient.
|
|
19
|
+
|
|
20
|
+
**Trigger for explicit validation:** "Validate", "verify work", "UAT", "test with me", "walk me through it"
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Process
|
|
25
|
+
|
|
26
|
+
### 1. Check Completed Tasks
|
|
27
|
+
|
|
28
|
+
Go through tasks.md:
|
|
29
|
+
|
|
30
|
+
- [ ] All tasks marked done?
|
|
31
|
+
- [ ] Any blocked or partial?
|
|
32
|
+
|
|
33
|
+
### 2. Spec-Anchored Acceptance Criteria Check
|
|
34
|
+
|
|
35
|
+
For each acceptance criterion in `spec.md`, the Verifier re-derives the **spec-defined expected outcome** and confirms the test's actual assertion matches it:
|
|
36
|
+
|
|
37
|
+
```markdown
|
|
38
|
+
### P1: [Story Title]
|
|
39
|
+
|
|
40
|
+
**Acceptance Criteria**:
|
|
41
|
+
|
|
42
|
+
| Criterion (WHEN X THEN Y) | Spec-defined outcome | `file:line` + assertion expression | Result |
|
|
43
|
+
| ------------------------- | -------------------- | ---------------------------------- | ------ |
|
|
44
|
+
| WHEN [X] THEN [Y] | [precise value/state from spec] | `path/to/test.ts:42` — `expect(result.field).toBe(expected)` | ✅ PASS / ❌ GAP / ⚠️ Spec-precision gap |
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Rules:**
|
|
48
|
+
|
|
49
|
+
- Where the spec defines a precise outcome (specific status code, field value, error message, state), the test assertion MUST target that exact outcome — not just that an assertion exists.
|
|
50
|
+
- Where the spec does NOT define a precise outcome, mark as **⚠️ Spec-precision gap** and flag it in the report. Do NOT silently pass a vague assertion.
|
|
51
|
+
- Evidence-or-zero: a criterion with no `file:line` citation counts as NOT covered.
|
|
52
|
+
|
|
53
|
+
### 3. Check Edge Cases
|
|
54
|
+
|
|
55
|
+
From spec.md edge cases:
|
|
56
|
+
|
|
57
|
+
- [ ] [Edge case 1] handled correctly
|
|
58
|
+
- [ ] [Edge case 2] handled correctly
|
|
59
|
+
|
|
60
|
+
### 4. Run Build-Level Gate Check (MANDATORY)
|
|
61
|
+
|
|
62
|
+
Run the Build-level gate check from the **Gate Check Commands** section in tasks.md. This is NOT optional.
|
|
63
|
+
|
|
64
|
+
1. Run: `[Build gate command from the Gate Check Commands section in tasks.md]`
|
|
65
|
+
2. Non-zero exit code = STOP. Do not proceed to Code Quality Check.
|
|
66
|
+
3. Record results:
|
|
67
|
+
- Total test count: [N]
|
|
68
|
+
- Passed: [N]
|
|
69
|
+
- Failed: [list]
|
|
70
|
+
- Skipped: [list — each skip must be justified]
|
|
71
|
+
|
|
72
|
+
**Test Integrity Check:**
|
|
73
|
+
|
|
74
|
+
- Compare current test count against the count before this feature was implemented
|
|
75
|
+
- If test count DECREASED: investigate why. Tests should only be deleted with explicit justification.
|
|
76
|
+
- If assertions were weakened (less specific than before): flag as potential regression
|
|
77
|
+
|
|
78
|
+
### 5. Discrimination Sensor (MANDATORY — always runs after gate check passes)
|
|
79
|
+
|
|
80
|
+
The sensor provides the empirical guarantee that the tests can actually detect regressions. It runs in a scratch/throwaway state — the real working tree is never modified.
|
|
81
|
+
|
|
82
|
+
**How it works:**
|
|
83
|
+
|
|
84
|
+
1. **Prepare a scratch state.** Use one of (choose the safest available for the environment):
|
|
85
|
+
- `git stash` the current state, apply a mutation, run tests, then `git stash pop`; OR
|
|
86
|
+
- A temporary worktree (`git worktree add`) or temp copy of the affected file(s).
|
|
87
|
+
2. **Inject a behavior-level fault** into the new code introduced by this feature. Choose a mutation proportional to the code's risk:
|
|
88
|
+
- Flip a boolean condition (`if (x)` → `if (!x)`, `>` → `>=`)
|
|
89
|
+
- Change a return value (return a wrong status code, wrong field, zero instead of a computed value)
|
|
90
|
+
- Off-by-one (shift a loop bound, change a slice index)
|
|
91
|
+
- Remove a required side effect (delete a method call that the spec requires)
|
|
92
|
+
3. **Run the tests** that cover the mutated code. Use the Quick or Full gate command from tasks.md.
|
|
93
|
+
4. **Confirm the mutant is killed** (tests FAIL). Then discard the mutation (restore the scratch state).
|
|
94
|
+
5. **If a mutant survives** (tests still pass after the fault), the tests are not discriminating for that behavior — add a fix task to strengthen the assertion.
|
|
95
|
+
|
|
96
|
+
**Tiering (proportional, not optional):**
|
|
97
|
+
|
|
98
|
+
| Context | Sensor depth |
|
|
99
|
+
| ------- | ------------ |
|
|
100
|
+
| Default (all features) | Lightweight fault-injection: 1–3 targeted behavior-level mutations per feature, focused on the highest-risk new code |
|
|
101
|
+
| P0 / critical paths (payment, auth, data integrity) | Full mutation run: use language-appropriate mutation tooling if available (e.g., Stryker, mutmut, cargo-mutants, pitest); otherwise increase the number of manual fault-injection mutations to ≥5 covering all branches |
|
|
102
|
+
|
|
103
|
+
**Stack-agnostic:** The sensor targets behavior-level semantics (what the code does), not a specific tool. Any language, any framework.
|
|
104
|
+
|
|
105
|
+
**Report:** Record killed/survived for each mutation attempt. Surviving mutants → create fix tasks before marking the feature done.
|
|
106
|
+
|
|
107
|
+
### 6. Code Quality Check (MANDATORY)
|
|
108
|
+
|
|
109
|
+
For each changed file, verify against [coding-principles.md](coding-principles.md):
|
|
110
|
+
|
|
111
|
+
| Check | Pass? |
|
|
112
|
+
| ------------------------------------ | ----- |
|
|
113
|
+
| No features beyond what was asked | |
|
|
114
|
+
| No abstractions for single-use code | |
|
|
115
|
+
| No unnecessary "flexibility" added | |
|
|
116
|
+
| Only touched files required for task | |
|
|
117
|
+
| Didn't "improve" unrelated code | |
|
|
118
|
+
| Matches existing patterns/style | |
|
|
119
|
+
| Would senior engineer approve? | |
|
|
120
|
+
| Tests map to acceptance criteria and are non-shallow (spot-check one story) | |
|
|
121
|
+
| Spec-anchored outcome check: each test's asserted value matches the spec-defined outcome (or gap flagged) | |
|
|
122
|
+
| Per-layer Coverage Expectation met: domain logic has 1:1 AC mapping; routes/e2e cover happy + edge + error paths for every route in scope | |
|
|
123
|
+
| Every test in scope maps to a spec AC, listed edge case, or Done-when criterion (no unclaimed tests) | |
|
|
124
|
+
| Documented project quality/testing guidelines followed (cite guideline file, or "none — strong defaults applied") | |
|
|
125
|
+
|
|
126
|
+
❌ Any "No"? → Fix before marking complete.
|
|
127
|
+
|
|
128
|
+
### 7. Interactive UAT (if user-facing feature)
|
|
129
|
+
|
|
130
|
+
For each testable deliverable, present one test at a time:
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
Test [N]: [Test Name]
|
|
134
|
+
|
|
135
|
+
Expected: [What should happen — specific and observable]
|
|
136
|
+
|
|
137
|
+
→ Does this work? Describe what you see.
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Wait for user response:
|
|
141
|
+
|
|
142
|
+
| User says | Interpret as |
|
|
143
|
+
| ------------------------------ | ----------------------- |
|
|
144
|
+
| "yes", "pass", "works", "next" | ✅ Pass |
|
|
145
|
+
| "skip", "can't test", "n/a" | ⏭️ Skip |
|
|
146
|
+
| Anything else | ❌ Issue — log verbatim |
|
|
147
|
+
|
|
148
|
+
**Severity inference (never ask the user for severity):**
|
|
149
|
+
|
|
150
|
+
| User description contains | Inferred severity |
|
|
151
|
+
| --------------------------------------- | ----------------- |
|
|
152
|
+
| crash, error, exception, fails, broken | Blocker |
|
|
153
|
+
| doesn't work, wrong, missing, can't | Major |
|
|
154
|
+
| slow, weird, off, minor, small | Minor |
|
|
155
|
+
| color, font, spacing, alignment, visual | Cosmetic |
|
|
156
|
+
| (unclear) | Major (default) |
|
|
157
|
+
|
|
158
|
+
### 8. Generate Fix Plans (if issues found)
|
|
159
|
+
|
|
160
|
+
For each issue found during UAT or from the Verifier:
|
|
161
|
+
|
|
162
|
+
1. **Diagnose** — Analyze the codebase to find root cause
|
|
163
|
+
2. **Create fix task** — Write a task definition with:
|
|
164
|
+
- What: The specific fix
|
|
165
|
+
- Where: File paths
|
|
166
|
+
- Verify: How to prove the fix works
|
|
167
|
+
- Done when: Acceptance criteria for the fix
|
|
168
|
+
3. **Present fix plan** — Show all fix tasks to user for approval
|
|
169
|
+
|
|
170
|
+
Fix tasks follow the same format as regular tasks and can be executed with the implement phase.
|
|
171
|
+
|
|
172
|
+
**Guardrail:** Maximum 3 diagnostic iterations per issue. If root cause isn't found after 3 attempts, flag for human investigation. The same 3-iteration bound applies to the Verifier's fix→re-verify cycle: if gaps persist after 3 rounds, escalate to the user rather than continuing to loop.
|
|
173
|
+
|
|
174
|
+
### 9. Write Validation Report File + Return Chat Summary (MANDATORY)
|
|
175
|
+
|
|
176
|
+
After all checks complete, the Verifier MUST:
|
|
177
|
+
|
|
178
|
+
1. **Write the persisted report** to `.specs/features/[feature]/validation.md` (see template below). This file is the evidence artifact — it survives the session and can be referenced by CI, reviewers, or future agents.
|
|
179
|
+
2. **Return a compact summary in chat** to the orchestrator (see Compact Chat Summary section below). The orchestrator surfaces it to the user and routes any ranked gaps to fix tasks.
|
|
180
|
+
|
|
181
|
+
### 10. Distill Lessons (MANDATORY when validation.md has signal)
|
|
182
|
+
|
|
183
|
+
This is the closing action of validation — not a separate phase. Immediately after the report is written, turn its grounded failures into reusable, project-local guidance by following [lessons.md](lessons.md). In short: for each surviving mutant, spec-precision gap, failed/uncovered AC, or `// SPEC_DEVIATION`, record one terse general lesson via `python3 scripts/lessons.py add` (the script enforces grounding and owns all bookkeeping). A clean PASS with no signal → record nothing. Run the self-check: if there was signal but no lesson was recorded, say so in chat. See [lessons.md](lessons.md) for the exact commands, phrasing rules, scope discipline, and the no-script fallback.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Compact Chat Summary (returned in chat after validation)
|
|
188
|
+
|
|
189
|
+
The Verifier returns this block to the orchestrator after completing all checks:
|
|
190
|
+
|
|
191
|
+
```markdown
|
|
192
|
+
## Validation: [Feature] — [PASS ✅ | FAIL ❌]
|
|
193
|
+
|
|
194
|
+
**Spec-anchored check**: [N/N ACs matched spec outcome | M spec-precision gaps flagged]
|
|
195
|
+
**Gate**: [X passed, 0 failed]
|
|
196
|
+
**Sensor**: [N mutations injected, N killed, N survived]
|
|
197
|
+
**Report**: `.specs/features/[feature]/validation.md`
|
|
198
|
+
|
|
199
|
+
**Ranked gaps** (if FAIL):
|
|
200
|
+
1. [Gap description] — [AC or criterion] — [file:line or "no evidence"]
|
|
201
|
+
2. ...
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Validation Report Template (`.specs/features/[feature]/validation.md`)
|
|
207
|
+
|
|
208
|
+
```markdown
|
|
209
|
+
# [Feature] Validation
|
|
210
|
+
|
|
211
|
+
**Date**: [YYYY-MM-DD]
|
|
212
|
+
**Spec**: `.specs/features/[feature]/spec.md`
|
|
213
|
+
**Diff range**: [commit range or branch..HEAD]
|
|
214
|
+
**Verifier**: independent sub-agent (author ≠ verifier)
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Task Completion
|
|
219
|
+
|
|
220
|
+
| Task | Status | Notes |
|
|
221
|
+
| ---- | ---------- | ------- |
|
|
222
|
+
| T1 | ✅ Done | - |
|
|
223
|
+
| T2 | ✅ Done | - |
|
|
224
|
+
| T3 | ⚠️ Partial | [Issue] |
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Spec-Anchored Acceptance Criteria
|
|
229
|
+
|
|
230
|
+
| Criterion (WHEN X THEN Y) | Spec-defined outcome | `file:line` + assertion | Result |
|
|
231
|
+
| ------------------------- | -------------------- | ----------------------- | ------ |
|
|
232
|
+
| WHEN X THEN Y | [precise value/state from spec] | `path/to/test.ts:42` — `expect(result.field).toBe(expected)` | ✅ PASS |
|
|
233
|
+
| WHEN A THEN B | [expected value] | `path/to/test.ts:88` — `expect(res.status).toBe(400)` | ✅ PASS |
|
|
234
|
+
| WHEN C THEN D | not precisely defined in spec | — | ⚠️ Spec-precision gap |
|
|
235
|
+
|
|
236
|
+
**Status**: ✅ All ACs covered / ❌ Gaps present / ⚠️ Spec-precision gaps flagged
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Discrimination Sensor
|
|
241
|
+
|
|
242
|
+
| Mutation | File:line | Description | Killed? |
|
|
243
|
+
| -------- | --------- | ----------- | ------- |
|
|
244
|
+
| 1 | `src/service.ts:42` | Flipped condition `x > 0` → `x >= 0` | ✅ Killed |
|
|
245
|
+
| 2 | `src/service.ts:88` | Changed return value `status: 'active'` → `status: 'inactive'` | ✅ Killed |
|
|
246
|
+
| 3 | `src/handler.ts:15` | Removed side-effect call to `notify()` | ❌ Survived → fix task created |
|
|
247
|
+
|
|
248
|
+
**Sensor depth**: [lightweight / P0-full]
|
|
249
|
+
**Result**: [N/N killed] — [PASS ✅ | FAIL ❌]
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Interactive UAT Results (if performed)
|
|
254
|
+
|
|
255
|
+
| # | Test | Result | Details |
|
|
256
|
+
| --- | ----------- | -------- | ----------------------------------------------- |
|
|
257
|
+
| 1 | [Test name] | ✅ Pass | - |
|
|
258
|
+
| 2 | [Test name] | ❌ Issue | [Verbatim user response] — Severity: [inferred] |
|
|
259
|
+
| 3 | [Test name] | ⏭️ Skip | [Reason] |
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Code Quality
|
|
264
|
+
|
|
265
|
+
| Principle | Status |
|
|
266
|
+
| ---------------- | ------ |
|
|
267
|
+
| Minimum code | ✅ |
|
|
268
|
+
| Surgical changes | ✅ |
|
|
269
|
+
| No scope creep | ✅ |
|
|
270
|
+
| Matches patterns | ✅ |
|
|
271
|
+
| Spec-anchored outcome check (asserted values match spec) | ✅ |
|
|
272
|
+
| Per-layer Coverage Expectation met (domain 1:1 ACs; routes happy+edge+error) | ✅ |
|
|
273
|
+
| Every test maps to a spec requirement — no unclaimed tests | ✅ |
|
|
274
|
+
| Documented guidelines followed: [file(s) or "none — strong defaults applied"] | ✅ |
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## Edge Cases
|
|
279
|
+
|
|
280
|
+
- [x] Edge case 1: Handled correctly
|
|
281
|
+
- [ ] Edge case 2: NOT handled - needs fix
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## Gate Check
|
|
286
|
+
|
|
287
|
+
- **Gate command**: [Build gate command from the Gate Check Commands section in tasks.md]
|
|
288
|
+
- **Result**: [X] passed, [Y] failed, [Z] skipped
|
|
289
|
+
- **Test count before feature**: [N]
|
|
290
|
+
- **Test count after feature**: [M]
|
|
291
|
+
- **Delta**: [+(M - N) new tests]
|
|
292
|
+
- **Skipped tests**: [list with justification for each]
|
|
293
|
+
- **Failures**: [list with details]
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## Fix Plans (if issues found)
|
|
298
|
+
|
|
299
|
+
### Fix 1: [Issue description]
|
|
300
|
+
|
|
301
|
+
- **Root cause**: [What's actually wrong]
|
|
302
|
+
- **Fix task**: [Task definition]
|
|
303
|
+
- **Priority**: [Blocker/Major/Minor/Cosmetic]
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## Requirement Traceability Update
|
|
308
|
+
|
|
309
|
+
Update spec.md requirement statuses:
|
|
310
|
+
|
|
311
|
+
| Requirement | Previous Status | New Status |
|
|
312
|
+
| ----------- | --------------- | ------------ |
|
|
313
|
+
| [FEAT]-01 | Implementing | ✅ Verified |
|
|
314
|
+
| [FEAT]-02 | Implementing | ❌ Needs Fix |
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
## Summary
|
|
319
|
+
|
|
320
|
+
**Overall**: ✅ Ready | ⚠️ Issues | ❌ Not Ready
|
|
321
|
+
|
|
322
|
+
**Spec-anchored check**: [N/N ACs matched spec outcome | M spec-precision gaps]
|
|
323
|
+
**Sensor**: [N/N mutations killed]
|
|
324
|
+
**Gate**: [X passed]
|
|
325
|
+
|
|
326
|
+
**What works**: [List]
|
|
327
|
+
|
|
328
|
+
**Issues found**: [Issue 1: How to fix]
|
|
329
|
+
|
|
330
|
+
**Next steps**: [Action]
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
---
|
|
334
|
+
|
|
335
|
+
## Tips
|
|
336
|
+
|
|
337
|
+
- **Validation is never prompted** — it always runs after the last task; do not ask the user whether to run it
|
|
338
|
+
- **Spec-anchored, not just covered** — "there is an assertion" is not enough; the assertion must target the spec-defined outcome
|
|
339
|
+
- **Sensor in scratch only** — never mutate the real tree; stash/worktree/temp copy, run, discard
|
|
340
|
+
- **Surviving mutants are fix tasks** — do not mark the feature done if the sensor found weak tests
|
|
341
|
+
- **P1 first** — MVP must work before P2/P3
|
|
342
|
+
- **WHEN/THEN = Test** — Each criterion is a test case
|
|
343
|
+
- **Be specific** — "Doesn't work" isn't helpful
|
|
344
|
+
- **Recommend fixes** — Don't just report problems, create fix tasks
|
|
345
|
+
- **Quality check is mandatory** — Not optional
|
|
346
|
+
- **Infer severity** — Never ask the user "how bad is this?"
|
|
347
|
+
- **Max 3 diagnostic iterations** — Prevents infinite investigation loops
|
|
348
|
+
- **Update traceability** — Every verified requirement updates spec.md status
|
|
349
|
+
- **Always write the report file** — `.specs/features/[feature]/validation.md` is the persisted evidence artifact
|
|
350
|
+
- **Distill after writing** — turn grounded failures into lessons via `scripts/lessons.py` ([lessons.md](lessons.md)); clean PASS → no lesson
|
|
Binary file
|