Skip to content

Commit 3177d51

Browse files
os-zhuangclaude
andauthored
docs(liveness): stop counting authoring/preview renderers as runtime consumers (#1878) (#3685)
A 2026-06 sweep that "missed objectui" over-corrected and marked 13 properties `live` on the evidence of a metadata-admin previews/*Preview.tsx panel — a surface that only echoes what the author typed. `live` is supposed to mean "authoring this changes runtime behaviour". Three of the 13 were re-verified in the §3 naming-drift recheck; all three were wrong or misleading: - skill.permissions -> dead + authorWarn. The cloud SkillRegistry reads only active/triggerConditions/tools; nothing gates invocation by this list. Mirrors the identical tool.permissions entry. (Cloud documents the intent in a comment without implementing it.) - agent.knowledge -> dead + authorWarn. search_knowledge takes sourceIds from the LLM's tool-call arguments, never from the agent record, so a declared knowledge scope constrains nothing (and an agent can search sources it was never scoped to). - action.disabled: verdict kept (it IS live now) but evidence corrected to the six rendering surfaces. At ledger-writing time it was enforced on ONE of six, so the preview-based verdict hid a real five-surface silent no-op — fixed in objectui#2863. Also: sync the hand-maintained count table (agent 14/5/0 -> 13/5/1, skill 10/-/- -> 9/-/1) and add a "an authoring/preview renderer is NOT a runtime consumer" section naming the ten still-unverified preview-only claims, with the tie-break rule: when in doubt prefer dead + authorWarn — a warning on a property that works costs nothing; silence on a property that does nothing ships a bug. check:liveness green (exit 0); the 13 unregistered-proof warnings are pre-existing on main. Co-authored-by: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
1 parent 671611e commit 3177d51

5 files changed

Lines changed: 49 additions & 10 deletions

File tree

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
---
3+
4+
docs(liveness): correct three ledger entries that counted an authoring/preview renderer as a runtime consumer (#1878 §3 recheck)
5+
6+
`skill.permissions` and `agent.knowledge` were marked `live` citing only a
7+
metadata-admin PREVIEW panel — which echoes what the author typed and proves
8+
nothing about enforcement. Both are corrected to `dead` + `authorWarn` with an
9+
actionable hint. `action.disabled`'s evidence is corrected to the six real
10+
rendering surfaces (its verdict was right for the wrong reason and hid a
11+
five-surface silent no-op, since fixed in objectui#2863). Ledger-only; releases
12+
nothing.

packages/spec/liveness/README.md

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,29 @@ Resolution per property: **ledger entry → spec `.describe()` marker → UNCLAS
4646
Framework provenance/lock fields (`_lock*`, `_provenance`, `_packageId/Version`,
4747
`protection` — ADR-0010) are auto-classified `live`.
4848

49+
### ⚠️ An authoring/preview renderer is NOT a runtime consumer
50+
51+
`live` means **authoring the property changes runtime behaviour**. A Studio
52+
`*.form.ts` input or a `metadata-admin/previews/*Preview.tsx` panel merely
53+
*echoes back what the author typed* — it proves the property round-trips, never
54+
that anything acts on it. A 2026-06 sweep that "missed objectui" over-corrected
55+
and marked **13 properties `live` citing only a preview renderer**; of those,
56+
three were re-verified in 2026-07 and **all three were wrong or misleading**:
57+
58+
- `skill.permissions` — no gate anywhere (corrected → `dead` + `authorWarn`)
59+
- `agent.knowledge` — retrieval scope comes from the LLM's tool args (corrected → `dead`)
60+
- `action.disabled` — enforced on **one of six** rendering surfaces at the time;
61+
the verdict was right for the wrong reason and hid a five-surface silent
62+
no-op (evidence corrected; the gap itself fixed in objectui#2863)
63+
64+
The remaining ten preview-only claims (`action.execute`/`shortcut`/`bulkEnabled`,
65+
`flow.status`/`active`, `skill.triggerPhrases`, `tool.category`/
66+
`requiresConfirmation`/`active`/`builtIn`) are **unverified** — treat them as
67+
suspect until someone cites a real runtime reader. When in doubt, the honest
68+
status is `dead` + `authorWarn`: an author who gets a warning for a property
69+
that turns out to work loses nothing; an author who gets silence for a property
70+
that does nothing ships a bug.
71+
4972
## Runtime proofs — prove-it-runs (ADR-0054)
5073

5174
`live` today means only *a static pointer to a consumer* — proof that something
@@ -207,9 +230,9 @@ EOF
207230
| hook | 11 || 2 || model-healthy; only label/description dead (benign) |
208231
| permission | 32 || 0 || CRUD/FLS/RLS live; dead `contextVariables` REMOVED (ADR-0105 D11 — RLS resolves only the `current_user.*` built-ins plus runtime-staged `rlsMembership` sets) |
209232
| position | 4 |||| (role's ADR-0090 successor) fully live |
210-
| agent | 14 | 5 | 0 || dead `tenantId` + `planning.strategy`/`allowReplan` REMOVED (#2377) — only `planning.maxIterations` live; autonomy tier experimental |
233+
| agent | 13 | 5 | 1 || dead `tenantId` + `planning.strategy`/`allowReplan` REMOVED (#2377) — only `planning.maxIterations` live; autonomy tier experimental; `knowledge` CORRECTED to dead 2026-07 — `search_knowledge` takes `sourceIds` from the LLM's tool-call args, never from the agent record (#1878 §3 recheck) |
211234
| tool | 9 | 1 | 1 || `permissions` dead — tool invocation not permission-gated by it |
212-
| skill | 10 || || fully live |
235+
| skill | 9 || 1 || `permissions` CORRECTED to dead 2026-07 — the cloud SkillRegistry reads only `active`/`triggerConditions`/`tools`; mirrors the identical `tool.permissions` entry (#1878 §3 recheck) |
213236
| dataset | 19 || 0 || `measures.certified` (declared-but-unenforced governance flag) REMOVED in 16.0 (#2377) |
214237
| page | 16 ||| 1 | fully live + one planned |
215238
| view | 70 | 0 | 5 || list/form drilled via `children` (#2998 Track B); dead = list.{responsive,performance} + form.{data,defaultSort,aria}, all but aria authorWarn'd; form.{buttons,defaults} now live — objectui ObjectForm folds them onto its flat props (framework#1894 / #2998); audit-era DEAD lines superseded by re-verification (submitBehavior, sharing.lockedBy, list ViewData providers, and the ADR-0021 chart shape — all live now); level-2 dead residue (userActions.buttons, addRecord.mode/formView, tabs[].order) noted on parents — one drill level only |

packages/spec/liveness/action.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@
101101
},
102102
"disabled": {
103103
"status": "live",
104-
"evidence": "objectui: packages/app-shell/src/views/metadata-admin/previews/ActionPreview.tsx:169",
105-
"note": "LIVE via objectui metadata-admin authoring UI — the 2026-06 audit missed objectui; verified by reading the file."
104+
"evidence": "objectui: components action-button/-group/-icon/-menu + app-shell DeclaredActionsBar + plugin-detail record-quick-actions — all six rendering surfaces gate the Button on the predicate",
105+
"note": "EVIDENCE CORRECTED 2026-07 (#1878 §3 recheck): previously cited the metadata-admin PREVIEW renderer, which only echoes the authored value. At that time the predicate was actually enforced on ONE of six surfaces (#1885 wired action:button alone) — the 'live' verdict was right for the wrong reason and hid a real silent no-op on the other five. objectui#2863 wired the rest; showcase specimen `showcase_archive_task` (#3643) dogfoods it."
106106
},
107107
"shortcut": {
108108
"status": "live",

packages/spec/liveness/agent.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,11 @@
6565
"note": "evaluateAgentAccess() — caller must hold ALL required permissions/roles; enforced at the chat route. #1884."
6666
},
6767
"knowledge": {
68-
"status": "live",
69-
"evidence": "objectui: packages/app-shell/src/views/metadata-admin/previews/AgentPreview.tsx:69 (d.knowledge; KnowledgeSummary renders sources/indexes)",
70-
"note": "LIVE via objectui metadata-admin authoring UI — the 2026-06 audit missed objectui; verified by reading the file."
68+
"status": "dead",
69+
"evidence": "agent.form.ts + objectui AgentPreview.tsx:69 (both authoring-side echo only); the RAG path never reads it",
70+
"authorWarn": true,
71+
"authorHint": "Declaring `knowledge.sources` does NOT scope retrieval — the `search_knowledge` tool takes `sourceIds` from the LLM's tool-call arguments (cloud service-ai/src/tools/knowledge-tools.ts:96), never from the agent record. Restrict retrieval at the knowledge-service / source level instead.",
72+
"note": "CORRECTED 2026-07 (#1878 §3 recheck): was marked live on the evidence of the metadata-admin PREVIEW renderer — an echo of what the author typed, not runtime consumption. The `topics`→`sources` NAMING drift is genuinely fixed (#1891 alias fold); the block is nonetheless behaviourally inert. Wiring it would also close a scope gap (an agent can search sources it was never scoped to) — tracked separately."
7173
},
7274
"lifecycle": {
7375
"status": "experimental",

packages/spec/liveness/skill.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,11 @@
4747
"note": "LIVE via objectui metadata-admin authoring UI — the 2026-06 audit missed objectui; verified by reading the file."
4848
},
4949
"permissions": {
50-
"status": "live",
51-
"evidence": "objectui: packages/app-shell/src/views/metadata-admin/previews/SkillPreview.tsx:48",
52-
"note": "LIVE via objectui metadata-admin authoring UI — the 2026-06 audit missed objectui; verified by reading the file."
50+
"status": "dead",
51+
"evidence": "skill.form.ts + objectui SkillPreview.tsx:48 (both authoring-side echo only); no gate in the cloud SkillRegistry",
52+
"authorWarn": true,
53+
"authorHint": "Skill invocation is NOT permission-gated by this list — the registry reads only `active`/`triggerConditions`/`tools`. Agent-level `access`/`permissions` ARE enforced (#1884), so gate at the agent, or gate the underlying tools' actions via permission sets (ADR-0066).",
54+
"note": "CORRECTED 2026-07 (#1878 §3 recheck): was marked live on the evidence of the metadata-admin PREVIEW renderer — an echo of what the author typed, not runtime consumption. Mirrors the identical `tool.permissions` entry. Cloud documents the intent ('Layer permissions via Skill.permissions independent of the agent's permissions', service-ai-studio/src/skills/metadata-authoring-skill.ts:15) without implementing it — enforce-or-prune tracked separately."
5355
}
5456
}
5557
}

0 commit comments

Comments
 (0)