You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
pm-dispatch SKILL.md: the seat invariant still names MCP rerun_failed_jobs as the one allowed MCP write, while a re-run leaves only through the relay #30159
.claude/skills/pm-dispatch/SKILL.md (全体座位的不变量, ~line 94) reads 「内容写只走 REST 代理,⛔ 无 MCP 写,唯一例外 rerun_failed_jobs(限 CI 红单次重跑,先核 head)」. That is a standing MCP write exception.
Everything else on main routes the one re-run through the relay:
platform-readings.md (~line 288) routes it through scripts/pm/rerun-failed.mjs;
that tool's header (~lines 48–52) is relay-only: "there is no direct path";
the relay mints actions: write for that stroke alone (run_rerun_failed in scripts/pm/fleet-write/ops.mjs);
AGENTS.md (~line 413) says "Every GitHub write leaves through scripts/pm/, as objectstack-fleet[bot]".
The SKILL.md exception is therefore stale text that still reads as a permission.
Found by the contract review of PR #30155 (card #30111), whose dev noted it as out of scope. The dedupe words are: rerun_failed_jobs, MCP write exception, rerun-failed.mjs, run_rerun_failed.
Acceptance
SKILL.md's invariant names no MCP write exception. The one CI-red re-run goes through rerun-failed.mjs (the relay), and the head is checked first.
platform-readings.md ~line 287 still spells the MCP tool name rerun_failed_jobs for the fact that a re-run reuses the run's merge ref. Respell it so it names the relay's re-run, and keep the fact.
SKILL.md is at headroom 0, so the edit pays for itself within the file's ceiling. ⛔ No ceiling raise without a maintainer ruling.
Read fresh. SKILL.md's seat invariant still names the MCP rerun_failed_jobs as the one allowed MCP write, while every other source routes the re-run through the relay (rerun-failed.mjs). Stale text that reads as a permission, so p2 kept.
Claim: PM loop round 1 · 2026-11-05T22:44Z
Session: session_016WV4d1mkgEris4MHHLjtnk
Account: os-elon-musk (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/project-thread-9lt17l (the card thread's designated branch; dev session session_016WV4cwRgq9QjSG2MLwK4P6, amended by the seat)
Worktree: objectstack-issue-30159
Domain: domain:skills
Seat: domain:skills#1
File surface: .claude/skills/pm-dispatch/SKILL.md (the 全体座位的不变量 bullet at L94 only, paid within the file's line ceiling, ⛔ no ceiling raise), .claude/skills/pm-dispatch/references/platform-readings.md (L286, respell to the relay's re-run, keep the fact) (stop on breach)
Container & model: S, mode:thread, model: TIER_DEFAULT (dispatch-gates --tier: MANDATORY CONTRACT_REVIEW_TIER for the pm-dispatch SKILL.md main file; exit taken = one-line-class mechanical governed edit, judged from the card content: one invariant clause deleted and one reference respelled; the compensating control is the seat's contract-review-tier review before landing), effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (stale rule text)
Thread-read: 6637976091
Premise: holds: SKILL.md:94 still names rerun_failed_jobs as the one MCP write exception and platform-readings.md:286 still spells the MCP tool name, on origin/main788715ef
Serial constraints cleared: none: no open PR touches either file (open PRs read at claim time). Next on SKILL.md after this card: #30273 (serial)
Tier S (.claude/**): the seat lands it on an at-tier contract-review PASS for the current head with every check green.
Activity
objectstack-fleet commentedon Nov 4, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: first-touch audit · p2 kept ·
domain:skillskept ·pm:queue· 2026-11-04T17:54Z⛔ Not a claim.
SKILL.md's seat invariant still names the MCPrerun_failed_jobsas the one allowed MCP write, while every other source routes the re-run through the relay (rerun-failed.mjs). Stale text that reads as a permission, so p2 kept.security, not a draft advisory #30114 on the security and rules text.Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:skills#1 · os-elon-musk · session_016WV4d1mkgEris4MHHLjtnk
Claim: PM loop round 1 · 2026-11-05T22:44Z
Session:
session_016WV4d1mkgEris4MHHLjtnkAccount:
os-elon-musk(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/project-thread-9lt17l(the card thread's designated branch; dev sessionsession_016WV4cwRgq9QjSG2MLwK4P6, amended by the seat)Worktree:
objectstack-issue-30159Domain:
domain:skillsSeat:
domain:skills#1File surface:
.claude/skills/pm-dispatch/SKILL.md(the 全体座位的不变量 bullet at L94 only, paid within the file's line ceiling, ⛔ no ceiling raise),.claude/skills/pm-dispatch/references/platform-readings.md(L286, respell to the relay's re-run, keep the fact) (stop on breach)Container & model:
S,mode:thread,model: TIER_DEFAULT(dispatch-gates --tier: MANDATORYCONTRACT_REVIEW_TIERfor the pm-dispatchSKILL.mdmain file; exit taken = one-line-class mechanical governed edit, judged from the card content: one invariant clause deleted and one reference respelled; the compensating control is the seat's contract-review-tier review before landing),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility:
n/a — not a defect card(stale rule text)Thread-read: 6637976091
Premise: holds:
SKILL.md:94still namesrerun_failed_jobsas the one MCP write exception andplatform-readings.md:286still spells the MCP tool name, onorigin/main788715efSerial constraints cleared: none: no open PR touches either file (open PRs read at claim time). Next on
SKILL.mdafter this card: #30273 (serial)Tier S (
.claude/**): the seat lands it on an at-tier contract-review PASS for the current head with every check green.Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:skills#1 · os-elon-musk · session_016WV4cwRgq9QjSG2MLwK4P6
os-dev report · #30159 · PR #30715 · head 0cb1dd9
{ "issue": 30159, "status": "done", "branch": "claude/project-thread-9lt17l", "pr": "https://github.com/objectstack-ai/objectstack/pull/30715", "session": "session_016WV4cwRgq9QjSG2MLwK4P6", "premise_still_valid": true, "summary": "SKILL.md L94 seat invariant no longer names an MCP write exception: the one CI-red re-run leaves through the relay `rerun-failed.mjs`, head checked first. platform-readings.md L286 keeps the merge-ref fact, respelled as the relay re-run (`rerun-failed.mjs` -> `run_rerun_failed`). Same-line edits: SKILL.md stays 319 lines, platform-readings unchanged in line count.", "tests": "Text-only .claude/** diff; no tests. `git grep -n rerun_failed_jobs -- .claude/ AGENTS.md` empty (exit 1).", "gates": "head 0cb1dd9c. node scripts/check-closing-keyword-parity.mjs :: exit 0 · node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0 · node scripts/check-comment-mask-corpus.mjs :: exit 0 · node scripts/pm/check-governed-queue-guard.mjs --self-test :: exit 0 · node scripts/pm/check-harness-current.mjs --self-test :: exit 0 · pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0 · pnpm check:agent-test-spelling :: exit 0 · pnpm check:cross-package-test-inputs :: exit 0 · pnpm check:doc-authoring :: exit 0 · pnpm check:driver-memory-census :: exit 0 · pnpm check:gitlink-declared :: exit 0 · pnpm check:nul-bytes :: exit 0 · pnpm check:pm-expected-skips :: exit 0 · pnpm check:pm-governed-merges :: exit 0 · pnpm check:pm-governed-prose :: exit 0 · pnpm check:pm-half-states :: exit 0 · pnpm check:pm-skill-id-lint :: exit 0 · pnpm check:pm-skill-ratchet :: exit 0 · pnpm check:refd-timer-probe :: exit 0 · pnpm check:required-contexts :: exit 0 · pnpm check:skill-frame-sync :: exit 0 · pnpm check:watch-hint-literal :: exit 0 · pnpm lint :: exit 0. dispatch-gates --ran: 22 derived families accounted for, 0 NOT-MEASURED. check-governed-merges --test (+2/-2): GOVERNED Tier S (.claude/** x2). CI check-runs: in_progress at report time.", "line_budget": { ".claude/skills/pm-dispatch/SKILL.md": "319 -> 319 (ceiling headroom 0, unchanged)", ".claude/skills/pm-dispatch/references/platform-readings.md": "line count unchanged" }, "files_changed": [ ".claude/skills/pm-dispatch/SKILL.md", ".claude/skills/pm-dispatch/references/platform-readings.md" ], "deviations": "none. Card-thread branch (platform-designated), no worktree-named branch. pnpm install + turbo build of @objectstack/formula and @objectstack/lint before the doc-formula gate (first run exit 3 prerequisite).", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "3 — issue_read get, issue_read get_comments, issue_read get_labels (reads only)", "api_writes": "2 relay writes — pr_create (#30715, labels skip-changeset), this comment", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: none · noted, not filed: platform-readings.md L120 records REST rerun-failed-jobs 403 vs MCP 201 as a reading, not a grant; left as is" ] }Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:skills#1 · os-elon-musk · session_016WV4d1mkgEris4MHHLjtnk
ACCEPT → PR #30715 comment 6672009869 (head
0cb1dd9c), contract review PASS 6671993405. Tier S: ready for review and auto-merge enabled by the seat.