v0.5.0
A new gate at step 9: housebroken review.
Every gate before this one reads code or counts prose. None of them asks whether the idea of a patch is complete, or whether a sentence in its body is true, and those are the defects that got furthest. A reply saying five new static_asserts fail on main when four did. A new test file committed 100755 among 100644 siblings. A patch that removed behaviour the repository documents and never touched the documentation. A second session reviewing the work caught each of them.
review.sh brief names the reviewer and prints its brief. The reviewer is never the model that wrote the change. It is one tier down by default, Fable to Opus and Opus to Sonnet, which costs less and still brings different blind spots, and never below Sonnet, because a review has to be able to check a standard citation or a CI matrix, so Sonnet's own work goes up to Opus. The brief sets hard read-only limits, opens its attack list with every claim housebroken claims finds in the text, and asks for evidence the reviewer produced itself behind every finding.
The report is bound to what it read. Its header records the head it attacked and the sha256 of every text, and housebroken file now refuses unless there is a POST AS IS review of the exact head and body being filed. A fix the reviewer asks for is a new head, and a new head is reviewed again. An inline --body is refused, because a review cannot be bound to text that was never a file. The skill sends a reply that concedes, disagrees or rides on a code change through the same review, checked with housebroken review check before it is posted.
A passed review is not a proof. The day this was written, a review passed a reply packet whose author then found, re-reading, that two functions it cited as precedent compile only under MSVC. The author still re-reads every claim the reviewer did not re-derive.
housebroken branch now also refuses a commit carrying a tool trailer or a session link, and a sign-off that names a username. Its ignore check applies only to files the branch adds: a repository that ignores dl for a built binary also matches its own pkg/dl source directory, and forcing the check called two upstream source files build output. install.sh writes the version beside the dispatcher, so a script install can answer housebroken version.