bench(lab): write the method down as the phase plans - #274
Merged
luuuc merged 1 commit intoAug 17, 2026
Conversation
This is the method. Everything else in nine cycles is machinery that runs it. The binary holds no prompt logic by design, so how a scenario is crafted, how a mini-bench is read, how a session is expanded, how a pay call is made and how a win is confirmed all live as prose a human wrote. The risk is specific: a rewrite ships a cleaner engine on day one and quietly loses the discipline, because the scoreboard stays green either way. These files and LAWS.md are the only defence. Eleven plans, one per phase in the graph, each declaring the phase it belongs to, the artifact it reads, the artifact it writes and its verdict enum. lab/internal/plans checks all four against the graph in both directions: a plan naming a verdict the graph does not know cannot be routed, and a plan silent on a verdict its phase can emit is a case with no instruction, which is how a phase writes nothing and stalls a campaign unattended. Porting found a hole. The old expand plan emits REQUESTION when the discriminator step cannot survive verbatim, and the graph gave expansion AUTO alone. REQUESTION joins its enum, the re-entry table and the lever list, because a lever a recorded campaign used and the table does not carry is a hole in the test set. The five killers move to lab/KILLERS.md, tracked beside LAWS.md, since an instructions file outside the repository is one a fresh session does not have.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
This is the method. Everything else in the rebuild is machinery that runs it.
The binary holds no prompt logic by design, so how a scenario is crafted, how a mini-bench is read, how a session is expanded, how a pay call is made and how a win is confirmed all live as prose in files a human wrote. In the retired instrument that is five files and 792 lines, the largest being authoring at 264.
Those lines are the distilled residue of a year: which asks discriminate, which gold rows can never score, what a mini-bench actually tells you, when to re-question and when to re-anchor. Almost none of it is derivable from first principles, and all of it was paid for.
The risk is specific. A rewrite ships a cleaner engine on day one and quietly loses the discipline, because the scoreboard stays green either way. These files, and
lab/LAWS.md, are the only defence.Summary
lab/plans/holds one plan per phase in the graph, each written against the declared contract.lab/internal/planschecks them against that contract mechanically.Changes
lab/KILLERS.md, tracked besideLAWS.md, because an instructions file that is not in the repository is one a fresh session does not have. With the rule that makes them work attached: a confirming check is not evidence, it is the absence of a test, and the killer runs before the finding is stated.The port found a hole in the graph
The old expand plan emits
REQUESTIONwhen the discriminator step cannot survive verbatim — a gold row that does not hold at its line, or a step that cannot be written without naming a gold file. The declared graph gave expansionAUTOalone, so a phase that genuinely meets that case would write nothing and stall the loop.REQUESTIONjoins expansion's enum, the re-entry table and the lever list. A lever a recorded campaign used and the table does not carry is a hole in the test set, not a plan to bend around.Recorded during the build
Eleven plans, not six. The shaped contract table named six; the done-means says every phase in the graph has a plan, and the graph has eleven. The stricter reading won, and the mechanical check is total rather than partial.
The largest loss in the move, stated rather than discovered. The old plans named a specific command at every step — the citation ranking, the retention sweep, the seam profile, the shown-set probe, the gold audit. Those scripts are not ported into this tree, and a plan naming a path that does not exist is worse than one naming the computation, because a plan is followed literally. So the steps name what to compute, and the flywheel cycle binds each one to its command. It is recorded in
Questioned, not changedon all five judgment plans.Test Plan
make cigreen: build, tests, per-file coverage floor with no new exception, zero complexity suppressions, lint clean.