Uh oh!
There was an error while loading. Please reload this page.
docs(api): stop documenting a /graphql route the dispatcher removed - #10828
Conversation
`content/docs/api/index.mdx` carried GraphQL as a behaviour contract, and both halves of it were false. Re-derived at this base: 1. `IGraphQLService` exists nowhere in `packages/**/src` — the only survivors repo-wide are three CHANGELOGs, `packages/spec/llms.txt:171`, and the doc page itself. 2. The route is not mounted, so it cannot answer 501. `packages/runtime/src/http-dispatcher.ts:2026` is the whole of it: `// /graphql removed — GraphQL is not in the product plan (#2462 follow-on).` There is no `createGraphQLDomain` beside the fifteen domains registered at `http-dispatcher.ts:556-574`, and no `handleGraphQL` in the runtime at all. Remove, do not rewrite. `packages/runtime/src/domains/unavailable.ts` is the canonical statement of what the "absent capability" table's two rows are: 501 is "the route is there; the implementation is not — every domain mounted unconditionally", 404 is "the route is not there". Every other entry in the 501 row (`/automation`, `/notifications`, `/ui/*`, `/ai/*`, `/auth/*`, `/i18n/*`) has a domain module registered unconditionally; `/graphql` has none, so it belongs in neither list. `content/docs/permissions/authorization.mdx:53` already says so in prose — "`/graphql` now 404s". A row reading "not available" would still tell a reader GraphQL was once a surface worth listing on the API landing page, which is the false implication itself. So the row goes. Sites corrected: - `api/index.mdx:19` — GraphQL row deleted from "Surfaces at a glance". - `api/index.mdx:172` — `/graphql` dropped from the 501 example list. - `api/index.mdx:28` — "REST and GraphQL are how code consumes your app" → "REST is how code consumes your app". Same page, same false claim; leaving it would have left the page contradicting its own surfaces table. - `getting-started/quick-reference.mdx:135`, `data-modeling/fields.mdx:320` — the two lower-severity residues the card names, same family. Docs-only: `content/` sits outside every workspace package and `apps/docs` is `private: true`, so this publishes nothing — skip-changeset. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DdCnBGcHeufjrq7drTD3wt
Ruling on the open question: A — accept the superset as shipped. Do not split.Reviewer of record: You flagged that the dispatch prompt said " The two extra edits are one token each, and you checked the one thing that could have made them expensive: PR #10695 also touches Verified independently before accepting
The four out-of-scope findingsAll four are well-formed and were filed rather than smuggled into this PR, which is the behaviour the lane wants. #10832 has already been triaged and dispatched this round — its Flipping ready and arming. Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#10710
content/docs/api/index.mdxdocumented GraphQL as a behaviour contract — a route thatexists and answers a specific status — and both halves were false. A reader following it
writes a client that handles a 501 from an endpoint that is not mounted at all.
The three facts, re-derived at this base (
origin/main@f4e5d916d6)IGraphQLServicecontractpackages/**/src. Repo-wide the only survivors are three CHANGELOGs,packages/spec/llms.txt:171, and the doc page itself./graphqlreturns 501packages/runtime/src/http-dispatcher.ts:2026is the whole of it:// /graphql removed — GraphQL is not in the product plan (#2462 follow-on).handleGraphQLin the runtime. The only hits are test doubles:packages/adapters/hono/src/__mocks__/runtime.ts:6,hono-wildcard-fallthrough.test.ts:37,hono.test.ts:10.All three still held. Line numbers were unmoved; #10583's sweep has landed (that issue is
closed) and none of its five sites overlap these.
Remove, not rewrite — and what settled it
The card asked whether
:172's table is genuinely a list of "mounted; nothing implementsit". It is, and
packages/runtime/src/domains/unavailable.tsis the canonical statementof the distinction the table's two rows encode:
Every other entry in the 501 row has a domain module registered unconditionally at
http-dispatcher.ts:556-574—createAutomationDomain,createNotificationsDomain,createUiDomain,createAiDomain,createAuthDomain,createI18nDomain— each exitingthrough
capabilityUnavailable().packages/runtime/src/domains/ai.ts:107says it inone line: "501, not 404:
/ai/*IS mounted, so the request reached a handler with nothingbehind it." There is no
createGraphQLDomain.So
/graphqlis in neither state and belongs in neither row — removing it is right andrewriting it into the 501 list would be wrong.
content/docs/permissions/authorization.mdx:53already states the outcome in prose: "the dispatcher GraphQL endpoint left when the GraphQL
surface was removed (
/graphqlnow 404s)".The same reasoning removes the
:19row rather than rewriting it to "not available": a rowin a table headed "Status in this repo" still tells a reader GraphQL was a surface worth
listing on the API landing page, which is the false implication itself. Every other row
describes something the repo actually has (REST generated, Realtime as an in-process
service, MCP, OData vocabulary inside the REST list endpoints). GraphQL has no route, no
contract, and no vocabulary.
Before / after
api/index.mdx:19— deleted from "Surfaces at a glance":-| **GraphQL** | ⚠️ Route is wired but **bring-your-own service**: `/graphql` returns 501 unless an implementation of the `IGraphQLService` contract is registered — none ships in the open framework |api/index.mdx:172—/graphqldropped from the 501 examples:api/index.mdx:28— declared bounded in-place fix, same page and same false claim:Not one of the two sites the card numbers, but leaving it would have left the page
contradicting its own surfaces table one screen later.
The two lower-severity residues the card's body names, same family, one token each:
quick-reference.mdxis also touched by open PR #10695, at line ~51 (the UI-Protocolblurb) — a disjoint hunk 84 lines from this one, patch inspected before editing.
Gates
node scripts/pm/dispatch-gates.mjsderived 15 families from the changed paths — includingcheck:quick-reference-counts, which only appears becausequick-reference.mdxis in thediff. All 15 run green at
6f17c36947, the head of this branch; exit codes captured byredirect before any pipe, never off a
tail. Their own verdict lines:check:doc-anchors— "272 internal #fragment link(s) across 408 source file(s) all resolve to a real heading" (the deleted row broke no anchor)check:quick-reference-counts— "13 section(s), every "(N of M schemas)" heading matches its table AND content/docs/references/"check:doc-authoring— "389 files clean — no bare metadata literals"check-doc-frontmatter— "403 page(s) under content/docs parse with yaml@2.9.0"check:docs-audit-scope— "scope is in sync with content/docs/: 189 hand-written doc(s)"lint/check:doc-formula-expressions— "self-test: 30 cases passed", "22 record-scoped formula example(s) … judged clean"check:docs-redirects,check:role-word,check:published-readme-links,check:cross-package-test-inputs(×2),spec/check:{empty-state,liveness,strictness-ledger,variant-docs}lint/check:doc-formula-expressionswas red on first run for an unrelated reason — a freshworktree with no
@objectstack/formula/dist— and went green afterpnpm --workspace-concurrency=2 --filter '@objectstack/lint^...' build. No ablation applieshere: this is a docs-only change with no guard under test.
No changeset, confirmed for the files actually touched rather than defaulted:
content/sits outside every entry in
pnpm-workspace.yaml, andapps/docs(@objectstack/docs) isprivate: true. This publishes nothing →skip-changeset.Deliberately not touched
packages/runtime/src/http-dispatcher.ts— the code is correct; the docs were wrong.IGraphQLService— the contract does not exist and/graphqlwas removed from the dispatcher #10583's five sites.content/docs/api/plugin-endpoints.mdx(a whole### GraphQL (/graphql) — Plugin Requiredsection with a
POST /graphqlrow) andcontent/docs/api/declarative-endpoints.mdx:16—sharper than either site this card names, but named nowhere in it. Filed separately.
packages/spec/llms.txt:171— filed separately. It is hand-kept, not generated: noscript in
scripts/orpackages/spec/scripts/writes it (the only reference ischeck-published-files.mjs, which just asserts it is in thefilesarray), and it carriesa hand-typed
> **Last Updated**: 2026-02-12header. So the generator is not the cause here.content/docs/references/**— generated; filed against the generator per triage.Generated by Claude Code
Generated by Claude Code