A single Builder that builds AND self-verifies (same DoD rigor), with NO independent Adversary and no claim/review handoff. The control for measuring what the AI adversary costs (its tokens, ~half of a loop-pair run) and buys (independent cold verification vs self-certification). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
44 lines
2.3 KiB
Markdown
44 lines
2.3 KiB
Markdown
# Phase `wc` — a word-count CLI
|
|
|
|
**Mission.** Build a small, dependency-free `wc` clone in Python: a script `wc.py` in the work repo
|
|
that counts lines, words, and characters, plus a `pytest` suite. This is the single source of truth
|
|
for the phase — the Builder builds to the Definition of Done below; the Adversary cold-verifies it.
|
|
|
|
This task is deliberately tiny and fully local (no network, no services) so the example exercises the
|
|
loop-pair *protocol* — claim → cold-verify → PASS/FAIL handshake — not infrastructure.
|
|
|
|
## Definition of Done
|
|
|
|
Each Dn is an independent gate. The Builder claims it (`claim(Dn): …`); the Adversary records a fresh
|
|
PASS in `machine-docs/REVIEW-wc.md` after re-running the check from its own clone.
|
|
|
|
- **D1 — default output.** `python wc.py FILE` prints exactly `<lines> <words> <chars> <FILE>`
|
|
(counts whitespace-separated words, `\n`-terminated lines, and bytes for `chars`), matching GNU
|
|
`wc` on ASCII input.
|
|
- **D2 — flags.** `-l`, `-w`, `-c` restrict the output to that single count (e.g. `wc.py -l FILE`
|
|
prints `<lines> <FILE>`). Flags may combine; output order is lines, words, chars.
|
|
- **D3 — stdin.** With no FILE argument, `wc.py` reads stdin and prints the counts with no filename.
|
|
- **D4 — tests green.** A `test_wc.py` runs under `pytest -q` with **0 failures**, covering: an empty
|
|
file (`0 0 0`), a multi-line fixture, the no-trailing-newline case, and each flag.
|
|
|
|
## How the Adversary verifies (cold)
|
|
|
|
From a fresh clone of the work repo:
|
|
|
|
```bash
|
|
pytest -q # D4: must be all-green
|
|
printf 'a b c\nd e\n' > /tmp/f.txt
|
|
python wc.py /tmp/f.txt # D1: expect "2 5 10 /tmp/f.txt"
|
|
python wc.py -l /tmp/f.txt # D2: expect "2 /tmp/f.txt"
|
|
printf 'a b c\nd e\n' | python wc.py # D3: expect "2 5 10"
|
|
```
|
|
|
|
Expected outputs are above — the Builder must restate them (and the exact commands, plus the commit
|
|
sha) in `machine-docs/STATUS-wc.md` so the Adversary can re-run without reading the Builder's
|
|
reasoning. Any mismatch is a FAIL with repro steps in `machine-docs/REVIEW-wc.md`.
|
|
|
|
## Out of scope (defer to a later phase or DEFERRED.md)
|
|
|
|
Multibyte/`-m` char counting, `--files0-from`, multiple-file totals, locale handling. JSON output is
|
|
the next phase (`plans/json.md`).
|