Filed by the domain:cli execution PM seat (pm:seat #6024, session session_01DvvamiacK328idtBYJBxV3) out of the isolated at-tier contract review of PR #18813 (record 5722342660, its finding F2). ⛔ Filed bare — finding only; domain:*, type and priority are triage's.
The shape
.changeset/18677-validate-per-package-authoring-pass.md — PR #18769's changeset, still pending and unreleased — declares its own change not breaking, and gives as the reason that the narrowing could not be exhibited. Verified by this seat at origin/main ad1f94e8ec, quoted verbatim from line 20:
No newly-refused input could be exhibited on any fixture — across the repo's own two-package example and three constructed variants the observable change is advisory-only … ⛔ not declared breaking, because the narrowing could not be exhibited and is bounded by an existing gate.
It is graded minor, and carries ⛔ no **BREAKING** banner and ⛔ no adr-0087: disposition marker — both absences measured by grep over the file at origin/main, ⛔ not recalled.
⭐ The newly-refused input WAS exhibited — on a fixture that card did not have
⚠️ This reading is the at-tier contract reviewer's, ⛔ not this seat's. This seat verified the changeset text and the two absences above at the tree; it ⛔ did not re-drive the CLI. The first act on this card is to reproduce the table; if it does not reproduce, that is a finding worth writing down too.
The reviewer drove os validate over CONFIG_FLIP — the two-package fixture shipped in PR #18813's packages/cli/test/lint-per-package-authoring-parity.test.ts, in which core owns pp_account and a sibling package owns the view displaying pp_account.industry, so the union fold sees a consumer and the per-package run does not:
os validate --json --strict on CONFIG_FLIP |
exit |
warnings |
validate.ts restored to the pre-#18769 blob (095c7f60ae^, blob bafa54b07f verified) |
0 |
0 |
| at head |
1 |
1 (the per-package survivor) |
⇒ os validate --strict gained a newly-refused input in #18769. The clause that declines the BREAKING banner rests on a negative — "could not be exhibited" — and the negative is false; the fixture that exhibits it simply did not exist when that changeset was written. ⭐ A property that could not be exhibited with the fixtures on hand is UNEXHIBITED, ⛔ not absent — which is this family's own governing lesson, turned on the family.
⚠️ Why this is worth a card rather than a shrug
The changeset is pending: it has not been consumed by a release, so what it says is still what the next @objectstack/cli CHANGELOG will tell an upgrader. An upgrader reading "nothing that builds today stops validating" and running os validate --strict in CI over a multi-package project can have that CI step start failing with no banner having warned them.
⇒ the repair is forward and cheap while the changeset is still pending: add the **BREAKING** banner and the ADR-0087 disposition the yes (narrowing) arm owes, and replace the "could not be exhibited" clause with the reading above. ⛔ That is an amendment to an unreleased file, ⛔ not a rewrite of landed history.
⛔ Not asserted
Dedupe words: 18677-validate-per-package-authoring-pass · narrowing could not be exhibited · pending changeset BREAKING banner · os validate --strict newly-refused input · ADR-0087 disposition missing
Dedupe run before filing, ⛔ not from memory: complete repo-scoped enumeration of 518 open issues over 6 pages (⚠️ REST /search/* answers 403 for this seat — «sessions are bound to their configured repositories» — so enumeration plus local match is the only instrument). 18677-validate-per-package-authoring-pass → 0; narrowing could not be exhibited → 0; os validate --strict → 0; BREAKING banner → 1 (#18124, a spec duration-rows card — ⛔ not this); ADR-0087 disposition → 8, nearest read and rejected: #18745 (the detector missing a FROM → TO line — a different instrument), #18815 (the four-doors table documenting rule FAMILIES not stack TIERS — same family, ⛔ different artefact). ⭐ Lit control per-package → 13 hits, so the zeros above are discriminations; negative control → 0.
Generated by Claude Code
Filed by the
domain:cliexecution PM seat (pm:seat#6024, sessionsession_01DvvamiacK328idtBYJBxV3) out of the isolated at-tier contract review of PR #18813 (record5722342660, its finding F2). ⛔ Filed bare —findingonly;domain:*, type and priority are triage's.The shape
.changeset/18677-validate-per-package-authoring-pass.md— PR #18769's changeset, still pending and unreleased — declares its own change not breaking, and gives as the reason that the narrowing could not be exhibited. Verified by this seat atorigin/mainad1f94e8ec, quoted verbatim from line 20:It is graded
minor, and carries ⛔ no**BREAKING**banner and ⛔ noadr-0087:disposition marker — both absences measured by grep over the file atorigin/main, ⛔ not recalled.⭐ The newly-refused input WAS exhibited — on a fixture that card did not have
The reviewer drove
os validateoverCONFIG_FLIP— the two-package fixture shipped in PR #18813'spackages/cli/test/lint-per-package-authoring-parity.test.ts, in whichcoreownspp_accountand a sibling package owns the view displayingpp_account.industry, so the union fold sees a consumer and the per-package run does not:os validate --json --strictonCONFIG_FLIPvalidate.tsrestored to the pre-#18769 blob (095c7f60ae^, blobbafa54b07fverified)⇒
os validate --strictgained a newly-refused input in #18769. The clause that declines the BREAKING banner rests on a negative — "could not be exhibited" — and the negative is false; the fixture that exhibits it simply did not exist when that changeset was written. ⭐ A property that could not be exhibited with the fixtures on hand is UNEXHIBITED, ⛔ not absent — which is this family's own governing lesson, turned on the family.The changeset is pending: it has not been consumed by a release, so what it says is still what the next
@objectstack/cliCHANGELOG will tell an upgrader. An upgrader reading "nothing that builds today stops validating" and runningos validate --strictin CI over a multi-package project can have that CI step start failing with no banner having warned them.⇒ the repair is forward and cheap while the changeset is still pending: add the
**BREAKING**banner and the ADR-0087 disposition theyes (narrowing)arm owes, and replace the "could not be exhibited" clause with the reading above. ⛔ That is an amendment to an unreleased file, ⛔ not a rewrite of landed history.⛔ Not asserted
os buildruns a per-package authoring-rule walkos validatedoes not — the residue #17069 left, in the same false-clean direction #18677 / PR fix(cli):os validateruns the per-package author-time rule passos buildalready ran #18769 should be retro-corrected, and what a landedyes (narrowing)that shipped declarednoowes beyond this changeset — the mandatory contract review for that PR was, in consequence, never performed. That is a governance question above this card and above the seat that filed it; ⛔ this card does not answer it and ⛔ must not be read as answering it.minoris already what ayesarm owes at least; ⛔ nothing here asks formajor(the launch window refuses it).os lintruns the per-package author-time rule pass the other two doors already ran #18813's own declaration is affected. It is not: that PR declaresyes (narrowing)with the banner and the ADR-0087 marker, and the review that measured this exhibited it while confirming that PR's arm. This card is strictly about the sibling changeset already onmain.Dedupe words:
18677-validate-per-package-authoring-pass·narrowing could not be exhibited·pending changeset BREAKING banner·os validate --strict newly-refused input·ADR-0087 disposition missingDedupe run before filing, ⛔ not from memory: complete repo-scoped enumeration of 518 open issues over 6 pages (⚠️ REST
/search/*answers 403 for this seat — «sessions are bound to their configured repositories» — so enumeration plus local match is the only instrument).18677-validate-per-package-authoring-pass→ 0;narrowing could not be exhibited→ 0;os validate --strict→ 0;BREAKING banner→ 1 (#18124, a spec duration-rows card — ⛔ not this);ADR-0087 disposition→ 8, nearest read and rejected: #18745 (the detector missing a FROM → TO line — a different instrument), #18815 (the four-doors table documenting rule FAMILIES not stack TIERS — same family, ⛔ different artefact). ⭐ Lit controlper-package→ 13 hits, so the zeros above are discriminations; negative control → 0.Generated by Claude Code