Kalah TDD study · Part 3 of 29 · Methodology

Methodology: harness and protocol

How each design runs: stages, prompts and agents, the held-out split, blind review and the audit.

Source runs full-1, pilot-1, pilot-2, rep-2, rep-2/rebuild, tcp-1-list, tcp-1-list2, tcp-1 and rep-1 at tdd-experiment c3dd988

Contents

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

Agents of a run by phase, then collect and ratingIn the Methods phase a fresh clone takes throughout rules into each prompt. Method agents run once, repeat and starts stages and the harness runs its own stage. Transfer agents seed parallel starts by git. A separate agent writes held-out cases in s2 and fresh cases after a hidden failure. The Review phase runs one blind reviewer per method and the Measure phase one measure agent. Collect then audits, checks adherence, copies the review and renders the report. Blind raters score each final after collect.Harness and collectOther agentsMethod agentHarness and collectOther agentsMethod agentHarness and collectOther agentsMethod agentFresh clone and prompt67 entries / 9 recordsTest lister2 list-only runsThroughout rule (F)9 stages join everypromptOnce stage (S)32 stagesCase writerheld-out s2, everybuildHarness stage (H)1 stageRepeat stage (L)15 stages, unitscandidate, feature,milestone, requirementHarness transferagentsTakes s3 starts. Seed,winner and list by gitStarts stage1 stage, parallelattemptsFresh case writerheld-out s8-writer ifhidden_failureBlind reviewerReview phase, one permethodMeasure agentMeasure phase, one permethodAudit and adherencecollectOne steps 13,14 of 16Review copy and reportcollectOne steps 15,16Blind ratersthree per final, aftercollectStudy report3 disposition rowsjudge 10 high flagsits lists2after s3if hiddenup to 3collectrepeat per unit
  1. Fresh clone and prompt. 67 entries / 9 records. Lane: Harness and collect.

    Next: Throughout rule (F).

  2. Test lister. 2 list-only runs. Lane: Other agents.

    Next: Fresh clone and prompt (its list).

  3. Throughout rule (F). 9 stages join every prompt. Lane: Harness and collect.

    Next: Once stage (S).

  4. Once stage (S). 32 stages. Lane: Method agent.

    Next: Case writer (s2); Repeat stage (L).

  5. Case writer. held-out s2, every build. Lane: Other agents.

    Next: Harness stage (H) (after s3).

  6. Harness stage (H). 1 stage. Lane: Harness and collect.

    Next: Repeat stage (L).

  7. 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).

  8. Harness transfer agents. Takes s3 starts. Seed, winner and list by git. Lane: Harness and collect.

    Next: Starts stage (up to 3).

  9. Starts stage. 1 stage, parallel attempts. Lane: Method agent.

    Next: Blind reviewer.

  10. Fresh case writer. held-out s8-writer if hidden_failure. Lane: Other agents.

    Next: Blind reviewer.

  11. Blind reviewer. Review phase, one per method. Lane: Other agents.

    Next: Measure agent.

  12. Measure agent. Measure phase, one per method. Lane: Method agent.

    Next: Audit and adherence (collect).

  13. Audit and adherence. collectOne steps 13, 14 of 16. Lane: Harness and collect.

    Next: Review copy and report.

  14. Review copy and report. collectOne steps 15, 16. Lane: Harness and collect.

    Next: Blind raters.

  15. Blind raters. three per final, after collect. Lane: Other agents.

    Next: Study report.

  16. 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
  1. Fresh clone and prompt. 67 entries / 9 records. Lane: Harness and collect.

    Next: Throughout rule (F).

  2. Test lister. 2 list-only runs. Lane: Other agents.

    Next: Fresh clone and prompt (its list).

  3. Throughout rule (F). 9 stages join every prompt. Lane: Harness and collect.

    Next: Once stage (S).

  4. Once stage (S). 32 stages. Lane: Method agent.

    Next: Case writer (s2); Repeat stage (L).

  5. Case writer. held-out s2, every build. Lane: Other agents.

    Next: Harness stage (H) (after s3).

  6. Harness stage (H). 1 stage. Lane: Harness and collect.

    Next: Repeat stage (L).

  7. 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).

  8. Harness transfer agents. Takes s3 starts. Seed, winner and list by git. Lane: Harness and collect.

    Next: Starts stage (up to 3).

  9. Starts stage. 1 stage, parallel attempts. Lane: Method agent.

    Next: Blind reviewer.

  10. Fresh case writer. held-out s8-writer if hidden_failure. Lane: Other agents.

    Next: Blind reviewer.

  11. Blind reviewer. Review phase, one per method. Lane: Other agents.

    Next: Measure agent.

  12. Measure agent. Measure phase, one per method. Lane: Method agent.

    Next: Audit and adherence (collect).

  13. Audit and adherence. collectOne steps 13, 14 of 16. Lane: Harness and collect.

    Next: Review copy and report.

  14. Review copy and report. collectOne steps 15, 16. Lane: Harness and collect.

    Next: Blind raters.

  15. Blind raters. three per final, after collect. Lane: Other agents.

    Next: Study report.

  16. Study report. 3 disposition rows judge 10 high flags. Lane: Harness and collect.
Agent roles
RolePhaseLabel patternExamples from run recordsWhere it works
Method agentMethods<design>:<stage>held-out:s1The build clone
Separate agentMethods<design>:<stage>held-out:s2The cases and scratch folders, outside the clone the method agents read
Harness transfer agentsMethodsharness:<task>-<clone>harness:seed-multi-start-1, harness:winner-multi-startGit fetch and merge between clones at low effort, to seed each start, take the winner and fetch the list
Test listerMethods (list-only run)<lister>:listtcp-1-list-lister:list, tcp-1-list2-lister:listIts own clone, where it commits only CLAUSES.md and TESTLIST.md
Blind reviewerReviewreview:<blind id>review:r01, review:r02git diff refs/tags/starter..HEAD of src/ and test/, under a blind id
Measure agentMeasure<clone>:measurerep-1-r01:measure, rep-1-r11:measureThe clone root, where it writes MEASURE.md from LOG.md, git log, GAP.md and ATTEMPTS.md
Blind ratersRate, after collectrate:<item>:<rater>none in the snapshotEach 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

Stages: Baseline
DesignStageKindStepsUnitReturnsRules
Classic greedy TDDs1S (once)1nonenonenone
Classic greedy TDDL2-7L (repeat per unit)2, 3, 4, 5, 6, 7featurenonenone
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

Stages: Structure first
DesignStageKindStepsUnitReturnsRules
Noun-verb maps1S (once)1nonenonenone
Noun-verb maps2S (once)2nonenonenone
Noun-verb maps3S (once)3nonenonenone
Noun-verb maps4S (once)4nonenonenone
Noun-verb maps5S (once)5nonenonenone
Noun-verb maps6S (once)6nonenonecommit cap 60
Noun-verb maps7S (once)7nonenonecommit cap 40
Noun-verb maps8S (once)8nonenonenone
Mapped-path TDDs1S (once)1nonenonewith Noun-verb map steps 2, 3, 4, 5
Mapped-path TDDs2S (once)2nonenonenone
Mapped-path TDDL3-8L (repeat per unit)3, 4, 5, 6, 7, 8featurenonenone
Functions first, classes laters1S (once)1nonenonenone
Functions first, classes laters2S (once)2nonenonenone
Functions first, classes laters3S (once)3nonenonecommit cap 40
Functions first, classes laters4S (once)4nonenonenone
Functions first, classes laters5S (once)5nonenonenone
Functions first, classes laters6S (once)6nonenonenone
Functions first, classes laters7S (once)7nonenonenone
Functions first, classes laters8S (once)8nonenonenone
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

