Skip to content

[finding] composeStacks drops a stack's grants and seed rows when its permissions / data is not an array — the composed artifact is silently incomplete, which ruling 5690859601 forbids (follow-up C of #18239) #19784

Description

@objectstack-fleet

Filing gate: ① (a product defect with a named site). Reader: the domain:spec seat that dispatches it — the fix site is packages/spec/src/stack.zod.ts step 3 (CONCAT_ARRAY_FIELDS concat pass). ⛔ Filed bare for triage: no domain:*, no priority:*, no type asserted.

Filed by domain:spec seat 4 (session_01VWsFyWDp8Rjb2Ma6a3Cyo8, seat post #18917) because the maintainer's ruling on #18239 routes it here, verbatim (comment 5690859601, batch #139 item 2 · letter B · 「同意」):

permissions / data keep PR #18212's skip-and-warn for now. The dev measures, in the same PR, one line: does skipping a malformed permissions or data change the composed artifact's content (not only validation)? If yes, that is reported on this card and the spec lane files the card that extends loud refusal to them (C as a measured follow-up, ⛔ not a silent widening here).

The measurement — answer: YES

Taken by the os-dev round implementing #18239 (PR #19783, head 927ea9bfa6), reported in its os-dev-report on #18239. ⚠️ The seat has ⛔ NOT re-run it; it is the implementing round's reading, relayed as such:

  • stack A permissions: [pa] + hand-built stack B permissions: { name: 'pb' } (a non-array) ⇒ composed permissions is ['pa'] — B's grant is absent, a console warning only.
  • same shape for data ⇒ composed data is ['a_item'] — B's seed rows absent.
  • a non-object ENTRY (permissions: [null, {pb}]) is carried as-is ⇒ content unchanged; only the non-array VALUE loses content.
  • where: step 3 (CONCAT_ARRAY_FIELDS, packages/spec/src/stack.zod.ts:1086 on origin/main 041c8cf6), ⛔ not fix(spec): resolve permission-set and seed object references against the release artifact, not the single stack #18212's step-3b collectors.

Contract

Ruling 5690859601: 「A composed artifact is complete or it is refused; 「success with a stack's objects silently missing」 is the concealment shape ③ forbids.」 — the same sentence, applied to grants and seed rows, is what this card asks to enforce. PR #19783 enforces it for objects (refusal STACK_SCHEMA_INVALID, 422).

⛔ What this card does not claim

  • ⛔ Not that every CONCAT_ARRAY_FIELDS key should refuse — the measurement covers permissions and data only; whoever takes it re-measures the other keys before widening the refusal to them.
  • ⛔ Not measured whether any authored stack reaches composition with such a shape (the strict defineStack parse already refuses it; the population is hand-built stacks and strict: false).

Dedupe

REST list of the 436 most recently updated issues (open + closed, to 2026-09-20T20:58Z) grepped locally (/search/* is refused by the egress proxy): CONCAT_ARRAY_FIELDS 0 · permissions … non-array 0 · lit control composeStacks 6 (#18239, #14512, #16075, #16348 closed, #18431 closed, the seat post) — none is this defect.

Dedupe words: composeStacks permissions non-array · CONCAT_ARRAY_FIELDS skip content loss · warnMalformedCollectionKey data dropped · loud refusal permissions data


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:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:specpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions