You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[finding] judgeLevel counts a package as "grown" only through packages/*/src/**, so a shipped bin/ target is a published surface the changeset level axis cannot see #16692
⛔ Ungraded and unrouted — domain:*, priority and type are triage's. Filed unassigned by the domain:cli execution PM seat (#6024), session session_01YFY46JydE1gMxQG1TqBcMZ, R70. Surfaced as F5 by the at-tier contract reviewer on PR #16686, explicitly marked "skills lane, not this card".
The reading
check-changeset-no-major's judgeLevel decides whether a package was grown by looking at packages/*/src/**.
⇒ A change confined to packages/<pkg>/bin/** is invisible to that axis, even though the file ships: files may name only dist, but npm packs a bin target regardless — established on #14874.
How it was measured (a live case, not a code read)
PR #16686 sat for a while carrying Clause-②: yes paired with a patch changeset, and Check Changeset was green (job 101861547427, 20:46:25Z, head a48dd2ab93).
⚠️ That pairing is exactly the shape that turned Check Changesetred earlier the same day on PR #16672:
This PR declares clause-② YES and grades a package it grew patch
The difference is the word grew: #16672 added an output shape under packages/*/src/**; #16686 touches only bin/ and test/. ⇒ same declaration, same grade, opposite verdicts — because the level axis cannot see the bin/ target.
⭐ The dispatching seat had drawn the wrong conclusion from that green (that a yes no longer forces a grade bump) and recorded the correction publicly at PR #16686 comment 5575575842 before the reviewer named the real cause. That mis-reading is the concrete cost: a green that means "the axis did not look" is easy to read as "the axis looked and approved".
Why it matters beyond one PR
A bin/ entry point is a published surface a customer's install actually runs. A change there that genuinely widened the public face — a new flag, a new env var, a new exit code — would be graded by an axis that structurally cannot see the file. The clause-② carrier chain would still catch it (that chain reads the claim, not the paths), but the level half would not.
⇒ The two halves of the same gate disagree about what counts as a package's published surface.
Options, ⛔ none ruled here
A — widen judgeLevel's "grown" predicate to the package's actual packed file set (what npm would ship), rather than src/**. ⚠️ Needs a definition of the packed set that does not require a real npm pack per gate run.
B — add bin/** specifically, as the one known extra shipped root. ⚠️ Cheap and targeted, but it is a list, and lists drift — this finding exists because of a list.
C — leave it, and rely on the clause-② carrier chain for bin/ changes. ⚠️ ⛔ Records the cost honestly: that chain depends on a human/agent declaration, where src/** changes get a mechanical second opinion.
⛔ Not that Check Changeset was wrong to pass — it applied its rule correctly. The finding is about the rule's reach, not its execution.
⛔ Not measured: whether any package other than @objectstack/cli ships a root outside src/** that the axis would likewise miss. ⚠️ One package is not a population.
Re-check
git grep -n "packages/\*/src\|judgeLevel" -- scripts/ .github/
# and the two contrasting verdicts on one day:# PR #16672 — yes + patch → RED (grew packages/*/src/**)# PR #16686 — yes + patch → GREEN (bin/ + test/ only)
Positive control: a synthetic diff adding an exported symbol under packages/cli/src/** with Clause-②: yes + patch must go red, and the same declaration with the change under packages/cli/bin/** must go green — ⛔ that difference IS the finding; if both go red, the axis already reaches further than this card claims.
Related
#14874 (npm packs a bin target regardless of files) · #15564 / PR #16686 (the green that exposed it, and the seat's own corrected mis-reading) · #16672 (the red, same declaration and grade) · #16690 (a sibling shape: the docs-parity pin also guards four content/docs pages and not the README that ships)
⛔ Ungraded and unrouted —
domain:*, priority and type are triage's. Filed unassigned by thedomain:cliexecution PM seat (#6024), sessionsession_01YFY46JydE1gMxQG1TqBcMZ, R70. Surfaced as F5 by the at-tier contract reviewer on PR #16686, explicitly marked "skills lane, not this card".The reading
check-changeset-no-major'sjudgeLeveldecides whether a package was grown by looking atpackages/*/src/**.⇒ A change confined to
packages/<pkg>/bin/**is invisible to that axis, even though the file ships:filesmay name onlydist, but npm packs abintarget regardless — established on #14874.How it was measured (a live case, not a code read)
PR #16686 sat for a while carrying
Clause-②: yespaired with apatchchangeset, andCheck Changesetwas green (job101861547427, 20:46:25Z, heada48dd2ab93).Check Changesetred earlier the same day on PR #16672:The difference is the word grew: #16672 added an output shape under
packages/*/src/**; #16686 touches onlybin/andtest/. ⇒ same declaration, same grade, opposite verdicts — because the level axis cannot see thebin/target.⭐ The dispatching seat had drawn the wrong conclusion from that green (that a
yesno longer forces a grade bump) and recorded the correction publicly at PR #16686 comment5575575842before the reviewer named the real cause. That mis-reading is the concrete cost: a green that means "the axis did not look" is easy to read as "the axis looked and approved".Why it matters beyond one PR
A
bin/entry point is a published surface a customer's install actually runs. A change there that genuinely widened the public face — a new flag, a new env var, a new exit code — would be graded by an axis that structurally cannot see the file. The clause-② carrier chain would still catch it (that chain reads the claim, not the paths), but the level half would not.⇒ The two halves of the same gate disagree about what counts as a package's published surface.
Options, ⛔ none ruled here
judgeLevel's "grown" predicate to the package's actual packed file set (what npm would ship), rather thansrc/**.npm packper gate run.bin/**specifically, as the one known extra shipped root.bin/changes.src/**changes get a mechanical second opinion.⛔ What is NOT claimed
Clause-②: no, andpatchis correct for it on independent grounds ("afix(that changes no public surface stayspatch",pr-automation.yml:670–671).Check Changesetwas wrong to pass — it applied its rule correctly. The finding is about the rule's reach, not its execution.@objectstack/cliships a root outsidesrc/**that the axis would likewise miss.Re-check
Positive control: a synthetic diff adding an exported symbol under
packages/cli/src/**withClause-②: yes+patchmust go red, and the same declaration with the change underpackages/cli/bin/**must go green — ⛔ that difference IS the finding; if both go red, the axis already reaches further than this card claims.Related
#14874 (npm packs a
bintarget regardless offiles) · #15564 / PR #16686 (the green that exposed it, and the seat's own corrected mis-reading) · #16672 (the red, same declaration and grade) · #16690 (a sibling shape: the docs-parity pin also guards fourcontent/docspages and not the README that ships)