StandingJudge
THE JUDGMENT: does this standing grant lend anything to this call, right now? (greenhouse decisions/0615 §3) Pure. It reads a grant, what a host knows of it at this moment and the call as facts, and answers. It opens no file and asks no clock but the one it is handed — so every way it can fail is a case a test can write down, and a host in any language can be held to the same seven questions. ── WHAT IT DOES NOT DO ───────────────────────────────────────────────────────────────────────── Grant. Widen. Restore. It refuses or lets pass, and when the grant does not name the call it says exactly that and nothing else: the call is then judged as it was before any grant existed. Growing back is a person's new signature and happens somewhere else entirely. ── WHY THE ORDER ─────────────────────────────────────────────────────────────────────────────── Whose refusal it is comes first. A grant that is suspended is the PERSON's to lift, and saying so matters more than telling the caller its candidate was not measured: measuring would not help. Only a grant that stands asks what the caller can actually fix — the subject, the ceiling, the conditions. ── MORE THAN ONE GRANT ───────────────────────────────────────────────────────────────────────── {@see self::judge()} answers for one grant. A house may hold several that name the same call, and how their answers combine is part of the judgment too: {@see self::among()}. ── THE ONE COMPARATOR ────────────────────────────────────────────────────────────────────────── The ceiling is asked with {@see EffectProfile::isNoWiderThan()} and with nothing else. A second ordering here would be the duplicate judge: the day the two disagree, whichever one a reader happens to consult decides authority.
StandingJudge::judge()
public static function judge(Milpa\Command\Standing\StandingGrant $grant, Milpa\Command\Standing\GrantStanding $standing, Milpa\Command\Standing\StandingCall $call): Milpa\Command\Standing\StandingVerdictThe seven checks for ONE grant, in order; the first that fails is the verdict. IT DOES NOT ANSWER A STOP BESIDE THE CALL. This says whether THIS grant names the call as it is spelled, and what follows when it does. A stopped grant that only MAY be naming the call — the argument it fixes left out, or empty, or in another kind — is «not named» here, nobody's call. The refusal for that, `stopped_beside`, is {@see self::among()}'s: the one criterion that door adds, and this one does not ask. SO A HOST ASKS among() ALSO WHEN IT HOLDS ONE GRANT — and hands it every grant that lends to the seat and covers the operation, not only those that name the call. A host that asks this door alone, and lets «not named» go on to what the seat holds on its own, has let the seat walk around a stop by leaving one argument out. One that must ask here asks {@see self::mayBeNaming()} of the same grant too.
Parameters
| Name | Type | Description |
|---|---|---|
| $grant | Milpa\Command\Standing\StandingGrant | |
| $standing | Milpa\Command\Standing\GrantStanding | |
| $call | Milpa\Command\Standing\StandingCall |
StandingJudge::among()
public static function among(array $grants, Milpa\Command\Standing\StandingCall $call, ?string $recordFault): ?arrayONE CALL UNDER EVERY GRANT A HOST HOLDS: which answer stands — or `null` when none of them names the call. Each grant is judged by {@see self::judge()}, alone, and this says how their answers combine. IT ADDS ONE CRITERION of its own, which `judge()` does not ask: the stop BESIDE the call (the third point below; decided by Rod, 2026-10-12). So this is the door a host asks, ALSO WITH ONE GRANT: · A grant that names the call and is SUSPENDED refuses it, whatever another grant would lend. Shrinking wins (greenhouse decisions/0613 §4): a suspension that a second grant walks around is not a suspension. What takes a grant out of the way is a person's act that names it — lifting that suspension, or giving a grant that supersedes it — and a host then no longer reports it as suspended. Revoked and superseded grants WHOSE RECORD READS lend nothing and stop nobody; a grant past its own date stops nobody UNLESS IT IS STILL SUSPENDED: where a grant stands is what the house's record says, and a date does not lift a stop. · A grant that names the call and WHOSE RECORD DOES NOT READ WHOLE ({@see GrantStanding::$recordFault}) refuses it too, whatever another grant would lend: the line that cannot be read may be the one that stopped it, and a stop that cannot be read is not «no stop» — whatever state the grant is in, a dead one too. A suspension that reads speaks before it. · UNDER DOUBT, A STOP STOPS (decided by Rod, 2026-10-12): a stopped grant that only MAY be naming the call ({@see self::mayBeNaming()}) refuses it as well, `stopped_beside`, whether or not another grant would lend it. A stop that names the call speaks before it. It is filed under the check of its kind, as the judge files a stop that names the call: a record that does not read under the signature, a suspension that reads under «in force». · Otherwise one grant that passes is enough. · Otherwise the refusal that got furthest through the seven checks speaks — it is the one the caller is closest to — and, level with another, the later grant's. AND THE RECORD AS A WHOLE HAS TO BE SPOKEN FOR (`$recordFault`). Not everything a host can no longer read is the record of ONE grant it can hand in. A document it kept and can no longer read is no {@see StandingGrant} at all ({@see StandingGrant::fromJson()}), so it cannot be in the list — and it may be the grant that names this call, stopped. So may a line it cannot attribute to one grant. A host says here whether everything it keeps of standing grants reads: `null` when it does, the reason when it does not — and there is no default, because skipping what cannot be read is the easy thing to do. When it does not read whole, NOTHING IS LENT TO ANY SEAT, whatever grants were handed in and whether or not one of them names the call: the answer carries no grant, and it is never `null`. A host that would rather refuse before it asks may; one that asks says it.
Parameters
| Name | Type | Description |
|---|---|---|
| $grants | list<array{grant: StandingGrant, standing: GrantStanding}> | every grant the host holds that lends to the seat and covers the operation — NOT only those that name the call: a stopped one that may be naming it is heard here and nowhere else —, in the order they were given |
| $call | Milpa\Command\Standing\StandingCall | |
| $recordFault | (string | null) | why the host's record of standing grants does not read whole, or `null`: every line and every document it keeps reads |
StandingJudge::mayBeNaming()
public static function mayBeNaming(Milpa\Command\Standing\StandingGrant $grant, Milpa\Command\Standing\StandingCall $call): boolDECIDED BY ROD, 2026-10-12 (greenhouse decisions/0615, D10): WHETHER A GRANT MAY BE THE ONE THAT NAMES THIS CALL, said another way — it lends to the seat, it covers the operation, and the call does not say, beyond doubt, another value for anything that entry fixes. TWO QUESTIONS, AND THEY FAIL IN OPPOSITE DIRECTIONS. Lending asks {@see StandingGrant::covering()}: the exact spelling, and nothing is lent on less. A STOP and a CONDITION ask this one: could this be the act the grant is about? There, exact is the open side — a seat that leaves out the argument a grant fixes, or sends it empty, or as text where a number is fixed, is «not named», and what stopped or measured that act is walked around. Nothing is ever LENT on this answer. WHAT A HOST OWES IT. {@see self::among()} asks it of every STOPPED grant and answers `stopped_beside`. It does not ask it of a grant IN FORCE: where no grant names the call exactly the answer is `null`, «nobody's call». A host that then lets a seat act on what the seat holds on its own lets it leave the CONDITIONS of a grant in force behind by leaving out the argument that grant fixes. Such a host asks this of every grant it holds for that seat before the seat's own word decides. What it does with a yes is the host's rule. AND WHAT IT DOES NOT REACH, said so that nobody counts on it: an operation's OWN reading of a value. A call that says `Stable` where a grant fixes `stable` says another value here; if the operation lower-cases what it is given, it is the stopped act. A host owes the judge the arguments as the operation READS them ({@see StandingCall}). IT WAS DECIDED WITH THAT LIMIT SAID: no rule that compares values closes it — a list in one text, a pattern, a flag given as a word, an argument the act does not turn on. Only a stop over the WHOLE operation would, and that was not taken: it also stops every call that is certainly another act.
Parameters
| Name | Type | Description |
|---|---|---|
| $grant | Milpa\Command\Standing\StandingGrant | |
| $call | Milpa\Command\Standing\StandingCall |