This part sets out how the harness runs each design, from the sources harness/workflow/stages.json, args.json, collect.sh and tdd-methodologies.md, and the run records.
Claims carry a tag. Recomputed means redone from source data. Verified means checked against a primary source. Unchecked means written or judged by an agent and not checked.
How a design runs
Each design runs as a list of stages in harness/workflow/stages.json. A stage takes numbered steps of its method from tdd-methodologies.md, quoted through args.json. 18 stage sets hold 58 stages. recomputed
- S: once
- Once means one agent runs the steps. 32 stages.
- L: repeat per unit
- Repeat per unit means one agent per unit until no unit is open. 15 stages.
- F: throughout
- Throughout means the rule joins every prompt. 9 stages.
- starts: for up to n starts
- For up to n starts means separate attempts with the best kept. 1 stage.
- H: the harness does
- The harness does means the harness runs the step without an agent. 1 stage.
If names the event that starts a stage, and with adds a rule borrowed from another method. Steps are quoted from args.json with their numbers. verified
Agent roles
Figure 3.1
Agents of a run by phase, then collect and rating
- Fresh clone and prompt. 67 entries / 9 records. Lane: Harness and collect.
Next: Throughout rule (F).
- Test lister. 2 list-only runs. Lane: Other agents.
Next: Fresh clone and prompt (its list).
- Throughout rule (F). 9 stages join every prompt. Lane: Harness and collect.
Next: Once stage (S).
- Once stage (S). 32 stages. Lane: Method agent.
Next: Case writer (s2); Repeat stage (L).
- Case writer. held-out s2, every build. Lane: Other agents.
Next: Harness stage (H) (after s3).
- Harness stage (H). 1 stage. Lane: Harness and collect.
Next: Repeat stage (L).
- Repeat stage (L). 15 stages, units candidate, feature, milestone, requirement. Lane: Method agent.
Next: Fresh case writer (if hidden); Blind reviewer.
Loop: repeat per unit, back to Repeat stage (L).
- Harness transfer agents. Takes s3 starts. Seed, winner and list by git. Lane: Harness and collect.
Next: Starts stage (up to 3).
- Starts stage. 1 stage, parallel attempts. Lane: Method agent.
Next: Blind reviewer.
- Fresh case writer. held-out s8-writer if hidden_failure. Lane: Other agents.
Next: Blind reviewer.
- Blind reviewer. Review phase, one per method. Lane: Other agents.
Next: Measure agent.
- Measure agent. Measure phase, one per method. Lane: Method agent.
Next: Audit and adherence (collect).
- Audit and adherence. collectOne steps 13, 14 of 16. Lane: Harness and collect.
Next: Review copy and report.
- Review copy and report. collectOne steps 15, 16. Lane: Harness and collect.
Next: Blind raters.
- Blind raters. three per final, after collect. Lane: Other agents.
Next: Study report.
- Study report. 3 disposition rows judge 10 high flags. Lane: Harness and collect.
Stage counts are over all 18 stage sets, so one design runs only some kinds. recomputed Phases and their order follow the harness sources batch.js, collect.sh and rate.js. verified
Text version: Agents of a run by phase, then collect and rating
- Fresh clone and prompt. 67 entries / 9 records. Lane: Harness and collect.
Next: Throughout rule (F).
- Test lister. 2 list-only runs. Lane: Other agents.
Next: Fresh clone and prompt (its list).
- Throughout rule (F). 9 stages join every prompt. Lane: Harness and collect.
Next: Once stage (S).
- Once stage (S). 32 stages. Lane: Method agent.
Next: Case writer (s2); Repeat stage (L).
- Case writer. held-out s2, every build. Lane: Other agents.
Next: Harness stage (H) (after s3).
- Harness stage (H). 1 stage. Lane: Harness and collect.
Next: Repeat stage (L).
- Repeat stage (L). 15 stages, units candidate, feature, milestone, requirement. Lane: Method agent.
Next: Fresh case writer (if hidden); Blind reviewer.
Loop: repeat per unit, back to Repeat stage (L).
- Harness transfer agents. Takes s3 starts. Seed, winner and list by git. Lane: Harness and collect.
Next: Starts stage (up to 3).
- Starts stage. 1 stage, parallel attempts. Lane: Method agent.
Next: Blind reviewer.
- Fresh case writer. held-out s8-writer if hidden_failure. Lane: Other agents.
Next: Blind reviewer.
- Blind reviewer. Review phase, one per method. Lane: Other agents.
Next: Measure agent.
- Measure agent. Measure phase, one per method. Lane: Method agent.
Next: Audit and adherence (collect).
- Audit and adherence. collectOne steps 13, 14 of 16. Lane: Harness and collect.
Next: Review copy and report.
- Review copy and report. collectOne steps 15, 16. Lane: Harness and collect.
Next: Blind raters.
- Blind raters. three per final, after collect. Lane: Other agents.
Next: Study report.
- Study report. 3 disposition rows judge 10 high flags. Lane: Harness and collect.
| Role | Phase | Label pattern | Examples from run records | Where it works |
|---|---|---|---|---|
| Method agent | Methods | <design>:<stage> | held-out:s1 | The build clone |
| Separate agent | Methods | <design>:<stage> | held-out:s2 | The cases and scratch folders, outside the clone the method agents read |
| Harness transfer agents | Methods | harness:<task>-<clone> | harness:seed-multi-start-1, harness:winner-multi-start | Git fetch and merge between clones at low effort, to seed each start, take the winner and fetch the list |
| Test lister | Methods (list-only run) | <lister>:list | tcp-1-list-lister:list, tcp-1-list2-lister:list | Its own clone, where it commits only CLAUSES.md and TESTLIST.md |
| Blind reviewer | Review | review:<blind id> | review:r01, review:r02 | git diff refs/tags/starter..HEAD of src/ and test/, under a blind id |
| Measure agent | Measure | <clone>:measure | rep-1-r01:measure, rep-1-r11:measure | The clone root, where it writes MEASURE.md from LOG.md, git log, GAP.md and ATTEMPTS.md |
| Blind raters | Rate, after collect | rate:<item>:<rater> | none in the snapshot | Each item of a rating round, scored on the eight cqp.html principles |
Examples are agent labels in the full-1 report and its method pages. Lister labels join each list-only run's lister field to :list. recomputed
Where each role works paraphrases the stage notes, the review schema and the harness sources batch.js and rate.js. verified
Transfer agents run fixed git commands. Ranking the starts is the method's own stage s6. verified
Stages
Each table lists one family's stage sets as stages.json holds them now. Rules name a commit cap, the event that starts a stage and the steps borrowed from another method. The stage notes follow each table. verified
Baseline
| Design | Stage | Kind | Steps | Unit | Returns | Rules |
|---|---|---|---|---|---|---|
| Classic greedy TDD | s1 | S (once) | 1 | none | none | none |
| Classic greedy TDD | L2-7 | L (repeat per unit) | 2, 3, 4, 5, 6, 7 | feature | none | none |
- Classic greedy TDD L2-7
- An impasse is a bar that stays red for 3 red-green cycles. Log each impasse in the LOG.md actions.
Structure first
| Design | Stage | Kind | Steps | Unit | Returns | Rules |
|---|---|---|---|---|---|---|
| Noun-verb map | s1 | S (once) | 1 | none | none | none |
| Noun-verb map | s2 | S (once) | 2 | none | none | none |
| Noun-verb map | s3 | S (once) | 3 | none | none | none |
| Noun-verb map | s4 | S (once) | 4 | none | none | none |
| Noun-verb map | s5 | S (once) | 5 | none | none | none |
| Noun-verb map | s6 | S (once) | 6 | none | none | commit cap 60 |
| Noun-verb map | s7 | S (once) | 7 | none | none | commit cap 40 |
| Noun-verb map | s8 | S (once) | 8 | none | none | none |
| Mapped-path TDD | s1 | S (once) | 1 | none | none | with Noun-verb map steps 2, 3, 4, 5 |
| Mapped-path TDD | s2 | S (once) | 2 | none | none | none |
| Mapped-path TDD | L3-8 | L (repeat per unit) | 3, 4, 5, 6, 7, 8 | feature | none | none |
| Functions first, classes later | s1 | S (once) | 1 | none | none | none |
| Functions first, classes later | s2 | S (once) | 2 | none | none | none |
| Functions first, classes later | s3 | S (once) | 3 | none | none | commit cap 40 |
| Functions first, classes later | s4 | S (once) | 4 | none | none | none |
| Functions first, classes later | s5 | S (once) | 5 | none | none | none |
| Functions first, classes later | s6 | S (once) | 6 | none | none | none |
| Functions first, classes later | s7 | S (once) | 7 | none | none | none |
| Functions first, classes later | s8 | S (once) | 8 | none | none | none |
- Noun-verb map s6
- One prompt in the step is one commit here.
- Noun-verb map s7
- One prompt in the step is one commit here.
- Functions first, classes later s3
- Test-drive one verb per commit.
Step size
| Design | Stage | Kind | Steps | Unit | Returns | Rules |
|---|---|---|---|---|---|---|
| Transformation Priority Premise TDD | s1 | S (once) | 1 | none | none | none |
| Transformation Priority Premise TDD | L2-7 | L (repeat per unit) | 2, 3, 4, 5, 6, 7 | feature | none | none |
| Coarse-to-fine TDD | F2 | F (throughout) | 2 | none | none | none |
| Coarse-to-fine TDD | L1,3-8 | L (repeat per unit) | 1, 3, 4, 5, 6, 7, 8 | feature | none | none |
| Annealed refactoring | F2-3 | F (throughout) | 2, 3 | none | none | none |
| Annealed refactoring | L1,4-8 | L (repeat per unit) | 1, 4, 5, 6, 7, 8 | feature | none | none |
- Transformation Priority Premise TDD s1
- Martin's list from highest to lowest rank is {}->nil, constant, constant+, scalar, statements, if, array, container, recursion, while, function and variable->assignment. Write it with one-line definitions to TPP.md and commit it. Later stages read TPP.md as the prompt list.
- Transformation Priority Premise TDD L2-7
- Read TPP.md first. An impasse is a bar that stays red for 3 red-green cycles. Log each impasse in the LOG.md actions.
- Coarse-to-fine TDD L1,3-8
- 10 minutes red is 2 red-green cycles. An attempt stays uncommitted until green, and a shrink reverts it with git restore.
- Annealed refactoring F2-3
- The timeboxes are red-green cycles: hot 9, warm 3 and cold 1.
- Annealed refactoring L1,4-8
- If TESTS.md is missing, first write the original test list to it with one line per planned test and commit it. Step 8 counts thirds of that list. Energy comes from ./run.sh lint and ./run.sh deps. A move is tried uncommitted in place of a throwaway branch and reverted with git restore.
Search and validation
| Design | Stage | Kind | Steps | Unit | Returns | Rules |
|---|---|---|---|---|---|---|
| Multi-start TDD | s1 | S (once) | 1 | none | none | none |
| Multi-start TDD | s2 | S (once) | 2 | none | none | none |
| Multi-start TDD | s3 | S (once) | 3 | none | starts | none |
| Multi-start TDD | s4-5 | starts (for up to n starts) | 4, 5 | none | passed | none |
| Multi-start TDD | s6 | S (once) | 6 | none | winner | none |
| Multi-start TDD | s7 | S (once) | 7 | none | none | none |
| Most informative next test | L1-8 | L (repeat per unit) | 1, 2, 3, 4, 5, 6, 7, 8 | requirement | none | none |
| Property-based TDD | L1-7 | L (repeat per unit) | 1, 2, 3, 4, 5, 6, 7 | requirement | none | none |
| Property-based TDD | s8 | S (once) | 8 | none | none | none |
| Held-out TDD | s1 | S (once) | 1 | none | none | none |
| Held-out TDD | s2 | S (once) | 2 | none | none | none |
| Held-out TDD | s3 | S (once) | 3 | none | none | none |
| Held-out TDD | H4-5 | H (the harness does) | 4, 5 | none | none | none |
| Held-out TDD | L6-8 | L (repeat per unit) | 6, 7, 8 | requirement | hiddenFail | none |
| Held-out TDD | s8-writer | S (once) | none | none | none | if hidden_failure; with Held-out TDD steps 2, 8 |
| Held-out TDD | s8-split | S (once) | none | none | none | if hidden_failure; with Held-out TDD steps 3, 8 |
| Anchor Engineering | F7 | F (throughout) | 7 | none | none | none |
| Anchor Engineering | s1 | S (once) | 1, 2 | none | none | none |
| Anchor Engineering | L3-6 | L (repeat per unit) | 3, 4, 5, 6 | milestone | none | none |
- Multi-start TDD s1
- Lock the acceptance tests with a JUnit test that compares their SHA-256 with recorded values, so ./run.sh test runs the check.
- Multi-start TDD s2
- Write the score rule to SCORE.md and commit it. The harness gives each attempt two halves of up to the cycle limit each, with the drop rule between them.
- Multi-start TDD s3
- Return one line per start strategy in starts. Create no branch or clone, because each start gets its own clone.
- Multi-start TDD s4-5
- Report passed and total from ./run.sh test on the locked acceptance tests.
- Multi-start TDD s6
- Rank the finished attempts by the score rule in SCORE.md, using the attempt results among the facts below. Pick the winner only among the finished starts. A partial mutation score covers only the mutants its run reached, so when any finished attempt's mutation score is partial, mutation score ranks none of them and the next criterion in SCORE.md decides. When no finished attempt is green, rank them by tests passed, as step 6 says. Write ATTEMPTS.md with each attempt's results, its score and the drop decisions, commit it and return the winning start number.
- Multi-start TDD s7
- The winner is at the local branch winner. First run git restore --source=winner --staged --worktree -- src test and commit, then archive the others in ATTEMPTS.md.
- Most informative next test L1-8
- Mutation testing is ./run.sh mutate. It mutates all of src/, newest file first. It runs the method's own tests without the starter's Example tests.
- Property-based TDD L1-7
- No property library is on the classpath. Write generators over java.util.Random with a logged seed.
- Held-out TDD s2
- You are the separate agent. Return blocked if {cases} holds anything. Write at least 3 black-box cases per requirement as {cases}/<requirement>/<variant>/caseNN.txt, where <requirement> names a noun and <variant> is a variant folder name from examples/EXAMPLES.md, in the spec format of examples/specs. Keep generators and other scratch files in {scratch}, never in the clone, which the method agents read. Log counts only in LOG.md and commit LOG.md.
- Held-out TDD s3
- Run {split} {cases} {visible}, which keeps two thirds visible, and commit visible/. Log only the line it prints.
- Held-out TDD L6-8
- Drive with ./run.sh specs visible and ./run.sh test. Once the unit is green run ./run.sh hidden once and append a GAP.md row: time, label, requirement, visible pass/total, hidden pass/total and gap. Write a fresh visible test for each requirement ticked in UNITS.md that fails hidden. Write each fresh visible test under test/, never under visible/, which the harness re-splits. A spec file there goes in a variant folder, so ./run.sh specs test plays it. The harness does the rest of step 8 after this loop and replaces the hidden cases through separate agents, so leave the hidden set alone. Return in failing only the requirements ticked in UNITS.md that fail hidden, because the others are not built yet.
- Held-out TDD s8-writer
- You are the separate agent. Add fresh cases to {cases} for each requirement the facts below list as failing hidden, in the layout of {cases}. Keep generators and other scratch files in {scratch}, never in the clone, which the method agents read. Log counts only in LOG.md and commit LOG.md.
- Held-out TDD s8-split
- Run {split} {cases} {visible} again and commit visible/. Log the line it prints and the count of earlier cases it moved into visible/. Then run ./run.sh specs visible and ./run.sh hidden once and append a closing GAP.md row.
Test-list order
| Design | Stage | Kind | Steps | Unit | Returns | Rules |
|---|---|---|---|---|---|---|
| tcp-untreated | F1-2 | F (throughout) | 1, 2 | none | none | none |
| tcp-untreated | L3-4 | L (repeat per unit) | 3, 4 | candidate | candidate | none |
| tcp-random | F1-2 | F (throughout) | 1, 2 | none | none | none |
| tcp-random | L3-4 | L (repeat per unit) | 3, 4 | candidate | candidate | none |
| tcp-coverage | F1-2 | F (throughout) | 1, 2 | none | none | none |
| tcp-coverage | L3-4 | L (repeat per unit) | 3, 4 | candidate | candidate | none |
| tcp-cost | F1-2 | F (throughout) | 1, 2 | none | none | none |
| tcp-cost | L3-4 | L (repeat per unit) | 3, 4 | candidate | candidate | none |
| tcp-risk | F1-2 | F (throughout) | 1, 2 | none | none | none |
| tcp-risk | L3-4 | L (repeat per unit) | 3, 4 | candidate | candidate | none |
| tcp-usage | F1-2 | F (throughout) | 1, 2 | none | none | none |
| tcp-usage | L3-4 | L (repeat per unit) | 3, 4 | candidate | candidate | none |
- tcp-untreated L3-4
- UNITS.md holds one line per TESTLIST.md candidate id plus one per added candidate. Reorder the open lines to the order in the facts from the harness, then work the first. Return its id in candidate and any new candidate in added.
- tcp-random L3-4
- UNITS.md holds one line per TESTLIST.md candidate id plus one per added candidate. Reorder the open lines to the order in the facts from the harness, then work the first. Return its id in candidate and any new candidate in added.
- tcp-coverage L3-4
- UNITS.md holds one line per TESTLIST.md candidate id plus one per added candidate. Reorder the open lines to the order in the facts from the harness, then work the first. Return its id in candidate and any new candidate in added.
- tcp-cost L3-4
- UNITS.md holds one line per TESTLIST.md candidate id plus one per added candidate. Reorder the open lines to the order in the facts from the harness, then work the first. Return its id in candidate and any new candidate in added.
- tcp-risk L3-4
- UNITS.md holds one line per TESTLIST.md candidate id plus one per added candidate. Reorder the open lines to the order in the facts from the harness, then work the first. Return its id in candidate and any new candidate in added.
- tcp-usage L3-4
- UNITS.md holds one line per TESTLIST.md candidate id plus one per added candidate. Reorder the open lines to the order in the facts from the harness, then work the first. Return its id in candidate and any new candidate in added.
Stages as run
Each run records the stages it ran. 16 builds recorded a stage field unlike stages.json. As run, with holds the quoted step texts where stages.json holds step numbers. recomputed
| Builds | Design | Stage | Field | As run |
|---|---|---|---|---|
| full-1 mapped-path | Mapped-path TDD | s1 | with |
|
| full-1 held-out, pilot-1 held-out, pilot-2 held-out, rep-2 rep-2-r08, rep-2 rep-2-r04, rep-2 rep-2-r14, rep-2 rep-2-r17, rep-2 rep-2-r20, rep-2/rebuild rep-2-r04, rep-2/rebuild rep-2-r08, rep-2/rebuild rep-2-r14, rep-2/rebuild rep-2-r17, rep-2/rebuild rep-2-r20 | Held-out TDD | s8-writer | with |
|
| full-1 held-out, pilot-1 held-out, pilot-2 held-out, rep-2 rep-2-r08, rep-2 rep-2-r04, rep-2 rep-2-r14, rep-2 rep-2-r17, rep-2 rep-2-r20, rep-2/rebuild rep-2-r04, rep-2/rebuild rep-2-r08, rep-2/rebuild rep-2-r14, rep-2/rebuild rep-2-r17, rep-2/rebuild rep-2-r20 | Held-out TDD | s8-split | with |
|
| pilot-1 multi-start | Multi-start TDD | s6 | note | Rank the finished attempts by the score rule in SCORE.md, using the attempt results among the facts below. A partial mutation score covers only the mutants its run reached, so when any finished attempt's mutation score is partial, mutation score ranks none of them and the next criterion in SCORE.md decides. Write ATTEMPTS.md with each attempt's results, its score and the drop decisions, commit it and return the winning start number. |
| pilot-1 held-out | Held-out TDD | s2 | note | You are the separate agent. Return blocked if {cases} holds anything. Write at least 3 black-box cases per requirement as {cases}/<requirement>/<variant>/caseNN.txt, where <requirement> names a noun and <variant> is a variant folder name from examples/EXAMPLES.md, in the spec format of examples/specs. Log counts only in LOG.md and commit LOG.md. |
| pilot-1 held-out | Held-out TDD | s8-writer | note | You are the separate agent. Add fresh cases to {cases} for each requirement the facts below list as failing hidden, in the layout of {cases}. Log counts only in LOG.md and commit LOG.md. |
| pilot-2 mutation-guided | Most informative next test | L1-8 | note | Mutation testing is ./run.sh mutate. It mutates all of src/, newest file first. |
Prompts and the shared test list
The test-list order arms share one prompt and one test list. The methods doc states how the list is written. verified
One lister agent works once per run in its own clone and writes the list every arm shares.
- Number each functional rule in README.md and docs/SPEC.md as a clause R1 to Rn in CLAUSES.md. Leave out code quality and PMD rules.
- Rate each clause 1 to 3 for the chance a first implementation gets it wrong. Rate its usage 1 to 100 as the percent of moves in a typical game that exercise it. Rate a clause of one variant as the percent of games that use the variant times the share of their moves that exercise it.
- List at most 12 candidate tests in TESTLIST.md. Each names one behaviour.
- Give each candidate two fields. checks lists every clause its assertions observe, variants included. relies lists clauses it needs and does not assert.
- Estimate the production lines each candidate needs on the starter alone.
- Commit both files and return them as JSON.
The harness checks the JSON before any arm starts. Ids are unique, checks and relies name real clauses, there are 1 to 12 candidates, risk is 1 to 3, usage is 1 to 100 and each estimate is a whole number. A failed check stops the family. The harness divides each usage by the sum over all clauses, so the usage shares sum to 1.
tcp-1-list ran the list phase in 6 steps.
- Number each functional rule in README.md and docs/SPEC.md as a clause R1 to Rn in CLAUSES.md. Leave out code quality and PMD rules.
- Rate each clause 1 to 3 for the chance a first implementation gets it wrong. Rate its usage 1 to 100 as the percent of moves in a typical game that exercise it. Rate a clause of one variant as the percent of games that use the variant times the share of their moves that exercise it.
- List at most 12 candidate tests in TESTLIST.md. Each names one behaviour.
- Give each candidate two fields. checks lists every clause its assertions observe, variants included. relies lists clauses it needs and does not assert.
- Estimate the production lines each candidate needs on the starter alone.
- Commit both files and return them as JSON.
tcp-1-list test list fields.
- lister
tcp-1-list-lister- seed
20261020
tcp-1-list2 ran the list phase in 5 steps.
- CLAUSES.md and TESTLIST.md already hold every clause and candidate with blank Risk, Usage, Checks, Relies and Estimate cells. Fill only those cells by the steps below. Keep every other cell and row as written and add no clause or candidate.
- Rate each clause 1 to 3 for the chance a first implementation gets it wrong. Rate its usage 1 to 100 as the percent of moves in a typical game that exercise it. Rate a clause of one variant as the percent of games that use the variant times the share of their moves that exercise it.
- Give each candidate two fields. checks lists every clause its assertions observe, variants included. relies lists clauses it needs and does not assert.
- Estimate the production lines each candidate needs on the starter alone.
- Commit both files and return them as JSON.
tcp-1-list2 test list fields.
- lister
tcp-1-list2-lister- seed
20261020- rates
tcp-1-list
tcp-1 test list fields.
- list_tag
tcp-1-list- lister
tcp-1-list-lister- seed
20261020- sha
7788e4fd8dbb9ce5b077c3478208d9fed4f6327b
tcp-1 built 5 arms on the list of tcp-1-list: 19 clauses and 12 candidates. recomputed
| Build | Arm | Prompt | Order | Blind id |
|---|---|---|---|---|
| tcp-1-r01 | tcp-random | Test-list order | random | r01 |
| tcp-1-r02 | tcp-coverage | Test-list order | coverage | r02 |
| tcp-1-r03 | tcp-cost | Test-list order | cost | r03 |
| tcp-1-r04 | tcp-risk | Test-list order | risk | r04 |
| tcp-1-r05 | tcp-usage | Test-list order | usage | r05 |
| Clause | Risk | Usage |
|---|---|---|
| R1 | 1 | 50 |
| R2 | 2 | 50 |
| R3 | 1 | 3 |
| R4 | 2 | 95 |
| R5 | 3 | 48 |
| R6 | 3 | 48 |
| R7 | 3 | 50 |
| R8 | 1 | 65 |
| R9 | 1 | 20 |
| R10 | 2 | 10 |
| R11 | 2 | 3 |
| R12 | 2 | 3 |
| R13 | 3 | 3 |
| R14 | 2 | 3 |
| R15 | 1 | 3 |
| R16 | 2 | 50 |
| R17 | 2 | 50 |
| R18 | 1 | 100 |
| R19 | 1 | 3 |
| Candidate | Checks | Relies | Estimate |
|---|---|---|---|
| T1 | R1, R3, R15, R17, R18 | none | 25 |
| T2 | R2, R3, R15, R16, R18 | none | 25 |
| T3 | R1, R4, R5, R8, R16, R18 | R3, R15 | 40 |
| T4 | R1, R4, R6, R8, R17, R18 | R3, R15 | 40 |
| T5 | R7, R9, R18 | R1, R4, R5, R16, R15 | 45 |
| T6 | R7, R8 | R1, R4, R6, R17, R18, R15 | 50 |
| T7 | R10, R8 | R1, R4, R5, R16, R18, R15 | 55 |
| T8 | R11, R8 | R1, R4, R5, R10, R16, R18, R15 | 55 |
| T9 | R19, R18 | R1, R4, R5, R16, R15 | 45 |
| T10 | R4, R7, R10 | R1, R6, R17, R18, R15 | 55 |
| T11 | R12, R13, R14 | R1, R4, R6, R8, R9, R10, R17, R18 | 70 |
| T12 | R12, R13, R14 | R1, R4, R5, R8, R9, R10, R16, R18 | 70 |
| Order | Candidates |
|---|---|
| untreated | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 |
| random | T7, T10, T6, T1, T2, T11, T8, T12, T5, T9, T3, T4 |
| coverage | T3, T1, T11, T10, T2, T8, T5, T9, T4, T12, T7, T6 |
| cost | T1, T3, T5, T11, T2, T4, T9, T7, T8, T10, T12, T6 |
| risk | T10, T11, T12, T6, T5, T3, T4, T7, T8, T2, T1, T9 |
| usage | T3, T4, T5, T2, T7, T11, T8, T9, T1, T10, T6, T12 |
| costOnly | T1, T2, T3, T4, T5, T9, T6, T7, T10, T8, T11, T12 |
Runs and harness versions
67 build entries in 9 run records include 5 rebuild entries and exclude start clones. Doc version is the short sha256 of the methods doc a run was built under. Redacted keys name run record fields the snapshot leaves out. recomputed
| Run | Tag | Builds | Model | Effort | Caps | Waves | Doc version | Redacted keys |
|---|---|---|---|---|---|---|---|---|
| full-1 | full-1 | 11 | opus | medium | iterations 15, cycles 15, starts 3 | none | 64606950 | blind_dir, cases_dir, clones_dir, scratch_dir, split |
| pilot-1 | pilot-1 | 3 | opus | medium | iterations 2, cycles 15, starts 3 | none | 64606950 | blind_dir, cases_dir, clones_dir, split |
| pilot-2 | pilot-2 | 3 | opus | medium | iterations 2, cycles 15, starts 3 | none | 64606950 | blind_dir, cases_dir, clones_dir, scratch_dir, split |
| rep-1 | rep-1 | 20 | opus | medium | iterations 15, cycles 15, starts 3 | wave 1: rep-1-r01, rep-1-r14, rep-1-r11, rep-1-r07, rep-1-r04, rep-1-r03, rep-1-r10, rep-1-r18, rep-1-r12, rep-1-r20; wave 2: rep-1-r17, rep-1-r08, rep-1-r13, rep-1-r15, rep-1-r02, rep-1-r05, rep-1-r09, rep-1-r06, rep-1-r16, rep-1-r19 | 12f026f6 (methods text on this site) | blind_dir, cases_dir, clones_dir, scratch_dir, split |
| rep-2 | rep-2 | 20 | opus | medium | iterations 15, cycles 15, starts 3 | wave 1: rep-2-r07, rep-2-r08, rep-2-r06, rep-2-r05, rep-2-r04, rep-2-r16, rep-2-r19, rep-2-r11, rep-2-r12, rep-2-r09; wave 2: rep-2-r10, rep-2-r14, rep-2-r15, rep-2-r01, rep-2-r17, rep-2-r03, rep-2-r02, rep-2-r20, rep-2-r13, rep-2-r18 | 12f026f6 (methods text on this site) | blind_dir, cases_dir, clones_dir, methods.rep-2-r04.cases_dir, methods.rep-2-r04.scratch_dir, methods.rep-2-r08.cases_dir, methods.rep-2-r08.scratch_dir, methods.rep-2-r14.cases_dir, methods.rep-2-r14.scratch_dir, methods.rep-2-r17.cases_dir, methods.rep-2-r17.scratch_dir, methods.rep-2-r20.cases_dir, methods.rep-2-r20.scratch_dir, scratch_dir, split |
| rep-2/rebuild | rep-2 | 5 | opus | medium | iterations 15, cycles 15, starts 3 | wave 1: rep-2-r04, rep-2-r08, rep-2-r14, rep-2-r17, rep-2-r20 | 12f026f6 (methods text on this site) | blind_dir, cases_dir, clones_dir, harness_delta.path, methods.rep-2-r04.cases_dir, methods.rep-2-r04.scratch_dir, methods.rep-2-r08.cases_dir, methods.rep-2-r08.scratch_dir, methods.rep-2-r14.cases_dir, methods.rep-2-r14.scratch_dir, methods.rep-2-r17.cases_dir, methods.rep-2-r17.scratch_dir, methods.rep-2-r20.cases_dir, methods.rep-2-r20.scratch_dir, scratch_dir, split |
| tcp-1-list | tcp-1-list | 0 | opus | medium | iterations 15, cycles 15, starts 3 | none | 1f11dd37 | blind_dir, cases_dir, clones_dir, scratch_dir, split |
| tcp-1-list2 | tcp-1-list2 | 0 | opus | medium | iterations 15, cycles 15, starts 3 | none | 12f026f6 (methods text on this site) | blind_dir, cases_dir, clones_dir, scratch_dir, split |
| tcp-1 | tcp-1 | 5 | opus | medium | iterations 15, cycles 15, starts 3 | none | 1f11dd37 | blind_dir, cases_dir, clones_dir, scratch_dir, split |
2 runs record the harness they ran. rep-2/rebuild rebuilt 5 rep-2 replicates on a changed harness and records the sha256 of the change. recomputed
| Run | Harness commit | Engine sha256 | Runner tree | Claude version | Guard base | Harness delta sha256 |
|---|---|---|---|---|---|---|
| rep-2 | 809589dda5b2fbcb7d18a2542e23a09cf3d58918 | e65183306013ce5362d7bcef248303221066db14a8f905381a03b8ada742f492 | adc799943775c2ac3b3178e20a52742ec3755c2d | 2.1.309 (Claude Code) | 479dea1ab3ee54e79e829de8e8b59db57771d050 | none |
| rep-2/rebuild | cc8c8cbb06373ce400666528458a349eb0ae4d7a | e65183306013ce5362d7bcef248303221066db14a8f905381a03b8ada742f492 | 1c0e6a9ee169270e2401ab2e9d31503fb1835eee | 2.1.309 (Claude Code) | 479dea1ab3ee54e79e829de8e8b59db57771d050 | 8fde5d73aecf82700e53426dcbca82f2bd86cc1a421e20fa57f0176d86958cdf |
The held-out split
Held-out TDD as the methods doc states it. Its design page covers its builds. verified
Visible tests drive the red-green loop. Hidden tests that the implementer never sees score milestones.
Mirrors: a train and validation split. The gap between visible and hidden pass rates measures overfitting.
- Pin the public interface first such as the CLI or the noun-verb verbs.
- A human or separate agent writes several black-box cases per requirement.
- Move about a third of each requirement's cases into a hidden set.
- Keep hidden tests in a private repo that only CI checks out. Keep its CI token out of the agent environment.
- Clone it outside the agent workspace. Add a permissions deny entry for that path in the assistant settings.
- Drive TDD and AI loops with the visible set alone.
- On each merge CI prints hidden pass counts per requirement. Log the gap.
- On a hidden failure write a fresh visible test. Replace that hidden case.
Pairs with noun-verb: pin the map's public verbs as the interface both sets test. The gap per noun shows where the code overfits.
Measure: visible and hidden pass rate per merge. Gap per noun. Hidden cases replaced after disclosure.
Fits when: an AI loop iterates hard against tests and a human or separate agent owns the hidden set.
Risk: each look at the hidden score leaks a little so the set ages with reuse. A solo author has seen the hidden tests so only the AI side is held out. CI logs that print assertions leak the set.
The separate agent writes the cases in stage s2 and stage s3 splits them. Their notes follow. verified
s2. You are the separate agent. Return blocked if {cases} holds anything. Write at least 3 black-box cases per requirement as {cases}/<requirement>/<variant>/caseNN.txt, where <requirement> names a noun and <variant> is a variant folder name from examples/EXAMPLES.md, in the spec format of examples/specs. Keep generators and other scratch files in {scratch}, never in the clone, which the method agents read. Log counts only in LOG.md and commit LOG.md.
s3. Run {split} {cases} {visible}, which keeps two thirds visible, and commit visible/. Log only the line it prints.
Blind review
Blind review of one method clone. A reviewer agent with a blind id scores src/ and test/ from git diff refs/tags/starter..HEAD. Every score runs from 1, worst, to 5, best, with a reason of one or two sentences. verified
Every run records the same review schema, with 11 scored items. recomputed
- Alterability
- How little code each change case of docs/SPEC.md touches, given that all combinations of both must work.
- Code quality principles
- The eight principles of cqp.html.
- Test quality
- How well the method's own tests in test/ pin the rules and variants of the spec, with clear names and independent cases.
| Item | Criterion | Score | Reason |
|---|---|---|---|
| Change Case 1: sow seeds anti-clockwise | Alterability | 1 to 5 | 1 to 400 characters |
| Change Case 2: 7 houses with 5 seeds | Alterability | 1 to 5 | 1 to 400 characters |
| 1. Clear Presentation | Code quality principles | 1 to 5 | 1 to 400 characters |
| 2. Explanatory Language | Code quality principles | 1 to 5 | 1 to 400 characters |
| 3. Consistent Code | Code quality principles | 1 to 5 | 1 to 400 characters |
| 4. Used Content | Code quality principles | 1 to 5 | 1 to 400 characters |
| 5. Simple Constructs | Code quality principles | 1 to 5 | 1 to 400 characters |
| 6. Minimal Duplication | Code quality principles | 1 to 5 | 1 to 400 characters |
| 7. Modular Structure | Code quality principles | 1 to 5 | 1 to 400 characters |
| 8. Problem Alignment | Code quality principles | 1 to 5 | 1 to 400 characters |
| Test quality | Test quality | 1 to 5 | 1 to 400 characters |
A review agent scored each method's code and tests once from a prompt that left out the method's name, and the blind rating supersedes those scores. In the blind rating three raters score each item from 1 to 5 on each cqp.html principle. An item is a rebuilt clone whose history names no method. The finals are the 11 final clones. The calibration items add the A02 reference, the starter stub and 7 mutants of functions-first, each damaging one or two named principles. The scores are on the ratings page. verified
Collect and audit
After the build stages collect.sh collects each run. Its branchStep records a step marked skippable as skipped when fetchBack failed, as the method branch may then be stale. verified
collectOne runs 16 steps in order.
fetchBackexportskippablelogsskippablegradeskippablemeasureskippablesurvivorsskippablebenchskippablemetricsskippablediagramskippablecostscurveskippableapfdskippableauditadherenceskippablereviewreport
collectList runs 7 steps in order.
fetchBackpinskippableexportskippablelistskippablecostsauditorders
Audit flag. A command or commit by an agent that may show access to the hidden tests. Each high flag gets a disposition. verified
| Design | Channel | High flags | Verdict |
|---|---|---|---|
| Held-out TDD | hidden | 2 | false positive |
| Held-out TDD | ho_reflection | 7 | false positive |
| Noun-verb map | pmd_suppression | 1 | false positive |
3 rows judge 10 high flags. The evidence for each is in the audit flag dispositions. recomputed