Skip to content

docs(audits): recheck the §3 naming-drift list; fix the os doctor lookupFilters hint (#1878) - #3677

Merged
os-zhuang merged 2 commits into
mainfrom
docs/naming-drift-recheck
Jul 27, 2026
Merged

docs(audits): recheck the §3 naming-drift list; fix the os doctor lookupFilters hint (#1878)#3677
os-zhuang merged 2 commits into
mainfrom
docs/naming-drift-recheck

Conversation

@os-zhuang

@os-zhuangos-zhuang commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Third and last recheck of the 2026-06 liveness audit's problem clusters (after §1 security-props #3503 and the §2 report slice #3496). Companion objectui fix: objectstack-ai/objectui#2867.

Finding: six of nine were already resolved — the list was stale, not the code

Re-verified every §3 item against current code in both repos, including the <!-- os:check --> TypeScript blocks inside skills/*/SKILL.md (they compile against the spec and are real consumers — the gap that bit #3605).

Resolved (list stale)Evidence
referenceFiltersremoved #2377/ADR-0049; successor lookupFilters is read + scopes the picker
maxRatingpruned; builder emits max, RatingField reads max
page visibilityspec folds → visibleWhen; SchemaRenderer consumes it
dashboard title/labelrenderer dual-reads; widget keys additionally hard-fail via .strict() + naming error map (#1894)
flow httpspec enum canonical; runtime registers HTTP_TYPE='http'
agent knowledge.topics#1891 folds the alias into sources; test asserts 'topics' in parsed === false
webhook object/isActive#3489 materializes with an explicit mapping
action disabledfixed across all six surfaces this month (objectui#2863 + #3643)
skill requiredPermissionsnever a drift — the key never existed on SkillSchema; the original audit described prose/label drift in the docs

Still real (fixed in the companion objectui PR): the coupled page pair typepageType + labeltitle, which mis-renders every non-record page today (showcase capability_map, active_projects, command_center_jsx), plus two snake-only max_length readers.

The systemic finding

For every item, authoring the wrong key is silently strippedFieldSchema and PageSchema are bare z.object (verified empirically: parsing a page with pageType + title returns neither, no error). The dashboard-widget .strict() + fixable naming error map (#1894) is the only mechanism in the codebase that turns a silent no-op into a teaching error. Extending it to PageSchema/FieldSchema is the structural fix for this whole class; per-item wiring is the tactical one.

Changes

  • Adddocs/audits/2026-07-naming-drift-recheck.md — per-item verdicts with file:line evidence, the gate-coverage analysis, and three items left as owner decisions.
  • Annotate README §3 with the recheck summary.
  • Fix os doctor — its snake→camel table advised "Use referenceFilters", a key removed in [11.0][A2] Remove dead author-facing metadata properties (ADR-0049 enforce-or-remove) #2377 that the schema silently strips. Now matches both spellings and names the live lookupFilters.

Left as decisions (recorded, not fixed)

  1. app badge/badgeVariant + nav separator — surface-conditional, port rather than prune. The capability is fully implemented in layout/src/NavigationRenderer.tsx (:906 separator, :983-985 badge), a publicly exported + SDUI-registered (navigation-renderer) component. It is missing from UnifiedSidebar, which is what actually renders app.navigation in the console. So the same authored key works on one surface and silently vanishes on the other. (An earlier revision of this PR claimed NavigationRenderer had been deleted — that was wrong, from a truncated grep; corrected in the second commit.)
  2. skill.permissions has no gate — mis-filed as naming drift; it's an aspirational-config item (§4). The ledger marks it live on a preview renderer's evidence while the identically-unenforced tool.permissions is dead + authorWarn, so authors get silence where they should get a warning. Note the cloud runtime documents the intent in a comment ("Layer permissions via Skill.permissions independent of the agent's permissions") without implementing it.
  3. agent.knowledge is inert — naming fixed by [P2] Naming drift → silent no-ops (spec key ≠ consumed key) #1891, but search_knowledge takes sourceIds from the LLM's tool-call args, never from the authored block, so a declared knowledge scope constrains nothing.

Refs #1878, #3503, #3496.

🤖 Generated with Claude Code

…kupFilters hint (#1878)
Re-verified all nine spec-key-vs-consumed-key drifts against current code in
both repos (including the os:check TypeScript blocks inside skills/*/SKILL.md,
which compile against the spec and are real consumers).
Six of nine were already resolved -- the list was stale, not the code:
referenceFilters (-> lookupFilters), maxRating (-> max), page visibility
(-> visibleWhen), dashboard title/label (dual-read + strict widget schema),
flow http, agent knowledge.topics (alias folded #1891), webhook keys (#3489);
action disabled was fixed this month (objectui#2863). skill
requiredPermissions was never a drift -- the original audit described prose
drift in the docs, not a spec-vs-runtime mismatch.
Still real: the coupled page pair type->pageType + label->title, which
mis-renders every non-record page today (fixed in the companion objectui PR),
and two snake-only max_length readers.
- Add 2026-07-naming-drift-recheck.md with per-item file:line evidence, the
gate-coverage finding (bare z.object silently strips; the dashboard-widget
.strict() + naming error map is the only mechanism that teaches), and the
three items left as owner decisions (app badgeVariant/separator decayed when
NavigationRenderer was replaced by UnifiedSidebar; skill.permissions has no
gate; agent.knowledge is inert).
- Annotate README §3 with the recheck summary.
- Fix os doctor: the reference_filters rule pointed at the REMOVED
referenceFilters key instead of the live lookupFilters.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercelBot commented Jul 27, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectstackIgnoredIgnoredJul 27, 2026 2:11pm

Request Review

@github-actionsgithub-actionsBot added size/m documentation Improvements or additions to documentation tooling labels Jul 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/cli.

18 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/skills-reference.mdx(via packages/cli)
  • content/docs/api/client-sdk.mdx(via @objectstack/cli)
  • content/docs/api/data-flow.mdx(via @objectstack/cli)
  • content/docs/api/environment-routing.mdx(via @objectstack/cli)
  • content/docs/api/error-catalog.mdx(via @objectstack/cli)
  • content/docs/automation/hook-bodies.mdx(via packages/cli)
  • content/docs/deployment/backup-restore.mdx(via @objectstack/cli)
  • content/docs/deployment/cli.mdx(via @objectstack/cli)
  • content/docs/deployment/self-hosting.mdx(via @objectstack/cli)
  • content/docs/getting-started/your-first-project.mdx(via @objectstack/cli)
  • content/docs/kernel/runtime-services/data-service.mdx(via packages/cli)
  • content/docs/kernel/runtime-services/index.mdx(via packages/cli)
  • content/docs/permissions/authentication.mdx(via @objectstack/cli)
  • content/docs/plugins/packages.mdx(via @objectstack/cli)
  • content/docs/protocol/kernel/plugin-spec.mdx(via @objectstack/cli)
  • content/docs/protocol/kernel/realtime-protocol.mdx(via @objectstack/cli)
  • content/docs/releases/implementation-status.mdx(via @objectstack/cli)
  • content/docs/releases/v16.mdx(via @objectstack/cli)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

…derer exists
My first pass claimed NavigationRenderer had been deleted; it has not. The
component (layout/src/NavigationRenderer.tsx, 1327 lines) is publicly exported
and SDUI-registered as `navigation-renderer`, and fully implements separator
(:906) + badge/badgeVariant (:983-985, :1024-1025). The error came from a
truncated grep (head -3 showed only CHANGELOG/ROADMAP hits).
Corrected classification: badge/badgeVariant/separator are SURFACE-CONDITIONAL,
not dead — they render through the SDUI component but not through
UnifiedSidebar, which is what actually renders app.navigation in the console.
Disposition flips from enforce-or-prune to port-the-three-branches.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/mtooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@os-zhuang