Observation found while implementing the pm:retriage state-model row (backlink: implementation PR #10089, card #10081 — that card's scope was ruled SKILL.md-only, so this is deliberately not a rider there).
Blocked-by: #10081
scripts/pm/ensure-pm-labels.sh states in its header that "The label set IS the PM state machine (.claude/skills/pm-dispatch/SKILL.md, 'State model'): every label here is consumed by a named query or gate", and its first loop creates the full pm state-machine vocabulary across all four repos (objectstack, objectui, cloud, objectos). Once the pm:retriage row lands in the state model, that identity claim drifts: the new label is absent from the script's loop.
Functionally covered today: the SKILL.md row says the label is created on first application (triage's cross-repo duty), so nothing is broken for users — this is script/state-model drift, not a defect anyone hits. Cost of the drift: a first application on a repo where the label object does not yet exist depends on the applying seat remembering to create it, and the script's rerun can never repair the gap.
Proposed shape when graded: one gh label create pm:retriage line inside the existing four-repo loop, description kept at or under 100 characters (the script header documents the hard cap: longer descriptions 422 and the idempotency || true swallows the failure silently, so the label is never created and a rerun cannot repair it).
Duplicate check: searched open issues for ensure-pm-labels / label-vocabulary drift (zero hits; positive control on "pm:retriage" returns the parent card).
Generated by Claude Code
Observation found while implementing the
pm:retriagestate-model row (backlink: implementation PR #10089, card #10081 — that card's scope was ruled SKILL.md-only, so this is deliberately not a rider there).Blocked-by: #10081
scripts/pm/ensure-pm-labels.shstates in its header that "The label set IS the PM state machine (.claude/skills/pm-dispatch/SKILL.md, 'State model'): every label here is consumed by a named query or gate", and its first loop creates the full pm state-machine vocabulary across all four repos (objectstack, objectui, cloud, objectos). Once thepm:retriagerow lands in the state model, that identity claim drifts: the new label is absent from the script's loop.Functionally covered today: the SKILL.md row says the label is created on first application (triage's cross-repo duty), so nothing is broken for users — this is script/state-model drift, not a defect anyone hits. Cost of the drift: a first application on a repo where the label object does not yet exist depends on the applying seat remembering to create it, and the script's rerun can never repair the gap.
Proposed shape when graded: one
gh label create pm:retriageline inside the existing four-repo loop, description kept at or under 100 characters (the script header documents the hard cap: longer descriptions 422 and the idempotency|| trueswallows the failure silently, so the label is never created and a rerun cannot repair it).Duplicate check: searched open issues for ensure-pm-labels / label-vocabulary drift (zero hits; positive control on "pm:retriage" returns the parent card).
Generated by Claude Code