Skip to content

feat(client): close the final 17 REST gaps — ratchet 17→0 (#3587 batches 4+5/5) - #3633

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

feat(client): close the final 17 REST gaps — ratchet 17→0 (#3587 batches 4+5/5)#3633
os-zhuang merged 1 commit into
mainfrom
claude/screen-flow-submit-resume-v9dqjx

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

The closing act of the #3587 gap backlog. Batches 1–3 (#3625, #3626, #3629) took the ledger 43 → 17; this PR closes the remaining 17 across two batches and rests the ratchet at ZERO — every REST route is now either SDK-expressed or carries a reviewed non-sdk disposition, with the two-sided conformance guard holding the line.

Batch 4 — sharing-rules 5 + security-explain 2 + search 1

Method Route Notes
shares.rules.list({object?, activeOnly?}) GET /sharing/rules tenant-wide rule admin (M10.17)
shares.rules.save(rule) POST /sharing/rules upsert; 400 [VALIDATION_FAILED]
shares.rules.get(idOrName) GET /sharing/rules/:idOrName 404 [RULE_NOT_FOUND]
shares.rules.delete(idOrName) DELETE /sharing/rules/:idOrName 204-safe; materialised grants cascade
shares.rules.evaluate(idOrName) POST /sharing/rules/:idOrName/evaluate reconcile grants
security.explain(request) POST /security/explain ADR-0090 D6; both GET/POST ledger rows point here — one ExplainRequestSchema contract, two transports
search(q, {objects?, limit?, perObject?}) GET /search top-level method, global cross-object search (M10.5)

Batch 5 — data-actions 2 + email 1 + analytics 1 + external-datasource 5

Method Route Notes
data.clone(object, id, overrides?) POST /data/:object/:id/clone gated by enable.clone; overrides nested
data.export(object, opts?) GET /data/:object/export returns the raw Response — a file stream (CSV/JSON/XLSX attachment), not a JSON envelope; the ledger row documents this
email.send(message) POST /email/send 200 for sent/queued/failed — branch on status
analytics.queryDataset(payload) POST /analytics/dataset/query ADR-0021 REST dialect, distinct from analytics.query's dispatcher dialect
datasources.external.listTables/draft/import/refreshCatalog/validate /datasources/:name/external/… ADR-0015 Addendum federation admin; direct-mount rows, 503-degrading

Ledger

  • 17 rows gapsdk (including the two direct-mount external-datasource rows the mock-server enumeration guards).
  • Ratchet comment now records the full five-batch history and pins the bound at 0 — a new gap row demands an explicit, reviewed decision.
  • client-sdk.mdx surface table updated: data 12, analytics 4, security 4, shares 8, plus email / datasources / search rows.

Verification

  • @objectstack/client: 163/163 (+10 URL-pinning tests across the two batches), bare tsc clean.
  • @objectstack/rest: 394/394 (guard green at ratchet 0).
  • Changesets: client minor ×2, rest patch ×2.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LX9ut3MK3KykE11S9bJmv5


Generated by Claude Code

…hes 4+5/5)

Batch 4 — sharing-rules 5 + security-explain 2 + search 1:
shares.rules.{list,save,get,delete,evaluate} administer tenant-wide
sharing rules (M10.17; delete 204-safe, grants cascade).
security.explain speaks the ADR-0090 D6 ExplainRequestSchema contract
via the POST transport (the GET query form is the same contract — both
ledger rows point at it). Top-level client.search covers global
cross-object search (M10.5).

Batch 5 — data-actions 2 + email 1 + analytics 1 + external-datasource 5:
data.clone (enable.clone duplication, overrides nested), data.export
(streaming CSV/JSON/XLSX; returns the raw Response — a file stream, not
a JSON envelope, and the ledger row says so), email.send (IEmailService;
branch on returned status), analytics.queryDataset (ADR-0021 REST
dataset-query dialect, distinct from query's dispatcher dialect), and
datasources.external.{listTables,draft,import,refreshCatalog,validate}
(ADR-0015 Addendum federation admin, 503-degrading direct-mounts).

Every REST route is now either SDK-expressed or carries a reviewed
non-sdk disposition; the ratchet rests at ZERO and stays there. Docs:
client-sdk.mdx surface table updated (data 12, analytics 4, security 4,
shares 8 + email/datasources/search rows).

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 11:19am

Request Review

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

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

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

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/client)
  • content/docs/api/client-sdk.mdx (via @objectstack/client)
  • 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, @objectstack/rest)
  • content/docs/api/error-handling-server.mdx (via @objectstack/rest)
  • content/docs/api/index.mdx (via @objectstack/rest)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/client)
  • 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)
  • content/docs/plugins/index.mdx (via @objectstack/rest)
  • content/docs/plugins/packages.mdx (via @objectstack/client, @objectstack/rest)
  • content/docs/protocol/kernel/i18n-standard.mdx (via packages/rest)
  • content/docs/protocol/kernel/realtime-protocol.mdx (via @objectstack/client)
  • content/docs/releases/implementation-status.mdx (via @objectstack/client, @objectstack/rest)
  • content/docs/releases/v12.mdx (via @objectstack/rest)
  • 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 11:27
@os-zhuang
os-zhuang merged commit 6e62a93 into main Jul 27, 2026
17 checks passed
@os-zhuang
os-zhuang deleted the claude/screen-flow-submit-resume-v9dqjx branch July 27, 2026 11:27
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