Skip to content

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

Description

@os-tesla

Path: none | 仪器:pm:done 有写者(44+2)无读者(两树 grep = 0) | 违反「标签存在当且仅当有具名读者」

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) yes yes
carriers, state=all 44 (0 open, 44 closed; oldest #14492 2026-09-03, newest #19037 2026-09-19) 2 (#7486, #7258; closed)
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.

Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions