Skip to content

Commit 17ef032

Browse files
os-elon-muskclaude
andauthored
feat(pm): fleet-roster.mjs — regenerate the pinned fleet roster issue from seat posts, labels and pulls (#25416) (#25440)
<!-- claude-projects-attribution: {"github_login":"os-elon-musk"} --> _Requested by **Elon** · [project thread](https://claude.ai/code/project/chan_01WedDzV26nniwxv7jC88B9D?thread=cmsg_01WedDzV26nniwxv7jC88B9DVLrRBBWZz68W7Ky5Am58J5)_ Fixes #25416 Dispatched by the `domain:devx` seat 1 (#6023). The Claim on #25416 (comment 6365984076) names `claude/project-thread-fl4rtl`. ## What changed - **`scripts/pm/fleet-roster.mjs`** (new). It reads GitHub and only writes when told to. - `node scripts/pm/fleet-roster.mjs [--repos o/a,o/b,…] [--json]` prints the 「车队总表」 table, or the rows as JSON. The default repos are objectstack, objectui and hotcrm. - There is one row per open `pm:seat` post, ordered by (repo, lane, seat, post). The columns are repo · lane · seat · account · in flight · awaiting ruling · awaiting landing · wall note · last activity · mailbox PR. - A footer gives the generation time and every read that was made. - `--write <n> [--board o/r] [--dry-run]` reads issue n first. It refuses (exit 4) unless the issue is an open `tracking` issue whose body is empty or already starts with the script's marker. Then it sends **one** relay stroke, an `issue_patch` of the body, through `fleet-write/dispatch.mjs`. It posts no comment, and it never creates or pins anything. - `--fixture <snapshot.json>` builds the same table offline. - **`scripts/pm/fleet-roster.fixture.json`** (new): a three-repo snapshot that the self-test reads. ## How each column is derived The full spelling is in the docblock. In short: - **Lane, seat and repo** come from the status-board title `[PM seat] <name> — <status>`. The script reads `· seat N`, `repo:x#N` and `@ <repo>`. - **Account** is the login after 🟢. If that word is not a login (for example `🟢 held`), the post's assignee is used. `🟢 Routine` is shown as Routine. - **Project** comes from 「由 X 账户的项目负责」 in the title, then in the body. A quoted instance and the `XX` placeholder are skipped. Live, #19287's body quotes the maintainer's order containing 「由XX账户的项目负责」, which is why the skip exists. - **In flight** is the lane's open `pm:dispatched` cards that are assigned to the seat's account. If one account holds two seats of the same lane, the cards cannot say which seat they belong to. They are then shown once, on the lowest seat, and the other seat reads `= seat N`. Live, `os-sales` holds objectui `domain:ui` seats 1 and 4. - **Awaiting ruling** is the lane's open `needs-user-decision` issues. Each one goes on the seat its assignee holds, otherwise on the lowest seated seat of the lane. - **Awaiting landing** is an open pull on a `claude/` head that closes one of the seat's in-flight cards and carries a verdict: a `## 席位核对` record with ACCEPT, or a `## Contract review` with `VERDICT: PASS`. **`pm:mailbox` pulls are excluded**. - **Wall note** is a line in the post body that starts with `Wall:` or `撞墙:`. A seated seat with no wall note and no activity in the last 6 h is flagged ⚠️ 疑似撞墙. - **Mailbox PR** is the account's open `pm:mailbox` pull, found by the head `mailbox/<login>` or by a `Mailbox-of:` line in the body. All reads go to repo-scoped REST. A cloud container's proxy refuses `/search/issues` ("sessions are bound to their configured repositories"), which I measured in this session. So the script lists issues by label and pulls by state, and filters the head prefix on the client side. ## The mailbox constant #25433 (#25417) is still an open draft. `MAILBOX_LABEL` and `LEDGER_EXCLUSION` are therefore spelled locally under the same names. The comment above them says to import them from `./mailbox-open.mjs` and delete the local copies once that PR lands, as the seat directed. The fixture covers a `pm:mailbox` pull that closes a card and carries an ACCEPT record, and that pull does not count as awaiting landing. ## Verification - `node scripts/pm/fleet-roster.mjs --self-test` → `✓ 68 cases in 7 batteries pass`. It pins battery names, has a floor, and uses the verdict handshake (AGENTS.md § Writing a `--self-test`). - I ran two ablations, and both turned it red. In the first, lane matching ignored the `domain:*` label. In the second, the mailbox exclusion was removed. - `--json` on the live three repos at 2026-10-23T13:33Z gave 33 seat rows, 19 of them seated. The three seats named on the card have the right accounts: - #19287 is `domain:skills` seat 2, held by `os-elon-musk`. - #6023 is `domain:devx` seat 1, held by `os-elon-musk`, project `os-elon-musk`. - hotcrm#1353 is `repo:hotcrm` seat 1, held by `os-elon-musk`, project `os-elon-musk`. - `node scripts/check-self-test-wired.mjs` → green. ## Not done here, on purpose - **The self-test is not wired into `lint.yml`.** That would touch `.github/workflows/**`, which is Tier H and outside the dispatched file surface. This is the same call #25433 made. - **The roster issue was not created or written.** The card gives that to the seat, through the relay, and the maintainer pins it. After that, the seat runs `node scripts/pm/fleet-roster.mjs --write <n>`. - `git grep` finds no hand-maintained copy of the table under `.claude/` or `docs/`. No changeset: this is scripts only and publishes nothing (`skip-changeset`). --- _Generated by [Claude Code](https://claude.ai/code/session_012ZoZ9L9GYfXnen4SEsptu2)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 8878c36 commit 17ef032

2 files changed

Lines changed: 762 additions & 0 deletions

File tree

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
{
2+
"now": "2026-10-23T14:00:00Z",
3+
"repos": {
4+
"objectstack-ai/objectstack": {
5+
"seats": [
6+
{ "number": 6023, "title": "[PM seat] domain:devx @ objectstack — 🟢 os-elon-musk · 由 os-elon-musk 账户的项目负责", "body": "## 1. Current PM — 🟢 os-elon-musk\n", "labels": [{ "name": "pm:seat" }], "assignees": [{ "login": "os-elon-musk" }], "updated_at": "2026-10-23T00:37:37Z" },
7+
{ "number": 20163, "title": "[PM seat] domain:devx · seat 2 — 🟢 os-sales · session_016PVjjuVPte5XEJvaQx1E4t · serial (maintainer)", "body": "", "labels": [{ "name": "pm:seat" }], "assignees": [{ "login": "os-sales" }], "updated_at": "2026-10-22T17:28:19Z" },
8+
{ "number": 7623, "title": "[PM seat] domain:skills — ⏳ vacant", "body": "", "labels": [{ "name": "pm:seat" }], "assignees": [], "updated_at": "2026-10-22T16:23:45Z" },
9+
{ "number": 19287, "title": "[PM seat] domain:skills · seat 2 — 🟢 os-elon-musk", "body": "由 os-elon-musk 账户的项目负责", "labels": [{ "name": "pm:seat" }], "assignees": [{ "login": "os-elon-musk" }], "updated_at": "2026-10-23T12:00:00Z" },
10+
{ "number": 6015, "title": "[PM seat] triage (objectstack-wide) — 🟢 Routine · session_01AavokzJ5DndAwitDXvKy4U · trig_01NcnCtMS2tH46nUg1a5TaMJ (hourly)", "body": "", "labels": [{ "name": "pm:seat" }], "assignees": [], "updated_at": "2026-10-23T12:59:06Z" },
11+
{ "number": 999, "title": "Fleet seat registry", "body": "", "labels": [{ "name": "pm:seat" }], "assignees": [], "updated_at": "2026-10-01T00:00:00Z" }
12+
],
13+
"dispatched": [
14+
{ "number": 25416, "labels": [{ "name": "pm:dispatched" }, { "name": "domain:devx" }, { "name": "tooling" }], "assignees": [{ "login": "os-elon-musk" }], "updated_at": "2026-10-23T13:28:00Z" },
15+
{ "number": 25300, "labels": [{ "name": "pm:dispatched" }, { "name": "domain:devx" }], "assignees": [{ "login": "os-sales" }], "updated_at": "2026-10-23T02:00:00Z" },
16+
{ "number": 25412, "labels": [{ "name": "pm:dispatched" }, { "name": "domain:skills" }], "assignees": [{ "login": "os-elon-musk" }], "updated_at": "2026-10-23T12:40:00Z" },
17+
{ "number": 25500, "labels": [{ "name": "pm:dispatched" }, { "name": "domain:spec" }], "assignees": [{ "login": "os-elon-musk" }], "updated_at": "2026-10-23T13:59:00Z" }
18+
],
19+
"rulings": [
20+
{ "number": 25373, "labels": [{ "name": "needs-user-decision" }, { "name": "domain:devx" }], "assignees": [], "updated_at": "2026-10-23T12:30:00Z" },
21+
{ "number": 25344, "labels": [{ "name": "needs-user-decision" }, { "name": "domain:skills" }], "assignees": [{ "login": "os-elon-musk" }], "updated_at": "2026-10-23T02:37:00Z" },
22+
{ "number": 25401, "labels": [{ "name": "needs-user-decision" }, { "name": "domain:devx" }], "assignees": [], "pull_request": { "url": "x" }, "updated_at": "2026-10-23T02:37:00Z" }
23+
],
24+
"pulls": [
25+
{ "number": 25427, "state": "open", "head": { "ref": "claude/project-thread-aaaa" }, "body": "Fixes #25412", "labels": [] },
26+
{ "number": 25392, "state": "open", "head": { "ref": "claude/project-thread-bbbb" }, "body": "Mailbox-of: os-elon-musk\n\nFixes #25416", "labels": [{ "name": "pm:mailbox" }, { "name": "skip-changeset" }] },
27+
{ "number": 25433, "state": "open", "head": { "ref": "claude/project-thread-cccc" }, "body": "Fixes #25417", "labels": [] }
28+
],
29+
"comments": {
30+
"25427": [{ "body": "## 席位核对\n\nACCEPT · `domain:skills#2` · `os-elon-musk` · head `abc`" }],
31+
"25392": [{ "body": "## 席位核对\n\n**ACCEPT** · this must never count" }]
32+
}
33+
},
34+
"objectstack-ai/objectui": {
35+
"seats": [
36+
{ "number": 5560, "title": "[PM seat] domain:ui @ objectui — 🟢 os-sales · 由Sales账户的项目负责", "body": "## 1. Current PM\n\n- **Wall:** limit reached, resets at 15:00Z\n", "labels": [{ "name": "pm:seat" }], "assignees": [{ "login": "os-sales" }], "updated_at": "2026-10-22T18:06:56Z" },
37+
{ "number": 10243, "title": "[PM seat] domain:ui · seat 4 — 🟢 os-sales · session_01SJn1GE · ui lane", "body": "", "labels": [{ "name": "pm:seat" }], "assignees": [{ "login": "os-sales" }], "updated_at": "2026-10-17T16:05:27Z" }
38+
],
39+
"dispatched": [
40+
{ "number": 13330, "labels": [{ "name": "pm:dispatched" }, { "name": "domain:ui" }], "assignees": [{ "login": "os-sales" }], "updated_at": "2026-10-23T13:28:00Z" }
41+
],
42+
"rulings": [],
43+
"pulls": [],
44+
"comments": {}
45+
},
46+
"objectstack-ai/hotcrm": {
47+
"seats": [
48+
{ "number": 2180, "title": "[PM seat] repo:hotcrm · seat 2 — ⏳ vacant", "body": "", "labels": [{ "name": "pm:seat" }], "assignees": [], "updated_at": "2026-10-21T08:38:12Z" },
49+
{ "number": 1353, "title": "[PM seat] repo:hotcrm — 🟢 os-elon-musk · 由 os-elon-musk 账户的项目负责", "body": "", "labels": [{ "name": "pm:seat" }], "assignees": [{ "login": "os-elon-musk" }], "updated_at": "2026-10-22T14:39:07Z" }
50+
],
51+
"dispatched": [
52+
{ "number": 2253, "labels": [{ "name": "pm:dispatched" }], "assignees": [{ "login": "os-elon-musk" }], "updated_at": "2026-10-23T13:50:00Z" }
53+
],
54+
"rulings": [],
55+
"pulls": [
56+
{ "number": 2257, "state": "open", "head": { "ref": "claude/project-thread-dddd" }, "body": "Fixes #2253", "labels": [] }
57+
],
58+
"comments": {
59+
"2257": [{ "body": "The latest updates on your projects." }]
60+
}
61+
}
62+
}
63+
}

0 commit comments

Comments
 (0)