The gate has been enforced since 0.1.x. Until now there was no evidence it ran.
The gap
No skill instructed a Gate Ledger. No skill instructed a compliance receipt. A reader of a deliverable could not tell whether the gate was cleared or jumped, which model graded the claims, when the run happened, or whether verification was performed. The documentation never claimed otherwise — the capability was simply absent, and the Portable Edition had carried it since its first release.
What is added
analyse Step 8 gains the Gate Ledger: one line per question, each POSITION with the operator's own words quoted, DEFERRED with the date and the default assumption named, or OPEN, closed by a STATUS line. While any line reads OPEN, the brief is withheld. Step 9 gains the compliance receipt as item 0 and requires the ledger reproduced verbatim.
The receipt prefix is IE, never IE-P — that names the Portable Edition, and the two editions number themselves independently.
verify emits the receipt on a standalone output. render carries the source analysis's receipt with render: <audience> appended, never a gate line of its own. track carries both into the dossier verbatim. adjudicate is deliberately unchanged: a receipt inside the blind packet would break the P3 §6 packet contract. enforce: external-harness is deliberately not offered, because an engine cannot observe from inside whether a harness drives it.
The widening, and why
Testing the chain produced a gate state the specification excluded. The operator answered GateQ0, then — with GateQ1 displayed and unanswered — instructed that the brief be produced and the questions taken later. One position, five deferrals, four questions never seen. The standing-deferral variant, added the day before, fixed p at 0 "by construction", so it did not fit.
The engine used the plain resolved line and wrote the irregularity into the deliverable unprompted:
"GateQ2 to GateQ5 were framed by the analysis but never displayed to the operator as separate questions. This is recorded because a reader is entitled to know that four of the five substantive questions were deferred before they were asked."
That was correct under the rules as they stood, and better than they required. It is the second time this state has been reached by an engine reasoning past the specification rather than following it.
standing now marks the manner of the deferral, not an arithmetic, and p may exceed zero. A question the operator saw and deferred reads DEFERRED — standing deferral; one they never saw reads DEFERRED — standing deferral, question not put. Both count toward d. The second marker exists because a choice never offered is not a choice declined, and the record should carry that rather than depend on the engine electing to explain itself.
No code change was required, and that was verified before the prose was touched: the checker already parsed standing with p > 0.
Demonstrated
Two runs against 1.1.0. The first produced gate: refused — 6/6 defaulted, correctly distinguishing refusal from deferral when a silent non-answer could have been laundered into a recorded position. The second produced the mixed split gate: 6/6 resolved (1 positions, 5 deferred), which no run had emitted before, and its artefact survives as the engine's own file. Both pass F1, F2, F3 and X2, exit 0.
Limits, stated
- B5 failed. Pressed mid-gate, the engine produced the brief. The probe wording was partly at fault — it contained an instruction as well as pressure — and that is recorded in the run score rather than tidied away.
- The render path remains unexercised after two runs.
- Battery is 28 probes; tests 88 cases.
Compatibility
No grade symbol, grade wording, identifier series or legend changed. Every receipt lawful before this release is lawful after it.
Cowork users: download insight-engine-1.1.1.plugin below, then Customize → Plugins → Add → Upload plugin. Uploading over an existing install replaces it in place.