diff --git a/packages/spec/liveness/app.json b/packages/spec/liveness/app.json index 94e7a8f695..a1f2b81dc7 100644 --- a/packages/spec/liveness/app.json +++ b/packages/spec/liveness/app.json @@ -182,7 +182,7 @@ "description": { "status": "dead", "verifiedAt": "2026-08-01", - "note": "display annotation no surface renders. Benign — docs-shaped, kept, not warned (hook.label precedent)." + "note": "display annotation no surface renders. Benign — docs-shaped, kept, not warned (hook.label precedent). VERDICT RE-TESTED AND UPHELD 2026-08-10 (#7427) under the previews ruling (#7131; README, 'Designer previews count as consumers'): 'no surface renders' is exactly the claim that ruling put back on the table for display keys, so it was measured instead of trusted. At objectui @e9ab52f9 AppPreview IS registered (previews/index.ts:40) and reachable (ResourceEditPage.tsx:949), and it contains ZERO occurrences of `areas` — it reads the app label at AppPreview.tsx:193 and walks `navigation` items, never the area collection. The area-level description reaches no human there." }, "navigation": { "status": "live", diff --git a/packages/spec/liveness/datasource.json b/packages/spec/liveness/datasource.json index 2520945dfd..d646fed3fa 100644 --- a/packages/spec/liveness/datasource.json +++ b/packages/spec/liveness/datasource.json @@ -1,6 +1,6 @@ { "type": "datasource", - "_note": "DatasourceSchema. Consumers: @objectstack/service-datasource (DatasourceConnectionService.toSpec → DatasourceConnectionSpec → createDefaultDatasourceDriverFactory), @objectstack/objectql (engine.ts federation write gate), @objectstack/runtime (external-validation-plugin). Seeded 2026-08-01 (#4487) after #4465/#4481 found six inert keys BY HAND on a type no gate governed. Method: the authoritative boundary is what crosses into `ConnectableDatasource` (datasource-connection-service.ts:45-74) and `DatasourceConnectionSpec` (contracts/datasource-driver-factory.ts:25-59) — a block on neither reaches no driver. objectui's DatasourcePreview renders `pool`/`ssl`/`retryPolicy`/`healthCheck` as SideBlocks and is NOT counted as evidence for any entry (see README, 'An authoring/preview renderer is NOT a runtime consumer' — the #4481 precedent was exactly this). Framework provenance/lock fields auto-live. RETIREMENT 2026-08-02 (#4583): the whole `capabilities` block (11 flags, every one dead and authorWarn'd) was REMOVED from the schema rather than bridged — pushdown is decided by the runtime driver's own `supports.*`, a different mechanism, so there was nothing to connect it to. Its rows are deleted rather than flipped, per the strict-removal route (the keys left the walked shape, so a kept row would read as an ORPHAN). `readOnly` is called out separately in the tombstone: deleting it does NOT hand the author a working alternative, because `external.allowWrites` only gates FEDERATED datasources — a managed datasource has no read-only gate at all, which is #4584 rather than something this removal invented. BATCHES B/C/D CLOSED 2026-08-02 (#4583): `retryPolicy` (4) and `healthCheck` (3) were removed as whole blocks and `external.label` / `external.requirePermission` as individual keys — all nine dead, all authorWarn'd, none bridgeable because each already had a DIFFERENT live mechanism: connection failure is the boot policy (degraded boot / bootCritical), liveness is the driver handle's on-demand ping()/checkHealth(), the federation label is the top-level `label`, and federated access is governed by ordinary permission sets + RLS. Rows deleted rather than flipped (strict-removal route). The retryPolicy rejection deliberately does NOT offer a rename: hook/job retryPolicy ARE enforced but spell the delay `backoffMs`, and that very inconsistency is the evidence nothing read the datasource one. datasource now carries ZERO dead properties.", + "_note": "DatasourceSchema. Consumers: @objectstack/service-datasource (DatasourceConnectionService.toSpec → DatasourceConnectionSpec → createDefaultDatasourceDriverFactory), @objectstack/objectql (engine.ts federation write gate), @objectstack/runtime (external-validation-plugin). Seeded 2026-08-01 (#4487) after #4465/#4481 found six inert keys BY HAND on a type no gate governed. Method: the authoritative boundary is what crosses into `ConnectableDatasource` (datasource-connection-service.ts:45-74) and `DatasourceConnectionSpec` (contracts/datasource-driver-factory.ts:25-59) — a block on neither reaches no driver. PREVIEW CLAUSE RE-MEASURED 2026-08-10 (#7427) at objectui @e9ab52f9, replacing the 2026-08-01 sentence 'objectui's DatasourcePreview renders pool/ssl/retryPolicy/healthCheck as SideBlocks and is NOT counted as evidence for any entry'. That sentence was stale on BOTH halves, independently. (a) ITS GROUND MOVED. The maintainer ruling of 2026-08-10 (#7131) makes a designer preview that renders a key to a human a runtime consumer for DISPLAY keys — see README, 'Designer previews count as consumers' — so a blanket 'not counted for ANY entry' is no longer the rule here. The split is by what the property CLAIMS, not by what the surface is: `label` and `description` are display and now cite that preview as evidence in their own rows below; `pool` and `ssl` are BEHAVIOURAL connection material, so a SideBlock echoing them settles nothing and their verdicts still rest on the ConnectableDatasource boundary above — the #4481 precedent is untouched, which is the whole point of the two-section division. (b) ITS FACTS MOVED, in the opposite direction to the one the #7427 card expected. The preview still reads and renders all four SideBlocks (DatasourcePreview.tsx:105-108 read, :211-218 render) AND a capabilities chip strip (:116 read, :222 render) — nothing was deleted objectui-side. What #4583 removed was the SCHEMA half: `retryPolicy`, `healthCheck` and the whole `capabilities` block are gone from DatasourceSchema, which is `.strict()` and now REJECTS all three. So three of those five renders acknowledge keys no draft can carry — the objectui#3275 shape the preview's own header warns about, filed as objectui#4131 (a ledger row cannot fix a renderer). Framework provenance/lock fields auto-live. RETIREMENT 2026-08-02 (#4583): the whole `capabilities` block (11 flags, every one dead and authorWarn'd) was REMOVED from the schema rather than bridged — pushdown is decided by the runtime driver's own `supports.*`, a different mechanism, so there was nothing to connect it to. Its rows are deleted rather than flipped, per the strict-removal route (the keys left the walked shape, so a kept row would read as an ORPHAN). `readOnly` is called out separately in the tombstone: deleting it does NOT hand the author a working alternative, because `external.allowWrites` only gates FEDERATED datasources — a managed datasource has no read-only gate at all, which is #4584 rather than something this removal invented. BATCHES B/C/D CLOSED 2026-08-02 (#4583): `retryPolicy` (4) and `healthCheck` (3) were removed as whole blocks and `external.label` / `external.requirePermission` as individual keys — all nine dead, all authorWarn'd, none bridgeable because each already had a DIFFERENT live mechanism: connection failure is the boot policy (degraded boot / bootCritical), liveness is the driver handle's on-demand ping()/checkHealth(), the federation label is the top-level `label`, and federated access is governed by ordinary permission sets + RLS. Rows deleted rather than flipped (strict-removal route). The retryPolicy rejection deliberately does NOT offer a rename: hook/job retryPolicy ARE enforced but spell the delay `backoffMs`, and that very inconsistency is the evidence nothing read the datasource one. datasource now carries ZERO dead properties.", "props": { "name": { "status": "live", @@ -9,7 +9,11 @@ }, "label": { "status": "live", - "note": "display metadata (Setup → Datasources list). No runtime consumer by design — ADR-0033 docs-shaped, deliberately kept, not authorWarn'd." + "verifiedAt": "2026-08-10", + "evidenceScope": "cross-repo", + "evidence": "objectui @e9ab52f9: packages/app-shell/src/views/metadata-admin/previews/DatasourcePreview.tsx:96 takes `label` off the datasource draft with the datasource's own `name` as fallback, and packages/app-shell/src/views/metadata-admin/previews/DatasourcePreview.tsx:146 renders it as the preview card's title", + "producer": "objectui @e9ab52f9: packages/app-shell/src/views/metadata-admin/previews/index.ts:44 registers DatasourcePreview against the `datasource` metadata type, and packages/app-shell/src/views/metadata-admin/ResourceEditPage.tsx:949 resolves that registration and hands the component the draft being edited — the read point is reachable, not merely present", + "note": "display metadata (Setup → Datasources list). ADR-0033 docs-shaped, deliberately kept, not authorWarn'd. PROSE RECONCILED 2026-08-10 (#7427): the old clause 'No runtime consumer by design' is superseded as a whole-system claim — a designer preview rendering a key to a human IS a runtime consumer (maintainer ruling 2026-08-10, #7131; README, 'Designer previews count as consumers'), and the metadata-admin datasource preview has been showing this value as the card title the whole time. What the old clause got right, and what is preserved: NO CONNECTION-PATH CONSUMER reads it — nothing in `ConnectableDatasource` / `DatasourceConnectionSpec` / the driver factory takes `label`, and `live` here does not mean a driver acquired a use for it. UNCHANGED by the reconciliation: still ADR-0033 docs-shaped, still deliberately KEPT, still not authorWarn'd. Status did not move (this row was already `live`); what it gained is a falsifiable pointer, which is the thing a `live` verdict is supposed to be. Reachability checked rather than assumed: `datasource` IS a registered metadata kind (packages/spec/src/kernel/metadata-type-schemas.ts:119), so the metadata-admin route that resolves this preview is a live authoring path — contrast `validation.label`, whose preview renders the same way into a kind ADR-0088 retired." }, "driver": { "status": "live", @@ -74,7 +78,11 @@ }, "description": { "status": "live", - "note": "internal documentation. No runtime consumer by design — ADR-0033 docs-shaped, deliberately kept, not authorWarn'd." + "verifiedAt": "2026-08-10", + "evidenceScope": "cross-repo", + "evidence": "objectui @e9ab52f9: packages/app-shell/src/views/metadata-admin/previews/DatasourcePreview.tsx:97 takes `description` off the datasource draft, and packages/app-shell/src/views/metadata-admin/previews/DatasourcePreview.tsx:150 renders it beneath the title whenever it is non-empty", + "producer": "objectui @e9ab52f9: packages/app-shell/src/views/metadata-admin/previews/index.ts:44 registers DatasourcePreview against the `datasource` metadata type, and packages/app-shell/src/views/metadata-admin/ResourceEditPage.tsx:949 resolves that registration and hands the component the draft being edited", + "note": "internal documentation. ADR-0033 docs-shaped, deliberately kept, not authorWarn'd — and displayed under the title in the same preview card as `label`. Prose reconciled with `label` on 2026-08-10 (#7427), same ruling, same preserved caveat: no connection-path consumer reads it, and `live` does not mean one acquired a use for it." }, "active": { "status": "live", diff --git a/packages/spec/liveness/flow.json b/packages/spec/liveness/flow.json index 5a2bcdcf1b..47031052d8 100644 --- a/packages/spec/liveness/flow.json +++ b/packages/spec/liveness/flow.json @@ -21,7 +21,7 @@ "description": { "status": "dead", "evidence": "no reader either layer", - "note": "KEPT deliberately (2026-07-30 sweep): docs-shaped, not capability-shaped — an annotation field documents intent for the next reader (per ADR-0033, often a model) even without a runtime consumer. Exempt from enforce-or-remove; do not re-litigate." + "note": "KEPT deliberately (2026-07-30 sweep): docs-shaped, not capability-shaped — an annotation field documents intent for the next reader (per ADR-0033, often a model) even without a runtime consumer. Exempt from enforce-or-remove; do not re-litigate. PREVIEW LOOKUP RECORDED 2026-08-10 (#7427): 'no reader either layer' is a cross-repo absence claim, so the previews ruling (#7131; README, 'Designer previews count as consumers') was applied to it mechanically. At objectui @e9ab52f9 FlowPreview IS registered (previews/index.ts:58) and reachable (ResourceEditPage.tsx:949), and it does NOT read the flow description — the only `description` token in the file is a TypeScript interface member at FlowPreview.tsx:64, not a draft read; the preview keys off `d.name`, the node graph and the edges. The claim survives the look; the verdict is unchanged and this note re-litigates nothing." }, "version": { "status": "live", diff --git a/packages/spec/liveness/hook.json b/packages/spec/liveness/hook.json index f04c71e621..54316e59d2 100644 --- a/packages/spec/liveness/hook.json +++ b/packages/spec/liveness/hook.json @@ -1,6 +1,6 @@ { "type": "hook", - "_note": "HookSchema. Seeded from docs/audits/2026-06-hookschema-property-liveness.md — a model-healthy schema (near-total liveness). Consumers: objectql hook-binder/engine + runtime sandbox.", + "_note": "HookSchema. Seeded from docs/audits/2026-06-hookschema-property-liveness.md — a model-healthy schema (near-total liveness). Consumers: objectql hook-binder/engine + runtime sandbox. PREVIEW LOOKUP RECORDED 2026-08-10 (#7427): the two `dead` rows here (`label`, `description`) are the docs-shaped precedent the rest of this ledger cites, so the maintainer's 2026-08-10 previews ruling (#7131 — see README, 'Designer previews count as consumers') was applied to them mechanically, and the answer is an ABSENCE. There is NO registered metadata-admin preview for `hook` at objectui @e9ab52f9: packages/app-shell/src/views/metadata-admin/previews/index.ts registers 22 types and `hook` is not among them. Recorded rather than skipped, because 'the type has no registered preview' is the sentence the README asks for and the one `translation.label`'s superseded note was missing. Both verdicts stand unchanged; the ruling gives them nothing to re-litigate.", "props": { "name": { "status": "live", diff --git a/packages/spec/liveness/permission.json b/packages/spec/liveness/permission.json index edc9232227..c7b40c47b8 100644 --- a/packages/spec/liveness/permission.json +++ b/packages/spec/liveness/permission.json @@ -155,13 +155,15 @@ }, "label": { "status": "dead", - "verifiedAt": "2026-07-30", - "note": "CORRECTED 2026-07-30 (was live with no evidence): no consumer in either repo — objectui's PermissionAdvancedFacets edits policies and PermissionPreview counts them, and an authoring surface echoing input is not a runtime consumer (see README §preview-renderer). Benign display metadata — deliberately NOT authorWarn'd." + "evidenceScope": "cross-repo", + "verifiedAt": "2026-08-10", + "note": "CORRECTED 2026-07-30 (was live with no evidence): no consumer in either repo. VERDICT RE-TESTED AND UPHELD 2026-08-10 (#7427) against the maintainer ruling that a designer preview rendering a key to a human is a runtime consumer (2026-08-10, #7131; README, 'Designer previews count as consumers'). This row is the closest structural twin of the four rows that ruling re-graded — a display `label` marked dead — so it was measured rather than assumed, and it comes out the other way. THE MEASUREMENT, at objectui @e9ab52f9: PermissionPreview IS registered for `permission` (previews/index.ts:71) and IS reachable (ResourceEditPage.tsx:949), so the preview lookup runs; but PermissionPreview.tsx:111 reads `rowLevelSecurity` only as an ARRAY and PermissionPreview.tsx:164 renders `${rls.length} RLS rules` — a COUNT. It never indexes a policy, never reads `.label`, and no policy field reaches a human through it. The 2026-07-30 wording 'PermissionPreview counts them' was exact, and counting is not rendering: the ruling turns on the VALUE being shown to a person, which is precisely what a length does not do. The other measured surface is PermissionAdvancedFacets.tsx:192-193 (reads `draft.rowLevelSecurity`, strips retired keys) and :264 (writes it back) — an authoring FORM, the 'authoring surface echoing input' the 2026-07 correction rejected, and the new ruling names previews, not edit forms. So both halves of the original closure survive it. Benign display metadata — deliberately NOT authorWarn'd. To re-open this row, the thing to look for is a preview that renders the policy's label text, not another surface that counts policies." }, "description": { "status": "dead", - "verifiedAt": "2026-07-30", - "note": "CORRECTED 2026-07-30 (was live with no evidence): same closure as label. Benign — not authorWarn'd." + "evidenceScope": "cross-repo", + "verifiedAt": "2026-08-10", + "note": "CORRECTED 2026-07-30 (was live with no evidence): same closure as label. RE-TESTED AND UPHELD 2026-08-10 (#7427) with `label`, same measurement at objectui @e9ab52f9 — the permission preview counts RLS policies (PermissionPreview.tsx:164) and renders no field of any individual policy. Benign — not authorWarn'd." }, "object": { "status": "live", @@ -206,8 +208,9 @@ }, "tags": { "status": "dead", - "verifiedAt": "2026-07-30", - "note": "CORRECTED 2026-07-30 (was live with no evidence): no reader in either repo — governance/compliance reporting never consumes policy tags. Benign organizational metadata — not authorWarn'd." + "evidenceScope": "cross-repo", + "verifiedAt": "2026-08-10", + "note": "CORRECTED 2026-07-30 (was live with no evidence): no reader in either repo — governance/compliance reporting never consumes policy tags. RE-TESTED AND UPHELD 2026-08-10 (#7427) under the previews ruling (#7131), same measurement as this block's `label`: at objectui @e9ab52f9 the permission preview reads `rowLevelSecurity` as an array and renders its LENGTH (PermissionPreview.tsx:111, :164), never a policy's fields, so no tag value reaches a human there. Benign organizational metadata — not authorWarn'd." } } } diff --git a/packages/spec/liveness/validation.json b/packages/spec/liveness/validation.json index f282bcc1f1..82a6ea278b 100644 --- a/packages/spec/liveness/validation.json +++ b/packages/spec/liveness/validation.json @@ -10,13 +10,15 @@ }, "label": { "status": "dead", - "verifiedAt": "2026-08-01", - "note": "governance/editor metadata, declared deliberately (the schema header says so): surfaced in rule listings, never evaluated on the write path. Docs-shaped, KEPT, not authorWarn'd — the hook.label precedent." + "evidenceScope": "cross-repo", + "verifiedAt": "2026-08-10", + "note": "governance/editor metadata, declared deliberately (the schema header says so): surfaced in rule listings, never evaluated on the write path. Docs-shaped, KEPT, not authorWarn'd — the hook.label precedent. VERDICT RE-TESTED AND UPHELD 2026-08-10 (#7427) under the maintainer ruling that a designer preview rendering a key to a human is a runtime consumer (2026-08-10, #7131; README, 'Designer previews count as consumers'). This is the sweep's sharpest case and the reason the README's REACHABILITY clause is not decoration: the render is real and the read point is unreachable on the governed path. THE MEASUREMENT, at objectui @e9ab52f9: ValidationPreview exists, is registered for `validation` (previews/index.ts:45), reads this key at ValidationPreview.tsx:101 with the rule `name` as fallback and renders it as the preview card's title at ValidationPreview.tsx:131. Under the ruling that would settle a display key — except that the type that resolves the preview no longer exists here. The STANDALONE `validation` kind was retired 2026-08-02 (#4509, ADR-0088), as this file's own `_note` records at length; it is absent from both METADATA_TYPE_SCHEMAS and UNREGISTERED_KIND_SCHEMAS in packages/spec/src/kernel/metadata-type-schemas.ts. Rules live where they are evaluated, embedded as `object.validations`, and objectui routes an embedded item to EmbeddedItemEditor (anchors.ts:79 `editAs: 'validation'`, MetadataDetailDrawer.tsx:129), which renders a SchemaForm — an authoring form, never ResourceEditPage's preview tab. So on the ONE path the framework evaluates, this preview is never handed a draft. objectui does still register a standalone `validation` resource with a create affordance (anchors.ts:347-366) whose route WOULD mount the preview, but granting `live` on the strength of a door ADR-0088 closed is the 'shipped false signpost' this ledger exists to catch — the same reasoning that deleted the readReplicas pill. Filed as objectui#4132; if that lands as 'wire ValidationPreview into the embedded editor', this row re-grades to live and should." }, "description": { "status": "dead", - "verifiedAt": "2026-08-01", - "note": "same as `label` — governance annotation, deliberately kept." + "evidenceScope": "cross-repo", + "verifiedAt": "2026-08-10", + "note": "same as `label` — governance annotation, deliberately kept. Re-tested and upheld with `label` 2026-08-10 (#7427): at objectui @e9ab52f9 ValidationPreview.tsx:102 reads it and :136 renders it beneath the title, but the read point is unreachable on the governed (embedded) path — see `label` for the full closure and objectui#4132." }, "active": { "status": "live", @@ -38,8 +40,9 @@ }, "tags": { "status": "dead", - "verifiedAt": "2026-08-01", - "note": "categorization for reporting/management — governance metadata like label/description, deliberately kept." + "evidenceScope": "cross-repo", + "verifiedAt": "2026-08-10", + "note": "categorization for reporting/management — governance metadata like label/description, deliberately kept. Re-tested and upheld with `label` 2026-08-10 (#7427): at objectui @e9ab52f9 ValidationPreview.tsx:110 reads the array and :167-175 renders one chip per tag, so unlike `permission.rowLevelSecurity.tags` (which the permission preview only COUNTS) the values do reach a rendering — but through the same unreachable read point as `label`, so the verdict does not move. Note also that the declared effect here is annotation, not filtering: the describe is 'Categorization tags' and the schema header calls all three keys 'governance / editor metadata … they carry authoring intent, not enforcement'. That matters, because a tags key whose describe PROMISES filtering is behavioural and a chip render would not settle it either way — `qa.scenarios.tags` is that other case, and it is not this one." }, "severity": { "status": "live", diff --git a/packages/spec/liveness/view.json b/packages/spec/liveness/view.json index aef401a19e..9fd64532e9 100644 --- a/packages/spec/liveness/view.json +++ b/packages/spec/liveness/view.json @@ -4,13 +4,15 @@ "props": { "name": { "status": "dead", - "verifiedAt": "2026-08-01", - "note": "Container item identity, declared in #4001 batch 6e and dead as a BODY key — the honest reading of a copy nobody reads. The live one is the sys_metadata row column: the door supplies it (saveMetaItem({type:'view', name})) and readers that resolve a view by name use the row, or a ViewItem's own name (rest-server.ts:5422 reads view.name on a ViewItem, not on a container). Declared anyway, and deliberately not authorWarn'd, because the platform's own writers send it — artifact-shipped containers (service-ai/ai_traces) and the metadata-validation sweep both do, so tombstoning it rejected shapes we write ourselves. Exactly the correction translation/name needed in batch 5." + "evidenceScope": "cross-repo", + "verifiedAt": "2026-08-10", + "note": "Container item identity, declared in #4001 batch 6e and dead as a BODY key — the honest reading of a copy nobody reads. The live one is the sys_metadata row column: the door supplies it (saveMetaItem({type:'view', name})) and readers that resolve a view by name use the row, or a ViewItem's own name (rest-server.ts:5422 reads view.name on a ViewItem, not on a container). Declared anyway, and deliberately not authorWarn'd, because the platform's own writers send it — artifact-shipped containers (service-ai/ai_traces) and the metadata-validation sweep both do, so tombstoning it rejected shapes we write ourselves. Exactly the correction translation/name needed in batch 5. VERDICT RE-TESTED AND UPHELD 2026-08-10 (#7427) under the previews ruling (#7131): `translation.name` re-graded on that ruling precisely because its preview read the BODY copy as a display fallback, so this twin was measured for the same shape and does not have it. At objectui @e9ab52f9 ViewPreview reads the item name from its `name` PROP (ViewPreview.tsx:110, `String(name) || 'default'`) — the saved identity the registry passes in, i.e. the sys_metadata row column this note already calls the live one — and never touches `draft.name`. The body copy stays unread, which is what `dead` claims here." }, "label": { "status": "dead", - "verifiedAt": "2026-08-01", - "note": "Display metadata on the container with no runtime consumer. Not authorWarn'd: the README's rule is that pure display annotation (description, tags, icon) must not warn, and the job.label / translation.label precedent is this exact case — docs-shaped, deliberately kept, ADR-0033 exempt from enforce-or-remove." + "evidenceScope": "cross-repo", + "verifiedAt": "2026-08-10", + "note": "Display metadata on the container with no runtime consumer. VERDICT RE-TESTED AND UPHELD 2026-08-10 (#7427) under the maintainer ruling that a designer preview rendering a key to a human is a runtime consumer (2026-08-10, #7131; README, 'Designer previews count as consumers'). It is the twin of `translation.label`, which that ruling DID re-grade, so it was measured, and it splits on REACHABILITY — the half of the README rule that is easy to skip. THE MEASUREMENT, at objectui @e9ab52f9: ViewPreview is registered for `view` (previews/index.ts:37) and resolved by ResourceEditPage.tsx:949, and it genuinely READS this key — ViewPreview.tsx:115 injects `(body).label ?? (draft).label ?? name` as the label of the single named listView it hands to the `object-view` schema. The read is real; the RENDER is not reachable. That injected label has exactly two render paths in plugin-view's ObjectView, and this preview takes neither: ObjectView.tsx:1119 renders `{view.label || key}` as a named-view tab, but ObjectView.tsx:1112 returns null when the map holds one entry or fewer, and ViewPreview always injects exactly one; ObjectView.tsx:993 passes the label into the `renderListView` list-view schema (ListView appends it to export filenames), but `renderListView` is a prop and plugin-view/src/index.tsx:58-64 registers the bare `ObjectViewRenderer` for `object-view` — it renders ObjectView with schema and dataSource only, so the prop is undefined on this path. A read point whose render cannot fire is what PR #7425 meant by 'a preview no registry hands a draft to is a read point that never runs', one level in: here the registry does hand it a draft, and the draft's label still reaches no human. Not authorWarn'd: the README's rule is that pure display annotation (description, tags, icon) must not warn, and the job.label / translation.label precedent is this exact case — docs-shaped, deliberately kept, ADR-0033 exempt from enforce-or-remove. To re-open: a second listView entry, or `renderListView` wired on this path, would make it render — either change flips this row." }, "object": { "status": "live",