Skip to content

pm-dispatch SKILL structural compression: 3050 → ~1400–1600 lines (PR₂ of batch #7631, maintainer-directed) #7754

Description

@os-help

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 new references/operational-notes.md if 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

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

  1. self-assigned this
    on Aug 11, 2026
  2. os-zhuang commented on Aug 11, 2026

    @os-zhuang
    Contributor

    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 on origin/main: SKILL.md = 3050 lines.


    Generated by Claude Code

  3. os-zhuang commented on Aug 11, 2026

    @os-zhuang
    Contributor

    Dispatched (PM loop round 1, skills seat): cloud dev session session_01EzA8tDHxF9SY1esRC1TEGB, model: claude-fable-5, created 2026-08-11 12:53Z, outcome branch claude/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

  4. os-zhuang commented on Aug 11, 2026

    @os-zhuang
    Contributor
    {
      "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

  5. os-zhuang commented on Aug 11, 2026

    @os-zhuang
    Contributor

    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 line Fixes #7754 + Part of #7631 ✓.
    • File surface (get_files): exactly 3 — SKILL.md (−1108/+626), references/incidents.md (+1080), ratchet config (+6/−4). No docs/adr/**, no releases edits, nothing unrelated.
    • Rule preservation spot-checks on the branch: SKILL.md = 2568 lines, incidents.md = 1517, ratchet MAX_LINES = 2568 self-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 on origin/main too (the gate name lives in lint.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-changeset label 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

  6. added a commit that references this issue on Sep 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions