Skip to content

feat(spec): ObjectNavItem.filters — declarative slices on the bare data surface#2626

Merged
os-zhuang merged 1 commit into
mainfrom
claude/spec-object-nav-filters
Jul 5, 2026
Merged

feat(spec): ObjectNavItem.filters — declarative slices on the bare data surface#2626
os-zhuang merged 1 commit into
mainfrom
claude/spec-object-nav-filters

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Framework half of objectstack-ai/objectui#2251 (design: objectui ADR-0055; runtime shipped in objectstack-ai/objectui#2255). Purely additive.

Why

objectui now serves /:objectName/data — a parameterized bare data surface where URL filter[<field>]=<value> conditions apply over everything row-level security permits, anchored to no saved view. objectui's resolveHref already serializes object nav items carrying filters to that route, and @object-ui/types mirrors the field — but the authoritative contract lives here. Without the spec field, server-side validation rejects such items and AI generation has no schema basis to emit them.

What

  • packages/spec/src/ui/app.zod.tsObjectNavItemSchema gains optional filters: z.record(z.string(), z.string()) (equality semantics). JSDoc + .describe() text mirrors @object-ui/types verbatim (one contract, two mirrors): serialization target, one-off-slice vs named-view guidance, {current_user_id}/{current_org_id} template support, and target precedence recordIdfiltersviewName. Example block added.
  • packages/spec/src/ui/app.test.ts — two new schema tests: accepts a filters item, rejects non-string filter values.
  • skills/objectstack-ui/SKILL.md — "Two Run Modes" (ADR-0047) becomes three: data mode / bare filters slice / interface page, with a comparison table, decision signals ("drill-through / assigned-to-me link → filters, don't author a view"), the one-sentence generation rule, and a pointer to the canonical objectui app-composition guide + ADR-0055 rather than a forked copy of the tables. Nav example and the item-type table updated.
  • content/docs/ui/apps.mdx — Object Navigation section now documents the three target fields (viewName / recordId / filters) with precedence and a filters example, including the "not a security feature" caveat.
  • Changesetminor for @objectstack/spec.

api-surface.json regenerated with no diff (field-level addition, no new exports).

How AI discovers the new route (the chain this PR completes)

spec field + .describe() (schema-driven generation reads this) → skill decision rules (when to choose filters) → one-sentence prompt rule → objectui-side evals. objectui's three links landed in objectui#2255; this PR adds the framework links.

Verification

  • @objectstack/spec full suite: 6692/6692 pass (incl. 2 new tests)
  • pnpm build + gen:api-surface: clean, surface unchanged

Remaining (tracked in objectui#2251)

Server-side enforcement — row-level filter injection and dropping predicates on unreadable fields (anti filter-oracle) at the API layer — is intentionally not part of this spec-sync PR.

🤖 Generated with Claude Code

https://claude.ai/code/session_018m3GX7EMKNPDZuee152EKK


Generated by Claude Code

…ta surface

Sync the framework half of objectui#2251 / objectui ADR-0055 (the
/:objectName/data parameterized bare data surface shipped in
objectui#2255):

- spec: ObjectNavItemSchema gains optional filters
  (Record<string,string>, equality semantics) with JSDoc + .describe()
  mirroring @object-ui/types verbatim; example added; 2 new schema
  tests (accept filters + reject non-string values)
- skills/objectstack-ui: the 'Two Run Modes' section becomes three —
  data mode / bare filters slice / interface page — with the decision
  signals, the one-sentence generation rule, and a pointer to the
  canonical objectui app-composition guide instead of a forked copy;
  nav example + item-type table updated (target precedence
  recordId -> filters -> viewName)
- content/docs/ui/apps.mdx: Object Navigation section documents the
  three target fields and the filters example
- changeset: minor for @objectstack/spec

api-surface.json unchanged (field-level addition, no new exports).
Spec suite: 6692/6692 pass.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018m3GX7EMKNPDZuee152EKK
@vercel

vercel Bot commented Jul 5, 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 Jul 5, 2026 7:00am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests protocol:ui tooling size/m labels Jul 5, 2026
@github-actions

github-actions Bot commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

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

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

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via packages/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via packages/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cloud-artifact-api.mdx (via packages/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/getting-started/cli.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via packages/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via packages/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/profiles.mdx (via @objectstack/spec)
  • content/docs/permissions/roles.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/runtime-capabilities.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via packages/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via packages/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)

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.

@os-zhuang
os-zhuang marked this pull request as ready for review July 5, 2026 07:15
@os-zhuang
os-zhuang merged commit 2bb193d into main Jul 5, 2026
17 checks passed
@os-zhuang
os-zhuang deleted the claude/spec-object-nav-filters branch July 5, 2026 07:15
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 protocol:ui size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants