Skip to content

docs(audit): metadata property liveness & necessity — all types#1864

Merged
os-zhuang merged 8 commits into
mainfrom
spec-field-liveness-audit
Jun 15, 2026
Merged

docs(audit): metadata property liveness & necessity — all types#1864
os-zhuang merged 8 commits into
mainfrom
spec-field-liveness-audit

Conversation

@xuyushun441-sys

@xuyushun441-sys xuyushun441-sys commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

A protocol-level audit of every ObjectStack metadata type: for each schema property, cross-reference its spec definition against its actual consumers (file:line) in the runtime + renderers, to answer (1) does it take effect? then (2) is it necessary/reasonable? Liveness = code consumption, not browser observation.

17 per-type reports + a cross-type synthesis in docs/audits/ (see README.md for the index + patterns). Types covered: field, object, view, app, page, dashboard, report, dataset, action, flow, agent, tool, skill, hook, validation, security/identity (role/permission/policy/sharing), system/integration (email/i18n/theme/job/webhook/portal).

Headline cross-cutting findings (priority order)

  1. 🔴 Parsed-but-UNENFORCED security props (latent access-control gaps): PolicySchema 100% dead (password/session/MFA/IP/audit — false compliance, not even registered); permission allowTransfer/allowRestore/allowPurge (destructive ops ungated); agent permissions/visibility/access (who-can-chat is a no-op); flow runAs (never switches identity); object apiEnabled/apiMethods (not enforced by REST); action disabled-CEL (silently ignored); role parent + SharingRuleSchema disconnected from the live engine.
  2. 🔴 ADR-0021 analytics debt: chart view variant + dashboard renderer + Studio still read the removed legacy object/valueField/aggregate shape; report chart dead; ReportColumn/ReportGrouping obsolete. (Same debt that invalidated the showcase dashboard/report seeds.)
  3. 🟠 Naming drift → silent no-ops: field maxLength/minLength/referenceFilters/maxRating; page type→pageType/label→title/visibility; dashboard title vs label; app accentColor/badgeVariant/separator (renderer reads, not in spec); action disabled→enabled; flow http vs http_request; skill requiredPermissions; agent knowledge; webhook object_name/active.
  4. 🟠 Aspirational config (rich spec, zero runtime): field enhanced-type/governance configs; object enable/versioning/partitioning/cdc; agent autonomy (memory/guardrails/structuredOutput/lifecycle); job retryPolicy/timeout; portal (entire); webhook non-HMAC auth; translation messageFormat:'icu' (no ICU engine).
  5. 🟠 Write-only / disconnected metadata: tool (can't author a working tool as metadata); EmailTemplateSchema (runtime reads sys_email_template); spec-bridge page/dashboard orphaned.
  6. Inverse drift (renderer reads undeclared props); designer authoring gaps (dataset/skill/flow).

Healthiest: hook, validation. Worst: policy, portal, tool.

Suggests three ADRs: security enforcement, finish ADR-0021, spec hygiene. Each doc has file:line evidence + per-property recommendations.

🤖 Generated with Claude Code

Evidence-backed cross-reference (file:line) of every core FieldSchema
property against its runtime + renderer consumers. ~half are DEAD (defined
in the protocol but read by neither layer → silent no-ops for authors).
Surfaces three high-value classes: camelCase↔snake_case naming drift
(maxLength/minLength/referenceFilters/maxRating read under a different key),
nested-config-vs-flat duplication (currencyConfig/vectorConfig/
fileAttachmentConfig dead, flat siblings read), and redundant field-level
flags superseded by object/dataset-level config (searchable/index/externalId/
columnName). Intended to seed a spec-hygiene ADR.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 15, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jun 15, 2026 6:02am

Request Review

@github-actions github-actions Bot added size/m documentation Improvements or additions to documentation labels Jun 15, 2026
os-zhuang and others added 2 commits June 15, 2026 10:33
Entire enable/ObjectCapabilities block dead (apiEnabled/apiMethods NOT
enforced by REST). versioning/partitioning/cdc/softDelete/search/recordTypes/
defaultDetailForm aspirational. recordName duplicated by field autonumber;
tenancy only .enabled live. Core load-bearing set documented with file:line.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chart list variant dead-on-arrival vs its own spec (renderers read removed
legacy xAxisField/yAxisFields; spec exposes dataset/dimensions/values) =
same ADR-0021 debt as dashboard/report seeds. Form variants wizard/split/
drawer/modal aspirational on mainstream path (RecordFormPage hardcodes
simple). List family + grid/kanban/calendar/gantt/gallery/timeline fully
wired. bulkActions->batchActions drift documented.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Recurring themes: ADR-0021 migration debt (dashboard renderer+Studio still on
legacy object/valueField shape the spec says was removed; report chart dead),
orphaned spec-bridge (page/dashboard bridges have no src caller -> their
exclusive props dead), spec<->renderer naming drift (page type->pageType &
label->title break layouts/headers; dashboard title vs label; app reads
accentColor/badgeVariant/separator not in spec), and aspirational config
(app mobileNavigation/sharing/embed; page recordReview/blankLayout required by
superRefine yet unrendered; report chart/aria/performance). Evidence file:line
in each doc.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Cluster of security-relevant parsed-but-UNENFORCED props: agent
permissions/visibility/access (who-can-chat is a no-op), flow runAs (never
switches identity), action disabled-CEL (silently ignored). Plus: flow
FlowNodeAction enum out of sync with executors; http vs http_request drift;
agent model.provider dead (provider comes from adapter); agent autonomy
surface (memory/guardrails/structuredOutput/lifecycle) aspirational except
planning.maxIterations; dataset description/certified dead + Studio
under-covers live props; action type:form/shortcut/bulkEnabled half-built.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Tool metadata is WRITE-ONLY (projected one-way for Studio display; runtime
uses code-built AIToolDefinition; cannot author a working tool as metadata).
Skill triggerPhrases display-only (no intent matcher); permissions dead +
requiredPermissions naming drift; triggerConditions not editable in designer.
Hook + Validation are the healthiest schemas: near-total liveness; hook only
label/description dead, memoryMb advisory; all 6 validation types enforced,
only events:[delete] is a silent no-op + label/description/tags dead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
os-zhuang and others added 2 commits June 15, 2026 10:56
MOST SERIOUS findings: PolicySchema 100% dead (password/session/mfa/ip/audit
parsed-but-unenforced; not even registered) -> false compliance; permission
allowTransfer/allowRestore/allowPurge dead (destructive ops ungated); Role
parent dead (no manager rollup); SharingRuleSchema disconnected from the live
sys_sharing_rule engine. System: EmailTemplateSchema registered but runtime
reads differently-shaped sys_email_template; PortalSchema fully aspirational;
Job retryPolicy/timeout dead; Webhook non-HMAC auth/payloadFields dead;
TranslationConfig messageFormat(ICU)/supportedLocales/cache dead; Theme
spacing/breakpoints/logo merged-but-never-emitted.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Ties 21 schemas into 7 cross-cutting patterns, priority-ordered: (1) parsed-
but-unenforced security props (policy/permission-lifecycle/agent-access/flow-
runAs/object-apiEnabled/action-disabled) = latent access-control gaps; (2)
ADR-0021 analytics migration debt; (3) naming drift silent no-ops; (4)
aspirational config; (5) write-only/disconnected metadata; (6) renderer reads
undeclared props; (7) designer authoring gaps. Suggests 3 ADRs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added size/l and removed size/m labels Jun 15, 2026
@xuyushun441-sys xuyushun441-sys changed the title docs(audit): metadata property liveness & necessity — protocol hygiene docs(audit): metadata property liveness & necessity — all types Jun 15, 2026
@os-zhuang
os-zhuang merged commit 2a01821 into main Jun 15, 2026
13 checks passed
@os-zhuang
os-zhuang deleted the spec-field-liveness-audit branch June 15, 2026 06:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/l

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants