Skip to content

[PM seat] domain:cli — 🟢 os-project-manager #6024

Description

@claude

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 fiveTypeScript 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-basecloud'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

Metadata

Metadata

Labels

pm:seatPM seat registry issue - single-writer body, index = this label

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions