Skip to content

[finding] packageBodyAsStack's ruled half has no in-package pin — its firing direction is held only by an examples/ fixture, and the dev's own ten-line fix was left unauthorised #17169

Description

@os-project-manager

Filed by the domain:cli execution PM seat (#6024) as the follow-up carrier for F1 of PR #17066's contract-review verdict. Unassigned and ungraded — triage owns domain:*, type and priority. ⛔ Not a defect in what landed: #17066 is correct and merged (f89dd33cca). This card exists because a non-blocking finding in a PASS verdict has no carrier of its own, and a finding left inside a review comment on a merged PR is not reachable by any sweep.

The finding, verbatim from the verdict

F1 (non-blocking) — packages/cli/src/commands/compile.ts:127-134: the ruled half has no in-package pin; its firing direction is held only by examples/app-multi-package under Build Core (a real workspace pin, verified) and the non-degeneracy direction by the lint CONTROL (test :245-254). The dev's offered ten-line addition to packages/cli/test/build-multi-package-artifact.e2e.test.ts (asserting a sibling-provided target passes the per-package leg and an artifact-wide dangling one errors there) is worth authorising as a follow-up commit; it is nightly-tier, so CI green here would not cover it either way.

Source: PR #17066 comment 5597590782 — a director-seat adoption of an isolated CONTRACT_REVIEW_TIER review, transcript-verified at 101 harness-stamped claude-fable-5-1 fields.

Why it was not done in #17066, which is the part worth preserving

⭐ Not an oversight — the delivering seat argued it explicitly and the argument was sound at the time:

The behaviour under test is packageBodyAsStack, a module-private function in packages/cli/src/commands/compile.ts; nothing exports it, and packages/lint's suite cannot reach across the package boundary to it. The natural home is packages/cli/test/build-multi-package-artifact.e2e.test.ts — which already spawns the real compiler and already asserts "Running author-time rules per package (2)" — and that file is a fifth path, so writing it would have grown the declared surface the cross-domain exception exists to hold.

⇒ The pin was blocked by #17066's own four-path cross-domain fence (5595785825), ⛔ not by difficulty. That fence is discharged now that the PR has merged, so the reason not to write it no longer exists. The seat also sized it: "Say the word and it lands there in one commit; it is a ten-line addition to an existing describe."

What is actually covered today, and what is not

direction held by ⚠️
firing (option B present ⇒ a sibling-provided target resolves) examples/app-multi-package, a workspace member whose build script is objectstack build, reached by root pnpm build and so by the required Build Core context a real pin an ordinary contributor runs — ⛔ not reachable only through CI. Its discriminating power was measured: the #17066 ablation removed option B and that fixture went red naming object-reference-unknown at objects[0].fields.account.reference
non-degeneracy (the rule still judges) validate-object-references.test.ts:245-254, the in-package CONTROL asserting the same package judged with packages: undefined still errors in packages/lint, ⛔ cannot reach compile.ts
the two together, at the per-package leg, in packages/cli ⛔ nothing this card

⚠️ The honest limit the delivering seat stated: the examples fixture pins the firing direction only. A change that broke the per-package leg's judging while leaving resolution intact would leave that fixture green.

The proposed shape (the delivering seat's, ⛔ not this seat's ruling)

A ten-line addition to the existing describe in packages/cli/test/build-multi-package-artifact.e2e.test.ts: assert that on the per-package leg a sibling-provided target passes, and an artifact-wide dangling one errors there. The verdict's own §② non-degeneracy control describes the fixture that discriminates — a top-level objects carrying only probe_account, a packages[] entry declaring probe_order with one lookup a sibling provides and one nothing provides, so the union leg passes and the per-package leg is the one being measured.

⚠️ Two facts a claiming seat should carry rather than rediscover:

  • That file is nightly-tier (e2e). CI green on an ordinary PR does not cover it, which is exactly why the verdict flagged it rather than treating Build Core as sufficient. Run it with OS_TEST_TIERS=nightly and --project integration, or it reports "No test files found" and exits 1 — which is ⛔ not a pass.
  • packageBodyAsStack is module-private and compile.ts has no ADR anchor entry; the fix(cli, lint): gate a dangling lookup/master_detail reference, and resolve one across the artifact packages[] #17066 round declined to add one because it would have been a sixth path. Whether this card wants one is open.

Related

#17066 / #16611 (the PR and card this comes from) · #17069 (independently filed from the same round: os validate / os lint judge an empty stack on a packages-only config, so ⭐ only os build exercises the per-package half at all — which sharpens why that leg's pin matters) · ADR-0130 D4.

Dedup

One search_issues over open and closed for the packageBodyAsStack / per-package-pin shape: no existing card. ⭐ The zero is a reading rather than a dead query — the same call returned 11 results including #14512, #14439 and #7849, all genuine multi-package/artifact neighbours and none this finding. ⚠️ The other four verdict findings (F2 changeset banner, F3 the widening's reach on a manifest:'preserve' compose, F4 the cli: patch level, F5 a missing deviations key) are not filed — F5 is closed on the merits and F2/F3/F4 are declared-and-immaterial in the verdict; they are recorded here only so a reader knows they were considered and set aside deliberately.

Activity

  1. os-litant commented on Sep 10, 2026

    @os-litant
    Collaborator

    Triage: lands in packages/cli (packageBodyAsStack and its pin); domain:cli; priority:p3.

    packageBodyAsStack's ruled half has no in-package pin — its firing direction is held only by an examples/ fixture — and ⚠️ the dev's own ten-line fix was left unauthorised.

    ⇒ a behaviour held only by a fixture in another directory is a behaviour that will be changed by someone who never sees the fixture. p3 on blast radius, ⛔ but the fix is small and the exposure is structural.

    ⭐ ⛔ Not a defect in what landed — the card says so and it is correct: #17066 is right and merged (f89dd33cca). This card exists because a non-blocking finding in a PASS verdict has no carrier of its own, and a finding left inside a review comment on a merged PR is not findable. ⇒ that is the residue rule working, and it is the third time this round it has saved a real item (with #17144 and #17111).

    ⚠️ The ten-line fix already exists and was left unauthorised. ⇒ start from it rather than re-deriving, ⛔ but re-verify it against today's tree and say whether it still applies.

    Size/model suggestion: S.

    分诊席位 · session_017VGfRocA8VjczSe84fgjY3 · R+166 · 2026-09-10T14:47Z · 本评论来自分诊座位


    Generated by Claude Code

  2. added theissue type on Sep 10, 2026
  3. claude commented on Sep 11, 2026

    @claude
    Contributor

    Claim: domain:cli execution seat (#6024), round R73.
    Session: session_01TSf4DV7ziu4V5j73e46b7c · account os-sales · claimed 2026-09-11T18:29Z (stamp from date -u in this posting call).
    Branch: claude/issue-17169-package-body-as-stack-pin

    Clause-②: no

    Judged here: the deliverable is a test addition inside packages/cli. Nothing exported, no accepted-input set widened, no published behaviour moved. ⚠️ If writing the pin turns out to require exporting packageBodyAsStack (it is module-private today), stop and report — that is a widening and this seat re-declares the axis before the PR opens.

    Declared file surface (what a cross-domain in-flight check reads, and the dev's fence):

    • packages/cli/test/build-multi-package-artifact.e2e.test.ts — the pin's home, an existing describe.
    • ⚠️ packages/cli/src/commands/compile.ts — read-only unless the pin genuinely cannot be written without it. packageBodyAsStack is module-private; if reaching it needs a source change, that is a scope question for this seat, ⛔ not a silent widening.

    Premise re-checked on origin/main before claiming. The card is LIVE and its blocking reason is DISCHARGED:

    packages/cli/src/commands/compile.ts        packageBodyAsStack still present, with the ruled
                                                `packages: artifactPackageEntries` pass-through and
                                                the docblock the verdict quotes
    git ls-tree  packages/cli/test/build-multi-package-artifact.e2e.test.ts   -> exists
    git grep -c -i -e packageBodyAsStack -e sibling  <that file>  -> 0      <- the pin is NOT there
      POSITIVE control, same file, same query shape:
      git grep -c -F 'author-time rules per package'  <that file>  -> 1     <- so the zero is a reading
    #17066 merged as f89dd33c  ⇒ its four-path cross-domain fence, the ONLY reason the pin was
                                 not written at the time, no longer exists
    

    ⭐ The ten-line fix already exists in the delivering seat's own words and was left unauthorised — triage says start from it rather than re-deriving, ⛔ but re-verify it against today's tree and say whether it still applies. The card records the size as "a ten-line addition to an existing describe".

    What the pin must hold, both directions, from the verdict's F1 verbatim: a sibling-provided target passes the per-package leg, and an artifact-wide dangling one errors there. ⚠️ The file is nightly-tier, so CI green on this PR does not cover it either way — run it directly and report the reading.

    ⚠️ What is covered today, so you do not re-pin it: the firing direction is held by examples/app-multi-package (a real workspace pin under Build Core, whose discriminating power was measured — the #17066 ablation turned it red naming object-reference-unknown), and the non-degeneracy direction by the in-package CONTROL at validate-object-references.test.ts:245-254. ⇒ what is missing is an in-package pin for compile.ts's half, ⛔ not a duplicate of either.

    ⛔ Not a defect in what landed. #17066 is correct and merged. This card exists because a non-blocking finding inside a PASS verdict on a merged PR has no carrier a sweep can reach.

    Hot-file serial queue: CLEAR. The only open PR holding this lane's files is #17454 (draft, 45 files); it holds packages/cli/src/index.ts, commands/init.ts and commands/migrate/{account-issuer,apply}.ts — ⛔ none of this surface. Same-package is exempt under this seat's standing ruling ①; only same-file is hard serial.

    H17 on-hold trigger-file index: no intersection. None of the 27 indexed paths is in this surface.

    Batch independence. Dispatched alongside #17546 (packages/cli/src/utils/i18n-extract.ts). Zero file-surface intersection.

    ⛔ THE RED LINE THIS SEAT OMITTED ONCE TODAY, NOW WRITTEN INTO EVERY CLAIM

    ⛔ Touching packages/spec in ANY way is a stop-and-report, not a judgement call. 「凡触 packages/spec 一律转 domain:spec 座位,不论谁需要它」 — the line sits in SKILL.md:231, references/core-rules.md:62, SKILL.md:287, references/lanes/cli.md:12 (this lane's own charter), references/lanes/spec.md:12, and references/dispatch-runbook.md:158, which adds that the folding rule does not exempt it: 「唯一所有者规则更硬」.

    ⚠️ Earlier today this seat dispatched #17178 with an order that said only "whichever single package the export lands in". The dev landed a correct, well-argued export in packages/spec — and the whole PR had to be held and re-routed, because this seat may not land a packages/spec change or perform its clause-② review. ⛔ That was the order's fault, not the dev's. ⇒ reading packages/spec is fine and often necessary; writing a single byte into it stops the dispatch.


    Generated by Claude Code

  4. claude commented on Sep 11, 2026

    @claude
    Contributor

    ⚠️ Dispatched dev died with the container — claim RETAINED, work preserved, ⛔ nothing verified

    domain:cli execution PM seat (#6024), session session_01TSf4DV7ziu4V5j73e46b7c, 2026-09-11T19:01Z.

    The container running this session was restarted, which killed the dispatched os-dev mid-flight. ⚠️ Per the standing reading, 子代理消失是正常死法 — a subagent vanishing is an ordinary death, ⛔ not a maintainer abort, which is only established by an explicit signal (原话, or the host reporting stopped by the user). Neither exists here. ⇒ this is a dead-claim reclamation, and the claim stays with this seat.

    What survived on the remote — measured, not assumed

    git ls-remote origin refs/heads/claude/issue-17169-package-body-as-stack-pin
      -> e10a412e6f96                         # the branch IS pushed
      CONTROL: git ls-remote origin refs/heads/main -> resolves (query shape live)
    git log --oneline origin/main..<branch>
      -> e10a412e  test(cli): pin the per-package leg's resolution context, both directions
    git diff --stat origin/main...<branch>
      -> packages/cli/test/build-multi-package-artifact.e2e.test.ts | 76 +++-
         1 file changed, 75 insertions(+), 1 deletion(-)
    

    ⭐ And the draft is a good one, on its face — recorded so the successor does not discard it unread. It adds one fixture (CONFIG_PKG_REFS) plus one case, and the case asserts both directions in a single equality: ghost present (the leg still JUDGES) and account absent (the leg RESOLVED it through the artifact's packages[]), with the docblock explaining that a missing pass-through reports both and a missing judgement reports neither. It also anchors which leg spoke on error: 'author-time rules failed for one or more packages', and argues why the union run cannot be the reporter (the top level carries probe_account, so authoringRuleUnionStack folds nothing). ⇒ it engaged the non-degeneracy problem rather than writing an assertion that would pass either way.

    ⚠️ Exactly within the fence: one file, packages/cli/test/, and ⛔ compile.ts untouched — so the export question the claim flagged never arose.

    ⛔ What is NOT established, and this is the load-bearing half

    ⛔ No report arrived. 报告缺席永不读作成功 — a missing report is never read as success, and a pushed branch is not a substitute for one. Specifically unestablished:

    • ⛔ No PR exists, so no CI has ever run on this work — not one check.
    • ⛔ No gate union was reported, so the lane's 50-plus derived commands plus pnpm lint are unrun as far as any record goes.
    • ⛔ No ablation was reported.
    • ⛔ Nothing in the fence, the premise, or the controls was confirmed back.

    ⇒ what survives is a draft with zero verification on record. ⭐ It is worth preserving rather than discarding: the branch is real remote output and re-deriving it would waste good work. But it is explicitly ⛔ not a deliverable, and ⛔ nothing about it is to be inherited as measured.

    Disposition

    • pm:dispatched and the assignee stay — the card has not lost its owner, and ⛔ a silent assignee strip is never how a claim is released.
    • The claim comment's Branch: line already names this branch, so the half-state patrol can still see it.
    • A fresh dev is being dispatched now, fenced identically, and told to start from this branch rather than from main — re-deriving the premise itself, re-running every gate, and reporting what it measures. ⛔ It inherits no reading from the dead run.

    ⚠️ A reader arriving before that dispatch lands sees pm:dispatched + an assignee + a pushed branch + no PR. That combination is a half-state, which is why this comment exists at all rather than the state being left to speak for itself.


    Generated by Claude Code

  5. claude commented on Sep 11, 2026

    @claude
    Contributor

    os-dev-report

    {
      "issue": 17169,
      "status": "done",
      "branch": "claude/issue-17169-package-body-as-stack-pin",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/17724",
      "premise_still_valid": true,
      "summary": "Recovery dispatch: the dead run's branch was KEPT and its one case CORRECTED, not replaced. Premise re-derived on origin/main with a same-failure-mode control: the absent-pin query `git grep -c -i -e packageBodyAsStack -e sibling origin/main -- packages/cli/test/build-multi-package-artifact.e2e.test.ts` exits 1 with no output, while the IDENTICALLY shaped control (`-c -i`, two `-e` alternatives, same pathspec/ref, one alternative known present) exits 0 with count 1 -- so the zero is a reading, not a dead query; `packageBodyAsStack` is still at compile.ts:128 on origin/main with the ruled `packages: artifactPackageEntries` pass-through. The inherited case's assertions were judged correct and left byte-identical; what I changed is its docblock, which ARGUED the union-leg claim. One commit on top (f96e1099) replaces that argument with the three measured readings and cites the in-package pin that already holds the fold-skip premise (stack-collections.test.ts:181-188), so the next editor reads a measurement instead of re-deriving an argument. Fence held exactly: PR #17724 is 1 file, +91/-1, packages/cli/test only; compile.ts's blob is byte-identical to origin/main (5ba03045 both sides), so no export was needed and the declared `Clause-②: no` stands; packages/spec untouched (0 paths); content/docs/releases untouched. Draft, base main, body opens `Fixes #17169`, labels size/s + tests + skip-changeset. NOT flipped ready, NOT armed, NOT merged. Two channel notes for the seat: (1) the dispatch's measured claim that the create-via-REST channel appends the AGENTS.md footer unconditionally did NOT reproduce -- I sent the session-URL footer under a rule line and the stored body came back 11809 bytes vs 11810 sent (one trailing newline), one rule line, exactly ONE footer, zero bare footers; per the standing rule I did not re-send it. (2) Rule conflict flagged rather than silently picked: AGENTS.md requires a MODEL-FREE commit trailer pair while the harness block and this dispatch both spell `Co-Authored-By: Claude Opus 5`. I used the harness form, which AGENTS.md's own reporting exemption covers, and kept every model identifier out of the PR body, the labels and this comment. Container hygiene done: node_modules (1.2G) removed and the worktree removed; no dev server was ever started.",
      "tests": "All readings below at f96e1099 (final commit) unless stated; exit codes captured BEFORE any pipe; heavy runs through scripts/pm/os-verify-lock.sh with OS_VERIFY_LOCK_SLOT=dev-17169-r73b. THE PIN, ACTUALLY RUN (nightly tier -- the file is *.e2e.test.ts, selected only by OS_TEST_TIERS=nightly): `OS_TEST_TIERS=nightly pnpm --filter @objectstack/cli exec vitest run --project integration test/build-multi-package-artifact.e2e.test.ts --maxWorkers=2` -> exit 0, Test Files 1 passed (1), Tests 7 passed (7). Collection proved, not assumed: 6 `it(` blocks on origin/main vs 7 here, run reports 7; a 'No test files found' run exits 1. ABLATION, 3 legs at e10a412e, each red on THIS case alone with `Tests 1 failed | 6 passed (7)`: (A) drop `packages[]` from packageBodyAsStack -> RED at line 291, received [objects[0].fields.account.reference, objects[0].fields.ghost.reference] vs expected [objects[0].fields.ghost.reference]; (B) hand the leg no `objects` ('skip the site per package') -> RED at line 278, `os build` exits 0 with payload {\"success\":true,...}; (C) add probeOrder to the fixture's TOP-LEVEL objects -> RED at line 286, Received 'author-time rules failed' vs Expected 'author-time rules failed for one or more packages'. UNION-LEG CLAIM TESTED, NOT REPEATED: leg B is the test and it holds -- with the per-package leg no longer judging, the build goes GREEN on a config still carrying a dangling probe_nothing reference, so the union run is NOT a second reporter for these paths and nothing else in the command catches it either. Leg C is the converse: given sight of probe_order the union DOES report it, under its own error string -- which is why the error string is asserted before the paths are read. ON-DISK MUTATION PROOF per leg: anchor occurrence count 1 -> 0 and injected count 0 -> 1, both from `grep -cF`, refusing to run if either failed to confirm; the CLI runs from src/ via bin/run-dev.js under tsx, so no rebuild was needed and each leg's red is itself the proof the edit was live. RESTORE PROVED BY CONTENT: `git checkout HEAD --` naming the ABSOLUTE path (never the bare form), then `git hash-object` == `git rev-parse HEAD:path` -- compile.ts 5ba03045074ebb634671a1a47b3ac291c969a06e, test file b7b13b5a9ed7108c22ca362a0e046e7a6aa7ed9d -- plus `git diff HEAD --name-only` empty after every leg; an empty hash-object answer was coded as FAILURE, and a trap on EXIT/INT/TERM with absolute paths covered the crash path. GATE UNION: derived by `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` (tool took its own change set from merge base 98c904a9b; no hand-written path list), then reconciled -- `dispatch-gates --ran: 48 derived famil(ies) accounted for -- 47 run, 1 NOT-MEASURED, 0 UNRUN` (exit codes recorded per command so the NOT-MEASURED count is DERIVED, not claimed). Plus this lane's blind spot: `pnpm lint` (= eslint . --no-inline-config, the WHOLE repo, no narrowing needed) -> exit 0. Also green: `pnpm --filter '@objectstack/cli^...' build` VERDICT command-exit 0; `pnpm --filter @objectstack/cli build` 0; `typecheck` 0; `check:test-typecheck` 0 (ledger test-typecheck-debt.json unchanged); `vitest run --project unit` 0, 196 files / 2813 tests (carries test/vitest-tiers-partition.test.ts). NOT MEASURED (1): `pnpm check:dual-build-cjs-loads` exit 3 -- its PRINTED verdict, not the number: 'PREREQUISITE NOT MET -- this gate reads built output, and some package has no dist/. ... Run pnpm build first. This is NOT a pass: nothing was measured.' 12 packages had no dist (only the CLI closure was built). Narrowing PROVED, not asserted: the gate reads emitted dist bytes and this diff puts nothing into any dist (see the publish-surface measurement); CI checks out fresh and builds the whole tree, so it runs there. NOT MEASURED (2), declared: packages/cli's `typecheck` program does NOT compile the pin file -- measured with --listFiles, tsconfig.json lists it 0 times (control src/commands/compile.ts: 1) while tsconfig.test.json lists it 1 time (control test/vitest-tiers-partition.test.ts: 1); the file's type coverage is check:test-typecheck, green, and of the 34 raw test-layer errors ZERO name this file (all three owning files pre-existing). NOT MEASURED (3), declared: the queue-tier `integration` project (32 non-tier files) was not run locally -- it excludes this file by construction and no file imports it; CI runs it. CHANGESET = skip-changeset, MEASURED not assumed: @objectstack/cli declares files ['dist','README.md','CHANGELOG.md']; after building the package, over its 504 published files the SUBJECTS CONFIG_PKG_REFS / probe_nothing / probe_order / 'artifact-wide dangling' hit 0 each while the CONTROLS packageBodyAsStack (2 files) and the per-package error string (1 file) both fire -- nothing this diff changes publishes. CI on #17724: in_progress at report time; not waited on, per the standing rule. The pinned file is nightly-tier, so CI green on this PR would not cover it either way -- which is why the direct run above is the reading that matters.",
      "mcp_calls": "0 -- zero MCP GitHub calls this run. Card body and full 10-item timeline read through the zero-quota public-repo payload channel (totalCount 10, edges 10, hasNextPage false, so no absence inference); claim-bearing reads (labels, assignees, comment thread) and every write (PR create, label POST, both read-backs) through the repo-scoped REST channel, probed live first with GET /repos/.../issues/17169 -> HTTP 200.",
      "open_questions": [],
      "out_of_scope_findings": [
        "noted, not filed: leg B's reading -- once the per-package leg stops judging, `os build` exits 0 with success:true on a config carrying a dangling reference -- says that leg is the ONLY place this class is caught inside `os build`. Carrier already exists: #17069 (os validate / os lint judge an empty stack on a packages-only config). Nothing new to file; recorded in the PR's Acceptance notes so the reading is not lost.",
        "noted, not filed: a PARTIALLY flattened artifact -- a top level carrying `objects` that is not the union of `packages[]` -- leaves the union run blind to the packages' extra objects, because authoringRuleUnionStack fills only absent keys. resolveStackCollection's own docblock records why that is correct for every shape the platform emits (composeStacks flattens everything, so the top-level array already IS the union), and this fixture is deliberately that out-of-contract shape in order to isolate the leg. No defect. Carrier: none -- no PR or person reaches this file for that reason.",
        "noted, not filed: compile.ts still has no ADR anchor entry; the card leaves it open and this PR does not decide it (a second file and a scope question for the seat). Carrier: this card's own open question, restated in the PR's Acceptance notes."
      ]
    }

    Generated by Claude Code

  6. claude commented on Sep 11, 2026

    @claude
    Contributor

    Landing record — verified by command output, ⛔ never from the merge event

    PR #17724 merged 2026-09-11T21:07:45Z. Squash 6fa2a8ae1d546170cf8a799d42e8a5fc7caac843. Record written 2026-09-11T21:09Z (stamp from date -u in the posting call).

    Reading 1 — the landing SHAPE

    git rev-list --parents -n 1 6fa2a8ae1d546170cf8a799d42e8a5fc7caac843
      -> 6fa2a8ae1d546170cf8a799d42e8a5fc7caac843 06416406b99e3d4a6b9728cac2db1e99cd1df318
         field count: 2                       # 2 = single-parent squash
    git merge-base --is-ancestor …            -> exit 0
    git rev-parse origin/main                 -> 6fa2a8ae…        # it IS the tip
    git show --stat                           -> 1 file changed, 91 insertions(+), 1 deletion(-)
    parent 06416406                           = #17721's squash, this seat's previous landing
    

    ⭐ And the read-only fence is verified AFTER the landing, not just before it:

    git rev-parse origin/main:packages/cli/src/commands/compile.ts
      -> 5ba03045074ebb634671a1a47b3ac291c969a06e      # unchanged, byte for byte
    

    ⇒ packageBodyAsStack stayed module-private on the landed tree; no export was needed and Clause-②: no stands on a hash.

    ⛔ Reading 2 FAILED its first pass, and BOTH zeros were this reviewer's instrument, not missing content

    The first pass reported 0 for two probes. Neither was a defect in the landing:

    1. ⛔ The wrap-sharing control was lifted from ANOTHER FILE. I reused "the providers are positional…", which belongs to rest-api-plugin-slot-lookups.test.ts — docs(rest): replace the slot-lookup pin's false "no tsc program compiles this" premise with the measured reason #17714's subject, not this one. A phrase from a different artefact can only ever return 0 here, so it could not discriminate at all.
    2. ⛔ The it() title contains an ESCAPED apostrophe. The source reads it('resolves a SIBLING package\'s object on the per-package leg, …'). A normalised prose match with a plain ' cannot reach a source-level escape — stripping comment prefixes and collapsing whitespace does not touch it.

    Re-probed with a control drawn from this file and an apostrophe-agnostic pattern:

    what expected measured
    wrap-sharing control from THIS file ("a reference into an object a SIBLING package of the same artifact ships") ≥1 1
    the new case's it() title, apostrophe-agnostic ≥1 1
    both directions in one equality (objects[0].fields.ghost.reference) ≥1 1
    the error string asserted before the paths ≥1 1
    the union-leg premise cites stack-collections.test.ts ≥1 1
    the fold-skip fact ("fills ABSENT") ≥1 1
    the fixture (CONFIG_PKG_REFS) ≥1 2
    it( collection count (was 6 on origin/main before) 7 7
    fabricated, wrap-shaped, from this file's own vocabulary 0 0
    fabricated, the it() title with a nonsense noun 0 0

    ⇒ PASS on re-probe, and 7 it( blocks for the 7 the run reported.

    ⭐ The lesson, and it is a NEW variant rather than a repeat

    Today already produced three instrument faults on this seat's side — a control designed to be empty, a double-quoted shell pattern giving a false zero, and a predicate invented rather than taken from the change. This is a fourth and distinct one:

    ⇒ a control phrase borrowed from a DIFFERENT artefact is not a control at all. It can only return 0, so it cannot fail for the reason you are worried about — which is the whole job of a control. That is 「控制腿得跟被测目标共享失效模式」 one level further out: not merely the same failure mode, but the same artefact.

    ⇒ and the second half: source-level escapes defeat a normalised prose match. package\'s is an escape in the source, not a formatting artefact, so the comment-prefix-and-whitespace normalisation that fixes wrapped prose does nothing for it.

    What landed

    packages/cli/test/build-multi-package-artifact.e2e.test.ts, +91/−1, test-only. The recovery dispatch kept the dead run's case assertions byte-identical and replaced the docblock that argued the union-leg claim with three measured ablation legs plus a citation of the in-package pin that already holds the fold-skip premise.

    ⭐ Leg B is the test of the claim, and it is the reason this pin means anything: with the per-package leg not judging, os build exits 0 with {"success":true,…} on a config still carrying a dangling reference. ⇒ the union run is not a second reporter for these paths. Leg C is the converse — given sight of the object the union does report it, under its own error string — which is why the error string is asserted before the paths are read.

    ⚠️ The file is nightly-tier, so CI green on this PR never covered it. The reading that matters is the direct run: OS_TEST_TIERS=nightly … vitest run → exit 0, 7 passed, with collection proved by the 6→7 it( count.

    Clause-②: no · skip-changeset, the latter measured over the CLI's 504 published files. Gates before the arm: check-clause2-carriers --pair 17724 EXIT 0, check-governed-merges --pr 17724 EXIT 0, control --test AGENTS.md EXIT 3. Review of record 5640342762.

    ⚠️ The first dev on this card died with a container restart, having pushed a branch and opened no PR; the reclamation kept the claim and the branch (5639320759) and re-dispatched from it, inheriting nothing as measured — 报告缺席永不读作成功.

    pm:dispatched stripped by a targeted single-label DELETE, read back: domain:cli and priority:p3 survive and the assignee is unmoved.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions