This post is the sole authority for the domain:cli seat (seat-post protocol, maintainer 2026-08-06; index label:pm:seat). Single writer: only the sitting PM edits the body. Takeover/handover = body rewrite + one audit comment (comments archive only, they never carry state). Read side: body + comments newer than the body's last edit.
Scope
packages/cli, runtime, verify, qa, types, packages/rest, packages/mcp, packages/observability, packages/client*, cloud-connection, create-objectstack, packages/adapters/*, plugin-hono-server, plugin-dev.
Current PM
Session session_012WKSnqAaoqtW3QX7SSf1Vk (GitHub os-project-manager), took the seat 2026-08-17 ~13:5xZ on the maintainer's instruction (verbatim): 「cli 前任项目经理只处理在手任务,你接管此车道并派发剩余任务。」
Predecessor session_01Y26DJEHSBhhAQ6wwfsHNza retained #9120 only (its in-hand card, PR #9291). Everything else in this lane is this seat's.
Inherited ledger
| card |
state |
verdict |
| #9017 / #7941 |
recorded in-flight / next-up by the prior body |
both closed — discharged at takeover |
| #9120 |
pm:dispatched, PR #9291 open, non-draft |
⚠️ predecessor's, not driven by this seat. Occupies packages/rest |
Round ledger (2026-08-17)
Round 1 — 4 dispatched, ALL 4 MERGED. #9263 4906c900f · #9070 target:v17 7c3a7ebf7 (release blocker cleared) · #8978 49dba5486 · #9264 0a5adbaed.
Round 2 — 3 dispatched, ALL 3 MERGED. #9311 2d0af5745 · #9267 d2e6b1d67 · #8985 14c9ad71b (evicted once by the #9371 flake, re-queued, landed).
Round 3 — in flight: #9083 (opus, authz-matrix ledger tightening).
Session totals: 7 dispatched · 7 MERGED · REWORK 0 · dead agents 0 · patch rounds 3 (all CI-convergence). Every landing confirmed by three readings: merge state, origin/main, and a probe for a symbol the PR introduced.
Filed: #9342 (→ domain:devx) · #9348 · #9364 · #9367 · #9371 · cloud#1419 · objectui#5028 (requeued when #9267 landed).
⛔ #9106 is NOT free despite pm:queue + no assignee — predecessor session claimed it 02:42Z (branch claude/issue-9106-demote-author-codes, PRs #9234 + #9233, ADR-class, claude-fable-5). The claim comment is the arbiter, not the label.
⚠️ #9291 (predecessor's #9120) — escalated, unresolved. Five required checks green, auto_merge=True, never entered the queue since ready_for_review 12:50Z, and #9120 has no ACCEPT. ⛔ This seat does not queue another seat's unreviewed PR and ⛔ does not reclaim it (branch + PR alive). It blocks five cards: #9292, #9084, #9232, #8684, #9326 — all landing in packages/rest/src/rest-server.ts.
Hot-file serial queue
| file / package |
order |
packages/rest/** |
⚠️ PR #9291 (predecessor's), never queued → then #9292, #9084 (same file), #9232, #8684, #9326 |
packages/qa/dogfood/** |
⚠️ in flight #9083 (freed by #9311 landing). ⛔ #9084 is hard same-file serial with it — do not dispatch while #9083 is live |
packages/cli/** |
✅ free (#8978, #8985 landed). #8368 remains on serve.ts |
packages/cloud-connection/** |
✅ free (#9070, #9267 landed) |
packages/create-objectstack/** |
✅ free (#9263, #9264 landed). #9149 next up — ⚠️ re-verify its premise first: #9264 rewrote sync-template-versions.mjs into a discovered-template table-driven form hours ago |
scripts/check-route-envelope.mjs |
✅ free (#9267 landed); #9364 is its successor (20 ratcheted bodies), unrouted |
packages/mcp |
#8328 re-check before dispatch — its listSkills closure no longer exists |
packages/runtime/** + packages/types/** |
✅ free. #9106 lands in runtime — ⛔ claimed by the predecessor |
Standing commitments
Concurrency cap 3; S+M ⇒ mode:subagent; tier passed explicitly per dispatch from dispatch-gates.mjs --tier, never recalled (⛔ .claude/skills/pm-dispatch/** and contract accept/reject changes are fable-mandatory). Required checks on main are exactly five — TypeScript Type Check, ESLint, Test Core, Dogfood Regression Gate, Build Core (ruleset 12119582); everything else is advisory and ⛔ must not be treated as a landing gate. Read each gate job's own conclusion, ⛔ never an aggregate. ⛔ ADR/skills-path PRs are never merged or enqueued by this seat. Enqueue = flip ready then enable_pr_auto_merge; landing confirmed by two readings (timeline added_to_merge_queue + origin/main), ⛔ never the auto_merge field. Same file ⇒ hard serial; same package ⇒ serial unless the maintainer exempts (put to the maintainer twice on 2026-08-13, declined both times). ⛔ No model identifier in any pushed artifact.
Notes
⭐ Report gate results by CI JOB name, not by the tool you ran locally. Both devs this round reported "ESLint clean" while the job named ESLint was red — it carries a family (check:cross-package-test-inputs, check:slot-lookup, and more). One dev diagnosed the root cause precisely: dispatch-gates.mjs derives from changed paths and a fixed set of change kinds, so a convention it does not model (e.g. "a source file that performs service lookups") is invisible to it. ⇒ It names which jobs are in play; it is never the union itself. Carried into this seat's dispatch template.
⭐ check:cross-package-test-inputs — read that gate's own ledger before ruling. A path named in prose forces a declaration, and the gate's ledger explicitly settles it: declaring beats rewording to dodge the scanner, because over-collection can only widen a re-run radius, never narrow one. This seat ruled the opposite on #9263 and has publicly corrected it there. Adding a glob is conservative, not gate weakening, so it does not touch the maintainer-only floor.
⭐ A codeload.github.com 429/503 incident (2026-08-17 ~15:20–16:05Z) evicted two ACCEPTed PRs from the merge queue. Signature: any job failing at Set up job / Prepare all required actions with Failed to download action … after 3 attempts. It never runs a test body, so it is neither a regression nor a flaky test — it is the one case where re-running is the fix. Correct handling: do not re-queue during an active window (each entry rebuilds every PR behind it); wait for evidence of recovery (fresh runs completing past Set up job), then re-queue. Spaced retries worked; immediate ones did not.
- Cross-repo pin lag is read with REST
compare, never local merge-base — cloud's .objectstack-sha is a genuine ancestor 177 commits back, while a shallow-clone merge-base --is-ancestor reports it as a non-ancestor and miscounts the distance. Consuming-side work sequences off the pin bump, not the upstream merge.
- The GitHub search API is unavailable to this session ("sessions are bound to their configured repositories") — it returns an error object, not an empty result. Dedupe via repo-scoped
list, and always run a control query before believing a zero.
- REST
rerun-failed-jobs returns 403 for this token (Resource not accessible by integration); the GitHub MCP tool performs the same re-run successfully.
- Carried forward: aggregate CI readings lie toward green · card bodies expire in ways that invert their conclusion, ⛔ read every comment before dispatch ·
list_issues never returns assignees (REST does) · MCP list_* runs on the GraphQL pool, REST core is a separate budget.
Generated by Claude Code
This post is the sole authority for the
domain:cliseat (seat-post protocol, maintainer 2026-08-06; indexlabel:pm:seat). Single writer: only the sitting PM edits the body. Takeover/handover = body rewrite + one audit comment (comments archive only, they never carry state). Read side: body + comments newer than the body's last edit.Scope
packages/cli,runtime,verify,qa,types,packages/rest,packages/mcp,packages/observability,packages/client*,cloud-connection,create-objectstack,packages/adapters/*,plugin-hono-server,plugin-dev.Current PM
Session
session_012WKSnqAaoqtW3QX7SSf1Vk(GitHubos-project-manager), took the seat 2026-08-17 ~13:5xZ on the maintainer's instruction (verbatim): 「cli 前任项目经理只处理在手任务,你接管此车道并派发剩余任务。」Predecessor
session_01Y26DJEHSBhhAQ6wwfsHNzaretained #9120 only (its in-hand card, PR #9291). Everything else in this lane is this seat's.Inherited ledger
pm:dispatched, PR #9291 open, non-draftpackages/restRound ledger (2026-08-17)
Round 1 — 4 dispatched, ALL 4 MERGED. #9263
4906c900f· #9070target:v177c3a7ebf7(release blocker cleared) · #897849dba5486· #92640a5adbaed.Round 2 — 3 dispatched, ALL 3 MERGED. #9311
2d0af5745· #9267d2e6b1d67· #898514c9ad71b(evicted once by the #9371 flake, re-queued, landed).Round 3 — in flight: #9083 (
opus, authz-matrix ledger tightening).Session totals: 7 dispatched · 7 MERGED · REWORK 0 · dead agents 0 · patch rounds 3 (all CI-convergence). Every landing confirmed by three readings: merge state,
origin/main, and a probe for a symbol the PR introduced.Filed: #9342 (→
domain:devx) · #9348 · #9364 · #9367 · #9371 · cloud#1419 · objectui#5028 (requeued when #9267 landed).⛔ #9106 is NOT free despite
pm:queue+ no assignee — predecessor session claimed it 02:42Z (branchclaude/issue-9106-demote-author-codes, PRs #9234 + #9233, ADR-class,claude-fable-5). The claim comment is the arbiter, not the label.auto_merge=True, never entered the queue sinceready_for_review12:50Z, and #9120 has no ACCEPT. ⛔ This seat does not queue another seat's unreviewed PR and ⛔ does not reclaim it (branch + PR alive). It blocks five cards: #9292, #9084, #9232, #8684, #9326 — all landing inpackages/rest/src/rest-server.ts.Hot-file serial queue
packages/rest/**packages/qa/dogfood/**packages/cli/**serve.tspackages/cloud-connection/**packages/create-objectstack/**sync-template-versions.mjsinto a discovered-template table-driven form hours agoscripts/check-route-envelope.mjspackages/mcplistSkillsclosure no longer existspackages/runtime/**+packages/types/**Standing commitments
Concurrency cap 3; S+M ⇒
mode:subagent; tier passed explicitly per dispatch fromdispatch-gates.mjs --tier, never recalled (⛔.claude/skills/pm-dispatch/**and contract accept/reject changes are fable-mandatory). Required checks onmainare exactly five —TypeScript Type Check,ESLint,Test Core,Dogfood Regression Gate,Build Core(ruleset12119582); everything else is advisory and ⛔ must not be treated as a landing gate. Read each gate job's ownconclusion, ⛔ never an aggregate. ⛔ ADR/skills-path PRs are never merged or enqueued by this seat. Enqueue = flip ready thenenable_pr_auto_merge; landing confirmed by two readings (timelineadded_to_merge_queue+origin/main), ⛔ never theauto_mergefield. Same file ⇒ hard serial; same package ⇒ serial unless the maintainer exempts (put to the maintainer twice on 2026-08-13, declined both times). ⛔ No model identifier in any pushed artifact.Notes
⭐ Report gate results by CI JOB name, not by the tool you ran locally. Both devs this round reported "ESLint clean" while the job named
ESLintwas red — it carries a family (check:cross-package-test-inputs,check:slot-lookup, and more). One dev diagnosed the root cause precisely:dispatch-gates.mjsderives from changed paths and a fixed set of change kinds, so a convention it does not model (e.g. "a source file that performs service lookups") is invisible to it. ⇒ It names which jobs are in play; it is never the union itself. Carried into this seat's dispatch template.⭐
check:cross-package-test-inputs— read that gate's own ledger before ruling. A path named in prose forces a declaration, and the gate's ledger explicitly settles it: declaring beats rewording to dodge the scanner, because over-collection can only widen a re-run radius, never narrow one. This seat ruled the opposite on #9263 and has publicly corrected it there. Adding a glob is conservative, not gate weakening, so it does not touch the maintainer-only floor.⭐ A
codeload.github.com429/503 incident (2026-08-17 ~15:20–16:05Z) evicted two ACCEPTed PRs from the merge queue. Signature: any job failing atSet up job/Prepare all required actionswithFailed to download action … after 3 attempts. It never runs a test body, so it is neither a regression nor a flaky test — it is the one case where re-running is the fix. Correct handling: do not re-queue during an active window (each entry rebuilds every PR behind it); wait for evidence of recovery (fresh runs completing pastSet up job), then re-queue. Spaced retries worked; immediate ones did not.compare, never localmerge-base—cloud's.objectstack-shais a genuine ancestor 177 commits back, while a shallow-clonemerge-base --is-ancestorreports it as a non-ancestor and miscounts the distance. Consuming-side work sequences off the pin bump, not the upstream merge.list, and always run a control query before believing a zero.rerun-failed-jobsreturns 403 for this token (Resource not accessible by integration); the GitHub MCP tool performs the same re-run successfully.list_issuesnever returnsassignees(REST does) · MCPlist_*runs on the GraphQL pool, REST core is a separate budget.Generated by Claude Code