Filed by the domain:services execution seat (session session_01AUF1NoViznQK32gqpK8wS8, os-sales). Unassigned and ungraded — recording only.
The state-machine repair this blocks
pm:blocked is defined as the label plus a machine-readable Blocked-by: #N line in the issue body — that line is what the automated unlock scan greps to return a card to the queue when its upstream closes. A pm:blocked card without it is a state nothing can wake.
Measured in this lane just now: 6 of 14 pm:blocked cards carry no such body line — #14501, #13566, #14181, #13909, #13807, #11286. At least one of them (#13909) has its blocker declared correctly, but in a comment rather than in the body, so the scan cannot see it.
Repairing that is ordinary PM state work. It turns out not to be performable with the tools a seat has.
The measurement
The issue-read channel HTML-escapes body text. Control: this seat authored #14880's body minutes before the test, so its exact input is known.
| written |
read back |
the diff's subject |
the diff's subject |
"landed after my branch point" |
"landed after my branch point" |
Lint & Repo Gates |
Lint & Repo Gates |
The control matters: without a body whose input was known, an escaped read is indistinguishable from a body that genuinely contains those entities.
And the write is whole-body replace — there is no append operation. So adding one line to an existing card means writing back the entire body as read, which is the escaped form.
Why this seat stopped rather than trying it
⚠️ Whether the write path un-escapes symmetrically is NOT MEASURED. If it does, the round trip is lossless and the repair is safe; if it does not, the body is silently corrupted — & becomes & in source, and every apostrophe becomes a literal entity. Both render similarly, so the corruption would not be visible in the rendered card and would only surface later, to whatever greps the raw body.
The only test available costs a real card's body: write one back, compare, and restore from a copy if it was mangled. On a priority:p1 card carrying a maintainer ruling, this seat judged that not worth it, and is recording the gap instead of guessing. ⛔ It is explicitly not claiming the write path is broken — only that it is unverified and that the failure mode is silent.
What would close it
Any one of these, none of which is this seat's to choose:
- An append/patch mode on the issue write, so a
Blocked-by: line can be added without round-tripping the body.
- A raw read mode (GitHub's REST returns issue bodies unescaped; the escaping appears to be added above it), making the round trip lossless by construction.
- A documented statement that the write path un-escapes symmetrically, with a control test behind it — after which the current tools are sufficient and this card closes.
Until one of them lands, pm:blocked cards missing their body line can be found by a seat but not fixed by one, and the six named above stay invisible to the unlock scan.
Related
- The 6 cards listed above, in
domain:services.
- The state-machine rule that
pm:blocked requires the body line, and the unlock scan that reads it.
Blocked-by: #15013
Generated by Claude Code
Filed by the
domain:servicesexecution seat (sessionsession_01AUF1NoViznQK32gqpK8wS8,os-sales). Unassigned and ungraded — recording only.The state-machine repair this blocks
pm:blockedis defined as the label plus a machine-readableBlocked-by: #Nline in the issue body — that line is what the automated unlock scan greps to return a card to the queue when its upstream closes. Apm:blockedcard without it is a state nothing can wake.Measured in this lane just now: 6 of 14
pm:blockedcards carry no such body line — #14501, #13566, #14181, #13909, #13807, #11286. At least one of them (#13909) has its blocker declared correctly, but in a comment rather than in the body, so the scan cannot see it.Repairing that is ordinary PM state work. It turns out not to be performable with the tools a seat has.
The measurement
The issue-read channel HTML-escapes body text. Control: this seat authored #14880's body minutes before the test, so its exact input is known.
the diff's subjectthe diff's subject"landed after my branch point""landed after my branch point"Lint & Repo GatesLint & Repo GatesThe control matters: without a body whose input was known, an escaped read is indistinguishable from a body that genuinely contains those entities.
And the write is whole-body replace — there is no append operation. So adding one line to an existing card means writing back the entire body as read, which is the escaped form.
Why this seat stopped rather than trying it
&becomes&in source, and every apostrophe becomes a literal entity. Both render similarly, so the corruption would not be visible in the rendered card and would only surface later, to whatever greps the raw body.The only test available costs a real card's body: write one back, compare, and restore from a copy if it was mangled. On a
priority:p1card carrying a maintainer ruling, this seat judged that not worth it, and is recording the gap instead of guessing. ⛔ It is explicitly not claiming the write path is broken — only that it is unverified and that the failure mode is silent.What would close it
Any one of these, none of which is this seat's to choose:
Blocked-by:line can be added without round-tripping the body.Until one of them lands,
pm:blockedcards missing their body line can be found by a seat but not fixed by one, and the six named above stay invisible to the unlock scan.Related
domain:services.pm:blockedrequires the body line, and the unlock scan that reads it.Blocked-by: #15013
Generated by Claude Code