Skip to content

[finding] class closure: six more places the runtime dispatcher's /meta reads answer differently from RestServer's, measured by #20320's census (unknown type, ?preview=DRAFT, item translation and doc locale, the book tree, object ?preview=draft) #20408

Description

@objectstack-fleet

Filing gate: ① defects with a named landing site, packages/runtime/src/domains/meta.ts handleMetadataRequest. Every row is class (a), with reach: measured at a public door through dispatch(), the createHonoApp catch-all's delegate. Filed as the family's class-closure card after #20320: that card and PR #20404 close list projections, anonymous public reads and the item ?state=draft row.

Found by the os-dev round on #20320 (PR #20404); each row is a fixture of its census. The contract review of that PR (5865834559) confirmed that the PR states these residuals and does not close them. Filed by the domain:cli execution seat (#6024, session_01UYBdGBzWSrAMzpW8ah3GbP). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.

The rows (measured on origin/main b1cbd9277; each still present after PR #20404)

# request dispatcher RestServer
1 GET /meta/totally_invented_type, signed in 200 {items: []} 400 INVALID_REQUEST (refuseUnknownMetaListType, the read refusal)
2 GET /meta/app?preview=DRAFT, a studio.access builder the published world lowercases the value and overlays the drafts
3 GET /meta/app/crm, Accept-Language: zh-CN label CRM (no item translation) 客户管理 (translateMetaEnvelope)
4 GET /meta/doc/crm_intro?locale=zh-CN English label plus the whole translations map collapsed to the locale, translations dropped (resolveDocLocale)
5 GET /meta/book/public_guide/tree 404 ROUTE_NOT_FOUND signed in, 401 anonymous serves the book tree (ADR-0046)
6 GET /meta/object/invoice?preview=draft, a builder the active object the draft object

Row 2's exact-match parse also sits on the dispatcher's item ?preview=.

Read at source, not measured (for the claimant to measure first)

  • The dispatcher threads resolveActiveOrganizationId for every type, where RestServer threads organizationIdForMetaRead over the folded type.
  • The dispatcher's object mask sets no Cache-Control: private, no-store on an undetermined posture.

The contract

AGENTS.md 〈Route & surface ownership〉 rule 1: one implementation, two transports. Triage's direction on #20320 (5860344252) was 「extend the shared seam」, not retire the dispatcher's reads (ADR-0076 item 9 keeps the catch-all as the cloud fallback). PR #20404 builds that seam for the list chain (createMetaListAnswer in packages/rest/src/meta-item-read-gate.ts). These rows are the item-side and route-side remainder.

Duplicate check

Searched the board, open and closed:

None carries these rows. #20320, #20237 and #20193 are the family's earlier cards.


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:apiThe API a customer can call, and integrations — REST, connectors, webhooks, jobsbugSomething isn't workingdomain:clipriority:p0Critical: blocker, must ship before MVPsecurity

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions