Split out of #4717 at dispatch, per the maintainer's 2026-08-07 migration ruling. Filed by the domain:metadata seat that landed the backend half; unassigned, and deliberately carrying no domain:* label — routing is the triage seat's call (this lands in docs, not in packages/metadata*).
The fact
#4463 P1 added a fourth enforcement surface — the runtime publish gate, which runs on saveMetaItem and on the draft-to-active promotion — but the "the gate" table in the docs still documents only the three CLI commands.
Direction matters, and it is the safe direction
This is not a declared ≠ enforced defect. The runtime does more checking than the docs promise, which is under-promise / over-deliver — so it is not urgent and there is no user being lied to about a guarantee they do not have.
It is still worth fixing, for one specific reason: a reader of that table — human or AI — currently concludes that a Studio save does not pass a gate. That is false, and it is exactly the kind of false mental model that leads someone to add a redundant check, or to skip a real one because they think the surface is unguarded.
Now more true than when #4717 was filed
The gate no longer only refuses on this surface — since 89d7b35a7 (#4717 / PR #7435) it also returns advisory findings on the save response. So the runtime publish surface now has both halves of a gate's behaviour (refuse the gating half, report the advisory half), which makes its absence from the table more conspicuous, not less.
Scope
Add the fourth column (runtime publish surface) to the "the gate" table, and describe what it enforces. Small and self-contained.
Related
#4463 (P1), PR #4715, #4717 (parent, now closed — its metadata half landed as 89d7b35a7), #7294 (the publish door's missing spec declaration).
Split out of #4717 at dispatch, per the maintainer's 2026-08-07 migration ruling. Filed by the
domain:metadataseat that landed the backend half; unassigned, and deliberately carrying nodomain:*label — routing is the triage seat's call (this lands in docs, not inpackages/metadata*).The fact
#4463 P1 added a fourth enforcement surface — the runtime publish gate, which runs on
saveMetaItemand on the draft-to-active promotion — but the "the gate" table in the docs still documents only the three CLI commands.Direction matters, and it is the safe direction
This is not a
declared ≠ enforceddefect. The runtime does more checking than the docs promise, which is under-promise / over-deliver — so it is not urgent and there is no user being lied to about a guarantee they do not have.It is still worth fixing, for one specific reason: a reader of that table — human or AI — currently concludes that a Studio save does not pass a gate. That is false, and it is exactly the kind of false mental model that leads someone to add a redundant check, or to skip a real one because they think the surface is unguarded.
Now more true than when #4717 was filed
The gate no longer only refuses on this surface — since
89d7b35a7(#4717 / PR #7435) it also returns advisory findings on the save response. So the runtime publish surface now has both halves of a gate's behaviour (refuse the gating half, report the advisory half), which makes its absence from the table more conspicuous, not less.Scope
Add the fourth column (runtime publish surface) to the "the gate" table, and describe what it enforces. Small and self-contained.
Related
#4463 (P1), PR #4715, #4717 (parent, now closed — its metadata half landed as
89d7b35a7), #7294 (the publish door's missing spec declaration).