Skip to content

Hold done to a checklist and to a reason for every changed test - #65

Merged
yogthos merged 5 commits into
mainfrom
checklist-ship
Sep 30, 2026
Merged

yogthos merged 5 commits into
mainfrom
checklist-ship

Conversation

@yogthos

@yogthos yogthos commented Sep 30, 2026

Copy link
Copy Markdown
Owner

Two model-free checks at done, for karamazov-dsfx and karamazov-fgsb.

An answer could ship a requirement by never mentioning it. done now owes one entry per checklist item, met / not_met / n/a with a reason, and a missing item is refused. The items come from data that exists before the work: the list items of what the branch was asked (the problem, or a board piece's contract; a contract without list items is itself one item), the task's tests when they are prose, what the branch declared with plan, and for a branch working no task the operator's acceptance criteria. The accounted list is appended to the shipped answer for the critic.

A run could also change a test that existed when it started without saying so. Every test at the run's baseline that is not in the tree unchanged now needs a reason in done's changed_tests. Clojure test files are compared as whole forms, so moves and whitespace are not flagged; other files fall back to their assertion lines.

Before settling on this I measured the model route with lev on 50 labeled cases per question: the BERT encoders were at chance and never answered "absent", Qwen3.5-4B called four of five silent answers "met" at 0.95+, and MiniCPM5 thinking got 92% at about 7 s per item.

Two endless-flight runs on GLM-5.3 exercised it. The first found four rough edges (one-line contracts owed nothing, revision branches were held to the run's criteria, relabelled checklist items piled up, loosely named tests did not match), fixed here; the second found two more (checklist items sent as maps, entries named by text), also fixed. In the second run both combo pieces shipped through the checklist and the ratchet with the rewritten scoring test explained, and a partial end-to-end piece shipped honestly as partial.

Also: gitdiff printed repository-relative paths, which broke a project nested in a larger repo; http-client v0.0.17, ring-chez-adapter v0.7.10 and jolt-crypto v0.0.9.

Yogthos added 5 commits September 29, 2026 23:00
…o to v0.0.9

jolt-crypto moves with http-client, which is released against v0.0.9; our
top-level pin was 15 commits behind it and would have won resolution.
An answer could ship a requirement by never mentioning it, and a run could
change a test that existed before it started without saying so. Both are
now mechanical checks at done.

The checklist is built from data that exists before the work: the list
items of what the branch was asked (the problem, or a board piece's task
contract), the task's tests when they are prose, what the branch declared
with plan, and for a branch holding no task the operator's acceptance
criteria. done must carry an entry per item - met, not_met or n/a, with a
reason - and the accounted list is appended to the shipped answer.

Every test that was at the run's baseline and is not in the tree
unchanged has to be named in done's changed_tests with a reason. Clojure
test files are compared as whole forms, so a moved test or a whitespace
edit is not flagged; other files fall back to their assertion lines.

Also fixes gitdiff reporting repository-relative paths, which was wrong
for a project nested inside a larger repository.
Run 582980ef on endless-flight showed four problems:

- A board piece's contract is one line, so it had no list items and the
  piece owed nothing. A contract with no list items is now one item.
- A revision branch carries its task while the claim stays with the
  original branch id, so it was read as the run's answer and owed every
  acceptance criterion. Carrying a task now counts as working one.
- The model labelled its checklist items c1..c4 and reworded them on each
  re-plan. The union grew to c8 while it kept answering c1..c4. A labelled
  item that names an existing one is now a restatement.
- changed_tests named the test as ns/name and as name (file). Both now
  match the bare test name.

The scripted models in the board, feature and team tests share one
checklist helper instead of three copies.
…em text

Run 6e3eda8a sent plan's checklist as [{"c1": "..."}] and stored the
braces as the item text, then named its done entries by sentence instead
of id. A one-entry map is a labelled item now, and an entry whose key is
an item's exact text counts for that item; a paraphrase still does not.
@yogthos
yogthos merged commit e938e71 into main Sep 30, 2026
7 checks passed
@yogthos
yogthos deleted the checklist-ship branch September 30, 2026 04:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant