Repository navigation
Open
Labels
domain:skillspm:seatPM seat registry issue - single-writer body, index = this labelPM seat registry issue - single-writer body, index = this label
Description
domain:skills#2 · os-lizheng · session_012MmDsR4AZoJZyzKQcBEESh
.claude/skills/pm-dispatch/references/lanes/skills.md (⛔ not copied here). This is domain:skills seat 2. Seat 1 is #7623 and seat 3 is #29747; ⛔ this post is neither.
Refreshed 2026-11-05T10:52Z (seated).
Current PM — 🟢 os-lizheng
- Holder:
os-lizheng(GET /user) ·session_012MmDsR4AZoJZyzKQcBEESh(a claude.ai cloud session; the maintainer invoked/pm-dispatch skillsin it). Seated 2026-11-05T10:52Z; the opening mark is the comment that follows this edit. - Patrol: none. This cloud session is woken by its PR subscriptions; there is no self-bound routine.
- Mailbox: none. A cloud seat's
mailbox-open.mjsneeds a branch the seat pushes itself, and that branch is never deleted (mailbox-open: a cloud seat must push its own --head branch, and --close never deletes it, so every cloud seating leaves a stray claude/ branch #30350). Knock on this post instead. - Pointer: the lane ledger = labels + assignee +
Claim:comments carryingSeat: domain:skills#2+head:claude/PRs. Posture and round reports live in the session.
Handover ledger
Taken on os-justin's clock-out brief 6598110373 (nothing carried). Seat 1 (#7623, 🟢 huangyiirene) takes the odd slots of the lane's full order and this seat the even slots, per execution-duties.md.
Hot-file serial queue
⛔ Re-derive from live Claim: comments and each open PR's file list before every dispatch; read #7623 too.
.claude/skills/pm-dispatch/SKILL.md: [Decision] One label, two inboxes: a PR waiting on the maintainer's review/merge (SKILL.md L189 ②) carries the same needs-user-decision label as a decision card — split them? #29745 first, then 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.
Notes
- Write path: the relay (
post-stamped.mjs,label-write.mjs,issue-create.mjs,fleet-write/dispatch.mjs). ⛔ No GitHub MCP writes. - A
skills/**PR owes an'@objectstack/skills': patchchangeset, neverskip-changeset. - Merges reach customers through
@objectstack/skills(skills/**) only on a release the maintainer runs.
Metadata
Metadata
Assignees
Labels
domain:skillspm:seatPM seat registry issue - single-writer body, index = this labelPM seat registry issue - single-writer body, index = this label
Activity
os-steve commentedon Sep 20, 2026
Round-open marker —
session_017ETYWqMQD4qMtZzAGovWNi(os-steve,domain:skills#2) · fire 2026-09-20T09:48Z (seating on the maintainer's summons in this session; no Routine fire) · charter touches onorigin/maine6a03e6read at 2026-09-20T09:38Z:.claude/skills/pm-dispatch/SKILL.mde872ef44b·references/core-rules.mde15870f7a·references/lanes/skills.md4d1d9d9f9— the first reading for this seat (no previous marker to differ from), all three read in full this act. Harness:scripts/pm/check-harness-current.mjsCURRENT one6a03e6. Mutex readings at 2026-09-20T09:38Z: no prior seat-2 brief or marker; the lane's openpm:dispatchedclaims (#19260 · #19191 · #19048) all carrySeat: domain:skills#1; the lane's 15 newest CLOSED cards carry seat-1 or default-seat claims only; the maintainer's explicit summons is the arbiter. Anchor #9857 (swept 2026-09-20T07:48Z, next by 13:37Z): no rendered H row names this lane's cards, PRs or this post; the trimmed rows are unread here (#19230), ⛔ not a clean reading.Generated by Claude Code
[-][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · tier 2 (maintainer direct dispatch, 16 cards) · in flight 0 · queued behind tier 1 on 3 hot files · decision box 0[/-][+][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · tier 2 (maintainer direct dispatch, 16 cards, batch 5) · in flight 2 (#18892 · #19256) · parked 1 (#19240, maintainer order) · 13 queued behind tier 1 on 3 hot files · decision box 0[/+][-][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · tier 2 (maintainer direct dispatch, 16 cards, batch 5) · in flight 2 (#18892 · #19256) · parked 1 (#19240, maintainer order) · 13 queued behind tier 1 on 3 hot files · decision box 0[/-][+][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · in flight 5 (#18892 · #19256 · #19132 · #18957 · #19096) · parked 1 (#19240, maintainer order) · tier-2 13 queued behind tier 1 on 3 hot files · decision box 0[/+][-][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · in flight 5 (#18892 · #19256 · #19132 · #18957 · #19096) · parked 1 (#19240, maintainer order) · tier-2 13 queued behind tier 1 on 3 hot files · decision box 0[/-][+][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · in flight 5 (#19256 patch · #18891 · #18902 · #19255 · #19132) · accepted awaiting queue 3 (PR #19298 · #19304 · #19305) · parked 1 (#19240) · decision box 0[/+][-][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · in flight 5 (#19256 patch · #18891 · #18902 · #19255 · #19132) · accepted awaiting queue 3 (PR #19298 · #19304 · #19305) · parked 1 (#19240) · decision box 0[/-][+][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · in flight 5 (#19256 parked · #18902 · #19255 · #18901 · #19132) · queued/landing 4 (PR #19298 · #19304 · #19305 · #19317) · parked 1 (#19240) · decision box 0[/+][-][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · in flight 5 (#19256 parked · #18902 · #19255 · #18901 · #19132) · queued/landing 4 (PR #19298 · #19304 · #19305 · #19317) · parked 1 (#19240) · decision box 0[/-][+][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · landed 3 (#18892 · #18957 · #19096) · queued 2 (PR #19317 · #19321) · in flight 4 (#19132 · #19255 · #18901 resumed after the 429 wall · #19256 parked) · parked 1 (#19240) · decision box 0[/+][-][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · landed 3 (#18892 · #18957 · #19096) · queued 2 (PR #19317 · #19321) · in flight 4 (#19132 · #19255 · #18901 resumed after the 429 wall · #19256 parked) · parked 1 (#19240) · decision box 0[/-][+][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · landed 3 (#18892 · #18957 · #19096) · queued 2 (PR #19317 · #19321) · accepted 1 (PR #19351) · closed spent 1 (#19202) · in flight 4 (#19127 · #19132 · #18901 · #19256 parked) · parked 1 (#19240) · decision box 0[/+][-][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · landed 3 (#18892 · #18957 · #19096) · queued 2 (PR #19317 · #19321) · accepted 1 (PR #19351) · closed spent 1 (#19202) · in flight 4 (#19127 · #19132 · #18901 · #19256 parked) · parked 1 (#19240) · decision box 0[/-][+][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · high-priority only (maintainer order 14:00Z) · landed 5 (#18892 · #18957 · #19096 · #18891 · #18902) · queued 2 (PR #19351 · #19353) · delivered 1 (PR #19356 · #18901) · closed spent 1 (#19202) · released 1 (#19127) · parked 2 (#19256 · #19240) · decision box 0[/+][-][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · high-priority only (maintainer order 14:00Z) · landed 5 (#18892 · #18957 · #19096 · #18891 · #18902) · queued 2 (PR #19351 · #19353) · delivered 1 (PR #19356 · #18901) · closed spent 1 (#19202) · released 1 (#19127) · parked 2 (#19256 · #19240) · decision box 0[/-][+][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · seat-assessed takes (maintainer order 14:1xZ) · landed 5 (#18892 · #18957 · #19096 · #18891 · #18902) · queued 2 (PR #19351 · #19353) · delivered 1 (PR #19356 · #18901) · in flight 2 (#19211 · #19256 patch 2) · next #19274 · released 1 (#19127) · parked 1 (#19240) · decision box 0[/+][-][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · seat-assessed takes (maintainer order 14:1xZ) · landed 5 (#18892 · #18957 · #19096 · #18891 · #18902) · queued 2 (PR #19351 · #19353) · delivered 1 (PR #19356 · #18901) · in flight 2 (#19211 · #19256 patch 2) · next #19274 · released 1 (#19127) · parked 1 (#19240) · decision box 0[/-][+][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · seat-assessed takes · landed 5 (#18892 · #18957 · #19096 · #18891 · #18902) · queued 1 (PR #19353) · accepted, flip held 1 (PR #19356) · demoted to draft by another actor 1 (PR #19351) · in flight 2 (#19211 · #19256 patch 2) · next #19274 · released 1 (#19127) · parked 1 (#19240) · decision box 0[/+][-][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · seat-assessed takes · landed 5 (#18892 · #18957 · #19096 · #18891 · #18902) · queued 1 (PR #19353) · accepted, flip held 1 (PR #19356) · demoted to draft by another actor 1 (PR #19351) · in flight 2 (#19211 · #19256 patch 2) · next #19274 · released 1 (#19127) · parked 1 (#19240) · decision box 0[/-][+][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · seat-assessed takes · landed 5 (#18892 · #18957 · #19096 · #18891 · #18902) · queued 3 (PR #19353 · #19356 · #19351) · in flight 2 (#19211 · #19256 patch 2) · next #19274 · released 1 (#19127) · parked 1 (#19240) · decision box 0[/+][-][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · seat-assessed takes · landed 5 (#18892 · #18957 · #19096 · #18891 · #18902) · queued 3 (PR #19353 · #19356 · #19351) · in flight 2 (#19211 · #19256 patch 2) · next #19274 · released 1 (#19127) · parked 1 (#19240) · decision box 0[/-][+][PM seat] domain:skills · seat 2 — 🟢 os-steve · session_017ETYWqMQD4qMtZzAGovWNi · R1 in seat · batch 5 · seat-assessed takes · landed 6 (#18892 · #18957 · #19096 · #18891 · #18902 · #19255) · queued 1 (PR #19353) · accepted 2 (PR #19303 · #19356 roster merge pending push) · in flight 1 (#19211) · next #19274 · released 1 (#19127) · parked 1 (#19240) · decision box 0[/+]108 remaining items
objectstack-fleet commentedon Oct 29, 2026
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS
Seated · round 1 open —
domain:skillsseat 2 ·os-elon-musk·session_016WV4d1QkPVVzNz3FJqb2iS· 2026-10-29T21:54Z · 由 os-elon-musk 账户的项目负责marchtian(marker 6494312603), so this seat sits the vacant seat 2.origin/main481ade61): ① the newest event on this post before this term was the sign-off brief 6493936299 (os-justin,session_01QSeKYmhU5KEj1nukYhp1Tg), a release marker, with nothing after it; ② no round-open marker after it; ③ the lane has no openpm:dispatchedcard, so noClaim:namingdomain:skills#2is live; ④ the predecessor's brief lists every seat-2 card as landed or handed over.origin/main481ade61,git-history.mjs touch, each proven):SKILL.mdc5d46341·references/**ded67bfb·references/lanes/skills.md28872e68.check-harness-current: CURRENT.os-elon-muskin this act (relay run 40961475445; the vacant body still carriedos-justinas assignee, now removed).pm:epicsubtree is excluded. Concurrency and the landing grant wait on the maintainer's word in the project. Asplitnote to seat 1 follows on [PM seat] domain:skills — ⏳ vacant #7623 once candidates are read. ⛔ Not a claim.[-][PM seat] domain:skills · seat 2 — 🟢 os-elon-musk · 由 os-elon-musk 账户的项目负责[/-][+][PM seat] domain:skills · seat 2 — ⏳ vacant[/+]objectstack-fleet commentedon Oct 31, 2026
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS
Sign-off brief: skills seat 2, term 2026-10-29T21:52Z to 2026-10-31T05:55Z. The maintainer said, verbatim: 「当前任务处理完,合并后就下班」.
Landed this term: 29 PRs. All carry landing notes on their cards.
homeAmount.rateDateisdate/datetime, thecurrencyrow lists all fourcurrencyConfigkeys, and ADR-0144 Open item 1 records the settled pointer spelling #28323 (skills(objectstack-data) + ADR-0144: teach homeAmount.rateDate as date/datetime, list all four currencyConfig keys, and amend Open item 1 with the settled pointer spelling #28203).Handed over: #28237 / PR #28295 (the ADR-0146 rewrite), in the decision box and waiting on 总监决裁 7. Release is 6539755365, and handoff is 6539626819. The queue snapshot and serial queue are in the seat post body.
Filed this term as follow-ups: #28299 (blocked by #26702) and #28330 (untriaged docs).
Seat error, owned: the dispatch orders told
skills/**PRs to useskip-changeset. PR #28170 and PR #28290 merged without the@objectstack/skillspatch changeset they owed, and the changesets were carried by PR #28323. Future seats: askills/**change always takes that changeset.check-handover.mjs: exit 0. The seat post is ⏳ vacant, and the assignee is cleared.objectstack-fleet commentedon Nov 1, 2026
domain:skills#2 · marchtian · session_017ihL2g7RyXa8ErM6GAkHyc
Seat taken · opening mark · 2026-11-01T13:06Z · GitHub
marchtian(GET /user) · seatdomain:skills#2· held by the marchtian account's project.check-handoverexited 0 and names no stay-behind.os-tesla(session_01L9qibzCtJt8Q2Z63fyRNix, opening mark 6550230777). This seat leaves seat 1's claims alone.domain:skillscard carries aSeat: domain:skills#2claim from another session after the brief.check-harness-currentCURRENT ate4ec4f22c5. Touches read this act:SKILL.mdb3103a93c·references/**bff315cd4·references/lanes/skills.md28872e68d. Re-read:SKILL.md,seat-lifecycle.md,seat-post-protocol.md,project-forms.md,lanes/skills.md.[-][PM seat] domain:skills · seat 2 — ⏳ vacant[/-][+][PM seat] domain:skills · seat 2 — 🟢 marchtian · 由 marchtian 账户的项目负责[/+][-][PM seat] domain:skills · seat 2 — 🟢 marchtian · 由 marchtian 账户的项目负责[/-][+][PM seat] domain:skills · seat 2 — ⏳ vacant[/+]objectstack-fleet commentedon Nov 2, 2026
domain:skills#2 · marchtian · session_017ihL2g7RyXa8ErM6GAkHyc
Clock-out brief ·
domain:skillsseat 2 ·marchtian·session_017ihL2g7RyXa8ErM6GAkHyc· 2026-11-02T04:11ZThe maintainer ordered this clock-out in the project thread: 「skills 车道当前任务处理完就下班」, then 「你开发的pr已经负责推进到合并才下班」. The seat claimed nothing after the first order and drove its two open PRs to merge. Just before this comment the body was rewritten to
⏳ vacantwith the ledger, the title set and the assignee cleared;check-handover.mjsexited 0.epic:seat keys and the fleet roster has no epic rows #28718 (feat(pm): epic seats open a mailbox and show on the fleet roster #28751), pm-dispatch(runbook): 〈巡查常设项〉 still names the patrol per project, and its cross-account review dedupe is keyed to the account #28740 (docs(pm-dispatch): runbook patrol names the per-seat patrol and dedupes review claims by seat #28759), pm-dispatch(execution): a seat that reports "nothing to dispatch" lists every queue card with its live labels and exact blocker; a card whose remaining work is under ui/ is dispatched, never skipped #28638 (pm-dispatch(execution): an empty-queue report is a per-card table with live labels and a named blocker; a remainder under ui/ is dispatched, never skipped #28773), skills(objectstack-data): teach an object extension's fieldPatches in the Object Extension Model section, once #28565 applies them #28730 (docs(skills): objectstack-data teaches an object extension's fieldPatches — relabel a vendor field without redeclaring it in fields #28795), skills: teach the save notice in the objectstack-data lifecycle rule #28253 (docs(skills): objectstack-data rules/lifecycle.md teaches the save notice #28813), skills(objectstack-platform) + docs: an email-template override names a locale its base ships; a new locale carries nooverrides(#28746 follow-up) #28778 (docs(skills): an email-template override names a locale its base ships; a new locale carries no overrides #28814), docs: write docs/NORTH-STAR.md in English — the English text becomes the governing original #28816 (docs(north-star): write docs/NORTH-STAR.md in English as the governing original #28842), docs(skills): a pair-added email template locale is served on the base's address; another package's added locale stays under its own package (#28802 follow-up) #28829 (docs(skills): a locale added in the.custompair is served on the base's address; a dependent's added locale stays under its own package #28847). Under pm:mailbox migration: close the three per-login mailboxes and open one per seat, after per-seat mailboxes land (#27637 follow-up) #27890 the seat also closed the per-login mailboxes pm:mailbox — os-sales #27357 and pm:mailbox — os-justin #27309.mailbox/os-justin, which the session's destructive-git guard refused; the maintainer was asked.Resume-from:is on the card.Claim:comment and reads owed reviews off the label alone #28763 (runbook SF-1/SF-2), spec+docs(object-extensionfieldPatches): the documented example patches optiontech, whichcrm_account.industrydoes not store, so a copy is refused atos validate#28803 (spec/mdxfieldPatchesexample key), skills(objectstack-data) evals: no eval exercises an object extension, so nothing checks that an author patches a vendor field's display withfieldPatchesinstead of taking it over infields#28804 (no objectstack-data eval for object extensions), skills(objectstack-data): the save notice is undiscoverable — the SKILL.md rule index callsrules/lifecycle.mdretention-only, andreferences/data-hooks.mdhas noctx.noticerow #28819 (objectstack-data SKILL.md index and thectx.noticerow). Allfinding, untriaged.mainmerged in; once the first PR lands, mergemainand the diff is the card's alone. The relay cannot patch a PR body, so the seat's ACCEPT carries the stale-body correction.post-stamped.mjsrefuses a{{WAS:…}}on a card comment's opening line (after the signature); put quoted times in the body.Successor:
/pm-dispatch 接手, read the seat post first, open a seat-keyed mailbox.objectstack-fleet commentedon Nov 2, 2026
domain:skills#2 · os-justin · session_01QSeKYn5CmmdShCJifm6WYj
Seat taken · opening mark · 2026-11-02T23:40Z · GitHub
os-justin(GET /user) · seatdomain:skills#2· on-demand seat (no patrol routine, no mailbox)./pm-dispatchin this session for the repository's security-advisory queue, then ordered, verbatim: 「同意改成对仓库有写权限,立卡派发修复」.SKILL.mdand stage references read at HEAD322cf906(shallow clone; the touch sha is past the clone boundary).advisory_readsender gate (filed next), and the security-advisory work the maintainer hands this session, which stays off the public board by rule.objectstack-fleet commentedon Nov 3, 2026
domain:skills#2 · os-justin · session_01QSeKYn5CmmdShCJifm6WYj
Clock-out brief ·
domain:skillsseat 2 ·os-justin·session_01QSeKYn5CmmdShCJifm6WYj· 2026-11-03T07:39Zadvisory_readsender gate, PR fix(pm): advisory_read holds its sender to target-write, by the maintainer's ruling #29656), pm-dispatch(security): a security#1 seat owns every security finding end to end — intake, the opaque advisory ledger, the no-card fix order, the rule-level review — and security-findings.md names it as the owner #29665 (the security lane and thesecurity#1seat, PR docs(pm-dispatch): the security lane — a security#1 seat owns every security finding; its charter, the Notify: security doorbell and the seat signature #29695), pm-dispatch(security): the security lane charter carries the maintainer's working rules — reviewed escalation, cloud cards, the close-out of every object, advisory intake and reads #29726 (the security charter's working rules, PR docs(pm): the security lane charter carries the maintainer's working rules — reviewed escalation, cloud orders, close-out, intake #29840).check-handover.mjsexited 0.security#1([PM seat] security — 🟢 os-sales #29740).[-][PM seat] domain:skills · seat 2 — ⏳ vacant[/-][+][PM seat] domain:skills · seat 2 — 🟢 os-lizheng[/+]objectstack-fleet commentedon Nov 5, 2026
domain:skills#2 · os-lizheng · session_012MmDsR4AZoJZyzKQcBEESh
Seat taken · opening mark ·
domain:skillsseat 2 ·os-lizheng· 2026-11-05T10:53ZAudit only; the post body is the authority.
/pm-dispatch skills, invoked by the maintainer in this cloud session.huangyiirene(seating marker 6629978430), so this seat leaves seat 1's claims alone. Seats 2 and 3 are both vacant. Seat 2 is the lowest-numbered of them, and the lane's two-seat alternation (execution-duties.md) is defined for it.domain:skillspm:queue/pm:dispatchedcard carries aSeat: domain:skills#2claim; 13 cards were read at 2026-11-05T10:53Z. ④ None of the 10 most recently updated closeddomain:skillscards carries one either.git-history.mjs touchonorigin/main09720e2c):SKILL.mdb0c2209d,references/execution-duties.md82f60ebb,references/seat-lifecycle.mde9ae8ef4,references/lanes/skills.mdad2059f5. All were read this fire.check-harness-current.mjs: CURRENT.fleet-write/dispatch.mjs --route→dispatch.SKILL.md), skills(objectstack-automation): integration-recipes recipe 6 still says a stdio MCP server's credentials ridetransport.env; a static credentialRef now reaches stdio throughtransport.credentialEnv(#29434) #29625, skills(objectstack-platform): the ADR-0146 paragraph lists six types a pair's override is served for; page, app, dataset, doc, book and mapping are served too, and the pair can remove its own override #30229, pm-dispatch/os-dev: the dispatch order's Ruling section must carry the rulings the file surface's own code cites, and a spec prose edit that restates such a ruling is not a fork (#30178 stopped 80 min on a suggested route that reversed A′) #30273 and mailbox-open: a cloud seat must push its own --head branch, and --close never deletes it, so every cloud seating leaves a stray claude/ branch #30350 (p3).