Repository navigation
feat: before it closes on a capability, the house runs it once in a trial — and what throws does not close (greenhouse decisions/0605) - #767
Merged
rodrigoteamx merged 6 commits intoOct 9, 2026
Conversation
…rial — and what throws does not close (greenhouse decisions/0605) Measured on twenty houses a build station left (greenhouse evidence/1166): the house closed six `verified`, and in one of them three of four operations call a method that does not exist. It had read what the capability declares and called nothing — `exercised: "unjudged"`. At the natural end of a leg, when the verdict is about to say `verified` over a capability declared whole, the house runs it: one trial of its own, through the trial runner; every operation the promotion declared, in catalogue order, twice, each in a process of its own, with one value of the declared type per required input. An operation is read by its worst answer: it answered, it refused, or it threw. What threw does not close, and the reason names the operation, the class and the first line. `exercised` becomes `ran` or `threw`, never «correct»: beside `ran` the verdict says `behavior: "unjudged"`. What the house found is a receipt in the session's own stream, and the verdict reads it wherever it is read — so between steps, where nothing is ever run, what threw stands and the next leg can repair it. A receipt speaks of the house it ran on: any change that lands later takes it back. The copy is no trial: it lives under var/exercises/, nothing lists, opens or promotes it, and it is discarded. A house that cannot confine a process, or switched trials off, runs nothing and says so.
… are counted A session that does not close is also told of every class it wrote that no call verified, and the house's own finding came after those lines. The verdict says sixteen facts and counts the rest — so with enough classes, the one line that names the operation that threw was counted and not said. Measured on a house a build run left (greenhouse evidence/1171): eight such lines stood before it. What the house saw — a capability that threw, one not whole, a page that does not list — now stays among the ones said; the session's own record is what gets counted.
The cap keeps apart the reason the house gives when it did not derive its closure — not only what threw: here, that the house changed after it was last seen. A mutant that dropped that line survived until this.
Measured blind on the house a build run left closed with three operations that throw (greenhouse evidence/1171): the verdict carried ten reasons, and the one that names what threw was the ninth, after eight lines of classes no call verified. A resident reads from the top. What the house saw — a capability that threw, one not whole, a page that does not list, a house that changed after it was last seen — now comes before what the session's own record lacks. Said first, it is also never the part the cap of sixteen counts and does not say, so the cap is the plain one again.
… its leg) One line clashed, in the return shape of HouseObservedClosure::of(): this branch adds what a capability's observation may carry once the house ran it, main adds the files where a scaffold still stands. Resolved by hand to the line that says both. AgentOperations.php, which both touch, merged by itself.
…ut of steps runs nothing and records no verdict The house is about to continue a paused leg by itself (greenhouse decisions/0604, rule A). A pause is not a natural end: nothing is exercised there and no verdict is recorded, though the same stream would close. The leg that continues it and ends on its answer runs the capability once and closes. This is R1's half of that invariant, pinned on the leg as it is today: one invocation that stops, and the next that answers. The other half — the continuation inside the same invocation, for a pause of window and one of steps — is in the pull request of rule A, on the same fixture: the recording of the promotion moves into it.
This was referenced Oct 9, 2026
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.
Why
Twenty houses a build station left (evidence/1166). The house closed six
verified; in one, three of four operations call a method that does not exist and fail the first time anyone uses them. The closure had read what the capability declares and called nothing — and said so:exercised: "unjudged"(decisions/0595). Meanwhile the four sessions that tried to call what they had just built were stopped at the frontier. The house gave «verified» to the session that did not run its work.What changes
The property: before the house says
verifiedover a capability, it has run it once.At the natural end of a leg, when the verdict is about to say
verifiedover a capability the house saw declared whole, the house runs it:enum);If any threw, there is no closure, and the reason names the operation, the class and the first line:
If none did, the observation says
exercised: "ran"with its counts — andbehavior: "unjudged".exercisednever says more than that.What the house found is a receipt in the session's own stream (
session.capability_exercised), and the verdict reads it from there, as it reads everything. So:ranandthrewalike; a promotion that wrote nothing does not;The copy is no trial. It lives under
var/exercises/; nothing that lists, opens, promotes or sweeps a trial can reach it, even while it runs; it is discarded. The mask of secrets covers it.What the design did not say, and had to be built
resources/exercise-run.php.thrown: {class, engine},missing). Reading «Class: message» out of a text takes a refusal like «Validation: name is required» for a throw.unjudged, andunjudgedcloses. Those two fields are the runner's alone now.Three of these are t-0106's, from reading the first shape of it: the receipt bound to the state of the house, that it must be no change, no trial and no work of the session, and that it names no seat.
Measured (greenhouse evidence/1171) — no model
A throw-away container of the image a build run left, no network, this branch's
src/andresources/mounted read-only over the installed runtime. Inside, the function a leg calls when its final answer comes, over the ledger as the run left it.verified,unjudgedverified,exercised: "ran"verified,unjudgedverified,exercised: "ran"verified,unjudgedthrew— the reason aboveverified,unjudgedverified,exercised: "ran"verified,unjudgedthrew: operations 1, 2 and 3 of 4, classError, the engine's, each line starting with «Call to undefined method»verified,unjudgedverified,exercised: "ran"With main in it, and an invariant with rule A
HouseObservedClosure::of(): this branch adds what a capability's observation may carry, main adds the files where a scaffold still stands — and it now says both.AgentOperations.php, which both touch, merged by itself.ExercisedTaller).What it does NOT catch
verifiedwithexercised: "ran". Only who compares states sees it.unjudgedwith the reason beside it, and closes as it did. It never runs a session's code unconfined to find out.unjudged. That is the house's failing, not the session's.For whoever decides
fatal— the process ended without answering — andtimeout— the house stopped it at ten seconds. Both block today. A slow, legitimate operation is the possible false alarm.exercisedgains two values, the capability's observation gains fields, the stream gains a fact the reducer skips. What someone who updates will see: a session whose capability throws no longer closes.Tests, mutants, suite
scripts/lab/exercise-1171/mutants-exercise.pyin greenhouse). Four survived a first pass and were weak tests; each has its test now.OnlyOneConfinementIsBuiltAndItMasksTest) is green: this builds no confinement; it uses the runner's.