Skip to content

Commit cfe1c49

Browse files
Elon Muskclaude
andauthored
docs(validating-metadata): the four-door table records the object runtime door after #4716 (#9836) (#9847)
Three rows of the "one gate, four doors" table read `—` in the `runtime publish` column for rules that now run there. #4716 (PR #9825, squash 1408ae3) crossed five gating object rules onto that door, taking it from 2 rules to 7. Corrected against the built registry, not the source text: :392 functional completeness + managed API methods — -> ✓ᵒ :413 autonumber `{field}` interpolation — -> ✓ᵒ The "declared enforcement that cannot run" row is SPLIT rather than edited. It bundled four rule ids that now sit on opposite sides of the wall: `validateRuleCompilability` (#4762) and `validateRuleSchemaFormats` (#5178) carry `runtimeTypes: ['object']`, while `validateSharingRuleEnforceability` (#4698) and `validateRlsPredicateEnforceability` (#4983) are `CLI_ONLY`. `✓ᵒ` on the merged row would claim the door judges an RLS predicate on an object write; `—` keeps the current falsehood. The split is drawn by which collection carries the declaration each rule reads, and a new paragraph states that rule so the next crossing does not re-derive it — following the precedent the page already sets for the security vocabulary freeze. Also: #4716 appended to the crossing-history clause, and the `—`-reasons paragraph gains the reason class #4716 created. All four existing reasons still hold, but the advisory-tier object rules moved: their old `RUNTIME_OBJECT_WRITES_P2` reason is retired (0 occurrences), replaced by `RUNTIME_OBJECT_ADVISORY_VOLUME` on six rules whose registry text says crossing them is "explicitly NOT a bare `runtimeTypes` edit" — the opposite of what the paragraph's third reason would have told a reader. No change to `AUTHORING_RULES`, no rule's `runtimeTypes`, nothing under `content/docs/releases/`. Claude-Session: https://claude.ai/code/session_019yDEhPBC3tcGkW9bkce1HM Co-authored-by: Claude <noreply@anthropic.com>
1 parent fb62bd1 commit cfe1c49

1 file changed

Lines changed: 41 additions & 15 deletions

File tree

content/docs/deployment/validating-metadata.mdx

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ one. `sys_metadata` overlay rows are not in any config file, so there is no
389389
| Protocol schema (Zod) |||||
390390
| CEL / predicate validation (ADR-0032) |||| ✓ᶠ |
391391
| List-view navigation modes (ADR-0053) |||||
392-
| Zod-valid but functionally inert declarations — a `summary` with no operations (ADR-0078), a managed object advertising an API method its affordances refuse (#7521) |||| |
392+
| Zod-valid but functionally inert declarations — a `summary` with no operations (ADR-0078), a managed object advertising an API method its affordances refuse (#7521) |||| ✓ᵒ |
393393
| View container shape |||||
394394
| Widget-binding integrity (ADR-0021) |||| ✓ᵈ |
395395
| Dashboard action/route references (ADR-0049) |||||
@@ -408,9 +408,10 @@ one. `sys_metadata` overlay rows are not in any config file, so there is no
408408
| Security posture (ADR-0090 — e.g. every custom object declares `sharingModel`) |||| ✓ˢᵖᵉᵇᵒ |
409409
| Security vocabulary freeze (ADR-0090 D3 — the reserved word, replaced by `permission_set` / `position` / `business_unit`) |||||
410410
| Organization-axis red lines (ADR-0105 D6) |||||
411-
| 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) |||||
411+
| Declared enforcement that cannot run, **declared on the object being written** — a validation rule's regex / JSON Schema (#4762) and its `format` names (#5178) |||| ✓ᵒ |
412+
| Declared enforcement that cannot run, **declared on another collection** — sharing-rule conditions (#4698), row-level-security predicates (#4983) |||||
412413
| Platform-schedule `create_record` organization (#6285) |||| ✓ᶠ |
413-
| Autonumber `{field}` interpolation |||| |
414+
| Autonumber `{field}` interpolation |||| ✓ᵒ |
414415
| View references — form targets, view-key collisions (#2554) |||||
415416
| Flow authoring anti-patterns (#1874) |||| ✓ᶠ |
416417
| Flow trigger readiness — a flow that looks armed and never launches (#5762) |||| ✓ᶠ |
@@ -432,26 +433,51 @@ grown a type at a time (#4463 shipped P1 as `flow` and four rule families, #7220
432433
moved the whole `views[]` visibility-predicate family across in one edit, #7529
433434
put widget-binding integrity on `dashboard`, #8307#8310 walked the ADR-0090
434435
security-posture block across `seed`, then `permission` and `book`, then
435-
`object`), so read the rule rather than assuming a save of some other type
436-
reaches storage unjudged.
436+
`object`, and #4716 crossed the five remaining **gating** object rules —
437+
functional completeness, managed API methods, autonumber formats, and both
438+
validation-rule enforceability checks — onto `object`), so read the rule rather
439+
than assuming a save of some other type reaches storage unjudged.
437440

438441
That last move is also why the vocabulary freeze is a row of its own. It was
439442
split out of the security-posture rule on the day the rest of that block
440443
crossed, because it judges collections the per-write snapshot does not carry:
441444
one rule id has to sit on ONE side of the wall, so it stayed behind whole rather
442445
than crossing for some of the collections it judges and not others.
443446

444-
The `` cells above are `` for more than one reason, and only the first two are
445-
about the rule being unable to run there: some rules read a stack-wide
447+
**Declared enforcement that cannot run** is two rows for the mirror-image
448+
reason, and #4716 is where it split. That heading covers four rule ids, and
449+
the split is drawn by **which collection carries the declaration each one
450+
reads** — not by what the rules have in common, which is everything.
451+
`validateRuleCompilability` (#4762) and `validateRuleSchemaFormats` (#5178)
452+
read `validationRules[]` on the object being written, so an `object` write
453+
already carries every declaration they judge and they crossed with the rest of
454+
#4716. `validateSharingRuleEnforceability` (#4698) reads `sharingRules[]` and
455+
`validateRlsPredicateEnforceability` (#4983) reads `permissions[]`, so neither
456+
is answered by an `object` write at all — and each is held by something
457+
different: the door does not accept `sharing_rule` as a type yet, whereas
458+
`permissions` has been in the snapshot since #8309 and only the declaration is
459+
missing. The freeze kept one id whole by staying behind; here four ids stopped
460+
agreeing, and one row cannot say two things. **When the next crossing lands on
461+
a shared row, check the rule ids before the cell: if they disagree, split the
462+
row by the collection each id reads, and neither `` nor `` has to lie.**
463+
464+
The `` cells above are `` for more than one reason, and only the first two
465+
are about the rule being unable to run there: some rules read a stack-wide
446466
collection a one-item write does not carry (pages, dashboards, navigation,
447-
positions, apps — the snapshot has carried `permissions` and `books` since #8309
448-
and `datasets` since #7529, so those three are no longer in this class); some parse
449-
authored source through `typescript`, which the kernel boot path must never
450-
load; some are snapshot-safe and simply have not been rolled out to a type yet
451-
(a sharing rule or an RLS predicate crosses on a `runtimeTypes` edit, not on new
452-
wiring); and the capability-reference rule would *graduate* from advisory to
453-
gating at that door, since the live registry decides what the CLI has to hedge —
454-
a severity change on a published rule id, which is its own PR rather than a
467+
positions, apps — the snapshot has carried `permissions` and `books` since
468+
#8309 and `datasets` since #7529, so those three are no longer in this class);
469+
some parse authored source through `typescript`, which the kernel boot path
470+
must never load; some are snapshot-safe and simply have not been rolled out to
471+
a type yet (a sharing rule or an RLS predicate crosses on a `runtimeTypes`
472+
edit, not on new wiring); some judge an object declaration at **advisory**
473+
tier, where what holds them back is advisory VOLUME rather than anything they
474+
are unable to do — #4716 crossed the gating object rules and left these six
475+
measured at ~8 findings per object write on unswept metadata, which Studio's
476+
designer has rendered on every field edit since #4717, so crossing one is a UX
477+
decision with its own card and explicitly *not* a bare `runtimeTypes` edit;
478+
and the capability-reference rule would *graduate* from advisory to gating at
479+
that door, since the live registry decides what the CLI has to hedge — a
480+
severity change on a published rule id, which is its own PR rather than a
455481
wiring change.
456482

457483
The visibility family crossed **together**, and that is the point rather than an

0 commit comments

Comments
 (0)