Stages: Step size
DesignStageKindStepsUnitReturnsRules
Transformation Priority Premise TDDs1S (once)1nonenonenone
Transformation Priority Premise TDDL2-7L (repeat per unit)2, 3, 4, 5, 6, 7featurenonenone
Coarse-to-fine TDDF2F (throughout)2nonenonenone
Coarse-to-fine TDDL1,3-8L (repeat per unit)1, 3, 4, 5, 6, 7, 8featurenonenone
Annealed refactoringF2-3F (throughout)2, 3nonenonenone
Annealed refactoringL1,4-8L (repeat per unit)1, 4, 5, 6, 7, 8featurenonenone
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

Stages: Search and validation
DesignStageKindStepsUnitReturnsRules
Multi-start TDDs1S (once)1nonenonenone
Multi-start TDDs2S (once)2nonenonenone
Multi-start TDDs3S (once)3nonestartsnone
Multi-start TDDs4-5starts (for up to n starts)4, 5nonepassednone
Multi-start TDDs6S (once)6nonewinnernone
Multi-start TDDs7S (once)7nonenonenone
Most informative next testL1-8L (repeat per unit)1, 2, 3, 4, 5, 6, 7, 8requirementnonenone
Property-based TDDL1-7L (repeat per unit)1, 2, 3, 4, 5, 6, 7requirementnonenone
Property-based TDDs8S (once)8nonenonenone
Held-out TDDs1S (once)1nonenonenone
Held-out TDDs2S (once)2nonenonenone
Held-out TDDs3S (once)3nonenonenone
Held-out TDDH4-5H (the harness does)4, 5nonenonenone
Held-out TDDL6-8L (repeat per unit)6, 7, 8requirementhiddenFailnone
Held-out TDDs8-writerS (once)nonenonenoneif hidden_failure; with Held-out TDD steps 2, 8
Held-out TDDs8-splitS (once)nonenonenoneif hidden_failure; with Held-out TDD steps 3, 8
Anchor EngineeringF7F (throughout)7nonenonenone
Anchor Engineerings1S (once)1, 2nonenonenone
Anchor EngineeringL3-6L (repeat per unit)3, 4, 5, 6milestonenonenone
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

Stages: Test-list order
DesignStageKindStepsUnitReturnsRules
tcp-untreatedF1-2F (throughout)1, 2nonenonenone
tcp-untreatedL3-4L (repeat per unit)3, 4candidatecandidatenone
tcp-randomF1-2F (throughout)1, 2nonenonenone
tcp-randomL3-4L (repeat per unit)3, 4candidatecandidatenone
tcp-coverageF1-2F (throughout)1, 2nonenonenone
tcp-coverageL3-4L (repeat per unit)3, 4candidatecandidatenone
tcp-costF1-2F (throughout)1, 2nonenonenone
tcp-costL3-4L (repeat per unit)3, 4candidatecandidatenone
tcp-riskF1-2F (throughout)1, 2nonenonenone
tcp-riskL3-4L (repeat per unit)3, 4candidatecandidatenone
tcp-usageF1-2F (throughout)1, 2nonenonenone
tcp-usageL3-4L (repeat per unit)3, 4candidatecandidatenone
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

Stages as run that differ from stages.json
BuildsDesignStageFieldAs run
full-1 mapped-pathMapped-path TDDs1with
  • Noun-verb map step 2. Extract every noun and verb as Noun: -verb lists. Trim to the domain.
  • Noun-verb map step 3. Mark parents as Noun(Parent). Split nouns over 4 verbs. Apply Clean Code names.
  • Noun-verb map step 4. Replace duplicate verbs with references written as verb1(Noun2.verb3).
  • Noun-verb map step 5. Script-check for cycles, dangling references and nouns over 4 verbs. Fix each.
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-r20Held-out TDDs8-writerwith
  • Held-out TDD step 2. A human or separate agent writes several black-box cases per requirement.
  • Held-out TDD step 8. On a hidden failure write a fresh visible test. Replace that hidden case.
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-r20Held-out TDDs8-splitwith
  • Held-out TDD step 3. Move about a third of each requirement's cases into a hidden set.
  • Held-out TDD step 8. On a hidden failure write a fresh visible test. Replace that hidden case.
