Skip to content

docs(pm): make the merged-PR read the primary leg of the stale-claim reclaim test - #13968

Draft
os-sam wants to merge 1 commit into
mainfrom
claude/issue-13558-reclaim-primary-leg
Draft

docs(pm): make the merged-PR read the primary leg of the stale-claim reclaim test#13968
os-sam wants to merge 1 commit into
mainfrom
claude/issue-13558-reclaim-primary-leg

Conversation

@os-sam

@os-sam os-sam commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator

Fixes #13558

What

Rewrites the evidentiary hierarchy of the dead-claim reclaim (死认领回收) staleness test in .claude/skills/pm-dispatch/SKILL.md — one paragraph, four lines replacing one:

  1. Primary leg: search PRs that reference the card and read their merged/merged_at — explicitly NOT the closes-list, which is empty exactly when a partial PR deliberately wrote Refs rather than Fixes (the shape both existing proxies miss).
  2. Demotion: branch absence and commit-message scans fail toward the same direction ("nothing landed"), so they can only corroborate a stale verdict, never establish one alone.
  3. Zero referencing PRs means stop and ask, never conclude "nothing landed".

Untouched, verified in the diff: the rescue-first precondition (存活前置 / WIP-commit rescue), the message-boundary clause, and 有带提交活分支的认领永不回收. The >~24h threshold survives as the suspicion trigger.

Ratchet and gates (at head 1958a4e)

  • check:pm-skill-ratchet: "SKILL.md is 965 lines (ceiling 1005; headroom 40)" — net +3 lines; every new line is at most 120 bytes, with breaks matching the gate's own wrapLine canonical output.
  • check:pm-skill-id-lint: "23 file(s) clean (pattern /#[0-9]{3,}/g)" — the new rule text is self-contained, no issue ids; the incident stays on the card.
  • check:skill-frame-sync, check:pm-governed-prose, check:pm-governed-merges (self-test), check:doc-authoring, check:agent-test-spelling, check:doc-formula-expressions, check:nul-bytes: all green at head 1958a4e. Gate union derived on this head by node scripts/pm/dispatch-gates.mjs (9 families matched; same set pre- and post-commit).
  • check-governed-queue-guard: NOT MEASURED locally — it reads GITHUB_EVENT_PATH and refuses to run without a workflow event payload; CI owns that context.

Runbook

references/dispatch-runbook.md (held by pending human-merge PR #13948) was checked and needs no reclaim-detail edit: its only >24h clause is the seat-post liveness demotion, which shares the threshold but not the card-level staleness test. No would-be runbook text to record.

Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2

Generated by Claude Code


Generated by Claude Code

…test

The dead-claim reclaim paragraph established staleness from two proxies
(promised branch absent + no PR), and both fail toward "nothing landed"
in a squash-merging, delete-on-merge repo family. The primary leg is now
the direct read: search PRs that reference the card and read their
merged/merged_at — not the closes-list, which is empty exactly when a
partial PR deliberately wrote Refs instead of Fixes. Branch absence and
commit-message scans demote to corroboration that can only support a
stale verdict, never establish one alone; zero referencing PRs means
stop and ask, never "nothing landed". Rescue-first precondition, the
message-boundary clause and the live-branch never-reclaim rule are
untouched.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants