Uh oh!
There was an error while loading. Please reload this page.
fix(pm): let a SPELLINGS entry hold a list of segment arrays for multi-hint rows - #14523
Merged
Merged
Conversation
…i-hint rows bare-root-worklist.mjs's SPELLINGS harness held exactly one hint per entry, so a DECLARED-NARROWER row whose gate declares more than one hint could not record a spelling at all — five rows were in that state (check:logger-receiver-detach's three SCAN_ROOTS rows, check:dual-build-cjs-loads, check:ratchet-remedy-authority). Nothing in this file re-measured those declarations against hintCovers. Extend SPELLINGS so an entry's `segments` may hold either one hint (a flat array, unchanged for the nine existing entries) or a LIST of segment arrays; the pin loop asks `hintCovers` and `holds` of the union. Add five multi-hint entries covering the five rows' declared hints, wire each row's `spelling:`, and correct the `why` prose that previously stated the harness could not hold this shape. Fixes#14233
baozhoutao
marked this pull request as ready for review
September 2, 2026 10:30
baozhoutao
enabled auto-merge
September 2, 2026 10:30
This was referenced Sep 2, 2026
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#14233
What
scripts/pm/bare-root-worklist.mjs'sSPELLINGSself-test harness held exactlyone hint per entry, so a
DECLARED-NARROWERrow whose gate declares itspopulation as more than one glob could not record a spelling at all, and its
declaration went re-measured by nothing in this file. Five rows were in that
state:
check:logger-receiver-detach's threeSCAN_ROOTSrows (packages,examples,apps),check:dual-build-cjs-loads SCAN_ROOT packagesandcheck:ratchet-remedy-authority SCRIPTS_DIR scripts.This extends
SPELLINGSso an entry'ssegmentsmay hold either one hint (aflat segment array — unchanged for the nine existing entries, kept readable) or
a LIST of segment arrays — the narrow remedy the card sketched. The pin loop
asks
hintCoversandholdsof the UNION of an entry's hints. Five multi-hint(or, for
examples, single-hint) entries were added, matching each gate's ownROOT_DIR_WATCH_HINTSdeclaration exactly:packages TypeScript sourcepackages/**/*.ts,packages/**/*.tsx,packages/**/*.mtsexamples TypeScript sourceexamples/**/*.tsapps TypeScript sourceapps/**/*.ts,apps/**/*.tsxdual-build manifests and configspackages/**/package.json,packages/**/tsup.config.tsscripts top-level script filesscripts/*.mjs,scripts/*.mtsEach of the five
DECLARED-NARROWERrows now carriesspelling:naming itsentry, and each row's
whyprose is corrected — thecheck:ratchet-remedy-authorityrow previously stated in as many words that "SPELLINGS holds ONE hint per entry
and this population needs one per extension"; that sentence is now false and is
rewritten to describe the new pin instead.
No verdict changes. No gate under
scripts/check-*.mjsis edited — theirdeclarations are read, never written. This is not a new gate: the pin lives
entirely inside
bare-root-worklist.mjs --self-test, which already ran onevery PR (
lint.yml:766).Decision recorded, not built
The triage's Zone 3 raised, as an option, a per-member LIVE assertion inside
the pin loop (so a union LIVE cannot let one dead hint hide behind a live
sibling — the exact partial-death shape the parent card described for
check:declared-population-live). Left out: the ruling's own words are "theremedy is the narrow one the card sketches ... and nothing else," and a
per-member pin is a genuine addition beyond "ask
holdsof the union," not arestatement of it. See
open_questionsin the report comment — every newentry's hints were individually measured non-empty during this PR's own
verification (see Tests), so the gap is theoretical today, not a live defect.
Tests
node scripts/pm/bare-root-worklist.mjs --self-test— green, 78t()assertions execute at runtime (up from 58 on
main: +4 per added entry × 5).temporarily edited to break LIVE, PRECISE, NARROWING or COMPLETE in turn,
the self-test was run and shown to fail on exactly that entry, then reverted
via
git checkout HEAD -- scripts/pm/bare-root-worklist.mjsand reconfirmedclean (
git diff HEADempty) before the next mutation. See the reportcomment for each red line quoted.
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands scripts/pm/bare-root-worklist.mjsderived 14 commands; all ran green (one,
check-test-completeness.mjs, isNOT MEASURED locally by design — it grades a saved
turbo testlog CIsupplies).
pnpm check:ratchet-remedy-authority,pnpm check:declared-population-live,node scripts/check-self-test-wired.mjs— all green.node scripts/check-nul-bytes.mjs— clean.Full commands, exit codes and quoted verdict lines are in the report comment
on #14233. All gates above were re-run on the merged head (
6cc887260,origin/mainmerged in — no conflicts,bare-root-worklist.mjsuntouched byupstream).
Changeset
scripts/pm/**-only diff — no user-facing published change. No changesetadded;
skip-changesetlabel applied (confirmed by reading the PR's labelsback after applying).
Draft PR — not marking ready, CI convergence is for the PM to review.
Generated by Claude Code
Generated by Claude Code