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
fix(pm): derive check-half-states' H32 seat specimens from the resolved sweep repo (#13006)
seatLane() judges an `@ <repo>` seat-title suffix against the LIVE resolved
sweep repo (SWEEP_REPO), so self-test rows spelling `objectui` as the sibling
board and `objectstack` as the own board asserted THIS BOARD rather than the
property, and inverted wholesale in any install that is not objectstack. Run
verbatim in objectui on 2026-08-28 the suite failed exactly four cases, forcing
three name-swap-only entries into that repo's upstream-port parity pin.
Both names are now derived: OWN_BOARD is the resolved repo's name half, and
SIBLING_BOARD is a real neighbouring board picked so the two can never
coincide. Specimen spelling only -- no predicate changes, suite count
unchanged at 1551.
own board (objectstack) 1551 pass (was 1551 pass)
PM_SWEEP_REPO=.../objectui 1551 pass (was 4 of 1551 failed)
PM_SWEEP_REPO=.../cloud 1551 pass (a board neither name anticipates)
Co-authored-by: Claude <noreply@anthropic.com>
t('H32 lane: a lane-less seat (skills) is foreign', seatLane(seat('[PM seat] skills — 🟢 os-zhuang (session_x)')).foreign, true);
@@ -12255,7 +12273,7 @@ function selfTest() {
12255
12273
12256
12274
// The held/vacant gate — an unheld seat is a ROUTING gap, never 怠工.
12257
12275
t('H32 held: 🟢 with a holder', seatIsHeld(seat(HELD)), true);
12258
-
t('H32 held: ⏳ vacant is NOT held', seatIsHeld(seat('[PM seat] domain:devx @ objectui — ⏳ vacant')), false);
12276
+
t('H32 held: ⏳ vacant is NOT held', seatIsHeld(siblingLaneSeat('⏳ vacant')), false);
12259
12277
t('H32 held: 🔴 收班 vacant is NOT held', seatIsHeld(seat('[PM seat] domain:spec — 🔴 收班 vacant · 上一班 os-warren')), false);
12260
12278
t('H32 held: ⏸️ paused is NOT held', seatIsHeld(seat('[PM seat] domain:spec — ⏸️ paused')), false);
12261
12279
t('H32 held: a Routine seat is excluded (no claim cadence of its own)', seatIsHeld(seat('[PM seat] triage (objectstack-wide) — 🟢 Routine')), false);
@@ -12267,7 +12285,7 @@ function selfTest() {
12267
12285
t('H32: work IN FLIGHT is a working seat -> clean', h32SeatIdleOverQueue(seat(HELD), marker('Round-start marker — R6.', 600), busy, NOW32), null);
12268
12286
t('H32: an EMPTY queue is a finished lane -> clean', h32SeatIdleOverQueue(seat(HELD), marker('Round-start marker — R6.', 600), { unclaimed: 0, inFlight: 0 }, NOW32), null);
12269
12287
t('H32: a vacant seat is out of scope however deep the queue', h32SeatIdleOverQueue(seat('[PM seat] domain:spec — ⏳ vacant'), marker('收班', 6000), idleLane, NOW32), null);
12270
-
t('H32: a FOREIGN lane is out of scope (its inventory is unreadable here)', h32SeatIdleOverQueue(seat('[PM seat] domain:devx @ objectui — 🟢 os-x'), marker('Round-start marker', 600), idleLane, NOW32), null);
12288
+
t('H32: a FOREIGN lane is out of scope (its inventory is unreadable here)', h32SeatIdleOverQueue(siblingLaneSeat(), marker('Round-start marker', 600), idleLane, NOW32), null);
12271
12289
t('H32: a non-seat card is out of scope', h32SeatIdleOverQueue({ ...issue(['pm:queue']), title: HELD }, marker('x', 600), idleLane, NOW32), null);
12272
12290
12273
12291
// The threshold, at both edges of SEAT_IDLE_STALE_MINUTES.
@@ -12313,7 +12331,7 @@ function selfTest() {
12313
12331
12314
12332
// The gathering gate buys a fetch only for seats the row can speak about.
12315
12333
t('H32 gate: a held own-board seat is a candidate', h32NeedsSeatComments(seat(HELD)), true);
12316
-
t('H32 gate: a foreign-lane seat buys no fetch', h32NeedsSeatComments(seat('[PM seat] domain:devx @ objectui — 🟢 os-x')), false);
12334
+
t('H32 gate: a foreign-lane seat buys no fetch', h32NeedsSeatComments(siblingLaneSeat()), false);
12317
12335
t('H32 gate: a vacant seat buys no fetch', h32NeedsSeatComments(seat('[PM seat] domain:spec — ⏳ vacant')), false);
12318
12336
t('H32 gate: a non-seat card buys no fetch', h32NeedsSeatComments(issue(['pm:queue'])), false);
0 commit comments