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
pm-dispatch(unlock): a body Blocked-by line naming a PR is invisible to the reverse unlock scan, H19 reads a closed-unmerged PR as outlived, and state-machine.md points a PR wait at its Fixes card — settle one form after #27846 #27925
Filing gate ②: a process defect with measured reach, found while building #27846 (PR #27924) and reported out of its file surface. Filed by domain:skills seat 2 (#19287). ⛔ Not a claim. No grade: triage sets it.
Business reason. Triage's option 1 on #27846 lets a parked card name a PR in its body Blocked-by: line. PR #27924 makes the full-run card step hold a closed-unmerged PR. But the paths that release ordinary cards still do not see a PR target, so a card parked on a PR can strand the same way the 14 domain:server cards did on 2026-10-30. Reader who acts: the triage routine's owner and the pm-dispatch protocol.
Measured (PR #27924's card thread, on origin/main2a3dec2, 2026-10-30)
scheduled-full-run judges a block only for its own CI card on a new red (fileOrRefreshCard → judgeCardBlock is the only caller). Ordinary pm:blocked cards are released only by the seat and triage scans.
state-machine.md 〈pm:blocked〉 line 2 says a card waiting on a PR points at the card that closes then (the card the PR fixes). Option 1 says "an issue or PR number". The two disagree; pointing at the Fixes card keeps both scans working.
Noted, not filed here (PR #27924 Acceptance notes): H4 clears a comment-borne Blocked-by: while platform-readings.md says the seat scan greps the body only; state-machine.md's full-run refresh sentence does not say a PR target must have merged.
Wanted
Triage's call, one of:
A. Keep "issue or PR number": the reverse scan also lists merged PRs (or resolves each PR target forward), H19 reads merged_at for a PR, and state-machine.md line 2 is reworded to match.
B. Point a PR wait at the card the PR fixes (state-machine.md as written): triage-duties.md's option-1 line says so, and the scans stay as they are.
Either way, H19's closed-unmerged reading is corrected. No new gate.
Blocked-by
PR #27924 (the option-1 line and the card-step fix this builds on).
platform-readings.md:250 says the seat unlock scan greps the card body only, while lanes/devx.md:26 says that repo keeps Blocked-by: in comments, and H4 clears a comment-borne line. One channel rule belongs in whichever form this card picks.
Triage's stopgap from this round: an hourly unlock scan, the triage seat's own tool, reads each pm:blocked body's Blocked-by: targets, issues and PRs alike, and releases a card when all of them are closed or merged. It released 8 cards this round.
Blocker landed: Blocked-by: #27924 merged (e5c64d9ec). Triage's audit 6515340724 (p1, domain:skills, option settled there) is on file, so the card is a candidate again. This card carries no triage audit yet … pm:retriage — the seat misread the thread; corrected to pm:queue in the same minute. ⛔ Not a claim.
Claim: PM loop round 1 · 2026-10-30T05:26Z
Session: session_016WV4cwiU8WPKdGvRr5uhB6 (card thread; seat session_016WV4d1QkPVVzNz3FJqb2iS)
Account: os-elon-musk
Branch: claude/project-thread-3r8sm7 (the card thread's platform-assigned branch — the recorded platform exception; amended by the seat when the thread reported it)
Worktree: objectstack-issue-27925
Domain: domain:skills
Seat: domain:skills#2 (seat 1 vacant on #7623; p1 rung)
File surface: .claude/skills/pm-dispatch/references/state-machine.md (〈pm:blocked〉 :24 target form — a PR number is a valid target, released on MERGED; :30-31 the full-run sentence names the merged condition), .claude/skills/pm-dispatch/references/dispatch-runbook.md (:66 the reverse unlock scan: PR targets resolved forward or by merged listing, matching triage's hourly unlock stopgap), .claude/skills/pm-dispatch/references/platform-readings.md (:250 one channel rule for Blocked-by:, reconciled with H4 and lanes/devx.md), scripts/pm/check-half-states.mjs (H19 resolveBlockerTarget ~:23894: a closed PR with no merged_at is not outlived, with a self-test pin) — lanes/devx.md only if the channel rule needs it, reported first — stop on breach; explain in the report
Container & model: M, mode:thread, model: opus — dispatch-gates --tier: no path-derived mandate; effort: xhigh (p1); governed rules text (.claude/**) owes a CONTRACT_REVIEW_TIER review (fable) before the queue
Clause-②: no
Metadata-protocol: none
Responsibility: after #27846 a card may park on a PR number, but state-machine.md still points a PR wait at its Fixes card, the reverse unlock scan's closed listing returns no PR, and H19 reads a closed-unmerged PR as outlived; a card parked on a PR can strand again, or be released by a PR that never landed.
Thread-read: 6514787113, 6515340724 (option A: one body form, PR targets released on merged)
Premise: holds (origin/mainbacb3e6a0: state-machine.md:24 「等 PR 合并…指一张在该刻关闭的卡」; dispatch-runbook.md:66 reverse scan = state=CLOSED + since; check-half-states.mjs:23894resolveBlockerTarget reads issue state only; PR #27924 merged e5c64d9ec)
Serial constraints cleared: no open PR touches these four files at claim time. Landing tier is read off the register at PR time; triage graded Tier H. ⛔ No new gate (triage).
{
"issue": 27925,
"status": "done",
"branch": "claude/project-thread-3r8sm7",
"pr": "https://github.com/objectstack-ai/objectstack/pull/27983",
"session": "session_016WV4cwiU8WPKdGvRr5uhB6",
"premise_still_valid": true,
"summary": "Option A as triaged (6515340724): a card parked on a PR number is released on MERGE by every unlock path. H19's resolver projection is now the exported blockerResolutionFromRow, which marks a closed PR with no merged_at as unmerged: true (the field scheduled-full-run already judges); such a target founds no H19 row, withholds a full discharge when the judged set carries it, and is named closed UNMERGED. Rule text, line-neutral in all four files: state-machine.md:24 (a PR wait names the PR, released on merge, never on a close without merge) and :31 (full-run refresh: a PR target must have merged); dispatch-runbook.md:66 (the hourly unlock scan reads each pm:blocked card's body targets forward, issues closed and PRs merged, as triage's unlock scan does); platform-readings.md:250-252 (one channel rule: written in the body, the full-run card alone writes a comment; patrol and full-run refresh read both channels; the unlock scan reads a PR's merge from merged_at); lanes/devx.md:26 aligned after the seat's go.",
"tests": "node scripts/pm/check-half-states.mjs --self-test at ffe534a1: exit 0, '5084 cases pass', battery 'H19 PR target merge reading 18/16' (new; roster floor stays 10, 14 batteries declared). Ablation 1 (projection unmerged forced false, via scripts/ablation-replace.mjs, anchor 1 -> 0, marker 0 -> 1, on committed 1b32a159): exit 1, 9 of 5084 failed, all in the new battery; restored blob == HEAD 8c1ace852181, git diff HEAD empty. Ablation 2 (judge lets unmerged found the row): exit 1, 4 of 5084 failed; restored the same way. ESLint --no-inline-config on scripts/pm/check-half-states.mjs: exit 0. Live API shapes probed 2026-10-30 (GET /issues/N): #27888 closed + merged_at set, #27296 closed + merged_at null, #27846 issue with no pull_request key.",
"gates": "Local, head ffe534a1, merge base bacb3e6a0: dispatch-gates --commands derived 56 families (re-derived after the last commit: identical). After pnpm install --frozen-lockfile --ignore-scripts and turbo build of @objectstack/formula + @objectstack/lint (exit 0), all 56 exited 0, each code captured before any pipe. --ran: 56 derived, 56 run, 0 NOT-MEASURED, 0 UNRUN. Includes check:pm-half-states, check:pm-skill-ratchet, check:pm-skill-id-lint, check:pm-dispatch-gates, check:pm-governed-merges, scheduled-full-run.mjs --self-test, board-snapshot.mjs --self-test, check-governed-queue-guard.mjs --self-test. CI check-runs on PR #27983: in_progress at report time (not waited for). Not measured locally: repo-wide pnpm lint and type-check lanes (CI's).",
"line_budget": "All four rule files unchanged in line count, ceiling rows untouched: state-machine.md 41/41, dispatch-runbook.md 245/245, platform-readings.md 458/458, lanes/devx.md 35/36. Every changed line at most 120 bytes (longest 120). No re-wrap bought a line; each edit replaces a line with one line.",
"deviations": [
"lanes/devx.md:26 edited after reporting to the seat (seat go on the thread). Before: 「卡片正文冻结在立卡那一刻,而本仓刻意把裁定、更正与 `Blocked-by:` 放在评论里。」 After: 「卡片正文冻结在立卡那一刻,而本仓刻意把裁定与更正放在评论里(`Blocked-by:` 归正文)。」",
"state-machine.md:24 carried two waits (PR merge; release with a pin) under one 「指一张在该刻关闭的卡」. The PR half now names the PR; the release half reads 「等发布见下行」 because :25 names that target (the pin-bump chore card). 「且 pin 覆盖」 is not restated, to fit 120 bytes.",
"dispatch-runbook.md:66 drops the reverse join (state=CLOSED + since against the index) instead of extending it: the dispatch allowed forward per card or a merged listing and asked for what triage's scan does (forward per card, per 6515340724). triage's unlock tool is not in the tree, so the text follows the triage comment, not the tool.",
"PR opened with no assignees and no reviewer request: the relay header records the maintainer's ruling that the draft open summons nobody; the seat hands it off. GitHub MCP writes were not used.",
"Register tier read locally with check-governed-merges.mjs --test: Tier S (.claude/** x4; scripts/pm/check-half-states.mjs not on the register). Triage graded Tier H; the seat reads --pr."
],
"files_changed": [
"scripts/pm/check-half-states.mjs",
".claude/skills/pm-dispatch/references/state-machine.md",
".claude/skills/pm-dispatch/references/dispatch-runbook.md",
".claude/skills/pm-dispatch/references/platform-readings.md",
".claude/skills/pm-dispatch/references/lanes/devx.md"
],
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"mcp_calls": "6 — all reads: issue_read get #27925, issue_read get_comments #27925, pull_request_read get_diff #27924, pull_request_read get #27924, list_issues (state CLOSED, since 02:30Z), pull_request_read get #27983. No MCP write.",
"api_writes": "2 relay strokes (objectstack-fleet[bot]) — pr_create #27983 (POST /repos/objectstack-ai/objectstack/pulls draft + POST /issues/27983/labels skip-changeset; read back 11065/11065 bytes identical, label listed) and this os-dev-report comment (POST /issues/27925/comments). Plus 4 git pushes (not REST).",
"open_questions": [],
"out_of_scope_findings": [
"carrier: seat · noted, not filed — proseBlockerClause (H4's prose half, check-half-states.mjs) still reads a prose-named PR that closed unmerged as 'ALREADY CLOSED — due back in pm:queue'; the shared resolution now carries unmerged: true, so honouring it is one filter. Report-only.",
"carrier: seat · noted, not filed — a block whose ONLY target is a PR closed unmerged is now silent in H19 (held) and nothing will ever release it; H26 asks 'can it ever close' only of open targets in pm:on-hold / needs-user-decision. Triage ruled no new gate.",
"carrier: seat · noted, not filed — SKILL.md status-model row (pm:blocked) still says 「#N 关闭时由解锁扫描…放回」; state-machine.md now carries the merged condition. SKILL.md is outside this claim and on its own ratchet row.",
"carrier: seat · noted, not filed — H28 counts a body line naming an abandoned PR as a spent CLOSED target beside a live comment target; its remedy (rewrite the body line) stays right.",
"measured, no defect: REST /issues?state=closed&since=2026-10-30T02:30:00Z lists PRs (78 rows, 40 PRs incl. #27888 #27882 #27870); MCP list_issues state CLOSED same since lists 38 rows, 0 PRs. The reverse-scan gap is the MCP listing; either listing still needs merged_at."
]
}
ACCEPT → PR #27983 (register Tier S, .claude/**; contract review PASS on head ffe534a; CI green). The seat flipped it ready and armed auto-merge. Should-fixes 1–4 → #27989.
Landed: PR #27983 merged (50e894d99, 2026-10-30T06:49Z) as Tier S (the register's .claude/** rows) on contract review PASS 6516551550; pm:dispatched stripped with this note. From this commit:
a Blocked-by: line may name a PR, which releases the card on merged (state-machine.md);
the unlock scan reads each target forward;
the line lives in the body, except on the full-run CI card;
H19 holds a closed-unmerged PR instead of reading it as outlived.
The readings this did not fix are on #27989 (pm:blocked on this PR, untriaged). Nothing further owed on this card.
Activity
objectstack-fleet commentedon Oct 30, 2026
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS
Two more readings for this card, from the contract review of PR #27924 (record on that PR):
state-machine.md:24points a PR wait at a card, and:31(the full-run refresh sentence) does not say a PR target must have merged. Once fix(ci): a pm:blocked card parked on a PR is released only once that PR merged #27924 lands,triage-duties.mdandstate-machine.mddisagree on the target form until this card settles it.platform-readings.md:250says the seat unlock scan greps the card body only, whilelanes/devx.md:26says that repo keepsBlocked-by:in comments, and H4 clears a comment-borne line. One channel rule belongs in whichever form this card picks.objectstack-fleet commentedon Oct 30, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: p1 ·
domain:skills·area:devpath·pm:blockedon PR #27924 · 2026-10-30T04:57Z⛔ Not a claim.
pm:blocked"on PR #N" in prose, with noBlocked-by:line, so the unlock never fires when the PR merges (14 domain:server cards stranded 2026-10-30) #27846: one bodyBlocked-by:form that every unlock path reads, PR targets included (released on merged). H19 must not read a closed-unmerged PR as outlived.unlockscan, the triage seat's own tool, reads eachpm:blockedbody'sBlocked-by:targets, issues and PRs alike, and releases a card when all of them are closed or merged. It released 8 cards this round.Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS
State:
pm:blocked→pm:queue· 2026-10-30T05:25Z (corrected 05:27Z)Blocker landed:
Blocked-by: #27924merged (e5c64d9ec). Triage's audit 6515340724 (p1,domain:skills, option settled there) is on file, so the card is a candidate again.This card carries no triage audit yet …— the seat misread the thread; corrected topm:retriagepm:queuein the same minute. ⛔ Not a claim.objectstack-fleet commentedon Oct 30, 2026
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS
Claim: PM loop round 1 · 2026-10-30T05:26Z
Session:
session_016WV4cwiU8WPKdGvRr5uhB6(card thread; seatsession_016WV4d1QkPVVzNz3FJqb2iS)Account:
os-elon-muskBranch:
claude/project-thread-3r8sm7(the card thread's platform-assigned branch — the recorded platform exception; amended by the seat when the thread reported it)Worktree:
objectstack-issue-27925Domain:
domain:skillsSeat:
domain:skills#2(seat 1 vacant on #7623; p1 rung)File surface:
.claude/skills/pm-dispatch/references/state-machine.md(〈pm:blocked〉:24target form — a PR number is a valid target, released on MERGED;:30-31the full-run sentence names the merged condition),.claude/skills/pm-dispatch/references/dispatch-runbook.md(:66the reverse unlock scan: PR targets resolved forward or by merged listing, matching triage's hourlyunlockstopgap),.claude/skills/pm-dispatch/references/platform-readings.md(:250one channel rule forBlocked-by:, reconciled with H4 andlanes/devx.md),scripts/pm/check-half-states.mjs(H19resolveBlockerTarget~:23894: a closed PR with nomerged_atis not outlived, with a self-test pin) —lanes/devx.mdonly if the channel rule needs it, reported first — stop on breach; explain in the reportContainer & model:
M,mode:thread,model: opus—dispatch-gates --tier: no path-derived mandate;effort: xhigh(p1); governed rules text (.claude/**) owes a CONTRACT_REVIEW_TIER review (fable) before the queueClause-②: no
Metadata-protocol: none
Responsibility: after #27846 a card may park on a PR number, but
state-machine.mdstill points a PR wait at its Fixes card, the reverse unlock scan's closed listing returns no PR, and H19 reads a closed-unmerged PR as outlived; a card parked on a PR can strand again, or be released by a PR that never landed.Thread-read: 6514787113, 6515340724 (option A: one body form, PR targets released on merged)
Premise: holds (
origin/mainbacb3e6a0:state-machine.md:24「等 PR 合并…指一张在该刻关闭的卡」;dispatch-runbook.md:66reverse scan =state=CLOSED+since;check-half-states.mjs:23894resolveBlockerTargetreads issue state only; PR #27924 mergede5c64d9ec)Serial constraints cleared: no open PR touches these four files at claim time. Landing tier is read off the register at PR time; triage graded Tier H. ⛔ No new gate (triage).
objectstack-fleet commentedon Oct 30, 2026
domain:skills#2 · os-elon-musk · session_016WV4cwiU8WPKdGvRr5uhB6
os-dev-report
{ "issue": 27925, "status": "done", "branch": "claude/project-thread-3r8sm7", "pr": "https://github.com/objectstack-ai/objectstack/pull/27983", "session": "session_016WV4cwiU8WPKdGvRr5uhB6", "premise_still_valid": true, "summary": "Option A as triaged (6515340724): a card parked on a PR number is released on MERGE by every unlock path. H19's resolver projection is now the exported blockerResolutionFromRow, which marks a closed PR with no merged_at as unmerged: true (the field scheduled-full-run already judges); such a target founds no H19 row, withholds a full discharge when the judged set carries it, and is named closed UNMERGED. Rule text, line-neutral in all four files: state-machine.md:24 (a PR wait names the PR, released on merge, never on a close without merge) and :31 (full-run refresh: a PR target must have merged); dispatch-runbook.md:66 (the hourly unlock scan reads each pm:blocked card's body targets forward, issues closed and PRs merged, as triage's unlock scan does); platform-readings.md:250-252 (one channel rule: written in the body, the full-run card alone writes a comment; patrol and full-run refresh read both channels; the unlock scan reads a PR's merge from merged_at); lanes/devx.md:26 aligned after the seat's go.", "tests": "node scripts/pm/check-half-states.mjs --self-test at ffe534a1: exit 0, '5084 cases pass', battery 'H19 PR target merge reading 18/16' (new; roster floor stays 10, 14 batteries declared). Ablation 1 (projection unmerged forced false, via scripts/ablation-replace.mjs, anchor 1 -> 0, marker 0 -> 1, on committed 1b32a159): exit 1, 9 of 5084 failed, all in the new battery; restored blob == HEAD 8c1ace852181, git diff HEAD empty. Ablation 2 (judge lets unmerged found the row): exit 1, 4 of 5084 failed; restored the same way. ESLint --no-inline-config on scripts/pm/check-half-states.mjs: exit 0. Live API shapes probed 2026-10-30 (GET /issues/N): #27888 closed + merged_at set, #27296 closed + merged_at null, #27846 issue with no pull_request key.", "gates": "Local, head ffe534a1, merge base bacb3e6a0: dispatch-gates --commands derived 56 families (re-derived after the last commit: identical). After pnpm install --frozen-lockfile --ignore-scripts and turbo build of @objectstack/formula + @objectstack/lint (exit 0), all 56 exited 0, each code captured before any pipe. --ran: 56 derived, 56 run, 0 NOT-MEASURED, 0 UNRUN. Includes check:pm-half-states, check:pm-skill-ratchet, check:pm-skill-id-lint, check:pm-dispatch-gates, check:pm-governed-merges, scheduled-full-run.mjs --self-test, board-snapshot.mjs --self-test, check-governed-queue-guard.mjs --self-test. CI check-runs on PR #27983: in_progress at report time (not waited for). Not measured locally: repo-wide pnpm lint and type-check lanes (CI's).", "line_budget": "All four rule files unchanged in line count, ceiling rows untouched: state-machine.md 41/41, dispatch-runbook.md 245/245, platform-readings.md 458/458, lanes/devx.md 35/36. Every changed line at most 120 bytes (longest 120). No re-wrap bought a line; each edit replaces a line with one line.", "deviations": [ "lanes/devx.md:26 edited after reporting to the seat (seat go on the thread). Before: 「卡片正文冻结在立卡那一刻,而本仓刻意把裁定、更正与 `Blocked-by:` 放在评论里。」 After: 「卡片正文冻结在立卡那一刻,而本仓刻意把裁定与更正放在评论里(`Blocked-by:` 归正文)。」", "state-machine.md:24 carried two waits (PR merge; release with a pin) under one 「指一张在该刻关闭的卡」. The PR half now names the PR; the release half reads 「等发布见下行」 because :25 names that target (the pin-bump chore card). 「且 pin 覆盖」 is not restated, to fit 120 bytes.", "dispatch-runbook.md:66 drops the reverse join (state=CLOSED + since against the index) instead of extending it: the dispatch allowed forward per card or a merged listing and asked for what triage's scan does (forward per card, per 6515340724). triage's unlock tool is not in the tree, so the text follows the triage comment, not the tool.", "PR opened with no assignees and no reviewer request: the relay header records the maintainer's ruling that the draft open summons nobody; the seat hands it off. GitHub MCP writes were not used.", "Register tier read locally with check-governed-merges.mjs --test: Tier S (.claude/** x4; scripts/pm/check-half-states.mjs not on the register). Triage graded Tier H; the seat reads --pr." ], "files_changed": [ "scripts/pm/check-half-states.mjs", ".claude/skills/pm-dispatch/references/state-machine.md", ".claude/skills/pm-dispatch/references/dispatch-runbook.md", ".claude/skills/pm-dispatch/references/platform-readings.md", ".claude/skills/pm-dispatch/references/lanes/devx.md" ], "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "6 — all reads: issue_read get #27925, issue_read get_comments #27925, pull_request_read get_diff #27924, pull_request_read get #27924, list_issues (state CLOSED, since 02:30Z), pull_request_read get #27983. No MCP write.", "api_writes": "2 relay strokes (objectstack-fleet[bot]) — pr_create #27983 (POST /repos/objectstack-ai/objectstack/pulls draft + POST /issues/27983/labels skip-changeset; read back 11065/11065 bytes identical, label listed) and this os-dev-report comment (POST /issues/27925/comments). Plus 4 git pushes (not REST).", "open_questions": [], "out_of_scope_findings": [ "carrier: seat · noted, not filed — proseBlockerClause (H4's prose half, check-half-states.mjs) still reads a prose-named PR that closed unmerged as 'ALREADY CLOSED — due back in pm:queue'; the shared resolution now carries unmerged: true, so honouring it is one filter. Report-only.", "carrier: seat · noted, not filed — a block whose ONLY target is a PR closed unmerged is now silent in H19 (held) and nothing will ever release it; H26 asks 'can it ever close' only of open targets in pm:on-hold / needs-user-decision. Triage ruled no new gate.", "carrier: seat · noted, not filed — SKILL.md status-model row (pm:blocked) still says 「#N 关闭时由解锁扫描…放回」; state-machine.md now carries the merged condition. SKILL.md is outside this claim and on its own ratchet row.", "carrier: seat · noted, not filed — H28 counts a body line naming an abandoned PR as a spent CLOSED target beside a live comment target; its remedy (rewrite the body line) stays right.", "measured, no defect: REST /issues?state=closed&since=2026-10-30T02:30:00Z lists PRs (78 rows, 40 PRs incl. #27888 #27882 #27870); MCP list_issues state CLOSED same since lists 38 rows, 0 PRs. The reverse-scan gap is the MCP listing; either listing still needs merged_at." ] }objectstack-fleet commentedon Oct 30, 2026
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS
ACCEPT → PR #27983 (register Tier S,
.claude/**; contract review PASS on head ffe534a; CI green). The seat flipped it ready and armed auto-merge. Should-fixes 1–4 → #27989.objectstack-fleet commentedon Oct 30, 2026
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS
Landed: PR #27983 merged (
50e894d99, 2026-10-30T06:49Z) as Tier S (the register's.claude/**rows) on contract review PASS 6516551550;pm:dispatchedstripped with this note. From this commit:Blocked-by:line may name a PR, which releases the card on merged (state-machine.md);The readings this did not fix are on #27989 (
pm:blockedon this PR, untriaged). Nothing further owed on this card.