Skip to content

feat(client): the final six route-audit gaps — meta drafts/published/FSM + automation descriptors (#3563 PR-5) - #3579

Merged
os-zhuang merged 1 commit into
mainfrom
claude/screen-flow-submit-resume-v9dqjx
Jul 27, 2026
Merged

feat(client): the final six route-audit gaps — meta drafts/published/FSM + automation descriptors (#3563 PR-5)#3579
os-zhuang merged 1 commit into
mainfrom
claude/screen-flow-submit-resume-v9dqjx

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

PR-5 of #3563 — the closing batch. Gap ratchet: 6 → 0 (from 27 at the start of the audit). Every dispatcher route that should be SDK-expressible now is, and the conformance guard keeps it that way.

The surfaces

meta (shapes mirrored from domains/meta.ts):

await client.meta.getPublished('lead', 'views/all_leads');   // ADR-0033; compound names unencoded, matching getItem
await client.meta.listDrafts({ packageId: 'com.acme.crm' }); // pending drafts the active-only lists hide
const { next } = await client.meta.getLegalNextStates('crm_lead', 'status', 'new');
// ADR-0020 FSM introspection — next: null (no FSM / from omitted), [] (dead-end), or the legal states

automation (shapes mirrored from domains/automation.ts):

await client.automation.listActions({ paradigm: 'flow' });   // ADR-0018 descriptors → designer's action picker
await client.automation.listConnectors({ type: 'rest' });    // ADR-0022
await client.automation.getRuntimeStatus();                  // per-flow enabled/bound engine state → Studio badges

A design validation worth noting

Since PR-1, main's ADR-0076 extraction moved /meta, /data, /actions, /mcp from the dispatcher's legacy if-chain into the domain registry. The guard absorbed that structural migration with zero edits — registry-enumerated domains and pinned legacy prefixes are checked as one set, which was the design intent. The ledger survived its first architecture shift untouched.

Ledger + docs

  • The last six rows flip gapsdk; the ratchet lands at 0 with the full 27→24→17→6→0 history recorded in the test comment.
  • Docs-site meta (7→11) and automation (15→18) rows updated to the real method counts.

Test plan

  • 6 new unit tests: compound-name passthrough, query building/omission, FSM from= forwarding and null semantics, descriptor filters, _status shape.
  • Client suite 146 passed; ledger guard green on the post-extraction main; ESLint clean.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LX9ut3MK3KykE11S9bJmv5


Generated by Claude Code

…FSM + automation descriptors (#3563 PR-5)

The gap ratchet reaches ZERO (from 27 at the start of the audit): every
dispatcher route that should be SDK-expressible now is, and the conformance
guard keeps it that way.

meta (shapes mirrored from domains/meta.ts):
- getPublished(type, name)          — GET /meta/:type/:name/published
  (ADR-0033; compound names pass through unencoded, matching getItem)
- listDrafts({packageId?, type?})   — GET /meta/_drafts (pending drafts the
  active-only lists hide — e.g. what an AI authored but nobody published)
- getLegalNextStates(object, field, from?) — GET /meta/objects/:name/state/:field
  (ADR-0020 D3.3 FSM introspection; next=null when no FSM / from omitted,
  [] for a declared dead-end)

automation (shapes mirrored from domains/automation.ts):
- listActions({paradigm?, source?, category?}) — GET /automation/actions
  (ADR-0018 descriptors backing the designer's action picker)
- listConnectors({type?})           — GET /automation/connectors (ADR-0022)
- getRuntimeStatus()                — GET /automation/_status (per-flow
  enabled/bound engine state behind the Studio badges)

Ledger: the last six rows flip to sdk; ratchet 6 → 0. Docs-site meta and
automation rows updated to the real method counts.

Note: main's ADR-0076 extraction moved /meta /data /actions /mcp into the
domain registry since PR-1; the guard absorbed the migration with no edits —
registry-enumerated domains and pinned legacy prefixes are checked as one
set, which was the design intent.

Verified: client 146 passed (6 new), ledger guard green on the new main,
eslint clean.

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

vercel Bot commented Jul 27, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Jul 27, 2026 7:52am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests tooling labels Jul 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 2 package(s): @objectstack/client, @objectstack/runtime.

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

  • content/docs/ai/skills-reference.mdx (via packages/client)
  • content/docs/api/client-sdk.mdx (via @objectstack/client, packages/runtime)
  • content/docs/api/data-flow.mdx (via @objectstack/client)
  • content/docs/api/environment-routing.mdx (via @objectstack/client)
  • content/docs/api/error-catalog.mdx (via @objectstack/client)
  • content/docs/api/index.mdx (via @objectstack/runtime)
  • content/docs/api/wire-format.mdx (via @objectstack/runtime)
  • content/docs/automation/hook-bodies.mdx (via @objectstack/runtime)
  • content/docs/concepts/north-star.mdx (via packages/runtime)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/runtime)
  • content/docs/deployment/index.mdx (via @objectstack/runtime)
  • content/docs/deployment/production-readiness.mdx (via @objectstack/runtime)
  • content/docs/deployment/single-project-mode.mdx (via @objectstack/runtime)
  • content/docs/deployment/vercel.mdx (via @objectstack/runtime)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/client, @objectstack/runtime)
  • content/docs/kernel/runtime-services/data-service.mdx (via packages/client)
  • content/docs/kernel/runtime-services/index.mdx (via packages/client)
  • content/docs/permissions/authentication.mdx (via @objectstack/client, @objectstack/runtime)
  • content/docs/permissions/authorization.mdx (via packages/runtime)
  • content/docs/plugins/packages.mdx (via @objectstack/client, @objectstack/runtime)
  • content/docs/protocol/kernel/http-protocol.mdx (via @objectstack/runtime)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/runtime)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/runtime)
  • content/docs/protocol/kernel/realtime-protocol.mdx (via @objectstack/client)
  • content/docs/releases/implementation-status.mdx (via @objectstack/client, @objectstack/runtime)
  • content/docs/releases/v16.mdx (via @objectstack/client)

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 27, 2026 08:04
@os-zhuang
os-zhuang merged commit 0164f40 into main Jul 27, 2026
16 checks passed
@os-zhuang
os-zhuang deleted the claude/screen-flow-submit-resume-v9dqjx branch July 27, 2026 08:04
os-zhuang added a commit that referenced this pull request Jul 27, 2026
…he 2 PR-1 (#3587) (#3609)

The dispatcher tranche (#3569..#3579) closed its 27 gaps and guards them;
this brings the same regime to the second, larger surface. All 89 routes
@objectstack/rest mounts now carry a reviewed disposition in
rest-route-ledger.ts: 38 sdk, 43 gap (ratcheted), 3 server-only, 3 public,
2 mismatch.

The guard enumerates BOTH sources for real — RouteManager routes via the
getRoutes() introspection seam that already existed, and the two
RouteManager-bypassing registrars (package-routes.ts,
external-datasource-routes.ts) via captured mock-server registrations —
so no pinned-by-hand list anywhere. The client-method direction lives in
packages/client next to the SDK (same package-boundary split as tranche 1;
a rest->client edge is unbuildable). All five guard directions were
negative-tested and fail with the offending route named.

Mismatches the audit surfaced, ledgered not fixed: POST /api/v1/packages
is a publish-vs-install shape collision between REST and the dispatcher
(REST registers first and wins); REST's GET /ui/view/:object/:type path
dialect is unreachable by the SDK's query-param dialect. The
service-storage / service-i18n autonomous mounts are a third surface,
explicitly scoped out and noted in the ledger header.

No behavior change: data + tests only, plus a scope-note refresh in the
runtime ledger.

Refs #3587


Claude-Session: https://claude.ai/code/session_01LX9ut3MK3KykE11S9bJmv5

Co-authored-by: Claude <noreply@anthropic.com>
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/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants