docs(pm-dispatch): principles-only SKILL.md rewrite — lessons distilled in place, no issue-ID citations - #7936
Merged
Conversation
…ed in place, no issue-ID citations The PM operating protocol is rewritten to principles + state machine + lookup tables per the maintainer rulings of 2026-08-12 (「大幅简化,只需要说原则」; 「保留 issue id没有意义」). At-that-moment operational detail moves to references/ fact tables loaded on demand; references/incidents.md is deleted (git history is the archive). The outage-detection readings and cross-wall recovery timer discipline land as principles; the lost Guardrails bullet's meaning is restored (decisions belong to the maintainer / never dispatch an assigned or needs-user-decision issue); the ruled triage auto-adjudication protocol lands in the triage duty section. Gates: the line ratchet drops to 686; a new issue-ID lint (check:pm-skill-id-lint) keeps operative text citation-free, with one self-expiring legacy waiver for the os-dev definition until its own rewrite lands; the os-regen merge four-step and the pm-label vocabulary are mechanized into scripts/pm/. The frame-sync self-test fixture is adapted to the ID-free frame section. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W3v2G9dvcfxkC4NsZ4JCE9
…skill-principles-rewrite
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Contributor
Author
|
同意合并 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #7885
Fixes #7765
Fixes #7767
Fixes #7899
ADR-class (skills root): draft, human merge only — ⛔ no queue entry, no auto-merge.
What this is
The PM operating protocol rewritten to principles + state machine + lookup data per the 2026-08-12 rulings (「现有的项目经理 skills 应该大幅简化,只需要说原则,不需要写细节」;「处理 issue 时犯的错应该总结成经验,保留 issue id没有意义」). Every incident-backed rule is now a self-contained lesson (failure mode + discipline + boundary); zero issue-ID citations in operative text (mechanically enforced, see Gate work); maintainer rulings keep date + verbatim quote. Hot-file cost: SKILL.md 2,568 → 686 lines (−73% on the text every seat loads every round). At-that-moment operational detail moves to
references/fact tables loaded on demand (~465 lines across 6 files, including the pre-existing compile-surfaces table).Structure per the closed design round: single file with per-role duty sections (triage / executor / queue steward / epic), explicit role entry args (
/pm-dispatch triage/steward/[domain]/epic:#N— all legacy arg forms kept working; grep across hooks/workflows/docs found nothing hard-coding the old forms), and probe-first startup (idle seat = one query, then self-retire).Sweep checklist — where each member card's substance lives
SKILL.md§入口与角色); ID removal with lint;references/incidents.mddeleted; ratchet lowered; high-risk sequences mechanized (scripts/pm/os-regen-merge.sh,scripts/pm/ensure-pm-labels.sh).SKILL.md§断粮与跨墙恢复 (principles) +references/platform-readings.md§断粮检测与跨墙恢复细则 (readings):ccusage blocksper-container reading with its three named blind spots (single-container view; cost-not-allowance — no agent-facing account-level quota surface; locally-inferred window start); the wall signal's embedded reset time (available at hit time, not queryable before); timer discipline — one-shot at reset+buffer when the reset time is known, hourly cron Routine over send_later chains in dead windows, criteria-only idempotent fired text, cron self-deletion after the first successful fire; and the recovery playbook anchor (probe in-flight cloud cards → direct-acceptance / transcript revival → re-arm patrols). 机制假设 verification level: platform tool docs describesend_lateras a run-once trigger that self-disables after firing (ended_reason=run_once_fired); whether a firing during an account-wide outage is retried is undocumented and unmeasured, so the timer principle is worded as conservative design rationale, not measured fact.needs-user-decision的 issue" — plus the same prohibitions in the State-model rows (assignee row, needs-user-decision row) and the all-seats invariant "先认领后动工;assignee 不是你 ⇒ 永不碰". The dangling fragment is gone with the rewrite; no binding rule was lost in the interim (the state model carried the second half throughout).auto-adjudicatedmarker + a 代裁清单 section in every round report; adjudication pass runs onclaude-fable-5). The Guardrails "never answer on the maintainer's behalf" rule carries the lane as its single bounded exception.References disposition (design B + the on-demand pattern)
references/incidents.mddeleted (1,587 lines) — git history is the archive; no§「…」pointer machinery survives anywhere.references/compile-surfaces.mdkept (operational lookup data), IDs removed.platform-readings.md(GitHub API behavior facts),seat-post-protocol.md(takeover/handover/release-board mechanics),landing-operations.md(post-ACCEPT landing),dispatch-runbook.md(cloud-card parameters, handoff, stall/replay/lost-report procedures),review-checklist.md(per-report criteria). Judgment call, flagged for review: decision A said "single-file principles-only"; I read that as ruling out the role-split module loading, not the compile-surfaces-style data tables — the hot file stays one file of principles, and these tables are consulted at the moment their operation happens. If you want any of them folded back, say which — but SKILL.md cannot absorb them and stay under the 700-line cap.Gate work
scripts/pm/check-skill-line-ratchet.mjs, header updated — it no longer instructs moving case law into incidents.md).scripts/pm/check-skill-id-lint.mjs(pnpm check:pm-skill-id-lint, wired in lint.yml next to the ratchet):.claude/skills/pm-dispatch/**/*.md+.claude/agents/os-dev.mdmust not match#[0-9]{3,}. Zero matches in every rewritten file. os-dev.md carries an exact-count legacy waiver (81) that self-expires: it passes at exactly 81 (untouched legacy) or exactly 0 (the rewrite in its own PR) and is red at anything else — so the two PRs stay merge-order-independent, IDs cannot creep in meanwhile, and a partial cleanup must finish the job. Deleting the waiver entry after both PRs land is an optional one-line cleanup.scripts/pm/os-regen-merge.sh(the generated-artifacts merge four-step; the ordering — commit the merge before regenerating — is the trap the prose used to carry) andscripts/pm/ensure-pm-labels.sh(label vocabulary, idempotent; retired labels deliberately absent). Prose keeps one principle line pointing at each.scripts/check-skill-frame-sync.mjs).Dropped, with rationale — for line-by-line review
[决策]title note) — completed actions, not rules; the standing prohibitions (只有增量、⛔ 永不全量重扫; retired labels not recreated) survive.claude-fable-5clause for pm-dispatch cards, quoted verbatim).label:pm:seatindex query (the numbers were navigation data; the ruled ID-removal covers them, and the index is the lookup that cannot rot).Deviations to review
Fixes #7903) lands at 356 lines vs its ~200–300 target, same reason, reported there.Gate status (honest, at draft-PR time)
Local, all green:
check:pm-skill-ratchet(686/686),check:pm-skill-id-lint(8 files clean, self-test 9/9),check:skill-frame-sync(12/12 self-test, 4 copies isomorphic),check:skill-frame-freshness,check:doc-authoring(375 files),check:nul-bytes(7,244 files),@objectstack/lint check:doc-formula-expressions(dependency closure built first). Branch is merged up to currentorigin/main. CI:in_progressat report time — the PM owns convergence.No changeset:
.claude/+scripts/+ workflow-only change (skip-changesetapplied).Generated by Claude Code