Files
mfowler a0f7652e9e docs(examples): add builder-solo — single builder, no adversary (control)
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>
2026-06-15 02:34:50 +00:00

1.8 KiB
Raw Permalink Blame History

Phase json — machine-readable output

Mission. Extend the wc.py from the previous phase with a --json mode, without regressing any wc-phase behaviour. Single source of truth for this phase.

(The phase config gives the Builder claude-opus-4-8 for this phase — an example of a per-phase model override; the Adversary stays on the default model.)

Definition of Done

  • D1 — json output. python wc.py --json FILE prints a single JSON object: {"lines": N, "words": N, "chars": N, "file": "FILE"} (valid JSON, parseable by json.loads). With stdin (no FILE), "file" is null.
  • D2 — composes with flags. --json honours -l/-w/-c: only the requested counts appear as keys (plus file). E.g. wc.py --json -l FILE{"lines": N, "file": "FILE"}.
  • D3 — no regression. Every wc-phase gate (D1D4 there) still passes unchanged.
  • D4 — tests green. test_wc.py is extended for the JSON cases and pytest -q is all-green.

How the Adversary verifies (cold)

pytest -q                                              # D4 + D3 regression
printf 'a b c\nd e\n' > /tmp/f.txt
python wc.py --json /tmp/f.txt | python -c 'import sys,json; d=json.load(sys.stdin); \
  assert d=={"lines":2,"words":5,"chars":10,"file":"/tmp/f.txt"}, d; print("ok")'   # D1
python wc.py --json -l /tmp/f.txt                      # D2: expect {"lines": 2, "file": "/tmp/f.txt"}

The Builder restates the exact commands, expected JSON, and commit sha in machine-docs/STATUS-json.md. When every DoD item has a fresh PASS in machine-docs/REVIEW-json.md and there is no ## VETO, the Builder writes ## DONE to STATUS-json.md — this is the last phase, so the watchdog then fires the one-shot reporter (see agents.toml [loop].on_complete).