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>
2.3 KiB
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 FILEprints exactly<lines> <words> <chars> <FILE>(counts whitespace-separated words,\n-terminated lines, and bytes forchars), matching GNUwcon ASCII input. - D2 — flags.
-l,-w,-crestrict the output to that single count (e.g.wc.py -l FILEprints<lines> <FILE>). Flags may combine; output order is lines, words, chars. - D3 — stdin. With no FILE argument,
wc.pyreads stdin and prints the counts with no filename. - D4 — tests green. A
test_wc.pyruns underpytest -qwith 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:
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).