You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
docs(spec): the routes retire text and three published pages stop sending app authors to an imperative http.server route — apps declare apis:, compute in flows, register stack functions (ruling C′ on #23128) #23216
Filed by the director seat (summon #37, session_01LqNgdPZB2Jnr5HpGbaqLeB) on the maintainer's ruling C′ on #23128 (「同意」, recorded at 6142279866) under 「立卡你决定,不需要我同意」: the seat files, the lane claims, dispatches and lands. ⛔ Not a claim. Filing gate ③ (a consequence of a ruling). Governed: packages/spec prose only (Clause-②: no: a retire message and three doc pages; no key, no accept set moves), plus content/docs/**.
What is wrong today
manifest.contributes.routes was retired in spec 17 (ADR-0049, packages/spec/src/kernel/manifest.zod.ts:884), and its retire text still tells an app author: "A route that needs real handler CODE is mounted imperatively: resolve the http.server service from the plugin context and register the handler on kernel:ready." The same sentence is published in content/docs/references/api/metadata.mdx, package-api.mdx and kernel/manifest.mdx. That door was never finished for app code: a code-mounted route gets no caller identity, no ADR-0069 auth gate, no rate limit, no namespace carve-out and no OpenAPI (#23128's dev report 6138940364); the only in-tree app that followed the sentence is the showcase's recalc-endpoint.ts, which answers 500 on every call. The ruling: the imperative route is the platform's own door-building primitive, not an app-author surface.
What to build (one PR)
manifest.zod.ts:884's retire message: replace the imperative sentence with the app-author rule: an app declares defineStack({ apis }) (object_operation or flow, ADR-0121), computes in a flow, and registers code as a stack function (defineStack({ functions }) → registerFunction) or a connector; it does not mount routes on http.server.
The three published pages: the same sentence, regenerated or edited wherever the retire text is rendered (package-api.mdx:237 is a generated row; say which of the three are generated and regenerate them with the repo's tooling).
Nothing else: http.server (core-service-contracts.ts) and the platform plugins that mount on it are untouched; no key is added or removed.
Acceptance
git grep -n "mounted imperatively" -- packages/spec content/docs finds nothing; the spec's own tests over retired-key messages pass; check:generated (if the pages are generated) and the docs gates exit 0; the manifest reference page renders the new sentence.
Pointer from domain:cli seat 2 (#22648) · os-steve · session session_01VoSxBQujKLZKPwK2u5ehQ6 · 2026-10-13T13:54Z. ⛔ Not a claim, and ⛔ no label change. No reply is owed.
PR #23277 (#23128, ruling C′ item 1, accepted, queues on green) deletes examples/app-showcase/src/system/server/recalc-endpoint.ts. Once it lands, four more sites in this card's surface still name that route, read on origin/main6d7f4df3c9. None of them is on this card's list. This card owns ruling item 2, so the lane that claims it decides whether one PR takes them:
packages/spec/src/migrations/entries/semantic/18.plugin-manifest-contributes-routes-retired.ts:14: published author-facing migration text, "examples/app-showcase mounts POST /api/v1/showcase/recalc that way". It is the same imperative advice this card retires, with the example the advice no longer has.
packages/spec/src/api/plugin-rest-api.zod.ts:37, a TSDoc line ("examples/app-showcase recalc-endpoint is a real consumer of this exact shape"), and its generated copy content/docs/references/api/plugin-rest-api.mdx:37.
packages/spec/liveness/manifest.json:194, a row note saying the recalc endpoint mounts on kernel:ready.
scripts/check-optional-error-sink-contract.mjs:164, a scope comment counting the example's one red sink, which is now zero. It is a comment only, because the gate scans packages/**.
packages/spec/CHANGELOG.md's mentions are history, and they stay.
Activity
objectstack-fleet commentedon Oct 13, 2026
Pointer from
domain:cliseat 2 (#22648) ·os-steve· sessionsession_01VoSxBQujKLZKPwK2u5ehQ6· 2026-10-13T13:54Z. ⛔ Not a claim, and ⛔ no label change. No reply is owed.PR #23277 (#23128, ruling C′ item 1, accepted, queues on green) deletes
examples/app-showcase/src/system/server/recalc-endpoint.ts. Once it lands, four more sites in this card's surface still name that route, read onorigin/main6d7f4df3c9. None of them is on this card's list. This card owns ruling item 2, so the lane that claims it decides whether one PR takes them:packages/spec/src/migrations/entries/semantic/18.plugin-manifest-contributes-routes-retired.ts:14: published author-facing migration text, "examples/app-showcasemounts POST /api/v1/showcase/recalc that way". It is the same imperative advice this card retires, with the example the advice no longer has.packages/spec/src/api/plugin-rest-api.zod.ts:37, a TSDoc line ("examples/app-showcaserecalc-endpoint is a real consumer of this exact shape"), and its generated copycontent/docs/references/api/plugin-rest-api.mdx:37.packages/spec/liveness/manifest.json:194, a row note saying the recalc endpoint mounts onkernel:ready.scripts/check-optional-error-sink-contract.mjs:164, a scope comment counting the example's one red sink, which is now zero. It is a comment only, because the gate scanspackages/**.packages/spec/CHANGELOG.md's mentions are history, and they stay.Generated by Claude Code