Skip to content

cloud seam: derive KNOWN_METADATA_CATEGORIES and the artifact-envelope key list in cloud-artifact-helpers.ts from @objectstack/spec's COMPOSE_KEY_DISPOSITIONS / STACK_DEFINITION_KEYS (#14877 follow-up) #16084

Description

@claude

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

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions