feat(client,spec)!: delete 21 dead SDK methods + the four ghost route tables under them (#3612)#3616
Merged
Merged
Conversation
… tables under them (#3612) Five client families built URLs no server surface mounts (dispatcher, REST, and autonomous service mounts all checked in the #3587 audit): permissions x3, realtime x6, workflow x3, views x5, notifications device/prefs x4. Every call was a guaranteed 404. Each family was underwritten only by an unconsumed spec DEFAULT_*_ROUTES table — the same disease DEFAULT_DISPATCHER_ROUTES had (#3586) — so DEFAULT_PERMISSION/VIEW/ WORKFLOW/REALTIME_ROUTES go with them; getDefaultRouteRegistrations() returns 9. ApiRouteType loses its client-only 'views'|'permissions' extras. Kept: events (local buffer, no HTTP), notifications list/markRead/ markAllRead (dispatcher-served), approvals.* (ADR-0019), and meta.getLegalNextStates (the real FSM read). Docs/README/integration-test spec swept; api-surface.json regenerated (-4 exports). Re-adding any of these surfaces now requires the server route to exist and a route-ledger row proving it (#3569/#3609 guards). The one external consumer (objectui useClientNotifications dead delegates) is trimmed in a companion objectui change. Closes #3612 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LX9ut3MK3KykE11S9bJmv5
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Contributor
📓 Docs Drift CheckThis PR changes 2 package(s): 108 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
|
os-zhuang
marked this pull request as ready for review
July 27, 2026 10:00
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #3612 (a #3587 audit finding). Rides the open breaking-change window (#3562/#3581/#3593/#3595 precedent), shipped as
minorper the launch-window convention.What
Five client surface families built URLs that exist on no server surface — dispatcher,
@objectstack/rest, and the autonomous service mounts were all checked in the #3587 audit. Every call was a guaranteed 404. Deleted:permissionscheck,getObjectPermissions,getEffectivePermissionsrealtimeconnect,disconnect,subscribe,unsubscribe,setPresence,getPresence(service-realtimeregisters zero HTTP routes; the dispatcher deliberately never advertises/realtime)workflowgetConfig,getState,transitionviewslist,get,create,update,delete(no/ui/viewsroute anywhere)notificationsregisterDevice,unregisterDevice,getPreferences,updatePreferences(ADR-0012's server side was never built)Each family was underwritten only by an unconsumed spec
DEFAULT_*_ROUTEStable — the same diseaseDEFAULT_DISPATCHER_ROUTEShad (#3586, deleted in #3595) — soDEFAULT_PERMISSION_ROUTES,DEFAULT_VIEW_ROUTES,DEFAULT_WORKFLOW_ROUTES,DEFAULT_REALTIME_ROUTESare deleted with them (tombstone at the old site);getDefaultRouteRegistrations()returns 9 registrations and its tests assert the removed categories stay gone.ApiRouteTypeloses its client-only'views' | 'permissions'extras.Kept, deliberately:
client.events(explicitly local in-memory buffer, no HTTP),notifications.list/markRead/markAllRead(dispatcher-served, ledgered),approvals.*(ADR-0019 — the real decision API),meta.getLegalNextStates(the real FSM read).Docs swept: client README (dead example, namespace list, usage snippets),
content/docs/api/client-sdk.mdx(coverage table + snippets),CLIENT_SERVER_INTEGRATION_TESTS.md(dead sections 7–8 tombstoned — its TC-WF-004/005 were doubly stale, referencingworkflow.approve/rejectthat ADR-0019 removed long ago).api-surface.jsonregenerated (−4 exports, gate green).Consumer impact
Repo-wide and objectui-wide sweeps found one consumer: objectui's
useClientNotificationshook delegates to the three dead device/preference methods (client: any-typed, every call try/catch-wrapped — runtime behavior today is already an error). A companion objectui PR trims those delegates; nothing consumes them downstream (barrel export only).Re-adding any removed surface now requires the server route to exist and a route-ledger row proving it — the #3569/#3609 conformance guards make silent re-drift impossible, and the upcoming reverse-direction guard (#3587) can now land with zero exemptions.
Verification
@objectstack/spec: 255 files / 6689 tests pass;check:api-surfacegreen.@objectstack/client: 129 tests pass (21 dead tests removed with their methods); baretsc -pclean.feat(…)!marker.🤖 Generated with Claude Code
https://claude.ai/code/session_01LX9ut3MK3KykE11S9bJmv5
Generated by Claude Code