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
{{ message }}
Repository navigation
Commit f850ac1
Browse filesBrowse the repository at this point in the historyBrowse files
docs(pm-dispatch): an unread card thread leaves the review seat's independence bar unjudged
Contract review r1's S4: when the delivered card's comments could not be read,
check-owed-reviews no longer prints a seated review seat as free. ownAccountsOf
returns null, reviewSeatsOf reads the state `unjudged` (the seated seats named),
and the taker names them only with the caveat, the lane's own seat beside them.
Two new pins (84 cases).
Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WGufzhXV3ABCbTkU1iRRn7
'the owed face: paths, the Clause-② line, the label — drafts included, nothing else owes': 9,
574
584
'the record: on this head (by whom, as stated), on an earlier head, none, unjudged': 8,
575
585
'the triggers: (a) hand-off or label the same round, (b) a full round, (c) the lane seat': 10,
576
-
// 10 → 14: S2 of PR #29967's contract review — a review seat on the PR's own account is barred (`lanes/review.md` 独立性).
577
-
'review-seat first: a seated review seat takes before the lane, the lane joins after a further round, and takes alone while none is seated': 14,
586
+
// 10 → 14 → 16: S2 and S4 of PR #29967's contract review — a review seat on the PR's own account is barred (`lanes/review.md` 独立性); an unread card thread leaves the bar unjudged.
587
+
'review-seat first: a seated review seat takes before the lane, the lane joins after a further round, and takes alone while none is seated': 16,
578
588
'a live claim holds the head and a record settles it; a lapsed claim holds nothing': 6,
579
589
'the live instance: two Tier H drafts with a hand-off on the current head list as TAKE under (a)': 4,
580
590
'the live read: every read through one reader; a failed read is INCOMPLETE, never clean': 6,
@@ -693,6 +703,8 @@ export function selfTest() {
693
703
t('⭐ S2: the only seated review seat sits on the IMPLEMENTING account ⇒ barred, the lane\'s own seat takes at once — no further round, no triage',(()=>{constr=rv({body: ATTR,headCommittedAt: fresh,labels: [{name: WAITING_LABEL}]},OWN);returnr.status==='TAKE'&&r.reviewSeat==='barred'&&r.reviewSeats.length===0&&r.reviewBarred.join()==='review#1'&&r.taker==="the domain:ui seat (review seat review#1 is on this PR's own account)"&&!/triage/.test(renderRow(r))&&renderRow(r).includes('review seat barred (barred review#1)');})());
694
704
t('⭐ S2: a review seat on the DISPATCHING account (the card claim\'s signer) is barred too; a review seat on a third account still takes first, the barred one named',(()=>{constr=rv({card: 25922,cardComments: CLAIMED,headCommittedAt: fresh,labels: [{name: WAITING_LABEL}]},[...SEATED,{lane: REVIEW_LANE,seat: 1,status: 'seated',account: 'OS-Zhuang'},{lane: REVIEW_LANE,seat: 2,status: 'seated',account: 'os-other'}]);constalone=rv({card: 25922,cardComments: CLAIMED,headCommittedAt: '2026-10-28T10:59:00Z'},[...SEATED,{lane: REVIEW_LANE,seat: 1,status: 'seated',account: 'os-zhuang'}]);returnr.reviewSeat==='seated'&&r.reviewSeats.join()==='review#2'&&r.reviewBarred.join()==='review#1'&&r.taker==='a review seat (review#2) first'&&alone.taker==="the domain:ui seat (review seat review#1 is on this PR's own account)";})());
695
705
t('S2: the lane seat gone and the only review seat barred ⇒ the lane\'s next seat; a review seat with no account on its post is never barred',rv({body: ATTR,headCommittedAt: fresh},[{lane: REVIEW_LANE,seat: 1,status: 'seated',account: 'os-support-ai'}]).taker==="the domain:ui seat next on duty (review seat review#1 is on this PR's own account)"&&rv({body: ATTR,headCommittedAt: fresh,labels: [{name: WAITING_LABEL}]},[...SEATED,{lane: REVIEW_LANE,seat: 1,status: 'seated',account: null}]).taker==='a review seat (review#1) first');
706
+
t('⭐ S4: the card\'s comments unreadable ⇒ own accounts null, the bar UNJUDGED: a seated review seat is named with the caveat, never as free, and the lane seat beside it; with no seated review seat the states read as before',(()=>{constunread={card: 25922,cardComments: null,headCommittedAt: fresh,labels: [{name: WAITING_LABEL}]};constr=rv(unread,OWN);constgone=rv({card: 25922,cardComments: null,headCommittedAt: fresh},[{lane: REVIEW_LANE,seat: 1,status: 'seated',account: 'os-support-ai'}]);returnownAccountsOf({card: 25922,cardComments: null})===null&&ownAccountsOf({card: null,cardComments: []}).size===0&&r.reviewSeat==='unjudged'&&r.reviewSeats.join()==='review#1'&&r.reviewBarred.length===0&&r.taker==="a review seat (review#1) unless on this PR's own account (card comments unread), or the domain:ui seat"&&gone.taker==="a review seat (review#1) unless on this PR's own account (card comments unread), or the domain:ui seat next on duty"&&rv(unread,SEATED).reviewSeat==='absent'&&rv(unread,[...SEATED,{lane: REVIEW_LANE,seat: 1,status: 'paused'}]).reviewSeat==='stood-down'&&renderRow(r).includes('review seat unjudged review#1');})());
707
+
t('S4: a readable but empty comment thread on the card, or no card at all, judges the bar — the attribution login alone bars',rv({card: 25922,cardComments: [],body: ATTR,headCommittedAt: fresh,labels: [{name: WAITING_LABEL}]},OWN).reviewSeat==='barred'&&rv({body: ATTR,headCommittedAt: fresh,labels: [{name: WAITING_LABEL}]},OWN).reviewSeat==='barred');
696
708
t('the printed row carries the review-seat reading and the taker',renderRow(rv({headCommittedAt: fresh,labels: [{name: WAITING_LABEL}]})).includes(`review seat seated review#1,review#2 → (a) label · take: ${BOTH} first`)&&renderRow(rv({headCommittedAt: fresh,labels: [{name: WAITING_LABEL}]},SEATED)).includes('review seat absent → (a) label · take: the domain:ui seat (no review seat seated)'));
697
709
698
710
battery('a live claim holds the head and a record settles it; a lapsed claim holds nothing');
0 commit comments