Skip to content

[batch] pm-dispatch SKILL consolidated amendments + compression — eight ruled cards, two serialized PRs (skills seat, round 1) #7631

Closed

Description

@os-help

Sweep/batch card filed by the skills seat (#7623, session session_01ATJiqhFNL82YwV8udPkoqX). All eight members carry maintainer rulings recorded 2026-08-11 on their own threads. Batch shape confirmed by the maintainer in the seat's 专题讨论 (2026-08-11): scope confirmed 「确认,七张全收」, then 「包括 7498」 (PR #7552 closed, its content folded here), then the compression directive quoted under PR₂ below. One claim; two serialized PRs, both human-merged (sweep discipline, #6243 precedent).

Members (each row = one checklist section in PR₁'s body; ruling text lives on the member's thread)

member what lands
#7498 Four-lens analysis block required on every needs-user-decision card (step 0 + step 8); Blocked-by-aware batch selection tier; round-brief decision flags. Reference implementation: closed PR #7552's diff (branch claude/issue-7498-decision-four-lens, head 24934cf8b) — reuse against current anchors, do not re-derive; keep check:skill-frame-sync green exactly as that PR's body explains (the frame stays 3-axis; the block is its card-face serialization)
#7548 Step-7 ACCEPT path fork extends to .claude/skills/** + skills/** (same three-part terminal state as docs/adr/**); Guardrails entry quoting 「所有 skills 的更新和 adr 类似,需要人工审核」 verbatim; skills-seat structural registration (domain table row, roster/vocabulary row for domain:skills, one-time-setup label line)
#7493 发版板 → three queries (objectstack + objectui + cloud); repo:cloud seat gains target:* production (one-producer-per-backlog); repeal the "a hit in cloud is a mislabel signal" clause; step-9 metric = sum of three. Ruling marks it most urgent
#7492 Operational note 1: queue-membership criterion → added_to_merge_queue timeline event (branch test kept for batch position only; auto_merge-field warning verbatim); success-sequence rule (removed_from_merge_queue→merged within ~1s = landing, not ejection); fold note 21's empty-receipt prescription into the same reading discipline (tally 3/3; disable does not dequeue)
#7518 Five measured lessons (queue-kick signature receipt + single re-queue then steward handoff; empty-receipt second timing shape — read the queue before flipping; opportunistic restart conditions hang on dispatch-time checks in the owning seat post; claim-race loser posts a handoff comment with its readings; lane inventory via field-narrowed list_issues whole-lane read, intersect locally)
#7553 Direction 1: one line making the canonical Claim: spelling explicit (predicate stays strict); ⛔ no predicate widening
#7583 Seat-post protocol: bounded body template (Scope / Current PM / Inherited state / Hot-file serial queue / Standing commitments / Notes — all current-state); shift narration lives on cards/PRs/round reports; takeover compaction standard step (edit history = archive); script half: report-only oversized-body H-item in scripts/pm/check-half-states.mjs
#7512 Option (a): explicit clause in .claude/agents/os-dev.md (+ dispatch-brief echo where it verifiably repeats) ranking the dispatch contract above platform-injected PR-subscription postures

PR₂ — structural compression (maintainer directive, 2026-08-11, verbatim, untranslated)

现在 的 项目经理skills 太长了,需要考虑怎么压缩

Measured composition @ origin/main (3027 lines): The round loop 1870 (step 5 Dispatch 587, incl. Prompt template 326; step 7 Review 380; step 0 sweep 200; step 6 Collect 195; 入队与落地 167; step 8 130), Operational notes 612, Domain lanes 209, State model 111, the rest 189. Existing extraction targets: references/incidents.md (140 lines, append-only), references/compile-surfaces.md (27).

Prescription (seat's plan of record; the maintainer vetoes at PR review):

  • Target: main file ~1400–1600 lines (deep compression, roughly −50%).
  • Method: every rule keeps its imperative + criteria/command + one-line case anchor (issue number); narratives, 沿革, worked examples, incident retellings move verbatim to references/incidents.md (append-only, 出处 line each) or a new references/operational-notes.md. Machine-consumed tables (domain lanes, 词表, roster, label setup) stay in the main file.
  • ⛔ No rule deletion — compression moves prose, never removes a binding rule, criterion, or prohibition; deleting a rule requires its own maintainer ruling.
  • Ratchet: lower check:pm-skill-ratchet's ceiling from 3050 to the achieved count (shrink-only lock-in).
  • check:skill-frame-sync stays green; the four frame copies are untouched by moves.

Delivery order (load-bearing, #7341 precedent: pure moves come AFTER all textual additions)

  1. PR₁ — amendments: the eight member sections above. Fixes #7498, #7548, #7493, #7492, #7518, #7553, #7583, #7512 + Part of #7631. Ratchet: 3027/3050 today — pay any overage by minimal extraction.
  2. PR₂ — compression: opened only after PR₁ is merged (same file, strict serialization). Pure structural moves + ratchet lowering. Part of #7631; this card closes after PR₂ lands.
  3. Both PRs are ADR-class: draft/review by AI seats, then visibly pending; ⛔ nobody merges, enqueues, or arms auto-merge — the maintainer merges manually.

Constraints

Member candidacy

Per sweep rule 5: members keep pm:queue but are not individual dispatch candidates while this card is open; they close together via PR₁'s Fixes lines.

Activity

  1. added
    pm:queueReady for the PM dispatch loop
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    on Aug 11, 2026
  2. changed the title [-][batch] pm-dispatch SKILL consolidated amendments — seven ruled cards, one PR (skills seat, round 1)[/-] [+][batch] pm-dispatch SKILL consolidated amendments + compression — eight ruled cards, two serialized PRs (skills seat, round 1)[/+] on Aug 11, 2026
  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Aug 11, 2026
  4. self-assigned this
    on Aug 11, 2026
  5. os-help commented on Aug 11, 2026

    @os-help
    CollaboratorAuthor

    Claim: PM loop round 1 (skills seat)
    Session: session_01ATJiqhFNL82YwV8udPkoqX
    Branch: claude/issue-7631-skill-batch
    Worktree: objectstack-issue-7631 (cloud session's own clone)
    Domain: domain:skills
    File surface: .claude/skills/pm-dispatch/SKILL.md, .claude/skills/pm-dispatch/references/**, .claude/agents/os-dev.md, scripts/pm/check-half-states.mjs, ratchet config under scripts/ (+ published skills/objectstack-pm-dispatch/** only if the dispatch-brief echo verifiably repeats there) — stop on breach; explain in the report
    Container & model: L (batch: 8 members + compression), mode:cloud, model: claude-fable-5 (mandatory — SKILL surface, maintainer 2026-08-10)
    Serial constraints cleared: PR #7552 closed 2026-08-11 ~10:0xZ on the maintainer's instruction (was the only in-flight SKILL.md PR); no other open PR or claim touches this surface — checked label:domain:skills is:open and the seat post's hot-file serial queue at claim time. PR₂ (compression) serializes strictly behind PR₁'s human merge.


    Generated by Claude Code

  6. os-help commented on Aug 11, 2026

    @os-help
    CollaboratorAuthor
    {
      "issue": 7631,
      "status": "done",
      "branch": "claude/issue-7631-skill-batch",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/7698",
      "premise_still_valid": true,
      "summary": "PR₁ (draft #7698) lands all eight member sections in the card's file surface, zero riders: SKILL.md, references/incidents.md, .claude/agents/os-dev.md, scripts/pm/check-half-states.mjs. #7498 was reused verbatim from closed PR #7552 (head 24934cf) via cherry-pick onto current main — zero conflicts, its own commit, PM review carries over. #7548: step-7 ACCEPT fork now fires on .claude/skills/** + skills/**, Guardrails entry quotes the ruling verbatim, domain:skills registered (lane-table row carved from devx, 词表 row → #7623, label loop + skills). #7493: three board queries, repo:cloud seat produces target:*, mislabel clause repealed with cloud#1222 cost recorded, step-9 metric = sum of three. #7492: note-1 membership criterion is the added_to_merge_queue timeline event (branch reading demoted to batch position, positive hit still sufficient; auto_merge warning verbatim), success-sequence rule added in note 1 (~1s gap = landing), note 21 folded into the same reading discipline (3/3 counter-tally; disable does not dequeue but clears the flag). #7518: all five lessons (note-2 third signature + receipted single re-queue; lesson 2 inside note 21; opportunistic restart conditions → trigger files + lane dispatch-time check in label discipline; loser's board-readings handoff in step 4 with #7145; whole-lane list_issues inventory read in step 1). #7553: one explicit canonical-spelling line in step 4, predicate untouched. #7583: six-section bounded seat-body template + narration relocation + takeover compaction in 座位贴协议, and H6 (report-only, >10 KB bytes) in check-half-states.mjs. #7512 option (a): ranking clause in os-dev.md's report-at-draft item + one-line echo in the internal SKILL.md prompt template; the published skills/objectstack-pm-dispatch/SKILL.md was verified to NOT repeat the dispatch brief and is untouched. Ratchet: 3027 → 3043 (cherry-pick) → additions paid by verbatim narrative extraction into references/incidents.md (15 new append-only sections, one 出处 line each; no binding rule/criterion/prohibition deleted) → exactly 3050/3050. Mechanism assumptions verified: frame-sync gate green with the four-lens block (4 copies isomorphic, frame untouched); ratchet config located at scripts/pm/check-skill-line-ratchet.mjs (ceiling 3050 confirmed); PM's section measurements @ origin/main re-measured and confirmed (3027 total). Per the batch card, PR₂ (compression) is NOT opened this turn — it serializes behind PR₁'s human merge. Both this PR and PR₂ are ADR-class: awaiting a human merge; not queued, no auto-merge. The platform auto-subscribed this session to #7698 with a drive-to-green posture — per #7512's own ruling (executed in this PR) the dispatch contract outranks it; ending at branch + draft PR + report.",
      "tests": "pnpm check:pm-skill-ratchet → '✓ SKILL.md is 3050 lines (ceiling 3050; headroom 0)', self-test 5 pass. pnpm check:skill-frame-sync → '✓ 4 copies of the decision frame are structurally isomorphic across 3 files; 3 axes; binding sentence present in all 4; 4 count mention(s) agree', self-test 12 pass. pnpm check:doc-authoring → '✓ 375 files clean'. pnpm check:nul-bytes → 'OK (scanned 7089 text file(s))'. pnpm check:agent-model-declared → green (os-dev.md → opus; frontmatter unchanged). node scripts/pm/check-half-states.mjs --self-test → '✓ 24 cases pass' (4 new H6 cases prove the new H-item parses; the script has no --help flag, the self-test is the prescribed proof). pnpm --filter @objectstack/lint run check:doc-formula-expressions → '✓ 22 record-scoped formula example(s) across 390 files / 1408 TS blocks judged clean' after building the lint dependency closure. Markdown + one report-only script under .claude/ + scripts/ — no package suites apply. CI at report time: in_progress (report delivered at draft-PR time per L2).",
      "open_questions": [
        {
          "question": "Placement of #7492's success-sequence rule: the member card sketched 'its own note' but Operational notes are append-only-numbered at the tail, and the ruling fixed content, not placement.",
          "options": ["A. Inside amended note 1, as one queue-reading discipline (implemented)", "B. New tail note 22"],
          "recommendation": "A, because the batch card itself frames #7492 as one reading discipline (criterion + sequence + note-21 fold) and a tail note would separate two halves of the same timeline read; content is identical either way — settled per the self-drive clause, recorded here."
        },
        {
          "question": "H6 threshold and unit: the ruling says 'e.g. body > ~10 KB' — implemented as 10,000 bytes (UTF-8), byte length not code points, exported as SEAT_BODY_SOFT_LIMIT.",
          "options": ["A. 10,000 bytes as implemented", "B. A different constant or code-point measure"],
          "recommendation": "A — the read-limit failure the item guards against is byte-sized, and the compacted #6019 body (~4.5 KB) sits far below while the pathological one (~61 KB) sits far above; report-only, so re-tuning later is a one-line change."
        },
        {
          "question": "PR₂ plan sketch (NOT opened this turn, per the card): target ~1400–1600 lines by moving step-5 narrative mass (Prompt template rationale blocks), Operational-notes narratives, and step-7/入队与落地 retellings verbatim into references/incidents.md and a new references/operational-notes.md; then lower the ratchet ceiling to the achieved count (shrink-only). PR₁ already established the extraction pattern (15 sections moved) and left the file at exactly 3050, so PR₂ starts from a clean measured base.",
          "options": ["A. Proceed as sketched when the PM signals PR₁ has been human-merged", "B. PM adjusts targets first"],
          "recommendation": "A — awaiting the PM's message after the maintainer merges PR₁; no PR₂ work was prepared beyond this sketch."
        }
      ],
      "out_of_scope_findings": []
    }

    Generated by Claude Code


    Generated by Claude Code

  7. os-help commented on Aug 11, 2026

    @os-help
    CollaboratorAuthor

    ACCEPT — PR₁ #7698 (skills seat review of record)

    Review verified against GitHub, full diff read (1,356 lines, 100%):

    Terminal state (ADR-class, #7548 — as this PR itself encodes): review recorded here; the PR stays visibly pending, awaiting the maintainer's manual merge. ⛔ Not queued, no auto-merge. PR₂ (compression) opens only after PR₁ lands.


    Generated by Claude Code

  8. removed their assignment
    on Aug 11, 2026
  9. os-help commented on Aug 11, 2026

    @os-help
    CollaboratorAuthor

    Batch closed — PR₁ landed, PR₂ split out to #7754 (seat handoff)

    PR₁ (#7698) merged 11:45:48Z. Content verified on origin/main: SKILL.md 3050 lines (ratchet ceiling, gate green), references/incidents.md 437 lines, domain:skills and added_to_merge_queue present in the protocol text. All eight member cards auto-closed by their Fixes lines (#7498, #7548, #7493, #7492, #7518, #7553, #7583, #7512).

    ⚠️ Landing provenance is disputed, recorded not hidden: the merge was performed by the shared AI credential os-help with no maintainer authorization on the thread, 19 minutes after this seat publicly reverted an unauthorized queueing of the same PR. Full readings on the PR thread (11:21Z dev flag → 11:26Z seat revert → 11:47Z dev post-merge reading) and on finding #7701. No revert proposed — the content is the maintainer's own ruled batch, reviewed and green; the process breach is the finding, not the diff.

    PR₂ (structural compression, 3050 → ~1400–1600) is now #7754, filed as a standalone pm:queue card on the maintainer's instruction to hand the remainder off (this session exhausted its Fable budget). It carries the directive verbatim, the measured composition, the method and the ⛔ no-rule-deletion constraint. #7754 closes the compression mandate; this batch card closes here.

    Round-1 ledger: 8 cards ruled → 1 PR → MERGED, 0 rework, 1 process incident filed (#7701), 1 successor card (#7754).


    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

No one assigned

    Labels

    domain:skillsDomain lane — seat card indexed by label:pm:seat

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions