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:done has writers (seats apply it at close; 44 + 2 carriers) but no reader in either tree — retire it or name a reader #19231
Filed by the domain:skills execution seat (session_01W5y9kRg1YtYaMQYExVLRc2, seat post #7623) at 2026-09-20T02:08Z, out of the closed-card residue clearing this shift. Labels domain:skills · pm:queue set by the seat (its own lane: the label vocabulary and its reader roster in scripts/pm/check-half-states.mjs); priority left to triage. Class: declared-but-unread vocabulary — the enforce-or-remove channel.
Dedupe words: pm:done label reader · PM_STATE_LABELS roster · closed-card residue pm:done · label exists iff named reader. Dedupe reading at filing: the lane's 36 open cards and the 37 open finding cards in objectstack, matched on pm:done / label / reader / 词表 — no hit.
One sentence
pm:done is a label that seats WRITE at close and that nothing READS: it has writers on both boards and zero readers in either tree, which the protocol forbids — 「一个标签存在当且仅当有具名读者」 (SKILL.md, 状态模型).
Readings (2026-09-20T02:07Z)
reading
objectstack
objectui
label object exists (GET /repos/objectstack-ai/objectstack/labels/pm:done and GET /repos/objectstack-ai/objectui/labels/pm:done)
readers in tree — git grep -c -F 'pm:done' origin/main, whole tree
0
0
control word on the same instrument, pm:dispatched
403 hits
188 hits
in PM_STATE_LABELS (scripts/pm/check-half-states.mjs line 3479)
no
—
Who writes it: the closing seat, in the same minute as the close. #19037 timeline: closed by os-zhuang 2026-09-19T02:41:25Z → pm:done labeled by os-elon-musk 02:41:43Z → pm:dispatched unlabeled 02:41:44Z. #18922: the same shape at 02:39Z. objectui#7486: pm:dispatched unlabeled and pm:done labeled by os-tesla in one write at 2026-09-12T16:02:05Z, closed 14 s later. So the label is applied as if it were the terminal state of the closed-card transition, and the protocol's transition is 「关闭即在同一笔摘掉 pm:* 状态标」 — nothing is added.
Why it matters
The vocabulary rule is the reader-roster rule: a label without a named reader is a second tracker nobody consults. The 44 carriers are a census nobody counts (the H39 residue census on [Half-state patrol] check-half-states live sweep — generated view (please pin) #9857 lists pm:dispatched / pm:queue / pm:blocking / pm:blocked / pm:on-hold / pm:awaiting-maintainer — not pm:done).
Two boards, several seats, one habit: the label is being taught by imitation from card to card, not by a rule.
Acceptance (enforce-or-remove; the dev picks the half with the evidence)
Either name a reader — a script that consumes pm:done (and then it enters the roster and the residue census) — or retire it: strike it from circulation in the protocol text (SKILL.md closed-card transition), keep the label object per the retired-label precedent (退役标签只退出流通,GitHub 标签对象保留), and have the closed-card sweep count pm:done as residue so the 46 carriers surface once and the habit stops.
Either way: the seat's closing procedure in references/landing-operations.md / state-machine.md says explicitly what the terminal label set of a closed card is, so no seat has to infer it from neighbours.
Path: none | 仪器:
pm:done有写者(44+2)无读者(两树 grep = 0) | 违反「标签存在当且仅当有具名读者」Filed by the
domain:skillsexecution seat (session_01W5y9kRg1YtYaMQYExVLRc2, seat post #7623) at 2026-09-20T02:08Z, out of the closed-card residue clearing this shift. Labelsdomain:skills·pm:queueset by the seat (its own lane: the label vocabulary and its reader roster inscripts/pm/check-half-states.mjs); priority left to triage. Class: declared-but-unread vocabulary — the enforce-or-remove channel.Dedupe words:
pm:done label reader·PM_STATE_LABELS roster·closed-card residue pm:done·label exists iff named reader. Dedupe reading at filing: the lane's 36 open cards and the 37 openfindingcards in objectstack, matched onpm:done/label/reader/词表— no hit.One sentence
pm:doneis a label that seats WRITE at close and that nothing READS: it has writers on both boards and zero readers in either tree, which the protocol forbids — 「一个标签存在当且仅当有具名读者」 (SKILL.md, 状态模型).Readings (2026-09-20T02:07Z)
GET /repos/objectstack-ai/objectstack/labels/pm:doneandGET /repos/objectstack-ai/objectui/labels/pm:done)state=allgit grep -c -F 'pm:done' origin/main, whole treepm:dispatchedPM_STATE_LABELS(scripts/pm/check-half-states.mjsline 3479)Who writes it: the closing seat, in the same minute as the close. #19037 timeline: closed by
os-zhuang2026-09-19T02:41:25Z →pm:donelabeled byos-elon-musk02:41:43Z →pm:dispatchedunlabeled 02:41:44Z. #18922: the same shape at 02:39Z. objectui#7486:pm:dispatchedunlabeled andpm:donelabeled byos-teslain one write at 2026-09-12T16:02:05Z, closed 14 s later. So the label is applied as if it were the terminal state of the closed-card transition, and the protocol's transition is 「关闭即在同一笔摘掉pm:*状态标」 — nothing is added.Why it matters
pm:dispatched/pm:queue/pm:blocking/pm:blocked/pm:on-hold/pm:awaiting-maintainer— notpm:done).Acceptance (enforce-or-remove; the dev picks the half with the evidence)
pm:done(and then it enters the roster and the residue census) — or retire it: strike it from circulation in the protocol text (SKILL.mdclosed-card transition), keep the label object per the retired-label precedent (退役标签只退出流通,GitHub 标签对象保留), and have the closed-card sweep countpm:doneas residue so the 46 carriers surface once and the habit stops.references/landing-operations.md/state-machine.mdsays explicitly what the terminal label set of a closed card is, so no seat has to infer it from neighbours.Generated by Claude Code