Skip to content

docs(pm-dispatch): state-machine rows for the pm-state ONE-OF, queue rot horizon and contract-review dual carrier - #11928

Merged
hotlong merged 1 commit into
mainfrom
claude/issue-11889-state-machine-doc-rows
Aug 25, 2026
Merged

docs(pm-dispatch): state-machine rows for the pm-state ONE-OF, queue rot horizon and contract-review dual carrier#11928
hotlong merged 1 commit into
mainfrom
claude/issue-11889-state-machine-doc-rows

Conversation

@claude

@claudeclaudeBot commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Fixes#11889

Seat-facing reference rows for the three invariants scripts/pm/check-half-states.mjs
now enforces (H29/H30/H31, both source PRs merged and on main). The rows are composed
BY POINTER — a new ## 通则 section whose heading names check-half-states.mjs
H29/H30/H31 as the judging authority, so no rule mechanics are duplicated into the doc.

Each row was derived from the shipped block on main, not from memory:

  • Six-state ONE-OF — the vocabulary is PM_EXCLUSIVE_STATE_LABELS (five pm:*
    positions + needs-user-decision); the row states the exclusivity and the measured
    origin of every pair, a transition written as an ADD instead of a REPLACE, and
    prescribes the single replace write.
  • pm:queue rot horizon — 3 days, H30's QUEUE_ROT_STALE_DAYS; the row carries why
    the queue is the one state where waiting is not a state, and that the remedy is ONE
    explicit transition (dispatch / convert to needs-user-decision / park / withdraw /
    rewrite the premise), never a re-ranking.
  • needs:contract-review dual carrier — card AND delivering PR, hung in one stroke,
    cleared in one stroke, read back each way, plus H31's deliberate silence: card-side
    first with no PR yet is a legal intermediate state, not a half-write.

The line arithmetic — paid by consolidation, ceiling untouched at 43/43

The file sits at the ratchet ceiling with headroom 0, and the ratchet's raise clause
requires a maintainer ruling quoted in the raising PR. No such ruling exists for these
rows, so the ceiling is NOT raised and scripts/pm/check-skill-line-ratchet.mjs is not
touched. The nine new lines are paid for in full:

lines
new ## 通则 section (heading + blank + 6 bullet lines + separator)+9
provenance paragraph 2 → 1−1
pm:on-hold bullets 12 → 9−3
pm:awaiting-maintainer + pm:retriage merged into one section, 12 → 7−5
net0 (43 → 43)

What the consolidation actually did, so a reviewer can check that nothing was silently
dropped:

  1. The pm:awaiting-maintainer row's exclusivity clause enumerated the five labels it
    excludes. That clause IS the general ONE-OF row — it was consolidated into it rather
    than deleted, and the awaiting entry now carries only its exit (no machine exit, by
    construction; parked inventory in the in-flight view).
  2. The dual-channel contract (body or comment, either is the line) was stated twice
    inside the pm:on-hold section; it now stands once, on the Restart-touch: bullet
    that names all three canonical lines.
  3. Three provenance stories were dropped while the rules they came with all stand: the
    dated four-spelling census on Blocked-by: (the rule 「指令是行,提及是散文」 stays),
    the parser-tolerance aside on Restart-touch:, and the rationale parenthetical on the
    second release check. This follows the ratchet's own doctrine — "provenance is one
    line; stories live on cards, not in operational text".

Everything else is byte-identical in substance; the re-wrap keeps every line inside the
file's 83-column convention.

Gates

Derived, not recalled: node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack
(no path args — the script takes the change set from the merge base itself) reports
7 matched families for the one changed path. All seven were run at the final commit
2285fac4, each verdict quoted from the gate's own output, exit codes captured before
any pipe:

pnpm check:pm-skill-ratchet
✓ check-skill-line-ratchet: .claude/skills/pm-dispatch/references/state-machine.md is 43 lines (ceiling 43; headroom 0).
pnpm check:pm-skill-id-lint
✓ check-skill-id-lint: 22 file(s) clean (pattern /#[0-9]{3,}/g).
pnpm check:doc-authoring
✓ doc authoring guard: 389 files clean — no bare metadata literals.
pnpm check:skill-frame-sync
✓ check-skill-frame-sync: 4 copies of the decision frame are structurally isomorphic across 3 files
pnpm check:agent-test-spelling
✓ check-agent-test-spelling: 0 violations — 364 file(s) · 3609 bare `--` token(s) · 1115 launcher-rooted run(s) · 8 separator(s) JUDGED
pnpm check:pm-governed-merges
✓ check-governed-merges --self-test: 129 assertions (the unified governed predicate + near misses, …)
pnpm --filter @objectstack/lint run check:doc-formula-expressions
✓ check:doc-formula-expressions self-test: 50 cases passed
✓ check:doc-formula-expressions: 22 record-scoped formula example(s) across 421 files / 1448 TS blocks judged clean by @objectstack/formula.

Docs-only: no changeset, skip-changeset label applied. Governed surface — draft PR,
human merge; auto-merge NOT enabled.

Generated by Claude Code


Generated by Claude Code

…e rot horizon and the contract-review dual carrier
Paid by consolidation inside the file's 43-line ceiling (headroom 0, no raise).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RMTpSRF5CjMmQBFfPtPCwJ
@claudeclaudeBot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 25, 2026
@github-actionsgithub-actionsBot added size/s documentation Improvements or additions to documentation labels Aug 25, 2026
@hotlong
hotlong marked this pull request as ready for review August 25, 2026 01:38
@hotlong
hotlong added this pull request to the merge queueAug 25, 2026
Merged via the queue into main with commit ac59744Aug 25, 2026
27 checks passed
@hotlong
hotlong deleted the claude/issue-11889-state-machine-doc-rows branch August 25, 2026 01:51
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationsize/sskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

state-machine.md: doc rows for H29/H30/H31 — docs-only PR after #11874 merges, paid by consolidation at 43/43

2 participants

@hotlong@zhuangjianguo