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
Part of the metadata liveness audit umbrella #1878 (P2 — spec hygiene, cluster #5).
Problem
Write-only / disconnected metadata: the type implies an authorability it doesn't have — you can write the metadata, but nothing loads it (or the runtime reads a differently-shaped record).
Checklist
tool — one-way projection: can't author a working tool as metadata (no implementation/handler field, no executor loads it). Decide: add an executor + handler binding, or mark the metadata as read-only/derived.
EmailTemplateSchema — registered, but the runtime reads a differently-shaped sys_email_template. Reconcile the two shapes or deprecate the spec schema.
SharingRuleSchema — runtime uses sys_sharing_rule (tracked in the P0 sharing-rules issue; cross-listed here).
spec-bridge page/dashboard bridges — orphaned; their exclusive props are dead. Remove or wire them.
✅ EmailTemplateSchema — reconciled. plugin-email imports the spec EmailTemplateDefinition type (email-plugin.ts:13); upsertTemplate() (email-plugin.ts:426) materializes spec-shaped templates into sys_email_template rows, which the runtime TemplateLoader reads back (email-plugin.ts:258). The two shapes are bridged, not divergent.
✅ spec-bridge page/dashboard bridges — the two orphaned bridges (bridgePage / bridgeDashboard, zero runtime consumers; the dashboard bridge's pre-ADR-0021 input shape is rejected by the strict DashboardWidgetSchema) are deleted in refactor(spec-bridge): remove the dead page/dashboard bridges (#1892) objectui#2817 (@object-ui/react major, net −907). The live list / form bridges are untouched.
Closing as completed. Systemic ledger-gap follow-ups continue in their own issues: #3461 (webhook disconnect), #3462 (enroll webhook in GOVERNED — report/dashboard already enrolled via #3474), #3464 (Portal prune-or-build).
Activity
chore: bump objectui to 4eb9cb6
docs(spec): mark ToolSchema as a read-only projection, not an executi…
docs(spec): mark ToolSchema as a read-only projection, not an executi…
chore(spec): metadata-liveness P2 follow-through — mark aspirational …
os-zhuang commentedon Jul 25, 2026
Closing — all four rows resolved
Re-verified each checklist row against current code (
file:line):tool.zod.ts:124now declares[READ-ONLY PROJECTION — not an execution entry point], and thepackages/spec/liveness/tool.jsonledger carries the same WRITE-ONLY note. Landed in chore(spec): metadata-liveness P2 follow-through — mark aspirational props experimental + declare renderer-read props (#1878) #3223.plugin-emailimports the specEmailTemplateDefinitiontype (email-plugin.ts:13);upsertTemplate()(email-plugin.ts:426) materializes spec-shaped templates intosys_email_templaterows, which the runtimeTemplateLoaderreads back (email-plugin.ts:258). The two shapes are bridged, not divergent.bridgePage/bridgeDashboard, zero runtime consumers; the dashboard bridge's pre-ADR-0021 input shape is rejected by the strictDashboardWidgetSchema) are deleted in refactor(spec-bridge): remove the dead page/dashboard bridges (#1892) objectui#2817 (@object-ui/reactmajor, net −907). The livelist/formbridges are untouched.Closing as completed. Systemic ledger-gap follow-ups continue in their own issues: #3461 (webhook disconnect), #3462 (enroll webhook in GOVERNED — report/dashboard already enrolled via #3474), #3464 (Portal prune-or-build).
Refs #1878.
🤖 Generated with Claude Code