Repository navigation
pm-dispatch: merge domain:engine and domain:services into domain:server (maintainer 「甲」, 「就叫 server 吧」), with a no-interrupt transition — and move packages/qa (dogfood) to domain:devx #24907
Description
Filing gate ③: a task the maintainer set. In the triage seat's chat, triage proposed 「甲:只合并 engine 和 services」, with the packages/qa → devx move alongside it. The maintainer answered 「甲」, asked 「现在处理合适吗,各个车道都在开发」, and named the lane: 「就叫 server 吧」. Filed by the triage seat (#6015, session_01AavokzJ5DndAwitDXvKy4U). ⛔ Not a claim.
Reader (who acts): the domain:skills seat, in one PR on the governed surface. It lands by its tier: Tier H, the maintainer's approval.
Why (measured over the last 14 days, objectstack)
- Throughput is set by seats, not lanes:
domain:engineclosed 198 cards (80 p1) with 1 active seat ([PM seat] domain:engine — 🟢 os-project-manager #6367). Its seat 2 ([PM seat] domain:engine · seat 2 — ⏳ vacant #20966) is vacant.domain:servicesclosed 221 (69 p1) with 2 active seats ([PM seat] domain:services — 🟢 os-justin #6021, [PM seat] domain:services · seat 2 — ⏳ vacant #21118).
- The boundary is the costliest one to route:
- 30 PRs and 36 cards in 14 days name both an engine package and a services package in their title scope.
- Authorization alone spans
objectql/formula/platform-objects(engine) andplugin-security/plugin-sharing/plugin-approvals(services). The 18.x epic refactor(drivers,objectql,plugin-security)!: 18.x step 7: retire the organization-less readers (8c), COALESCE and __global__ (8d), and steps 1–3's dual reads #24583 isdomain:engineand editsplugin-sharing/plugin-approvals. - Triage re-laned four cards from services to engine in R531 alone.
packages/qabelongs with main-green duty: both dogfood-fixture main reds this week (main red on the full battery since 04:01Z: Dogfood 1/3 (audit-log-audit-capability, SystemWriteOrganizationRequiredError on sys_user_permission_set after the walled lift window) and Console Pin Gate (pinned objectui reads retired filterableFields) #24780, hourly full run: red on main (CI) #24879) routed todomain:cliby the lane table, whiledomain:devxcarries 21 of the 14-day main-red cards.
Name
domain:server: the maintainer's word, 「就叫 server 吧」. Both domain:engine and domain:services fold into it. The table row reads 「服务端运行时:引擎 + 服务插件」, and its scope is the union of the two current rows. If domain:cli later merges too (to be re-measured in two weeks), the name already fits.
The transition (no freeze, no interruption of in-flight work)
- The PR:
- The lane table (
.claude/skills/pm-dispatch/SKILL.md, about:161–162) replaces the engine and services rows with onedomain:serverrow, and movespackages/qafrom cli's row to devx's. references/lanes/engine.mdandreferences/lanes/services.mdmerge intoreferences/lanes/server.md.scripts/pm/ensure-pm-labels.shcreatesdomain:server.scripts/pm/check-half-states.mjsandscripts/pm/check-skill-line-ratchet.mjstreatdomain:engineanddomain:servicesas aliases ofdomain:server, so a seat's sweep and the half-state checks still see every card.- ADR text is history and stays untouched.
- The lane table (
- From the merge on, triage labels new cards
domain:server, and labelspackages/qacardsdomain:devx. - One batch relabel, by triage, of the
domain:engineanddomain:servicescards that are not in flight:pm:queue,pm:blocked,pm:on-hold, the decision cards and the unlabelled ones (about 32 cards today).- ⛔ Cards in
pm:dispatched(5 engine and 2 services today) keep their label until they land.
- ⛔ Cards in
- Seats: at each seat's next shift handover, the engine seats ([PM seat] domain:engine — 🟢 os-project-manager #6367, and [PM seat] domain:engine · seat 2 — ⏳ vacant #20966, which is vacant) and the services seats ([PM seat] domain:services — 🟢 os-justin #6021, [PM seat] domain:services · seat 2 — ⏳ vacant #21118) become
domain:serverseats 1–4. ⛔ No seat is renamed mid-shift, and in-flight claims finish under their own label. - Cleanup: once
domain:engineanddomain:serviceshave zero open cards, remove the aliases and the two labels (a small follow-up PR, the same lane).
Done when
- Steps 1–2 have landed, and the scripts' self-tests cover the aliases: both old labels read as
domain:server. - Triage has run step 3 and recorded it on [PM seat] triage (objectstack-wide) — 🟢 Routine · session_01AavokzJ5DndAwitDXvKy4U · trig_01NcnCtMS2tH46nUg1a5TaMJ (hourly) · state = body + the round records newer than it #6015.
- Step 5 is carded or done. ⛔ No new gate.
Dedupe
The open domain:skills cards were checked: none touches the lane table. New.
Generated by Claude Code
Activity
[-]pm-dispatch: fold `domain:services` into `domain:engine` (maintainer 「甲」), with a no-interrupt transition — and move `packages/qa` (dogfood) from `domain:cli` to `domain:devx`[/-][+]pm-dispatch: merge `domain:engine` and `domain:services` into `domain:server` (maintainer 「甲」, 「就叫 server 吧」), with a no-interrupt transition — and move `packages/qa` (dogfood) to `domain:devx`[/+]objectstack-fleet commentedon Oct 20, 2026
Parked for the maintainer: 「这个合并不着急,设置成维护者处理,等我有空的时候再说」 (the triage seat's chat). Triage seat ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-20T13:53Zpm:queue→pm:awaiting-maintainer. No seat dispatches this card. It restarts on the maintainer's word, here or in chat.domain:clipackage, and 55 of them (15%) also name adomain:serverpackage. Examples: the 18.x ceremony and walled steps (feat(cli,driver-sql)!,feat(objectql,cli,plugin-webhooks)!,feat(cli,plugin-sharing)!) andfix(objectql,runtime).domain:cliintodomain:serverin the same transition. One alias step, one relabel batch and one seat rename at handover cost less than two migrations.packages/qastill goes todomain:devx.Generated by Claude Code