pilot-1 multi-startMulti-start TDDs6noteRank 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-outHeld-out TDDs2noteYou 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-outHeld-out TDDs8-writernoteYou 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-guidedMost informative next testL1-8noteMutation 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.

  1. 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.
  2. 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.
  3. List at most 12 candidate tests in TESTLIST.md. Each names one behaviour.
  4. Give each candidate two fields. checks lists every clause its assertions observe, variants included. relies lists clauses it needs and does not assert.
  5. Estimate the production lines each candidate needs on the starter alone.
  6. 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.

  1. 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.
  2. 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.
  3. List at most 12 candidate tests in TESTLIST.md. Each names one behaviour.
  4. Give each candidate two fields. checks lists every clause its assertions observe, variants included. relies lists clauses it needs and does not assert.
  5. Estimate the production lines each candidate needs on the starter alone.
  6. 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.

  1. 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.
  2. 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.
  3. Give each candidate two fields. checks lists every clause its assertions observe, variants included. relies lists clauses it needs and does not assert.
  4. Estimate the production lines each candidate needs on the starter alone.
  5. 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

tcp-1 arms
BuildArmPromptOrderBlind id
tcp-1-r01tcp-randomTest-list orderrandomr01
tcp-1-r02tcp-coverageTest-list ordercoverager02
tcp-1-r03tcp-costTest-list ordercostr03
tcp-1-r04tcp-riskTest-list orderriskr04
tcp-1-r05tcp-usageTest-list orderusager05
Clauses in the tcp-1 list
ClauseRiskUsage
R1150
R2250
R313
R4295
R5348
R6348
R7350
R8165
R9120
R10210
R1123
R1223
R1333
R1423
R1513
R16250
R17250
R181100
R1913
Candidates in the tcp-1 list
CandidateChecksReliesEstimate
T1R1, R3, R15, R17, R18none25
T2R2, R3, R15, R16, R18none25
T3R1, R4, R5, R8, R16, R18R3, R1540
T4R1, R4, R6, R8, R17, R18R3, R1540
T5R7, R9, R18R1, R4, R5, R16, R1545
T6R7, R8R1, R4, R6, R17, R18, R1550
T7R10, R8R1, R4, R5, R16, R18, R1555
T8R11, R8R1, R4, R5, R10, R16, R18, R1555
T9R19, R18R1, R4, R5, R16, R1545
T10R4, R7, R10R1, R6, R17, R18, R1555
T11R12, R13, R14R1, R4, R6, R8, R9, R10, R17, R1870
T12R12, R13, R14R1, R4, R5, R8, R9, R10, R16, R1870
tcp-1 candidate orders
OrderCandidates
untreatedT1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
randomT7, T10, T6, T1, T2, T11, T8, T12, T5, T9, T3, T4
coverageT3, T1, T11, T10, T2, T8, T5, T9, T4, T12, T7, T6
costT1, T3, T5, T11, T2, T4, T9, T7, T8, T10, T12, T6
riskT10, T11, T12, T6, T5, T3, T4, T7, T8, T2, T1, T9
usageT3, T4, T5, T2, T7, T11, T8, T9, T1, T10, T6, T12
costOnlyT1, 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

