You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(validating-metadata): the four-door table understates the object runtime door after #4716 — and one row bundles four rule ids across the wall #9836
Split out of the #4716 review (PR #9825) rather than ridden along with it. #9825 is a 697-line code PR; this is a docs-only edit on a page every rule-crossing PR touches, and one of its three rows needs an editorial split rather than a cell edit.
The falsification
content/docs/deployment/validating-metadata.mdx documents "the one gate, four doors": os validate / os build / os lint / the runtime publish door (saveMetaItem, since #4463). Its table's fourth column carries one superscript per metadata type a rule inspects — ✓ᵒ is object — and the page states its own authority rule in as many words:
that rule's own runtimeTypes in AUTHORING_RULES is the authority — the set has grown a type at a time (#4463 shipped P1 as flow and four rule families, #7220 moved the whole views[] visibility-predicate family across in one edit, #7529 put widget-binding integrity on dashboard, #8307 → #8310 walked the ADR-0090 security-posture block across seed, then permission and book, then object), so read the rule rather than assuming a save of some other type reaches storage unjudged.
#4716 crosses five gating rules onto the object runtime door. Measured against origin/main at 278280586, those five land in exactly three rows, all of which read — in the runtime publish column:
Zod-valid but functionally inert declarations — a summary with no operations (ADR-0078), a managed object advertising an API method its affordances refuse (#7521)
Declared enforcement that cannot run — sharing-rule conditions (#4698), row-level-security predicates (#4983), a validation rule's regex / JSON Schema (#4762) and its format names (#5178)
Non-vacuity control for that reading: the page already uses ᵒ in two other rows (✓ᵈᵛᵒᵖᶠ on the ordering-comparands row, ✓ˢᵖᵉᵇᵒ on the security-posture row). So the — in these three is a positive claim about the object door, not an artifact of a page that never tracks object.
The row that is not a cell edit
:411 bundles four rule ids that now sit on opposite sides of the wall:
Writing ✓ᵒ on the merged row would claim the runtime door judges an RLS predicate on an object write, which it does not. Writing — keeps the current falsehood. Under the page's own stated convention the row has to be split so each side reads truthfully.
The page already works through exactly this problem one paragraph down, for the security vocabulary freeze:
That last move is also why the vocabulary freeze is a row of its own. It was split out of the security-posture rule on the day the rest of that block crossed, because it judges collections the per-write snapshot does not carry: one rule id has to sit on ONE side of the wall, so it stayed behind whole rather than crossing for some of the collections it judges and not others.
Follow that precedent — the split here is by rule id, not by collection, but the principle the paragraph states is the governing one. Whichever way the split is drawn, say so in prose so the next crossing does not have to re-derive it.
Also in scope
Append #4716 to the crossing-history clause quoted above, in the same shape as its siblings (what crossed, onto which type).
Re-read the —-reasons paragraph against the new state. Its four enumerated reasons for a — should still each be true of at least one remaining — cell; the sharing-rule / RLS example it uses for "snapshot-safe and simply have not been rolled out to a type yet" survives [P2] 运行时授权门扩到 object 写入 + 全量 runtime-safe 规则快照(#4463 P1 之后) #4716 untouched, but check the others rather than assuming.
Out of scope
content/docs/releases/v17.mdx — release-owned, read-only (AGENTS.md "Documentation Guardrails"). The drift check flagged it too. If it is wrong, that is a separate docs-only PR, never this one.
Derive the table's fourth column from the built registry, not by reading source line numbers or trusting this issue's table — the same discipline #9825 used to re-derive its premises. For each of the three rows, state the rule ids it covers and each id's runtimeTypes as the registry reports them post-#9825, and show the reading is non-vacuous (a rule you expect to be absent from the object door reads absent).
Blocked-by: #4716 — the doc can only be corrected to a state that has actually landed. Do not start until PR #9825 is MERGED, and re-derive the registry on the merged ref: what the object door contains is exactly what this card is describing, so inheriting a pre-merge reading would defeat the purpose.
Split out of the #4716 review (PR #9825) rather than ridden along with it. #9825 is a 697-line code PR; this is a docs-only edit on a page every rule-crossing PR touches, and one of its three rows needs an editorial split rather than a cell edit.
The falsification
content/docs/deployment/validating-metadata.mdxdocuments "the one gate, four doors":os validate/os build/os lint/ the runtime publish door (saveMetaItem, since #4463). Its table's fourth column carries one superscript per metadata type a rule inspects —✓ᵒisobject— and the page states its own authority rule in as many words:#4716 crosses five gating rules onto the
objectruntime door. Measured againstorigin/mainat278280586, those five land in exactly three rows, all of which read—in theruntime publishcolumn::392summarywith no operations (ADR-0078), a managed object advertising an API method its affordances refuse (#7521)validateFunctionalCompleteness,validateManagedApiMethods✓ᵒ:411formatnames (#5178)validateRuleCompilability,validateRuleSchemaFormats:413{field}interpolationlintAutonumberFormats✓ᵒNon-vacuity control for that reading: the page already uses
ᵒin two other rows (✓ᵈᵛᵒᵖᶠon the ordering-comparands row,✓ˢᵖᵉᵇᵒon the security-posture row). So the—in these three is a positive claim about the object door, not an artifact of a page that never tracksobject.The row that is not a cell edit
:411bundles four rule ids that now sit on opposite sides of the wall:validateRuleCompilability(Aformatrule with an invalid regex, and ajson_schemarule ajv cannot compile, still fail OPEN — the same trap #4649 closed, one rule type over #4762) andvalidateRuleSchemaFormats(A MISSPELLEDformatname in ajson_schemavalidation rule still enforces nothing —format: 'emial'is logged-and-dropped, at runtime AND at publish #5178) — cross ontoobjectin [P2] 运行时授权门扩到 object 写入 + 全量 runtime-safe 规则快照(#4463 P1 之后) #4716Writing
✓ᵒon the merged row would claim the runtime door judges an RLS predicate on an object write, which it does not. Writing—keeps the current falsehood. Under the page's own stated convention the row has to be split so each side reads truthfully.The page already works through exactly this problem one paragraph down, for the security vocabulary freeze:
Follow that precedent — the split here is by rule id, not by collection, but the principle the paragraph states is the governing one. Whichever way the split is drawn, say so in prose so the next crossing does not have to re-derive it.
Also in scope
#4716to the crossing-history clause quoted above, in the same shape as its siblings (what crossed, onto which type).—-reasons paragraph against the new state. Its four enumerated reasons for a—should still each be true of at least one remaining—cell; the sharing-rule / RLS example it uses for "snapshot-safe and simply have not been rolled out to a type yet" survives [P2] 运行时授权门扩到 object 写入 + 全量 runtime-safe 规则快照(#4463 P1 之后) #4716 untouched, but check the others rather than assuming.Out of scope
content/docs/releases/v17.mdx— release-owned, read-only (AGENTS.md "Documentation Guardrails"). The drift check flagged it too. If it is wrong, that is a separate docs-only PR, never this one.AUTHORING_RULESitself, or to any rule'sruntimeTypes. This card corrects the description; [P2] 运行时授权门扩到 object 写入 + 全量 runtime-safe 规则快照(#4463 P1 之后) #4716 / PR feat(lint): the five gating object rules cross the runtime publish gate (#4716) #9825 is the change being described. If the doc and the registry disagree after feat(lint): the five gating object rules cross the runtime publish gate (#4716) #9825 lands, the registry wins and the doc moves.Verification the card expects
Derive the table's fourth column from the built registry, not by reading source line numbers or trusting this issue's table — the same discipline #9825 used to re-derive its premises. For each of the three rows, state the rule ids it covers and each id's
runtimeTypesas the registry reports them post-#9825, and show the reading is non-vacuous (a rule you expect to be absent from the object door reads absent).Blocked-by: #4716 — the doc can only be corrected to a state that has actually landed. Do not start until PR #9825 is MERGED, and re-derive the registry on the merged ref: what the object door contains is exactly what this card is describing, so inheriting a pre-merge reading would defeat the purpose.