Repository navigation
pm-dispatch SKILL structural compression: 3050 → ~1400–1600 lines (PR₂ of batch #7631, maintainer-directed) #7754
Description
Activity
Claim: PM loop round 1 (skills seat)
Session:session_01XoWxhuq3WNNaZUTs6kWdk8
Branch:claude/issue-7754-pm-skill-compression
Worktree:objectstack-issue-7754(cloud session — its own container and clone)
Domain:domain:skills
File surface:.claude/skills/pm-dispatch/SKILL.md,.claude/skills/pm-dispatch/references/**,scripts/pm/check-skill-line-ratchet.mjs(ratchet config; stop on breach; explain in the report)
Container & model: L,mode:cloud,model: claude-fable-5(mandatory clause — the card edits.claude/skills/pm-dispatch/**; maintainer 2026-08-10 ruling)
Serial constraints cleared: none in flight — zero open PRs touch either skills root (searched 2026-08-11 ~12:5xZ); hot-file queue on SKILL.md empty per seat post #7623; last merge on this file is PR #7698 (today, same-day churn — flagged in the dispatch prompt). Premise re-verified onorigin/main: SKILL.md = 3050 lines.
Generated by Claude Code
Dispatched (PM loop round 1, skills seat): cloud dev session
session_01EzA8tDHxF9SY1esRC1TEGB,model: claude-fable-5, created 2026-08-11 12:53Z, outcome branchclaude/issue-7754-pm-skill-compression. Collection: os-dev-report comment on this issue + draft PR; the PM subscribes to the PR once it exists. Terminal state is ADR-class — the PR awaits a human merge.
Generated by Claude Code
{ "issue": 7754, "status": "done", "branch": "claude/issue-7754-pm-skill-compression", "pr": "https://github.com/objectstack-ai/objectstack/pull/7766", "premise_still_valid": true, "summary": "SKILL.md compressed 3050 -> 2568 lines (re-measured on origin/main post-PR #7698 before starting; premise held). 57 narrative/incident/history/worked-example sections moved VERBATIM to references/incidents.md (437 -> 1517 lines, append-only, one provenance line per section, PR #7698 convention). Every imperative/criterion/command kept in the main file as imperative + criteria/command + one-line case anchor with a section pointer; a mechanical sweep of all no-go-marked lines old->new(main+references) verified the 6 textual diffs are condensation artifacts whose imperative survives. Machine-consumed content untouched: domain-lane table, label roster, setup loop, all four frame-sync escalation-frame copies (gate green, byte-identical), step-5 prompt template, maintainer ruling quotes, report-contract JSON. Ratchet lowered 3050 -> 2568 in the same PR (shrink-only). PR #7766 opened as DRAFT and stays draft (ADR-class per #7548) - merging is the maintainer's manual act.", "tests": "All five card gates green in the task worktree (self-tests included): pnpm check:pm-skill-ratchet (5/5; 2568/2568, headroom 0); pnpm check:skill-frame-sync (12/12; 4 copies isomorphic, 4 count mentions agree); pnpm check:doc-authoring (375 files clean); pnpm check:nul-bytes (7114 files clean); pnpm --filter @objectstack/lint run check:doc-formula-expressions after building the lint closure (24/24 self-test; 22+9 examples clean). CI on PR #7766: in_progress at report time (report-at-draft-PR contract; PM owns convergence readouts).", "open_questions": [ { "question": "Target shortfall: the card's ~1400-1600 line target is not reachable without deleting binding rules, which this card forbids. The card's composition table was measured BEFORE PR #7698; PR-1 had already moved 24 narrative sections out. After this PR the remaining 2568 lines are predominantly imperatives, criteria, commands, templates and gate-pinned copies. What is the disposition of the residual ~1000-line gap?", "options": [ "A - Accept 2568 as the achieved shrink-only lock-in; close #7631 when this lands (no further action).", "B - Maintainer-ruled second pass that permits MERGING/DELETING overlapping rules (e.g. notes 1/21 queue-membership family, step-6 liveness family) - needs its own ruling per the red line.", "C - Move whole rule-dense conditional-clause blocks into a second on-demand reference - rejected by me: it takes binding text out of the hot file every seat loads, which the escalation-frame/gate design deliberately avoids." ], "recommendation": "A, because the red line (no rule deletion) is the binding constraint and the maintainer's directive was compression, not rule reduction; B only if the maintainer explicitly wants the file under ~2000 lines, and it should be its own ADR-class card." } ], "out_of_scope_findings": [ "filed as #7767: pm-dispatch Guardrails carries a dangling pre-existing sentence fragment ('someone else, never dispatch a needs-user-decision issue.') whose parent bullet was lost on main before this card; left byte-identical in PR #7766, repair lead recorded on the issue." ] }
Generated by Claude Code
Review: ACCEPT — PR #7766 (ADR-class terminal state: awaiting a human merge)
Verified against GitHub, not the report's claims:
- PR shape: draft ✓, base
main✓, first lineFixes #7754+Part of #7631✓. - File surface (
get_files): exactly 3 —SKILL.md(−1108/+626),references/incidents.md(+1080), ratchet config (+6/−4). Nodocs/adr/**, no releases edits, nothing unrelated. - Rule preservation spot-checks on the branch: SKILL.md = 2568 lines, incidents.md = 1517, ratchet
MAX_LINES = 2568self-consistent. ⛔-marker counts 161 (main) → 159 (branch SKILL) + 41 (refs), matching the declared 6 condensation artifacts. 11/12 load-bearing anchors hit (claim spelling, fable mandatory clause, ADR-class ruling quote, report-contract JSON, patrol-text discipline, etc.); the one zero-hit (check:skill-frame-sync) was counter-checked per notes 6 — it is 0 onorigin/maintoo (the gate name lives inlint.yml/scripts, not the SKILL text), and the escalation-frame content itself survives (三轴 + 四棱 both present; frame-sync gate green in CI). - CI: all 20 checks completed; ESLint and TypeScript Type Check job conclusions = success (gate families incl. frame-sync/ratchet run there). The single red, Check Changeset, was the expected
.claude/-only shape —skip-changesetlabel applied at acceptance (read back, survived) and the failed job re-run (queued; gate reads live labels since fix(ci): Check Changeset 实时读 skip-changeset 标签,首个 run 不再永久红 (#5580) #5625). - Out-of-scope finding: pm-dispatch SKILL Guardrails: dangling sentence fragment "someone else, never dispatch a needs-user-decision issue." — the bullet it belonged to is lost #7767 verified filed (
finding, ungraded — triage seat grades it).
Open question (target shortfall): 2568 achieved vs the card's ~1400–1600. The dev's evidence holds — the card's composition table predates PR #7698, and the residual text is predominantly binding rules, which this card's red line forbids deleting. Recommendation A (accept 2568 as the shrink-only lock-in) surfaced to the maintainer in the round report; option B (rule merging/deletion pass) would need its own maintainer ruling and its own ADR-class card.
Terminal state per #7548: this PR stays draft and visibly hanging — ⛔ no AI merge, no queue entry, no auto-merge. The maintainer merges manually. #7755 (next in the SKILL.md hot-file queue) dispatches only after this lands.
Generated by Claude Code
- PR shape: draft ✓, base
- added a commit that references this issue
on Aug 17, 2026 - added a commit that references this issue
on Sep 8, 2026 - added a commit that references this issue
on Sep 9, 2026
Handoff card filed by the skills seat (#7623, session
session_01ATJiqhFNL82YwV8udPkoqX) — the session ran out of budget mid-batch and the maintainer directed the remainder be filed for another seat to pick up. This is PR₂ of batch #7631; PR₁ (the eight ruled amendments) merged at 2026-08-11 11:45Z as PR #7698, so this card is unblocked and dispatchable now.Maintainer directive (verbatim, untranslated — skills seat 专题讨论, 2026-08-11)
> 现在 的 项目经理skills 太长了,需要考虑怎么压缩
Delivery shape (PR₁ then PR₂, pure moves last) was accepted in the same exchange and is recorded on #7631.
Measured starting state (
origin/mainafter PR #7698 — re-measure at work time, do not trust these).claude/skills/pm-dispatch/SKILL.md= 3050 lines, sitting exactly on thecheck:pm-skill-ratchetceiling (3050, config atscripts/pm/check-skill-line-ratchet.mjs).references/incidents.md= 437 lines (append-only).references/compile-surfaces.md= 27.Composition measured before PR₁ (shape still holds; re-derive the numbers):
spec-tooling沿革 111, self-labelled "沿革, 不是待办")Target and method
references/incidents.md(append-only, one 出处 line per section, matching the convention PR pm-dispatch SKILL batch: eight ruled amendments — four-lens block, ADR-class skills, three-query board, queue criteria, five shift lessons, claim spelling, seat-post bounds, dispatch-contract rank (#7631) #7698 established with 24 such moves) or a newreferences/operational-notes.mdif the notes section warrants its own file.check:skill-frame-sync), report contract JSON.Constraints
.claude/skills/pm-dispatch/SKILL.md,.claude/skills/pm-dispatch/references/**, the ratchet config. ⛔ Nodocs/adr/**, nocontent/docs/releases/**.model: claude-fable-5mandatory (any card editing.claude/skills/pm-dispatch/**, maintainer 2026-08-10),mode:cloud.skip-changesetlabel (.claude/only; 空 frontmatter changeset 相对skip-changeset标签零收益、单向风险 —— 「禁止空 changeset 进 .changeset/」的决策证据(#5292 结案后无处存放) #5471 rejects empty changesets).check:pm-skill-ratchet,check:skill-frame-sync,check:doc-authoring,check:nul-bytes, pluspnpm --filter @objectstack/lint run check:doc-formula-expressionsafter building the lint dependency closure.Fixesthis card +Part of #7631; close [batch] pm-dispatch SKILL consolidated amendments + compression — eight ruled cards, two serialized PRs (skills seat, round 1) #7631 when this lands.Prior art to reuse
PR #7698's diff is the pattern: each moved section left an anchor + pointer in place and gained an 出处 line at the destination. The cloud dev session that did PR₁ (
session_01KCFsFypEHm1Cnp26yAofxg, now archived) sketched this plan in its report'sopen_questions[2]on #7631.