Runs
RunTagBuildsModelEffortCapsWavesDoc versionRedacted keys
full-1full-111opusmediumiterations 15, cycles 15, starts 3none64606950blind_dir, cases_dir, clones_dir, scratch_dir, split
pilot-1pilot-13opusmediumiterations 2, cycles 15, starts 3none64606950blind_dir, cases_dir, clones_dir, split
pilot-2pilot-23opusmediumiterations 2, cycles 15, starts 3none64606950blind_dir, cases_dir, clones_dir, scratch_dir, split
rep-1rep-120opusmediumiterations 15, cycles 15, starts 3wave 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-r1912f026f6 (methods text on this site)blind_dir, cases_dir, clones_dir, scratch_dir, split
rep-2rep-220opusmediumiterations 15, cycles 15, starts 3wave 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-r1812f026f6 (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/rebuildrep-25opusmediumiterations 15, cycles 15, starts 3wave 1: rep-2-r04, rep-2-r08, rep-2-r14, rep-2-r17, rep-2-r2012f026f6 (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-listtcp-1-list0opusmediumiterations 15, cycles 15, starts 3none1f11dd37blind_dir, cases_dir, clones_dir, scratch_dir, split
tcp-1-list2tcp-1-list20opusmediumiterations 15, cycles 15, starts 3none12f026f6 (methods text on this site)blind_dir, cases_dir, clones_dir, scratch_dir, split
tcp-1tcp-15opusmediumiterations 15, cycles 15, starts 3none1f11dd37blind_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

Harness versions
RunHarness commitEngine sha256Runner treeClaude versionGuard baseHarness delta sha256
rep-2809589dda5b2fbcb7d18a2542e23a09cf3d58918e65183306013ce5362d7bcef248303221066db14a8f905381a03b8ada742f492adc799943775c2ac3b3178e20a52742ec3755c2d2.1.309 (Claude Code)479dea1ab3ee54e79e829de8e8b59db57771d050none
rep-2/rebuildcc8c8cbb06373ce400666528458a349eb0ae4d7ae65183306013ce5362d7bcef248303221066db14a8f905381a03b8ada742f4921c0e6a9ee169270e2401ab2e9d31503fb1835eee2.1.309 (Claude Code)479dea1ab3ee54e79e829de8e8b59db57771d0508fde5d73aecf82700e53426dcbca82f2bd86cc1a421e20fa57f0176d86958cdf

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.

  1. Pin the public interface first such as the CLI or the noun-verb verbs.
  2. A human or separate agent writes several black-box cases per requirement.
  3. Move about a third of each requirement's cases into a hidden set.
  4. Keep hidden tests in a private repo that only CI checks out. Keep its CI token out of the agent environment.
  5. Clone it outside the agent workspace. Add a permissions deny entry for that path in the assistant settings.
  6. Drive TDD and AI loops with the visible set alone.
  7. On each merge CI prints hidden pass counts per requirement. Log the gap.
  8. 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.
Blind review criteria
ItemCriterionScoreReason
Change Case 1: sow seeds anti-clockwiseAlterability1 to 51 to 400 characters
Change Case 2: 7 houses with 5 seedsAlterability1 to 51 to 400 characters
1. Clear PresentationCode quality principles1 to 51 to 400 characters
2. Explanatory LanguageCode quality principles1 to 51 to 400 characters
3. Consistent CodeCode quality principles1 to 51 to 400 characters
4. Used ContentCode quality principles1 to 51 to 400 characters
5. Simple ConstructsCode quality principles1 to 51 to 400 characters
6. Minimal DuplicationCode quality principles1 to 51 to 400 characters
7. Modular StructureCode quality principles1 to 51 to 400 characters
8. Problem AlignmentCode quality principles1 to 51 to 400 characters
Test qualityTest quality1 to 51 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.

  1. fetchBack
  2. export skippable
  3. logs skippable
  4. grade skippable
  5. measure skippable
  6. survivors skippable
  7. bench skippable
  8. metrics skippable
  9. diagram skippable
  10. costs
  11. curve skippable
  12. apfd skippable
  13. audit
  14. adherence skippable
  15. review
  16. report

collectList runs 7 steps in order.

  1. fetchBack
  2. pin skippable
  3. export skippable
  4. list skippable
  5. costs
  6. audit
  7. orders

Audit flag. A command or commit by an agent that may show access to the hidden tests. Each high flag gets a disposition. verified

Audit flag dispositions summary
DesignChannelHigh flagsVerdict
Held-out TDDhidden2false positive
Held-out TDDho_reflection7false positive
Noun-verb mappmd_suppression1false positive

3 rows judge 10 high flags. The evidence for each is in the audit flag dispositions. recomputed