Skip to content

Commit 572167d

Browse files
alfredoperezclaude
andcommitted
chore(review): node-assembly numbering + concurrent-journal checks (learning from #319)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 99738ba commit 572167d

1 file changed

Lines changed: 5 additions & 0 deletions

File tree

.claude/review-checklist.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ The review subagent in `/ship-ticket` and `/fix-tickets` reads this **before** r
2323
- **A generic field-setter/merge onto `.spec-context.json` must refuse lifecycle keys** (`history`/`status`/`currentStep`/`transitions`). A bare `ctx[key] = value` loop (e.g. `write-context.py --set`) otherwise lets `--set status=completed` bypass the mark-complete safeguard and corrupt the log. Deny-list lifecycle keys with a stderr note; cover with a protected-key test. (#309)
2424
- **Task completeness compares per-occurrence marker counts, never collapsed sets.** `set(all) <= set(done)` reads 100%-done when a duplicate id has one marker checked and one not; use `len(done) == len(all)` on the per-occurrence lists. A completion/step-close gate also needs BOTH signals — tasks.md at 100% AND every task journaled — not either alone, or a journaled-but-unchecked task closes the step while status stays `implementing`. (#317)
2525

26+
## Node assembly (`speckit-extension/nodes/`)
27+
28+
- **A node that injects a step into a command that keeps numbering downstream must use a sub-bullet or unnumbered note, not a new top-level `N.`** — the assembled body concatenates node bodies, so a fresh `2.` in one node lands next to the next node's `2.` and double-numbers. Check the ASSEMBLED command, not just the node. After any node/part edit, re-bless golden (`capture-golden.py`) and confirm `assemble-nodes.py --check` + `check-shape-parity.py` pass. (#319)
29+
- **Prose telling a capable provider to run work concurrently must name who serializes the `.spec-context.json` write** — "journal each as it finishes" under per-task subagents reads as concurrent writes (the race the timing part warns about); say the MAIN agent records one at a time, foreground. (#319)
30+
2631
## Command-family & extension gating
2732

2833
- **Guard a command/namespace family by shared PREFIX, not an enumerated subset.** An enumerated map of the 4 pipeline commands let a 5th (`speckit.companion.mark-complete`) slip the guard. Key off the `speckit.companion.` prefix; suppress members with no stock twin rather than dispatching them. (#300)

0 commit comments

Comments
 (0)