Filed unassigned by the domain:skills execution seat (session session_019RfFHiRCSs3JXLK4cwcfox, os-steve), measured incidentally while running the derived gate family for #15272 (PR #15283). Observation only; domain:*, type and grading are triage's.
The reading
In a worktree that is installed but has never been built, pnpm check:published-readme-exports exits 1 — the code reserved for a finding — with a list of 40-plus rows of this shape:
packages/types/README.md line 60: imports from '@objectstack/types', whose type entry
packages/types/dist/index.d.ts does not exist. Build first: `pnpm --filter
@objectstack/types build` (or `pnpm build`).
The gate's own --self-test half passes in the same run. Nothing is wrong with any README: the rows say so themselves, in their own remedy text — "does not exist. Build first".
Why it is worth a card
This is the same class the repo separates deliberately elsewhere, and the same class as #15272 one gate over: an unbuilt workspace is a NOT MEASURED condition, not a finding about the tree. The gate cannot resolve a type entry that was never emitted, so it has measured nothing about whether those READMEs export what they claim — yet it answers on a finding's exit code, and every row reads as a defect in a README that is in fact correct.
A sibling already answers this exact condition correctly. scripts/check-dual-build-cjs-loads.mjs says so in its own header: "With no dist/ it exits 3 (PREREQUISITE NOT MET) naming ..." and pins it — "an unbuilt package is PREREQUISITE NOT MET, not a pass and not a finding". scripts/import-prerequisite.mjs already classifies this precise sub-case as its own branch with its own remedy ("a @objectstack/* package is there but its entry point is not on disk → build that package") and exports the frame and the code to answer it with.
⇒ One gate renders "the tree was never built" as a measured red; its siblings render it as exit 3 with the build named.
What is measured and what is not
- Measured: the run above, in an installed-but-unbuilt worktree at
460134af; exit 1 captured by redirect before any pipe; the gate's --self-test half green in the same invocation; every row naming a missing dist/ entry.
- ⛔ NOT measured: whether every row in that output is the unbuilt cause — a genuinely fabricated export in a README would print a different row, and this card does not claim the two cannot coexist in one run. That is exactly why the repair is a question for triage: refuse up front when the entries are absent, or partition the rows.
- ⛔ NOT a claim that the gate's analysis is wrong. Its
--self-test passes; the defect is the exit code and the framing of an unmeasurable condition.
Distinct from the neighbours
Repro
In a worktree that has had pnpm install but not pnpm build:
pnpm check:published-readme-exports > /tmp/out.txt 2>&1; echo "EXIT=$?"
Then pnpm build and re-run.
Dedup declaration
Ran before filing over the complete open population, not a sample: all 558 open items paged from the repo-scoped REST list endpoint (6 pages), 534 issues after removing PRs, grepped locally in title and body for readme-exports, published-readme, check-published-readme and Build first. One hit, #15082, read and ruled a different defect (above). The increment since the #15272 sweep at 07:50Z was re-checked separately: 4 issues, none on this shape. ⛔ /search/* was not used.
Refs: #15272 · PR #15283 (where it was measured) · #15082
Generated by Claude Code
Filed unassigned by the
domain:skillsexecution seat (sessionsession_019RfFHiRCSs3JXLK4cwcfox, os-steve), measured incidentally while running the derived gate family for #15272 (PR #15283). Observation only;domain:*, type and grading are triage's.The reading
In a worktree that is installed but has never been built,
pnpm check:published-readme-exportsexits 1 — the code reserved for a finding — with a list of 40-plus rows of this shape:The gate's own
--self-testhalf passes in the same run. Nothing is wrong with any README: the rows say so themselves, in their own remedy text — "does not exist. Build first".Why it is worth a card
This is the same class the repo separates deliberately elsewhere, and the same class as #15272 one gate over: an unbuilt workspace is a NOT MEASURED condition, not a finding about the tree. The gate cannot resolve a type entry that was never emitted, so it has measured nothing about whether those READMEs export what they claim — yet it answers on a finding's exit code, and every row reads as a defect in a README that is in fact correct.
A sibling already answers this exact condition correctly.
scripts/check-dual-build-cjs-loads.mjssays so in its own header: "With nodist/it exits 3 (PREREQUISITE NOT MET) naming ..." and pins it — "an unbuilt package is PREREQUISITE NOT MET, not a pass and not a finding".scripts/import-prerequisite.mjsalready classifies this precise sub-case as its own branch with its own remedy ("a@objectstack/*package is there but its entry point is not on disk → build that package") and exports the frame and the code to answer it with.⇒ One gate renders "the tree was never built" as a measured red; its siblings render it as exit 3 with the build named.
What is measured and what is not
460134af; exit 1 captured by redirect before any pipe; the gate's--self-testhalf green in the same invocation; every row naming a missingdist/entry.--self-testpasses; the defect is the exit code and the framing of an unmeasurable condition.Distinct from the neighbours
check:pm-governed-merges(an uninstalled worktree read as a shrunken self-test battery). Same shape, different gate and different prerequisite — that one is a missing toolchain, this one is missing build output.Repro
In a worktree that has had
pnpm installbut notpnpm build:Then
pnpm buildand re-run.Dedup declaration
Ran before filing over the complete open population, not a sample: all 558 open items paged from the repo-scoped REST list endpoint (6 pages), 534 issues after removing PRs, grepped locally in title and body for
readme-exports,published-readme,check-published-readmeandBuild first. One hit, #15082, read and ruled a different defect (above). The increment since the #15272 sweep at 07:50Z was re-checked separately: 4 issues, none on this shape. ⛔/search/*was not used.Refs: #15272 · PR #15283 (where it was measured) · #15082
Generated by Claude Code