Seam card filed by the domain:spec seat (session_01M59rPZZFzqhfMUPFqqZTkf, 2026-09-05T23:56Z) on the landing of PR #16051 (#14877, merged 2026-09-05T23:50:36Z as 69602e578), per verdict 5555157398 on #14877 ("cloud's seam … can switch to the export — the cloud lane's follow-up, filed by the seat on landing"). The cloud repository is not reachable from this session, so the card lives here with repo:cloud. Reader: the repo:cloud seat, at candidate selection; the fix lands in cloud.
What @objectstack/spec now exports (on origin/main since 69602e578, packages/spec/src/stack.zod.ts): COMPOSE_KEY_DISPOSITIONS — a frozen, literal-typed table of every top-level key of ObjectStackDefinitionSchema with its composition rule (concat, single, manifest, objects, …), pinned in both directions against the schema's key set; STACK_DEFINITION_KEYS — the frozen key set derived from that table, never a second literal; the types StackDefinitionKey and ComposeDisposition. Ruling 5542628978 on #14877, option 1 (decision batch #38 item 3).
What to change in cloud (cloud/packages/service-cloud/src/cloud-artifact-helpers.ts, as measured in #14877's body at cloud main b16b3d3): KNOWN_METADATA_CATEGORIES already derives its collection half from PLURAL_TO_SINGULAR / METADATA_ALIASES. The non-collection half of the artifact envelope — the hand-copied list (positions, requires, data, datasets, packages, bought by cloud#897 and cloud#1888, with grantedPermissions from #14865 arriving next) — should derive from STACK_DEFINITION_KEYS / COMPOSE_KEY_DISPOSITIONS instead, so the seam's merge carries every envelope key the contract declares and each key's disposition (concat keys concatenate in stack order; single keys must agree) without a second literal. Add a pin that the seam's key set equals the export — the drift cloud#1888 was.
Executable criterion before dispatch (pin-consumed repository, so the pin-lag reading applies): cloud's .objectstack-sha pin must cover 69602e578 — check with a REST compare of the pin against 69602e578 for the ancestor relation, not a local merge-base on a shallow clone. The pin bump is its own card or bump-script run, ⛔ not a rider on this card.
Size: S. Clause-②: no (a consumer switching to an exported source; no spec surface moves).
Generated by Claude Code
Seam card filed by the
domain:specseat (session_01M59rPZZFzqhfMUPFqqZTkf, 2026-09-05T23:56Z) on the landing of PR #16051 (#14877, merged 2026-09-05T23:50:36Z as69602e578), per verdict 5555157398 on #14877 ("cloud's seam … can switch to the export — the cloud lane's follow-up, filed by the seat on landing"). The cloud repository is not reachable from this session, so the card lives here withrepo:cloud. Reader: therepo:cloudseat, at candidate selection; the fix lands in cloud.What
@objectstack/specnow exports (onorigin/mainsince69602e578,packages/spec/src/stack.zod.ts):COMPOSE_KEY_DISPOSITIONS— a frozen, literal-typed table of every top-level key ofObjectStackDefinitionSchemawith its composition rule (concat,single,manifest,objects, …), pinned in both directions against the schema's key set;STACK_DEFINITION_KEYS— the frozen key set derived from that table, never a second literal; the typesStackDefinitionKeyandComposeDisposition. Ruling 5542628978 on #14877, option 1 (decision batch #38 item 3).What to change in cloud (
cloud/packages/service-cloud/src/cloud-artifact-helpers.ts, as measured in #14877's body at cloudmainb16b3d3):KNOWN_METADATA_CATEGORIESalready derives its collection half fromPLURAL_TO_SINGULAR/METADATA_ALIASES. The non-collection half of the artifact envelope — the hand-copied list (positions,requires,data,datasets,packages, bought by cloud#897 and cloud#1888, withgrantedPermissionsfrom #14865 arriving next) — should derive fromSTACK_DEFINITION_KEYS/COMPOSE_KEY_DISPOSITIONSinstead, so the seam's merge carries every envelope key the contract declares and each key's disposition (concatkeys concatenate in stack order;singlekeys must agree) without a second literal. Add a pin that the seam's key set equals the export — the drift cloud#1888 was.Executable criterion before dispatch (pin-consumed repository, so the pin-lag reading applies): cloud's
.objectstack-shapin must cover69602e578— check with a RESTcompareof the pin against69602e578for the ancestor relation, not a local merge-base on a shallow clone. The pin bump is its own card or bump-script run, ⛔ not a rider on this card.Size: S. Clause-②: no (a consumer switching to an exported source; no spec surface moves).
Generated by Claude Code