R8 of cleanup R-a (plan .claude/projects/2026-11-07-cleanup-r-a, appendix A). The live tests of the round files move into the test named after their source; each moved test was seen red under a mutation of its source. New: tests/lib/lib-imports.test.mjs, tests/lib/timing.test.mjs (from timing-under-load). The [#1] --gates rule and shim-line pins move into tests/lib/autonomy-gate.test.mjs. Removed: the round test files (retterunde, retterunde-prose-pins, trial-mechanical-fixes, trial2-fixes, trial2-minor, trial2-minor-prose-pins, fix-round-4-5a-prose, fix-round-4-5b2-b-prose, timing-under-load), the 8 R8 e2e scripts, and seven round test files on the R-a removal list that pinned them (fix-round-4-5b-prose, fix-round-4-5b-part-2/3/4-scripts, fix-round-4-5b-part-4-prose, fix-round-4-5b2-b/c-scripts). The diff-mode e2e pin (test 24) and the red-script round-wrapper cases go too. tests/synthetic/plan-run-C.md becomes tests/fixtures/plan-run-c.md, regenerated from buildPlan({ version: '1.9' }). The red judge, reporter and judge test headers now name the shared red script. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
102 lines
2.6 KiB
Markdown
102 lines
2.6 KiB
Markdown
# Test plan
|
|
|
|
> **Plan quality: A** (92/100) — APPROVE
|
|
>
|
|
> Generated by trekplan v6.1.1 on 2026-10-06 — `plan_version: 1.9` · `ceremony: architectural`
|
|
|
|
## Context
|
|
|
|
Why: the brief asks for a parser CLI.
|
|
|
|
## Design
|
|
|
|
### Architecture
|
|
Two modules: a parser and a CLI on top of it.
|
|
|
|
### Data Flow
|
|
CLI argv → parser → result JSON on stdout.
|
|
|
|
### Interfaces
|
|
`parse(text) → {ok, items}`
|
|
|
|
### Data Models
|
|
`Item = {name: string, n: number}`
|
|
|
|
### Error Handling
|
|
Unreadable input → exit 2; invalid input → exit 1.
|
|
|
|
### Module Map
|
|
```mermaid
|
|
graph TD
|
|
cli[src/cli.mjs] --> parser[src/parser.mjs]
|
|
parser --> util[src/util.mjs]
|
|
```
|
|
|
|
### Architecture Rules
|
|
| Rule | Enforced by | Proof |
|
|
|------|-------------|-------|
|
|
| The parser never imports the CLI | checked by `node_modules/.bin/depcruise --config .dependency-cruiser.cjs src` | Step 1 |
|
|
| Prefer pure functions in the parser | advisory — `.claude/rules/parser.md` | — |
|
|
|
|
### Requirements Check
|
|
No conflicts or gaps found between the brief's requirements.
|
|
|
|
## Implementation Plan
|
|
|
|
### Step 1: Build module 1
|
|
|
|
- **Files:** `src/mod1.mjs`
|
|
- **Changes:** Add `run1()` to `src/mod1.mjs`. (new file)
|
|
- **Test first:**
|
|
- File: `tests/mod1.test.mjs` (new)
|
|
- Verifies: run1() returns the value the next step reads
|
|
- Pattern: `tests/lib/plan-schema.test.mjs`
|
|
- **Verify:** `node --test tests/mod1.test.mjs` → expected: pass
|
|
- **On failure:** revert — `git checkout -- src/mod1.mjs`
|
|
- **Checkpoint:** `git commit -m "feat(x): step 1"`
|
|
- **Manifest:**
|
|
```yaml
|
|
manifest:
|
|
expected_paths:
|
|
- src/mod1.mjs
|
|
- tests/mod1.test.mjs
|
|
min_file_count: 2
|
|
commit_message_pattern: "^feat\\(x\\):"
|
|
bash_syntax_check: []
|
|
forbidden_paths: []
|
|
must_contain: []
|
|
```
|
|
|
|
### Step 2: Build module 2
|
|
|
|
- **Files:** `src/mod2.mjs`
|
|
- **Changes:** Add `run2()` to `src/mod2.mjs`. (new file)
|
|
- **Test first:**
|
|
- File: `tests/mod2.test.mjs` (new)
|
|
- Verifies: run2() returns the value the next step reads
|
|
- Pattern: `tests/lib/plan-schema.test.mjs`
|
|
- **End-to-end:** `bash tests/e2e.sh` → expected: exit 0 and the CLI prints a result
|
|
- **Verify:** `node --test tests/mod2.test.mjs` → expected: pass
|
|
- **On failure:** revert — `git checkout -- src/mod2.mjs`
|
|
- **Checkpoint:** `git commit -m "feat(x): step 2"`
|
|
- **Manifest:**
|
|
```yaml
|
|
manifest:
|
|
expected_paths:
|
|
- src/mod2.mjs
|
|
- tests/mod2.test.mjs
|
|
min_file_count: 2
|
|
commit_message_pattern: "^feat\\(x\\):"
|
|
bash_syntax_check: []
|
|
forbidden_paths: []
|
|
must_contain: []
|
|
```
|
|
|
|
## Test Strategy
|
|
|
|
- **Framework:** node:test
|
|
|
|
## Verification
|
|
|
|
- [ ] `npm test` → expected: exit 0
|
|
- [ ] `bash tests/e2e.sh` → expected: exit 0
|