Skip to content

docs(pm-dispatch): references platform-facts sweep — seven measured reading rules - #8490

Draft
hotlong wants to merge 1 commit into
mainfrom
claude/issue-8455-references-facts-sweep
Draft

docs(pm-dispatch): references platform-facts sweep — seven measured reading rules#8490
hotlong wants to merge 1 commit into
mainfrom
claude/issue-8455-references-facts-sweep

Conversation

@hotlong

Copy link
Copy Markdown
Contributor

Fixes#8434, Fixes#8374, Fixes#8272, Fixes#8187

References platform-facts sweep (sweep card: #8455): seven measured platform/process facts land as self-contained reading rules across five files under .claude/skills/pm-dispatch/references/ — zero SKILL.md lines, no code, no scripts. Item 3 of #8294 lands here; items 1–2 of #8294 belong to the os-dev role-file card, so #8294 remains open and carries no development link from this PR. #8293 remains open — its detector's mechanism record is only the evidence source for the keyword-hygiene wording.

Per-member deliverables (落点 | before | after)

Member card on gate readings and superseded heads → review-checklist.md + platform-readings.md

  • Before: the ready-flip check requires the ESLint / Type Check jobs' conclusion: success but never says on which commit; the nearest platform-readings row covers a stale merge base (rerun_failed_jobs), not a stale head.
  • After: two checklist clauses — pin every gate reading to the PR's current head (read the PR's head.sha first; a run whose head_sha differs is a reading about a dead commit, counted in neither direction), and never rerun a run on a superseded head (a cancelled conclusion on a non-current head needs no action; the rerun burns a heavyweight cycle and can faithfully reproduce a defect the current head already repaired). Plus one platform-readings row: cheap sibling workflows success + heavyweight carrier cancelled on the same head is the expected supersession signature, not selective failure.

Member card on list_issues and assignees → platform-readings.md

  • Before: the MCP parameter-trap row covers OR-label filtering and whole-set label writes only.
  • After: new row — list_issues never returns assignees (no such fields member; absent either way), so a claimed card and a free one are byte-identical in the response; a listing is a shortlist and every entry needs a full issue_read before it can be claimed.

Member card on issue_read body escaping → platform-readings.md

  • Before: no row on MCP body encoding.
  • After: new row — issue_read bodies come back HTML-entity-escaped while comments come back raw; a body round-trip via issue_write is unsafe from MCP-backed seats; machine-greppable lines (Blocked-by: and kin) may live in comment first lines, so unlock scans must include in:comments; verify against the raw body via REST before any body rewrite.

Member card on account-scoped session handles → dispatch-runbook.md + seat-post-protocol.md

  • Before: the not-reachable line covers only the roster design; the exit checklist has no session-archive step.
  • After: the runbook line now states session handles are account-scoped — get_session / archive_session / the bound-session poke route all answer not found for another account's session, indistinguishable from "never existed", and that answer is never a death signal; liveness across accounts is judged from GitHub-anchored output only. The seat-post exit checklist gains step ⑥ʹ: the outgoing PM archives its own dev sessions before standing down; a session that must be left running is named in the seat post with the archive obligation marked non-transferable.

Absorbed item (auto-merge echo + measured parameters) → platform-readings.md

  • Before: the auto-merge rows say only that the empty-field echo has zero discriminating power for queue membership.
  • After: new row — always pass an explicit mergeMethod: "SQUASH" (omitting it silently falls back to the forbidden merge-commit method); the echo is unreliable in both directions (measured: an empty echo on the queue path while the enqueued timeline event fired and the PR landed; a MERGE echo after passing SQUASH); the authoritative signals are queue-membership timeline events and the eventual MERGED state — never the echo, never the auto_merge field. Plus one row carrying the two measured throughput data points: merge-queue landing latency ~15–30 min per PR, serialized; single-container heavy-verify concurrency sweet spot ≈3.

Scope amendment (post-merge inventory re-pull) → landing-operations.md

  • Before: post-merge close verification is only the per-card closed_by_pull_requests read.
  • After: explicit post-merge step — re-pull the lane inventory after every merge and diff it against the expected state; a card that unexpectedly vanished from open is a silent keyword auto-close (invisible to every open-only filter). Complementary to the per-card read: that read needs to know which cards to check; the inventory diff needs no prior list, and it is the step that caught the measured incident.

Scope amendment (author-side keyword hygiene) → review-checklist.md + platform-readings.md

  • Before: the first-line Fixes-vs-Part of rule exists, but nothing tells the reviewer to scan the body for closing-keyword shapes before ready-flip, and the fact table lacks the measured parser boundaries.
  • After: new checklist clause beside the first-line rule — the parser binds the closing keywords and their inflections (gerunds excluded) to a same-line issue number and ignores all surrounding prose (negations, modals, warnings); never place a closing keyword next to another open card's number; safe spellings are keyword-free positions or backticks (measured: inline code spans do not fire; fenced blocks not independently measured); reviewers scan any Part of PR body for this shape before ready-flip, with the report-only half-state detector patrolling the same contradiction on open PRs. The existing platform-readings closing-keyword row gains the three measured parser boundaries.

Verification

  • All six dispatched gate families green locally (foreground, under the shared verify lock): check:doc-authoring, check:doc-formula-expressions (after building the lint dependency closure — the first run was the standard fresh-worktree false red), check:nul-bytes, check:pm-skill-id-lint, check:pm-skill-ratchet, check:skill-frame-sync.
  • Gate list re-derived from the actual changed paths via scripts/pm/dispatch-gates.mjs: exactly the six named families, no additions.
  • This body was run through h7PartOfWithClosingKeyword / closingKeywordTargets (the detector branch's copy) before opening the PR: the only numbers bound to closing keywords are the four member cards on the first line.
  • File surface: exactly the five expected references files; zero SKILL.md lines (verified via git diff --name-only). The references files are outside the SKILL.md line ratchet (check-skill-line-ratchet.mjs reads only SKILL.md), verified rather than assumed.
  • No changeset: .claude/-only change, releases nothing — skip-changeset applied.

Merge path: ADR-class — stays draft; maintainer lands it by hand. No auto-merge, no ready-flip by any AI seat.

Generated by Claude Code


Generated by Claude Code

…eading rules
Land the four member cards' measured platform/process facts plus the sweep's
two scope amendments as self-contained reading rules across five files under
.claude/skills/pm-dispatch/references/: gate readings pinned to the PR's
current head and no reruns on superseded heads; the supersession signature;
list_issues returning no assignees; issue_read body entity-escaping; account-
scoped session handles and the outgoing PM's archive obligation; explicit
mergeMethod with the echo unreliable in both directions; measured throughput
parameters; the post-merge lane-inventory re-pull; and the author-side
closing-keyword hygiene rule with the measured parser boundaries.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018WuTtyckQa1VcXwgd52JpN
@vercel

vercelBot commented Aug 13, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectstackIgnoredIgnoredAug 13, 2026 3:54pm

Request Review

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