Skip to content

[batch] PM-skill optimization: maintainer-accepted 9-point plan, consolidated with #5925 item 7 + #6644 L2 + #7055 + #7156 #7341

Closed

Description

@os-help

Maintainer-accepted optimization batch for .claude/skills/pm-dispatch/SKILL.md and its satellite files, consolidated per the maintainer's directive with the two in-flight skill cards. Filed and routed via the maintainer-direct-dispatch channel; authorization quoted verbatim (chat, this seat's session, 2026-08-10):

> 关于项目经理的技能,接受你的优化意见,并和前面两个优化任务集中处理。派发使用云卡片,用 Fable 5 模型

> 项目经理技能还需要考虑的是派任务时使用什么模型,也应该项目经理决定,最低下限 sonnet,最高可以 fable

The accepted proposal list is the devx seat's 2026-08-10 analysis (delivered in chat); items restated here as the card of record.

Consolidated scope

Inherited cards folded in (their own threads carry the detail):

Accepted optimization items:

  1. SKILL.md restructure: main file keeps rules + one-line case anchors; Operational notes narratives, incident case law, and the filter compile-surface inventory move to references/** loaded on demand; the case-law region becomes append-only; a shrink-only line-count ratchet gate guards the main file's size.
  2. Half-state sweeper (report-only): a mechanical checker enumerating label/assignee invariant violations (pm:dispatched with no assignee; assignee with no claim comment; pm:queue+pm:dispatched both present post-landing; pm:blocked without a Blocked-by: body line; seat-sticker title/assignee/body triple out of sync). Complements [decision] engine-core lane drops pm:queue at dispatch without applying pm:dispatched — 7 instances of the ghost-card shape; pick the repair #7239 — its per-instance repairs stay with that card.
  3. Report-channel unification: every dev final report also lands as an issue comment (the os-dev-report marker), both dispatch modes; the subagent return channel becomes an accelerator, not the source of truth.
  4. Machine-produced dispatch inputs: a script mapping a file surface to the gate families that watch it (so "Local gates for this card" is generated, not recalled), plus a claim-comment shape checker.
  5. Role-file precedence audit: clauses true for every card live in .claude/agents/os-dev.md (measured: a per-dispatch prohibition lost to the role file's own prescription — os-dev cleanup prescribes git worktree remove --force, which disables the one guard protecting a parallel agent's uncommitted work #7055 evidence); per-card variables get explicit interfaces in the role file instead of conflicting defaults.
  6. Triage emits a size/model suggestion line consumed by the claim comment; the executor seat may override with a stated reason.
  7. Multi-account slimming: rituals that exist only because of the shared-identity era are marked same-account-only; the cross-account rule stays one line (assignee not yours ⇒ taken).
  8. Decision-card template: every premise line carries its own re-check command, so refreshing a stale decision card is running commands, not re-research.
  9. Model-tiering rewrite (maintainer ruling above): the dispatch model is the PM's per-card decision; floor sonnet, ceiling fable (claude-fable-5), with opus the default judgment tier in between; model stays an explicit parameter on every dispatch; tier recorded in the claim comment.

Delivery shape (ordering is load-bearing)

⛔ Constraints: no docs/adr/**; English on GitHub; sanitizer discipline on every SKILL.md write (entities for angle brackets, read back after posting); out-of-scope discoveries filed separately per PD #10.

Dispatch: cloud card (create_session), model claude-fable-5, per the authorization above.

Activity

  1. self-assigned this
    on Aug 10, 2026
  2. os-help commented on Aug 10, 2026

    @os-help
    CollaboratorAuthor

    Claim: PM loop round 1 (devx seat) — consolidated batch anchor
    Session: session_01YS2qzDAn3CpWdY7uBX9bFQ
    Branches: claude/issue-7341-pm-skill-batch-a (protocol text), claude/issue-7341-pm-skill-batch-b (structure extraction, LAST), claude/issue-7341-pm-skill-batch-c (tooling)
    Worktree: cloud session's own container (dedicated worktrees per os-dev discipline inside it)
    Domain: domain:devx
    File surface: .claude/skills/pm-dispatch/SKILL.md, .claude/skills/pm-dispatch/references/** (new), .claude/agents/os-dev.md, scripts/ (new pm tooling + gate wiring only)
    Container & model: L batch, mode:cloud dedicated container, model: claude-fable-5 (maintainer-directed)
    Serial constraints cleared: the only in-flight claim on this surface was the predecessor's #5925+#6644 consolidation (branch claude/issue-5925-6644-skill-md — no branch or PR exists remotely at claim time); superseded into this batch by maintainer directive, recorded on both cards with provenance. #7055/#7156 were queued-unclaimed on .claude/agents/os-dev.md; folded here, which is also what serializes them.

    Ruling addendum (maintainer, chat, 2026-08-10, verbatim) — a named floor for this card class:

    > 比如 更新 项目经理技能 必须要使用 Fable 5

    ⇒ item 9's tier table gains a mandatory rule: cards that modify the PM skill (.claude/skills/pm-dispatch/**) dispatch at claude-fable-5, no discretion downward.


    Generated by Claude Code

  3. os-help commented on Aug 10, 2026

    @os-help
    CollaboratorAuthor

    os-dev report — PR A of 3 (protocol text batch)

    {
      "issue": 7341,
      "status": "done",
      "branch": "claude/issue-7341-pm-skill-batch-a",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/7357",
      "premise_still_valid": true,
      "summary": "PR A landed as draft #7357: all 9 protocol items + #6644 L2 + #7055 + #7156 in .claude/skills/pm-dispatch/SKILL.md (3013→3098 lines) and .claude/agents/os-dev.md (629→674). Per-item checklist in the PR body maps item | landing section | before | after; diff --stat is exactly the two files. Model tiering now: floor sonnet / default opus / ceiling fable, mandatory claude-fable-5 for pm-dispatch-skill cards, three rulings quoted verbatim as the authority block. skip-changeset applied (union write, size/m preserved).",
      "tests": "node scripts/check-nul-bytes.mjs OK (6739 files); pnpm check:skill-frame-sync self-test 12/12 + real run 4 copies isomorphic; pnpm check:skill-compatibility self-test 18/18 + 11 files reconciled; pnpm check:agent-model-declared self-test 18/18 + os-dev.md=opus; contradiction grep for the retired dev-side CI wait clean.",
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Mechanism-assumption verifications for the batch (all three PRs build on these): no remote branch claude/issue-5925-6644-skill-md and no predecessor PR exist (git ls-remote verified at start); references/ does not exist yet; os-dev.md:150 carried the --force prescription; SKILL.md is 3013 lines on the dispatch-time main — the claim comment's ~2300 figure was stale, so PR B's cut points are being re-derived from the post-A file as instructed. PR #7292 merged before takeoff and is in the base. PRs B and C follow in order on top of this branch.


    Generated by Claude Code


    Generated by Claude Code

  4. os-help commented on Aug 10, 2026

    @os-help
    CollaboratorAuthor

    Scope addition — item 10 (maintainer ruling, chat, 2026-08-10, verbatim):

    > 确认,M 及以上默认云卡,并进 #7341

    ⇒ PR A additionally rewrites the dispatch-backend criteria (the SKILL's single-container / mode:cloud selection clause): default becomes mode:cloud for M-and-above cards; only S-grade mechanical cards stay mode:subagent in the shared container. The existing heavy-card criteria (size/l·xl, full regen, wide verification radius, dogfood/browser, long heavy-verify lock) remain as examples of the M+ class, not as the trigger list. Three companion disciplines ride along unchanged and should be stated next to the new default: subscribe to the card's PR on creation; the dev report's authoritative channel is the issue comment (item 3 of this batch); archive_session at the card's terminal state. Rationale recorded from the maintainer's discussion: full process visibility and direct interactability outweigh per-card container spin-up for anything non-trivial.

    Relayed to the in-flight cloud session via poke; its PR A checklist must carry this as item 10.


    Generated by Claude Code

  5. os-help commented on Aug 10, 2026

    @os-help
    CollaboratorAuthor

    os-dev report — PR B of 3 (structure extraction)

    {
      "issue": 7341,
      "status": "done",
      "branch": "claude/issue-7341-pm-skill-batch-b",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/7370",
      "premise_still_valid": true,
      "summary": "PR B landed as draft #7370 (Fixes #5925), stacked on PR A per the ordering discipline. Eight narrative blocks, 9,941 bytes, moved verbatim into references/incidents.md (append-only case-law file, 140 lines) and references/compile-surfaces.md (27 lines); SKILL.md 3,098 -> 2,997 lines. Every chunk script-extracted and script-verified: byte-identical in the pre-move blob, present in exactly one reference file, absent from the post-move main file (8/8 OK). Operational-notes bodies and the two-blindness explainer deliberately NOT moved — the pure-move condition fails there (rule and evidence interleave at sentence level); declared in the PR body. Line-count ratchet deferred to PR C with rationale.",
      "tests": "verify-move.mjs 8/8 chunks pre=true/ref=true/removed=true (9,941 bytes); check-nul-bytes OK; check:skill-frame-sync 4 copies isomorphic; check:skill-compatibility 11 files reconciled; check:agent-model-declared opus; deixis grep clean.",
      "open_questions": [],
      "out_of_scope_findings": []
    }

    Generated by Claude Code


    Generated by Claude Code

  6. os-help commented on Aug 10, 2026

    @os-help
    CollaboratorAuthor

    os-dev report — PR C of 3 (tooling)

    {
      "issue": 7341,
      "status": "done",
      "branch": "claude/issue-7341-pm-skill-batch-c",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/7379",
      "premise_still_valid": true,
      "summary": "PR C landed as draft #7379 (Part of #7341, Part of #7239), stacked on B. Three zero-dep scripts under scripts/pm/: check-half-states.mjs (report-only H1-H5 board patrol, exits 0 on any completed sweep so it cannot be wired as a gate), dispatch-gates.mjs (file surface -> check families, derived at runtime from 23 workflows / 75 discovered families, no hardcoded list per the #6492/#6865 lesson), and check-skill-line-ratchet.mjs wired into lint.yml as check:pm-skill-ratchet (shrink-only ceiling 3050 vs post-B 2997+2 pointer lines; placed in C not B to keep B a pure move — rationale in the PR body). SKILL.md gains the two planned one-line pointers.",
      "tests": "self-tests 16/16 + 14/14 + 5/5; ratchet real run green (3002 lines, headroom 48); check:workflow-status-functions self-test 34 assertions + real scan OK; eslint scripts/pm clean; check-nul-bytes OK. Declared limitation: live half-states sweep not runnable from this container (bare REST 401, no GITHUB_TOKEN; MCP-mediated access only) — the script correctly exits non-zero rather than reporting a clean board.",
      "open_questions": [],
      "out_of_scope_findings": []
    }

    All three batch PRs are now up: A #7357 (Fixes #6644/#7055/#7156) → B #7370 (Fixes #5925) → C #7379, stacked in that order; land in order and the later diffs collapse to their own commits.


    Generated by Claude Code


    Generated by Claude Code

  7. os-help commented on Aug 10, 2026

    @os-help
    CollaboratorAuthor

    os-dev report — addendum: item 10 (M+ defaults to mode:cloud) landed

    The 07:57Z scope-addition ruling (「确认,M 及以上默认云卡,并进 #7341」) is implemented as commit 89e57ad on PR A's branch and propagated through B (724b810) and C (a2f6c8e):

    • SKILL's sizing section rewritten: M and above default to mode:cloud single-card dispatch; only S-grade mechanical cards stay mode:subagent; the 2026-08-07 heavy-card criteria list is now examples of the M+ class, not the trigger list; the ruling is quoted verbatim in the section as its authority.
    • "Dispatch backends" reframed accordingly (mode:subagent = the S-grade mechanical lane; mode:cloud = the default for M+), and the /pm-dispatch arguments table's mode: default cell updated.
    • The three companion disciplines are named beside the new default: subscribe_pr_activity on creation, issue-comment report authority (batch item 3), archive_session at the card's terminal state.
    • All three PR bodies updated: PR A's checklist now carries this as item 10 (the os-dev cleanup prescribes git worktree remove --force, which disables the one guard protecting a parallel agent's uncommitted work #7055 cleanup row moved to 11); B/C bodies carry the refreshed line counts (B: 3,112 → 3,011; C ratchet re-run green at 3,016/3,050, headroom 34). Gates re-run green on every branch (nul-bytes, frame-sync, ratchet).

    Batch state: A #7357 → B #7370 → C #7379, all draft, all re-pushed, land in order.


    Generated by Claude Code


    Generated by Claude Code

  8. os-help commented on Aug 10, 2026

    @os-help
    CollaboratorAuthor

    ACCEPT — PR A #7357 (devx seat review, session session_01YS2qzDAn3CpWdY7uBX9bFQ); PRs B #7370 / C #7379 reviewed and held in serial order behind it.

    Review basis (local diff of the three stacked branches, not the reports' claims): per-stage diff --stat matches each PR's declared surface exactly (A: SKILL.md+os-dev.md only; B: the extraction triple; C: three scripts/pm/* + lint.yml + package.json + two pointer lines). Spot-checked A's load-bearing sections on the branch: the three-tier model table (floor sonnet / default opus / ceiling claude-fable-5) with the mandatory fable rule for .claude/skills/pm-dispatch/** cards and all three maintainer rulings quoted verbatim; item 10's M+-defaults-to-cloud rewrite superseding the 2026-08-07 heavy-card criteria (kept as examples), with the companion disciplines named; os-dev.md's report-at-draft termination contract (dual delivery, GitHub authoritative) and the unforced-cleanup prescription with the refusal semantics stated.

    Landing plan: A flips ready + auto-merge now. B (pure move, script-verified 8/8 byte-identical, declared non-moves for rule/evidence-interleaved passages — the honest reading of the pure-move condition) and C (report-only sweeper, runtime-derived gate mapping, shrink-only ratchet at 3050) stay draft until A is MERGED, then flip in order so each lands as its own diff. This seat merges nothing by hand — the queue does; walkthrough of the protocol changes remains open to the maintainer on all three PRs.


    Generated by Claude Code

  9. os-help commented on Aug 10, 2026

    @os-help
    CollaboratorAuthor

    Batch complete — closing (devx seat, session session_01YS2qzDAn3CpWdY7uBX9bFQ).

    All three PRs MERGED in order via the merge queue: A #7357 (protocol text: 10 items + #6644 L2 + #7055 + #7156 — closed those three cards), B #7370 (structure extraction, closed #5925: 9,941 bytes of incident case law moved byte-identically into references/incidents.md + compile-surfaces.md), C #7379 (tooling: check-half-states.mjs report-only sweeper, dispatch-gates.mjs runtime-derived gate mapper, check:pm-skill-ratchet shrink-only ceiling 3050 wired into lint.yml).

    Net protocol state after this batch: report-at-draft is the standard posture (dual-channel delivery, issue comment authoritative); model tiering is floor-sonnet / default-opus / ceiling-fable with mandatory claude-fable-5 for PM-skill cards; M-and-above dispatches default to mode:cloud; worktree cleanup is unforced; SKILL.md sits at ~3,016 lines under a shrink-only ratchet with case law now append-only in references/. All four maintainer rulings are quoted verbatim in the landed text.

    Remaining outside this card: #7239 keeps its per-instance repairs and repair-choice decision (PR C is Part of it — the enumerator only). The dispatching cloud session is being archived.


    Generated by Claude Code

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