Repository navigation
Description
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%
toolingcards (tooling / skills / CI / process). Overflow stays in the backlog, ⛔ notpm: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
plannedliveness row no longer reachesmainon 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 onmain).
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 asplannedwith no reader. Declared-without-reader is exactly the gap the spec's "declare = enforce" rule forbids.
For the dev
- File surface:
.claude/skills/pm-dispatch/**only (Tier S,.claude/**). The line ratchet (pnpm check:pm-skill-ratchet) covers every file of the surface: pay new lines with deletions in the same file, ⛔ no re-wrap to make room, no ceiling raise (Tesla named none).pnpm check:pm-skill-id-lint: no issue numbers in the rule text. - One PR for both rulings: same file family, serial anyway. If the
area:*/ tooling-slot text that pm-dispatch: retire the fleet one-tooling-slot rule — the take-order alone sequences tooling cards, and a lane's "open P0/P1" is an undispatched one (maintainer direct dispatch) #20957 retired is still referenced somewhere, fold it rather than adding a parallel rule.
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
objectstack-fleet commentedon Oct 25, 2026
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.
.claude/skills/**is governed: draft PR, quote the ruling, the maintainer merges.Generated by Claude Code
objectstack-fleet commentedon Oct 25, 2026
Claim: PM loop round 3 (serial) · 2026-10-25T11:59Z
Session:
session_014FZ3TJucS1L7BdMe5DAzXC(seat); implementation in card threadsession_01Fx58tcuqmi5bveQGdRYq8rAccount:
os-project-manager(the seat's linked user asGET /useranswers it; always the card's assignee)Branch:
claude/project-thread-99edon(the card thread's harness push branch — the measured platform exception toclaude/issue-<n>-<slug>)Worktree:
objectstack-issue-25768in the card thread's cloneDomain:
domain:skillsSeat:
domain:skills#1(seat post #7623)File surface:
.claude/skills/pm-dispatch/**only — expectedreferences/execution-duties.md(候选与批次: the 10% tooling cap and overflow),references/seat-lifecycle.md(轮次报告与节奏: the two new readings),references/filing-gate.mdorreferences/triage-duties.md(pm-rule cards only when the maintainer names them),references/cross-repo-coordination.mdrule 2 (D5),SKILL.mdonly 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.mdMANDATORY 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/main0790d0a4cross-repo-coordination.mdstill 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:dispatchedholds #25772, os-tesla, security, a different file set — the card thread checks for overlap at PR time and mergesorigin/mainif needed)objectstack-fleet commentedon Oct 25, 2026
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
objectstack-fleet commentedon Oct 25, 2026
席位
domain:skills#1· 2026-10-25T12:50Z — PR #25795 ACCEPT on headda43591c(contract review PASS 6397821193); flipped ready, auto-merge armed. Card closes on merge.objectstack-fleet commentedon Oct 25, 2026
席位
domain:skills#1· 2026-10-25T12:59Z — landed: PR #25795 merged as5f5f0b42. 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 atui/cutover.objectstack-fleet commentedon Oct 26, 2026
Ruling: A — drop the per-round
toolingdispatch cap ·domain:skills#1·session_014FZ3TJucS1L7BdMe5DAzXC· 2026-10-26T09:22ZMaintainer 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候选与批次 (thetooling≤10% line) and theSKILL.mdtoolingglossary row (「每轮派发 ≤10%」 reader). Kept:filing-gate.mdpm-rule cards only on the maintainer's naming;seat-lifecycle.mdtwo round-report readings.Measured basis (seat analysis, 2026-10-26): in flight 12/55
tooling(22%);domain:devx21 anddomain:skills5 of 28 opentoolingcards; about 143 of 159 commits onmainin 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 车道当前任务处理完就下班」).