Filed by the skills seat (session session_019T1sSZbQTnLhrK9HhNdNiB, 2026-08-21 ~01:3xZ) while disposing of a merge-queue eviction. pm:queue + provenance + an executable criterion per the transfer rule; domain:devx per the gate-tooling lane table — retriage to spec if the fix belongs in the script's home package.
The failure (one occurrence — bounds stated honestly)
Merge-queue candidate for PR #10482 (branch gh-readonly-queue/main/pr-10482-465bfce9…, run 32435515553, job 96635813304 Type Check · consumer gates, 01:16Z):
✓ … (13 sibling self-test cases pass)
✗ accepts a build newer than its sources
✗ self-test: 1 case(s) failed.
ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL @objectstack/spec@17.1.0 check:browser-reachable-entries
The dequeue evicted PR #10482 (a .claude/-only docs diff that cannot influence this gate). The same gate was green minutes earlier on PR #10484's own candidate (run 32435490134, 01:12Z) and green again historically in every old serial-job run I sampled. One red, no reproduction yet — this card claims "timing-sensitive", not "broken".
Why it is worth a card at one occurrence
It red a queue candidate, and queue reds evict innocent PRs (this one evicted a maintainer-approved PR). The failing case is the self-test's acceptance direction of a freshness (mtime) comparison: a fixture writes sources, then a build output that is NEWER, and expects the gate to accept. The classic failure mode for that shape is a same-second mtime tie read as stale by a strict > comparison — fixtures that used to be separated by slow serial execution now run on a warmer, faster lane (the Lint & Type Check split landed 01:28Z in PR #10484, and this lane reaches the gate minutes earlier than the old serial job did). That is a hypothesis from the signature, not a measured mechanism — the taking dev verifies before fixing.
Executable criterion
pnpm --filter @objectstack/spec run check:browser-reachable-entries self-test passes deterministically — specifically, the "accepts a build newer than its sources" case passes under repeated runs (say 20/20) on a warm tree, including when invoked back-to-back with sub-second gaps. Fix shape, for the taking dev to judge: make the fixture's mtimes explicit (utimes with a deliberate gap) or make the comparison tolerant of equality if equal-mtime-is-fresh is the intended semantics — whichever matches the gate's documented intent; ⛔ do not weaken the stale-detection direction (its two refusal cases must stay red-capable).
Disposition of the eviction
PR #10482 re-queued once on this signature (queue-kick rule: one requeue per identified signature, then park). If it evicts again on the SAME case, this stops being "one occurrence" and the card's priority should be raised at retriage.
Filed by the skills seat (session
session_019T1sSZbQTnLhrK9HhNdNiB, 2026-08-21 ~01:3xZ) while disposing of a merge-queue eviction.pm:queue+ provenance + an executable criterion per the transfer rule;domain:devxper the gate-tooling lane table — retriage to spec if the fix belongs in the script's home package.The failure (one occurrence — bounds stated honestly)
Merge-queue candidate for PR #10482 (branch
gh-readonly-queue/main/pr-10482-465bfce9…, run 32435515553, job 96635813304Type Check · consumer gates, 01:16Z):The dequeue evicted PR #10482 (a
.claude/-only docs diff that cannot influence this gate). The same gate was green minutes earlier on PR #10484's own candidate (run 32435490134, 01:12Z) and green again historically in every old serial-job run I sampled. One red, no reproduction yet — this card claims "timing-sensitive", not "broken".Why it is worth a card at one occurrence
It red a queue candidate, and queue reds evict innocent PRs (this one evicted a maintainer-approved PR). The failing case is the self-test's acceptance direction of a freshness (mtime) comparison: a fixture writes sources, then a build output that is NEWER, and expects the gate to accept. The classic failure mode for that shape is a same-second mtime tie read as stale by a strict
>comparison — fixtures that used to be separated by slow serial execution now run on a warmer, faster lane (theLint & Type Checksplit landed 01:28Z in PR #10484, and this lane reaches the gate minutes earlier than the old serial job did). That is a hypothesis from the signature, not a measured mechanism — the taking dev verifies before fixing.Executable criterion
pnpm --filter @objectstack/spec run check:browser-reachable-entriesself-test passes deterministically — specifically, the "accepts a build newer than its sources" case passes under repeated runs (say 20/20) on a warm tree, including when invoked back-to-back with sub-second gaps. Fix shape, for the taking dev to judge: make the fixture's mtimes explicit (utimeswith a deliberate gap) or make the comparison tolerant of equality if equal-mtime-is-fresh is the intended semantics — whichever matches the gate's documented intent; ⛔ do not weaken the stale-detection direction (its two refusal cases must stay red-capable).Disposition of the eviction
PR #10482 re-queued once on this signature (queue-kick rule: one requeue per identified signature, then park). If it evicts again on the SAME case, this stops being "one occurrence" and the card's priority should be raised at retriage.