Skip to content

pm-dispatch: tooling cards capped at 10% of a dispatch round, pm-rule cards only when the maintainer names them, two new round-report readings; and a spec key lands with its first reader (maintainer rulings D3 = A, D5 = A) #25768

Closed

Description

@objectstack-fleet

Filing-gate category: ③ maintainer-directed. Tesla ruled the whole-project assessment's D3 and D5 on 2026-10-25 09:23Z in the director thread, answering the option lists: 「D4 · 固定发版日 没必要;其他同意 ,npm dist-tag 手工清理 应该立一张管理者维护的卡」 — "其他同意" = D3 A and D5 A as recommended. This is the per-change maintainer authorisation the skill's red line requires for a .claude/ PR; quote it in the PR body. ⛔ Not a claim; for triage to grade and route.

Governing text: .claude/skills/pm-dispatch/SKILL.md (〈升级与决策〉 four axes: "新增门禁默认否"), references/cross-repo-coordination.md rule 2 ("跨层功能点 … spec/后端先行"), references/seat-lifecycle.md 〈轮次报告与节奏〉.

D3 = A, as ruled

  • A dispatch round carries at most 10% tooling cards (tooling / skills / CI / process). Overflow stays in the backlog, ⛔ not pm:queue.
  • A new card that adds or changes a pm rule is filed only when the maintainer names it (quote the naming in the card).
  • Every round report adds two readings: the product-commit share (merged commits outside .claude/, AGENTS.md, scripts/pm, gate scripts, .github/workflows) and the count of follow-up PRs opened within 48 h of a landed PR.
  • ⛔ No gate, no script that enforces the cap — Tesla's option text says 不做门禁. The readings are reported, not checked.

D5 = A, as ruled

  • A spec key lands in the same PR, or the same merge batch, as its first reader; a planned liveness row no longer reaches main on its own. Replaces rule 2's "spec/后端先行" ordering for new keys.
  • Effective once objectui lives in this repo (the ui/ cutover of the objectui-merge epic); before that a cross-repo reader cannot share a PR. hotcrm readers stay cross-repo and use "same merge batch".
  • The rule text may land before the cutover, carrying that condition in words a seat can check (does ui/ exist on main).

Business rationale

  • D3: 17.1% of objectstack's merged commits over 14 days served the process itself and 34% of new cards were tooling/skills/devx (assessment D3). Product work is what customers pull; the cap is the only brake on process cards breeding process cards.
  • D5: one feature (dataset dimension nullLabel) took four PRs over three landings because the key had to land first as planned with no reader. Declared-without-reader is exactly the gap the spec's "declare = enforce" rule forbids.

For the dev

Reader: the skills-lane seat after triage.

