Repository navigation
pm-dispatch SKILL structural compression: 3050 → ~1400–1600 lines (PR₂ of batch #7631, maintainer-directed) #7754
Description
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/main after PR #7698 — re-measure at work time, do not trust these)
.claude/skills/pm-dispatch/SKILL.md = 3050 lines, sitting exactly on the check:pm-skill-ratchet ceiling (3050, config at scripts/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):
| section | lines |
|---|---|
| The round loop | 1870 — step 5 Dispatch 587 (Prompt template 326), step 7 Review 380, step 0 sweep 200, step 6 Collect 195, 入队与落地 167, step 8 130 |
| Operational notes | 612 (21 notes, each = rule + incident narrative) |
| Domain lanes | 209 (incl. the spec-tooling 沿革 111, self-labelled "沿革, 不是待办") |
| State model / Epic / Guardrails / report contract | ~300, mostly load-bearing |
Target and method
- Target ~1400–1600 lines in the main file (roughly −50%).
- Every rule keeps three things in the main file: the imperative, its criteria/command, and a one-line case anchor (issue number). Narratives, 沿革, worked examples and incident retellings move verbatim to
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. - Machine-consumed content stays: domain-lane table, 词表 roster, seat/label setup loop, the escalation frame (all four gate-synchronized copies —
check:skill-frame-sync), report contract JSON. - ⛔ No rule deletion. Compression moves prose; removing a binding rule, criterion, or prohibition requires its own maintainer ruling. A reviewer must be able to diff old→new and see every imperative still present.
- Ratchet: lower the ceiling to the achieved count (shrink-only lock-in) in the same PR.
Constraints
- File surface:
.claude/skills/pm-dispatch/SKILL.md,.claude/skills/pm-dispatch/references/**, the ratchet config. ⛔ Nodocs/adr/**, nocontent/docs/releases/**. - ADR-class terminal state (pm-dispatch SKILL: skills updates are ADR-class — human review/merge required (maintainer ruling 2026-08-11) #7548, now live in SKILL.md step 7 + Guardrails): draft/review by AI seats; ⛔ no AI seat merges, enqueues, or arms auto-merge — the maintainer merges manually. Round reports carry an "awaiting a human merge" line until it lands.
- Dispatch tier:
model: claude-fable-5mandatory (any card editing.claude/skills/pm-dispatch/**, maintainer 2026-08-10),mode:cloud.⚠️ The filing session exhausted its Fable budget — whoever picks this up needs headroom for an L-sized card. skip-changesetlabel (.claude/only; 空 frontmatter changeset 相对skip-changeset标签零收益、单向风险 —— 「禁止空 changeset 进 .changeset/」的决策证据(#5292 结案后无处存放) #5471 rejects empty changesets).- Gates for this surface:
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. - Sanitizer discipline on every SKILL.md write (HTML entities for literal angle brackets; read back and verify fragments survived).
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's open_questions[2] on #7631.
Activity
os-zhuang commentedon Aug 11, 2026
Claim: PM loop round 1 (skills seat)
Session:
session_01XoWxhuq3WNNaZUTs6kWdk8Branch:
claude/issue-7754-pm-skill-compressionWorktree:
objectstack-issue-7754(cloud session — its own container and clone)Domain:
domain:skillsFile 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 on
origin/main: SKILL.md = 3050 lines.Generated by Claude Code
os-zhuang commentedon Aug 11, 2026
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
os-zhuang commentedon Aug 11, 2026
{ "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
os-zhuang commentedon Aug 11, 2026
Review: ACCEPT — PR #7766 (ADR-class terminal state: awaiting a human merge)
Verified against GitHub, not the report's claims:
main✓, first lineFixes #7754+Part of #7631✓.get_files): exactly 3 —SKILL.md(−1108/+626),references/incidents.md(+1080), ratchet config (+6/−4). Nodocs/adr/**, no releases edits, nothing unrelated.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)..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).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
pm-dispatch SKILL structural compression: 3050 → 2568 lines, narrativ…
chore: bump objectui to 53ded82bf7a4
chore(console): bump the objectui pin to 53ded82bf7a4 — the shipped c…