Cassette Build Report 024 — Green Tests Did Not Mean the Work Was Done
S07 passed its own tests but the repository suite still exposed an S01 commit-law failure, so Cassette repaired the historical record before closing.

Scope note: This report covers the S07 closeout and the S01 commit-law failure that blocked it. It does not claim that a full suite makes every future feature complete.
The S07 run came back with nineteen passes and one failure. GPT-5.6 Sol Ultra called the failure unrelated and said S07 was complete.
I answered: “Means you are not done.”
The storage work was real. The repository was still red. Cassette’s close rule did not say “the new feature passes its own tests.” It said the full suite and ledger had to pass on the closing checkout. The word “unrelated” described where the failure began. It did not remove the failure from the gate.
The red line came from S01’s commit-law check. Two earlier commits answered the required questions in ordinary language but not in the exact field grammar the ledger enforces. One wrote “Reused existing repository authorities.” Another did not put the no-deletion answer on its own Deleted: line. A person could understand both messages. The machine could not accept them.
The ledger makes the rule literal:
COMMIT_LAW_FIELDS = (
("Failed before", re.compile(r"^Failed before:[ \t]+\S.*$", re.M)),
("Reused instead of authored", re.compile(r"^Reused instead of authored:[ \t]+\S.*$", re.M)),
("Deleted", re.compile(r"^Deleted:[ \t]+\S.*$", re.M)),
)
Those fields are in tools/ledger.py. The old commits could not be edited without rewriting shared history, and weakening the check would have made the green result less trustworthy.
We repaired the record in the record. A later descendant commit names the exact earlier commit, supplies the missing field, and is itself checked for duplicate, unknown, or prospective targets. The original history stays in place. A fresh checkout can see the failure and the correction. The ledger also learned to reject a repair that tried to replace an answer already present in the original message.
This exchange was important because the first instinct was to preserve local progress. The storage tests were green, so the failure looked like someone else’s problem. I kept bringing the agent back to the close rule. GPT-5.6 Sol repaired the messages, then reran S01 and S07 together. The final Mac run passed twenty tests and reported zero ledger violations. Only then did both steps move to DONE.
I want the distinction to stay boring and exact. “My tests pass” is a local statement. “The project is done” is a repository statement. The second includes the old commit that the new feature did not touch, because the repository is the thing we are claiming to hand to the next person. A green component result can sit inside a red project. The red project is still red.