Duplicate check: semantic searches "pm-dispatch tooling card quota product commit share round report" (objectstack, 101 hits; open near-misses #25498 filing-gate quota, #22060 rule-text diet program, neither a dispatch cap or report reading) and "spec key lands with its first reader planned liveness row spec-first rule" (11 hits, all closed, none about ordering). No duplicate.

Evidence: https://claude.ai/artifact/8qxoYjsE4jQC4DJBCF3wm5#D3 and #D5


Generated by Claude Code

Activity

  1. added
    toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    pm:queueReady for the PM dispatch loop
    on Oct 25, 2026
  2. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — tooling · priority:p2 · domain:skills · area:devpath · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-25T09:54Z

    ⛔ Not a claim, ⛔ not a dispatch.

    • Ruled (Tesla, D3 = A and D5 = A). .claude/skills/** is governed: draft PR, quote the ruling, the maintainer merges.
    • ⛔ The cap is reported, not enforced (「不做门禁」), as the ruling says.

    Generated by Claude Code

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 25, 2026
  4. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 3 (serial) · 2026-10-25T11:59Z
    Session: session_014FZ3TJucS1L7BdMe5DAzXC (seat); implementation in card thread session_01Fx58tcuqmi5bveQGdRYq8r
    Account: os-project-manager (the seat's linked user as GET /user answers it; always the card's assignee)
    Branch: claude/project-thread-99edon (the card thread's harness push branch — the measured platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-25768 in the card thread's clone
    Domain: domain:skills
    Seat: domain:skills#1 (seat post #7623)
    File surface: .claude/skills/pm-dispatch/** only — expected references/execution-duties.md (候选与批次: the 10% tooling cap and overflow), references/seat-lifecycle.md (轮次报告与节奏: the two new readings), references/filing-gate.md or references/triage-duties.md (pm-rule cards only when the maintainer names them), references/cross-repo-coordination.md rule 2 (D5), SKILL.md only if a rule's single home is there; ratchet-paid, no ceiling raise. (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: CONTRACT_REVIEW_TIER (dispatch-gates --tier: SKILL.md MANDATORY if touched; rule-text card at the ceiling either way), effort: high (the thread runs at its default effort; effort is set only on the maintainer's word). Tier S (.claude/**): lands after an at-tier contract review PASS under the maintainer's standing authorisation.
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (maintainer rulings D3 = A, D5 = A)
    Premise: holds — on origin/main 0790d0a4 cross-repo-coordination.md still carries the 「spec/后端先行」 ordering and no dispatch-round tooling cap exists in .claude/skills/pm-dispatch/**
    Thread-read: 6396195056
    Serial constraints cleared: none in flight on .claude/skills/pm-dispatch/** in this lane (pm:dispatched holds #25772, os-tesla, security, a different file set — the card thread checks for overlap at PR time and merges origin/main if needed)

  5. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 25768,
      "status": "done",
      "branch": "claude/project-thread-99edon",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/25795",
      "head": "51664dd2c6ebafa18d2a666d4618bf799ba9d4b1",
      "session": "session_01Fx58tcuqmi5bveQGdRYq8r — card thread, dispatched by skills seat 1 session_014FZ3TJucS1L7BdMe5DAzXC (claim 6397358483 names this branch)",
      "premise_still_valid": true,
      "summary": "D3 = A and D5 = A written into .claude/skills/pm-dispatch/** with one home per rule: the per-round 10% tooling cap (no gate, no script) in execution-duties.md 候选与批次 plus the tooling glossary row in SKILL.md (三具名读者 → 四具名读者, the row the retired one-slot reader sat in); pm-rule cards only on the maintainer's naming, filed as ③ quoting it, in filing-gate.md 立卡门, with the handover-report route 原则错/缺 → skills 席专题 changed to 只进简报,维护者点名才立卡 in seat-lifecycle.md; the two round-report readings (follow-up PRs opened within 48h of a landing; product-commit share over .claude/, AGENTS.md, scripts/pm, gate scripts, .github/workflows) in seat-lifecycle.md 轮次报告与节奏; D5 as a new line under cross-repo rule 2, effective once ui/ exists on main (absent at 0790d0a4), hotcrm readers on the same merge batch, until then spec/后端先行 stands. Premise held on origin/main 0790d0a4: rule 2 still read spec/后端先行 and no dispatch-round tooling cap existed.",
      "files_changed": [
        ".claude/skills/pm-dispatch/SKILL.md",
        ".claude/skills/pm-dispatch/references/execution-duties.md",
        ".claude/skills/pm-dispatch/references/filing-gate.md",
        ".claude/skills/pm-dispatch/references/seat-lifecycle.md",
        ".claude/skills/pm-dispatch/references/cross-repo-coordination.md",
        ".claude/skills/pm-dispatch/references/lanes/ui.md"
      ],
      "line_budget": "SKILL.md 319/319 → 319 (in-place table row; widest row 341 = pin 341); execution-duties.md 188/188 → 188 (+1 cap, −1 deleted dev pr_create/assignees line: dev half = os-dev.md rule 2, seat half implied by 「PR assignee = 卡的」); filing-gate.md 68/68 → 67 (+1 pm-rule line, −2 back-pointer line 「见 triage-duties.md 与 reading-discipline.md 的指针行」 and its blank; headroom 1, the CEILINGS row is outside this card's file surface); seat-lifecycle.md 95/96 → 96 (+1 readings line on the 1 line of headroom; 「awaiting a human merge 项」 deleted from the round-report line because SKILL.md ④ carries it, its bytes carry the follow-up-PR reading; handover block edited in place); cross-repo-coordination.md 51/51 → 51 (+1 D5 line, −1 objectui:refresh line carried by AGENTS.md Frontend); lanes/ui.md 38/38 → 38 (pointer cross-repo-coordination.md → AGENTS.md). Six files 759 → 759; no ceiling raised, no re-wrap.",
      "tests": "No tested behaviour changed (rule text only), so no ablation. pnpm check:pm-skill-ratchet exit 0 at 51664dd2: every touched file ✓ at or under its ceiling as listed in line_budget.",
      "gates": "Derived: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack → 20 families. Run at 51664dd2, exit captured before any pipe, all 20 exit 0: check-closing-keyword-parity (scan + --self-test), check-comment-mask-corpus, check-governed-queue-guard --self-test, check-harness-current --self-test, lint check:doc-formula-expressions, check:agent-test-spelling, check:cross-package-test-inputs, check:doc-authoring, check:driver-memory-census, check:gitlink-declared, check:nul-bytes, check:pm-expected-skips, check:pm-governed-merges, check:pm-governed-prose, check:pm-skill-id-lint (87 file(s) clean), check:pm-skill-ratchet, check:refd-timer-probe, check:skill-frame-sync, check:watch-hint-literal. Reconciled: dispatch-gates --ran FILE → '20 derived famil(ies) accounted for — 20 run, 0 NOT-MEASURED'. First pass before pnpm install: 8 × exit 3 PREREQUISITE NOT MET and check:pm-expected-skips exit 1 ERR_MODULE_NOT_FOUND (nothing measured); after install, doc-formula-expressions exit 3 until @objectstack/formula and @objectstack/lint were built under os-verify-lock (VERDICT command-exit 0 both); every family re-run and recorded 0. CI on the PR: in_progress at report time; the seat reads the check-runs.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "1 — mcp__github__issue_read (get #25768). No write tool. (Artifact read of the assessment link failed: not shared with this account.)",
      "api_writes": "3 — git push of claude/project-thread-99edon (not REST); fleet-write relay pr_create → #25795 (draft, assignee os-project-manager, label skip-changeset; read-back 7191 bytes identical, labels and assignee read back by REST GET); this report comment via post-stamped. REST GETs: #25768 comments, #20957, #25795.",
      "deviations": [
        "PR body attribution block links this card thread (thread=cmsg_01TenzsRopZj4jMbvjX8uz1XDHT9sSVf8qP2xerGBcJSAC), not the seat thread the order spelled: the platform's required attribution names the thread this session runs in and says to keep its link exactly.",
        "Platform asks for a review request on the PR via an MCP write; skipped under the order's Writes: line (no MCP writes). The assignee was set by the relay's pr_create.",
        "filing-gate.md lands one under its ceiling (67/68); lowering the CEILINGS row would edit scripts/pm/check-skill-line-ratchet.mjs, outside this card's surface.",
        "Ran pnpm install and built @objectstack/formula and @objectstack/lint in the worktree only to clear gate prerequisites; nothing committed from it."
      ],
      "open_questions": [
        {
          "question": "How is 'at most 10% tooling per dispatch round' counted when a round dispatches 1–3 cards (serial batch 1 today, default 3)? Read literally, 10% of 1–3 rounds to zero, so no tooling card could ever be dispatched, this card included.",
          "options": ["A — count over a rolling window of the last 10 dispatches in the lane (at most 1 tooling card per 10); one in-place edit of the cap line", "B — per round, rounded up (a round may always carry 1 tooling card); weakest brake", "C — literal; tooling cards move only on a maintainer direct dispatch (already first in the take-order)"],
          "recommendation": "A, because it keeps the ruled ratio exact at any batch size and needs no new reading; the round report can show the window. Text as landed is the ruling's own words so the seat can pick without a rewrite of anything else."
        },
        {
          "question": "D5 'hotcrm readers use the same merge batch' meets lanes/hotcrm.md (hotcrm depends on PUBLISHED @objectstack packages; its unlock is published, not merged) and rule 2's Blocked-by / never-same-batch lines. What does 'same merge batch' mean for hotcrm at cutover?",
          "options": ["A — the key PR waits green and unqueued until the hotcrm reader PR is green against a local build, both land in one landing round, the hotcrm version bump follows the publish; rule 2 gets one exception line for this pair", "B — the key lands with its first in-repo reader (ui/ or runtime), and a hotcrm reader stays a follow-up on publish as today"],
          "recommendation": "Decide at the ui/ cutover; the new line is inert until ui/ exists on main, so nothing conflicts today. B is the lighter reading if an in-repo reader always exists; A is the literal one."
        }
      ],
      "out_of_scope_findings": [
        "carrier: none · noted, not filed — references/lanes/skills.md points 「fold-or-serial 必答与家族派发五门」 at 「SKILL.md 批次独立性段」, but both live in references/execution-duties.md 候选与批次 (stale pointer)."
      ]
    }

    Generated by Claude Code

  6. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    席位 domain:skills#1 · 2026-10-25T12:50Z — PR #25795 ACCEPT on head da43591c (contract review PASS 6397821193); flipped ready, auto-merge armed. Card closes on merge.

  7. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    席位 domain:skills#1 · 2026-10-25T12:59Z — landed: PR #25795 merged as 5f5f0b42. Card closed by the PR. Open after landing: the 10% small-round counting ruling (decision card with the maintainer in the seat thread); hotcrm 「同合并批」 is decided at ui/ cutover.

  8. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Ruling: A — drop the per-round tooling dispatch cap · domain:skills#1 · session_014FZ3TJucS1L7BdMe5DAzXC · 2026-10-26T09:22Z

    Maintainer Leehom, decision card in the seat thread "运行 objectstack 车道调度", tapped 2026-10-26T09:22Z. Question: 「"tooling 卡至多一成"这条规则保留、改还是删?」. Option chosen: 「A 删上限,留读数和立卡门」. The option's stated consequence: 删掉一成上限;保留立卡门和轮次报告的两项读数,产品提交占比连续偏低时由席位报给你.

    Supersedes the D3 = A cap bullet only. Surfaces to change: references/execution-duties.md 候选与批次 (the tooling ≤10% line) and the SKILL.md tooling glossary row (「每轮派发 ≤10%」 reader). Kept: filing-gate.md pm-rule cards only on the maintainer's naming; seat-lifecycle.md two round-report readings.

    Measured basis (seat analysis, 2026-10-26): in flight 12/55 tooling (22%); domain:devx 21 and domain:skills 5 of 28 open tooling cards; about 143 of 159 commits on main in the last 48h touch product code.

    Carrier: the next skills seat files the ③ implementation card citing this comment (this shift closed on the maintainer's 「skills 车道当前任务处理完就下班」).

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

    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:skillsDomain lane — seat card indexed by label:pm:seatpriority:p2Medium: important, M3toolingFix lands in tooling, not a product package — enters pm:queue only with Unblocks: or a named surface

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions