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-sysxuyushun441-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

vercelBot commented Jun 15, 2026

Copy link
Copy Markdown

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

ProjectDeploymentActionsUpdated (UTC)
specReadyReadyPreview, CommentJun 15, 2026 6:02am

Request Review

os-zhuangand 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-zhuangand 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>
@xuyushun441-sysxuyushun441-sys changed the title docs(audit): metadata property liveness & necessity — protocol hygienedocs(audit): metadata property liveness & necessity — all typesJun 15, 2026
@os-zhuang
os-zhuang merged commit 2a01821 into mainJun 15, 2026
13 checks passed
@os-zhuang
os-zhuang deleted the spec-field-liveness-audit branch June 15, 2026 06:35
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/l

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@xuyushun441-sys@os-zhuang