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(liveness): designer previews count as consumers — re-grade four docs-shaped rows (#7131) (#7425)
The ledger recorded "no runtime consumer" for job.label, job.description,
translation.label and translation.name. objectui's metadata-admin previews
had been rendering all four to a human the whole time.
Per the maintainer ruling of 2026-08-10, a designer preview that renders a
key to a human is a runtime consumer. The four rows re-grade dead -> live
with realm-marked, commit-pinned objectui evidence (@aeb8424b) and a
`producer` naming the registerMetadataPreview call plus the surface that
resolves it — a preview no registry hands a draft to is a read point that
never runs.
Nothing about enforce-or-remove moves: all four remain docs-shaped,
deliberately KEPT under ADR-0033, and still not authorWarn'd.
The README gains the methodology section the ruling asked for, dividing
against the existing "an authoring/preview renderer is NOT a runtime
consumer" section on what the property CLAIMS rather than on what the
surface is. The 2026-07 sweep's ten corrections are not reopened.
Claude-Session: https://claude.ai/code/session_016R9de1FqP7NvwKvqXi92Gh
Co-authored-by: Claude <noreply@anthropic.com>
docs(liveness): designer previews count as consumers — re-grade four docs-shaped rows dead → live and write the principle into the ledger methodology (#7131)
6
+
7
+
The ledger said `job.label`, `job.description`, `translation.label` and
8
+
`translation.name` had **no runtime consumer**. objectui's metadata-admin
9
+
previews had been rendering all four to a human the whole time:
10
+
`JobPreview.tsx` takes `label`/`description` off the job draft and renders them
11
+
as the preview card's title and subtitle, and `TranslationPreview.tsx` takes
12
+
`label` — falling back to the body `name` — and renders it as the item's title.
13
+
14
+
Per the maintainer ruling of 2026-08-10, a designer preview that renders a key
15
+
to a human **is** a runtime consumer, so the four rows re-grade to `live` with
16
+
realm-marked, commit-pinned objectui evidence, and each carries a `producer`
17
+
naming the `registerMetadataPreview` call and the surface that resolves it — a
18
+
preview no registry ever hands a draft to is a read point that never runs.
19
+
20
+
Nothing about enforce-or-remove moves: all four keys remain docs-shaped,
21
+
deliberately KEPT under the ADR-0033 exemption, and still not `authorWarn`'d.
22
+
`job.label` is `live` because a human sees it in the designer; the scheduler
23
+
still stores name and schedule only, and the row now says so explicitly.
24
+
25
+
The README gains the methodology section the ruling asked for, so the next sweep
26
+
asks the question mechanically instead of rediscovering it: enumerate a type's
27
+
registered preview read points **before** writing "no runtime consumer", and
28
+
record their absence when there are none. It divides against the existing
29
+
"an authoring/preview renderer is NOT a runtime consumer" section on what the
30
+
property claims rather than on what the surface is — for a **display** key the
31
+
render is the whole of the declared effect, while for a **behavioural** key a
32
+
panel echoing the value back still proves nothing. The 2026-07 sweep's ten
33
+
corrections are explicitly not reopened.
34
+
35
+
Ledger and documentation only; no schema, no runtime behaviour.
Copy file name to clipboardExpand all lines: packages/spec/liveness/README.md
+59Lines changed: 59 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -240,6 +240,13 @@ means "the realms named in the evidence", never "everywhere".
240
240
241
241
### ⚠️ An authoring/preview renderer is NOT a runtime consumer
242
242
243
+
> **Scope narrowed 2026-08-10 (#7131) — read the next section with this one.** What
244
+
> follows holds for a property that claims to **do** something: gate, bind, route,
245
+
> filter, enforce. It does *not* settle a property whose declared effect is simply
246
+
> to **be shown**, where the render is not a stand-in for the behaviour but *is* the
247
+
> behaviour. None of the thirteen re-verifications below is reopened by that split —
248
+
> all thirteen are behavioural keys.
249
+
243
250
`live` means **authoring the property changes runtime behaviour**. A Studio
244
251
`*.form.ts` input or a `metadata-admin/previews/*Preview.tsx` panel merely
245
252
*echoes back what the author typed* — it proves the property round-trips, never
@@ -281,6 +288,58 @@ enforced" warning for a month while it worked, which is an invitation to skip a
281
288
shipped feature. Erring toward `dead` is the right default *and* a debt to
282
289
re-verify.
283
290
291
+
### Designer previews count as consumers (maintainer ruling, 2026-08-10, #7131)
292
+
293
+
The section above is the *over-claim* guard. It also produced an under-claim, and
294
+
the maintainer settled it directly:
295
+
296
+
> **Maintainer ruling (2026-08-10, directed in session `session_01BPWqbmEFU8gJepBJTHESXd`): previews count as consumers.**
297
+
>
298
+
> A designer preview that renders a key to a human is a runtime consumer — the ledger's "no runtime consumer" verdict must include metadata-admin preview read points. The affected docs-shaped rows (`job.label`/`job.description`, `translation.label`/`.name`) re-grade from dead to live, and the ledger methodology note records the principle so the next sweep asks the question mechanically.
299
+
300
+
**The mechanical rule, for the next sweep.** Before writing `"no runtime
301
+
consumer"` — or any wording that means it — **enumerate the metadata-admin preview
302
+
read points** for the type, in objectui, and say what you found. The population is
303
+
small, enumerable, and registered by type name, so this is a lookup and not a
git -C ../objectui show origin/main:packages/app-shell/src/views/metadata-admin/previews/<X>Preview.tsx \
311
+
| grep -n 'd\.<key>'
312
+
```
313
+
314
+
An absent preview is a finding to record, not a step to skip — "the type has no
315
+
registered preview" is exactly the sentence a later sweep needs, and it is the one
316
+
`translation.label`'s superseded *"no runtime consumer **in this repo**"* was
317
+
missing. That hedge was never false; the cross-repo look simply was not taken,
318
+
which is the blind spot `evidenceScope` (#4895) exists to expose.
319
+
320
+
**Why this does not contradict the section above.** The two rules divide on what
321
+
the property claims, not on what the surface is:
322
+
323
+
| The property's declared effect | Does a preview render settle it? |
324
+
|---|---|
325
+
|**Display** — docs-shaped annotation, `label` / `description` / a title fallback |**Yes.** Being shown to a human is the whole of the claimed effect. There is no second layer where the "real" consumer would live, so the preview is not standing in for anything. |
326
+
|**Behaviour** — gates, bindings, routes, filters, permissions |**No.** The 2026-07 sweep's verdict stands unchanged: 10 of 13 preview-cited entries were wrong. A panel echoing `shortcut` back is not a keybinding, and echoing `permissions` back is not a gate. |
327
+
328
+
So the failure the section above records — a preview citation used as evidence
329
+
that *something acts on* the value — is untouched. What is corrected is the
330
+
opposite move: taking a preview's **absence from the search** as proof that
331
+
*nothing reads* the value, for a key whose only job was ever to be read by a
332
+
person.
333
+
334
+
**What `live` does and does not mean on a re-graded row.**`job.label` is `live`
335
+
because a human sees it in the designer; the scheduler still stores name/schedule
336
+
only, and the row says so. A re-grade is **not** an ADR-0033 change: these four
337
+
rows are docs-shaped, deliberately KEPT, and still not `authorWarn`'d — nothing
338
+
about enforce-or-remove moves. Cite the preview the way any cross-repo evidence is
339
+
cited: realm marker, pinned objectui commit, and a `producer` naming the
340
+
`registerMetadataPreview` call plus the surface that resolves it — a preview no
341
+
registry hands a draft to is a read point that never runs.
342
+
284
343
### How to verify a claim without fooling yourself
285
344
286
345
Three false conclusions were published during this sweep, all from the same
Copy file name to clipboardExpand all lines: packages/spec/liveness/job.json
+12-6Lines changed: 12 additions & 6 deletions
Original file line number
Diff line number
Diff line change
@@ -9,14 +9,20 @@
9
9
"note": "scheduling identity; a job without one is skipped loudly."
10
10
},
11
11
"label": {
12
-
"status": "dead",
13
-
"verifiedAt": "2026-08-02",
14
-
"note": "display metadata; no runtime consumer (sys_job stores name/schedule only). Docs-shaped annotation, deliberately KEPT and not authorWarn'd — the hook.label/description precedent, exempt from enforce-or-remove (ADR-0033)."
12
+
"status": "live",
13
+
"verifiedAt": "2026-08-10",
14
+
"evidenceScope": "cross-repo",
15
+
"evidence": "objectui @aeb8424b: packages/app-shell/src/views/metadata-admin/previews/JobPreview.tsx:257 takes `label` off the job draft with the job's own `name` as fallback, and packages/app-shell/src/views/metadata-admin/previews/JobPreview.tsx:313 renders it as the preview card's title",
16
+
"producer": "objectui @aeb8424b: packages/app-shell/src/views/metadata-admin/previews/index.ts:62 registers JobPreview against the `job` 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",
17
+
"note": "display metadata, and it IS displayed: the metadata-admin job preview shows it as the card title, falling back to the job `name` when unset. RE-GRADED dead → live 2026-08-10 (#7131) under the maintainer ruling that a designer preview rendering a key to a human is a runtime consumer — see README, 'Designer previews count as consumers'. The superseded wording, 'no runtime consumer (sys_job stores name/schedule only)', was true about the SCHEDULER and false as a whole-system claim: for a docs-shaped key the display IS the runtime effect, so sys_job was never the surface that could falsify it. UNCHANGED by the re-grade: still docs-shaped annotation, deliberately KEPT and not authorWarn'd — the hook.label/description precedent, exempt from enforce-or-remove (ADR-0033). `live` here does not mean the scheduler acquired a use for it."
15
18
},
16
19
"description": {
17
-
"status": "dead",
18
-
"verifiedAt": "2026-08-02",
19
-
"note": "same as `label`: docs-shaped, deliberately kept, no warning."
20
+
"status": "live",
21
+
"verifiedAt": "2026-08-10",
22
+
"evidenceScope": "cross-repo",
23
+
"evidence": "objectui @aeb8424b: packages/app-shell/src/views/metadata-admin/previews/JobPreview.tsx:258 takes `description` off the job draft, and packages/app-shell/src/views/metadata-admin/previews/JobPreview.tsx:316 renders it beneath the title whenever it is non-empty",
24
+
"producer": "objectui @aeb8424b: packages/app-shell/src/views/metadata-admin/previews/index.ts:62 registers JobPreview against the `job` metadata type, and packages/app-shell/src/views/metadata-admin/ResourceEditPage.tsx:949 resolves that registration and hands the component the draft being edited",
25
+
"note": "same as `label`: docs-shaped, deliberately kept, no warning — and displayed under the title in the same preview card. Re-graded dead → live with `label` on 2026-08-10 (#7131), same ruling, same ADR-0033 KEPT status."
Copy file name to clipboardExpand all lines: packages/spec/liveness/translation.json
+12-6Lines changed: 12 additions & 6 deletions
Original file line number
Diff line number
Diff line change
@@ -3,14 +3,20 @@
3
3
"_note": "TranslationItemSchema (#3778 — one locale's translations, the SAME groups the file-authored bundles use). NO LONGER A PIPE: the schema was a z.preprocess wrapping the retired object-first-dialect guard, which the gate's walker could not see through until #4488 fixed unwrap() to take the OUT side of a transform-input pipe — `translation` was literally unwalkable before this ledger. #4001 closed the shape with `.strict()` and folded the guard's ten prescriptions into the unknown-key `guidance`, so the preprocess is gone and the registered schema is a plain strict object. Consumer chain: runtime-authored items sync into the i18n adapter's authored layer (packages/core/src/fallbacks/authored-translation-sync.ts — at kernel:ready, on metadata:reloaded, and on translation mutations; #2591 closed the publish dead-end), file bundles load via service-i18n; both merge into ONE tree read by the spec resolvers (packages/spec/src/system/i18n-resolver.ts), the REST localization layer (translateMetaItem/translateMetaTypes), objectui's client resolvers (useObjectLabel/useSettingsLabel), and plugin-audit's summary localizer. WALK BOUNDARY: every group is a z.record keyed by target names — the drill sees each record's VALUE shape one level; the deeper per-key conventions (objects.<n>.fields.<f>.label, settings.<ns>.keys.<k>.options.<v>, …) are governed by the resolvers cited per row, not by ledger rows. Note also the sync merges the RAW stored payload (authored-translation-sync.ts:155, not a schema re-parse), so the declared groups below are the CONTRACT while undeclared keys technically flow through on rows already stored — the resolvers read only the declared conventions. Since #4001 no NEW row can acquire one: the metadata door rejects an undeclared key instead of stripping it, so that residue is a finite set that only shrinks. 10 of 11 groups live; the one dead group (`validationMessages`) is pointed at by #3778's own legacy-key migration table, making it a shipped false signpost. Seeded 2026-08-01 (#4488).",
4
4
"props": {
5
5
"name": {
6
-
"status": "dead",
7
-
"verifiedAt": "2026-08-01",
8
-
"note": "Item identity, declared in #4001 and dead as a BODY key — which is the honest reading of a copy nobody reads. The row's `name` column is the live one: the metadata door takes it from the URL (`saveMetaItem({ name })`, rest-server.ts:3903), and `authored-translation-sync` reads `row.name` as the locale fallback for pre-#3778 rows (:140-148) while explicitly destructuring the body copy back out before merging (:154-159). Declared anyway, and deliberately not authorWarn'd, for two reasons: the platform's own create seed sends it (`metadata-create-seeds.ts`, whose stated contract is that EVERY seed carries placeholder identity), so a warning would fire on our own shape; and `translation` being the one registered type of 25 without a `name` is exactly the irregularity an AI author trips on. Undeclared it was silently stripped, which is how the seed gate — the canonical 'designer create shape ≠ spec' guard — passed for years while two thirds of the seed it validated was being thrown away."
6
+
"status": "live",
7
+
"verifiedAt": "2026-08-10",
8
+
"evidenceScope": "cross-repo",
9
+
"evidence": "objectui @aeb8424b: packages/app-shell/src/views/metadata-admin/previews/TranslationPreview.tsx:67 falls back to the draft's BODY `name` when `label` is unset, and packages/app-shell/src/views/metadata-admin/previews/TranslationPreview.tsx:100 renders the result as the preview card's title",
10
+
"producer": "objectui @aeb8424b: packages/app-shell/src/views/metadata-admin/previews/index.ts:50 registers TranslationPreview against the `translation` metadata type, and packages/app-shell/src/views/metadata-admin/ResourceEditPage.tsx:949 resolves that registration and hands the component the draft being edited",
11
+
"note": "Item identity, declared in #4001. RE-GRADED dead → live 2026-08-10 (#7131), and the re-grade supersedes exactly ONE clause of the old note: 'dead as a BODY key — the honest reading of a copy nobody reads'. The body copy has a measured reader — objectui's metadata-admin translation preview uses it as the display fallback when `label` is unset — so under the maintainer ruling that a designer preview rendering a key to a human is a runtime consumer (see README, 'Designer previews count as consumers') the copy is read. THE REST OF THIS ROW STANDS UNCHANGED AND IS THE SUBSTANCE, including its door/row-column analysis: the row's `name` column is the live one on the SYNC path, and the body copy is still not what the sync reads — the preview reads it, the sync does not. The metadata door takes it from the URL (`saveMetaItem({ name })`, rest-server.ts:3903), and `authored-translation-sync` reads `row.name` as the locale fallback for pre-#3778 rows (:140-148) while explicitly destructuring the body copy back out before merging (:154-159). Declared anyway, and deliberately not authorWarn'd, for two reasons: the platform's own create seed sends it (`metadata-create-seeds.ts`, whose stated contract is that EVERY seed carries placeholder identity), so a warning would fire on our own shape; and `translation` being the one registered type of 25 without a `name` is exactly the irregularity an AI author trips on. Undeclared it was silently stripped, which is how the seed gate — the canonical 'designer create shape ≠ spec' guard — passed for years while two thirds of the seed it validated was being thrown away."
9
12
},
10
13
"label": {
11
-
"status": "dead",
12
-
"verifiedAt": "2026-08-01",
13
-
"note": "Display metadata with no runtime consumer in this repo. Not authorWarn'd: the README's rule is that pure display annotation (`description`, `tags`, `icon`) must not warn, and the `job.label` precedent is exactly this — docs-shaped, deliberately kept, ADR-0033 exempt from enforce-or-remove. Shipped with `name` in the create seed for the same reason."
14
+
"status": "live",
15
+
"verifiedAt": "2026-08-10",
16
+
"evidenceScope": "cross-repo",
17
+
"evidence": "objectui @aeb8424b: packages/app-shell/src/views/metadata-admin/previews/TranslationPreview.tsx:67 takes `label` off the translation draft as the first choice of the display chain, and packages/app-shell/src/views/metadata-admin/previews/TranslationPreview.tsx:100 renders the result as the preview card's title",
18
+
"producer": "objectui @aeb8424b: packages/app-shell/src/views/metadata-admin/previews/index.ts:50 registers TranslationPreview against the `translation` metadata type, and packages/app-shell/src/views/metadata-admin/ResourceEditPage.tsx:949 resolves that registration and hands the component the draft being edited",
19
+
"note": "Display metadata — and the display exists, one repo over: the metadata-admin translation preview renders it as the item's title. RE-GRADED dead → live 2026-08-10 (#7131) under the maintainer ruling that a designer preview rendering a key to a human is a runtime consumer — see README, 'Designer previews count as consumers'. Read the superseded wording carefully: 'no runtime consumer IN THIS REPO' was literally accurate and remains so — what changed is that the cross-repo look was finally taken, which is exactly the blind spot `evidenceScope` exists to make visible (#4895). UNCHANGED: not authorWarn'd — the README's rule is that pure display annotation (`description`, `tags`, `icon`) must not warn, and the `job.label` precedent is exactly this — docs-shaped, deliberately kept, ADR-0033 exempt from enforce-or-remove. Shipped with `name` in the create seed for the same reason."
0 commit comments