You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
pm-dispatch: relay-opened dev PRs are never attached to the seat's session, and the relay landing route has no allow rule, so auto mode decides seat landings call by call #19990
Filing gate: ③ a task the maintainer directed. The maintainer, in the domain:engine#1 seat's session session_01Bvd69VPa6puiNzzPUroDBx (chat), 2026-09-24, verbatim, in order:
「你的pr为什么没有挂在当前session上」
「写一个 skills 卡片,更新技能」
「包括你刚才为什么不能merge,我当前session设置的是auto」
The maintainer names the skills lane. ⛔ Routing labels are triage's, so this card is filed bare. Filed by the domain:engine execution seat 1. ⛔ Not a claim.
Case 1: dev PRs opened through the relay are not attached to the seat's session
What happened. PR #19971, PR #19972 and PR #19979 were opened by os-dev subagents running inside this seat's session. Each went through the relay (pr_create, executed by the fleet-write workflow as objectstack-fleet[bot]), so the session did not create them, and nothing attached them to it. The harness's own "subscribe after you create a PR" step never fires for a relay-created PR. The seat subscribed all three at 14:45Z, only when the maintainer asked, roughly 50–75 minutes after the PRs opened. The PRs had CI runs, two FAIL reviews, patch rounds and re-reviews in between.
Governing text.references/landing-operations.md 〈B〉: 「落地窗口给关键 PR 挂 subscribe_pr_activity,会话型座位专用」 and 「⛔ 不订阅 dev 交报告前的 PR」. The rule exists, but:
it is optional in wording ("关键 PR");
it lives in the landing file, which a seat reads only after ACCEPT;
nothing in the collection step (references/execution-duties.md 〈收集〉) says to subscribe when a report names a PR.
Ask. Make the subscription part of collection: when an os-dev-report (subagent or cloud) names a PR, a session seat subscribes it in the same act and lists it on the seat post; the unsubscribe at MERGED / closed stays as written. State once why it is needed: relay-created PRs are never auto-attached.
Case 2: why the seat could not land under auto mode, then could
A cloud seat's writes go through the relay (references/rest-channel.md, the dispatch route), and scripts/pm/with-fleet.sh has no allow rule. git grep -n 'with-fleet' .claude/settings.json gives 0 hits; control: git grep -n 'label-write' .claude/settings.json gives 2.
Separately, a mode:subagent dev's PR is authored inside the landing session. The classifier can read the seat's own landing of it as self-approval, whichever command spells it. No allow rule settles that by itself.
Ask (the skills seat recommends; a new allow rule stays the maintainer's call):
(a) Give the relay's landing ops a spelling that can be allow-listed narrowly. with-fleet.sh --actions * would admit every op, so a landing-only entry point is one option.
(b) Say where a maintainer's standing authorization to land reviewed PRs is recorded, if seats are to land mode:subagent PRs under auto mode at all; otherwise say that the landing click stays human for those PRs.
(c) One line in the landing text: a classifier denial during landing is stop, surface to the maintainer, and record on the card, ⛔ never routed around. That is what this seat did, from the harness's own instruction, not from the skill.
(d) Timer texts: reading-discipline.md already bars unconditioned imperatives in timers. Consider stating that a timer carries only the re-read and its triggers, never a landing write verb.
Filing-gate answers
Class: ③ (maintainer-directed task).
Acting reader: the domain:skills seat.
Dedupe, MCP issue search in this repo, closed included:
Filing gate: ③ a task the maintainer directed. The maintainer, in the
domain:engine#1seat's sessionsession_01Bvd69VPa6puiNzzPUroDBx(chat), 2026-09-24, verbatim, in order:The maintainer names the skills lane. ⛔ Routing labels are triage's, so this card is filed bare. Filed by the
domain:engineexecution seat 1. ⛔ Not a claim.Case 1: dev PRs opened through the relay are not attached to the seat's session
What happened. PR #19971, PR #19972 and PR #19979 were opened by
os-devsubagents running inside this seat's session. Each went through the relay (pr_create, executed by thefleet-writeworkflow asobjectstack-fleet[bot]), so the session did not create them, and nothing attached them to it. The harness's own "subscribe after you create a PR" step never fires for a relay-created PR. The seat subscribed all three at 14:45Z, only when the maintainer asked, roughly 50–75 minutes after the PRs opened. The PRs had CI runs, two FAIL reviews, patch rounds and re-reviews in between.Governing text.
references/landing-operations.md〈B〉: 「落地窗口给关键 PR 挂subscribe_pr_activity,会话型座位专用」 and 「⛔ 不订阅 dev 交报告前的 PR」. The rule exists, but:references/execution-duties.md〈收集〉) says to subscribe when a report names a PR.Ask. Make the subscription part of collection: when an
os-dev-report(subagent or cloud) names a PR, a session seat subscribes it in the same act and lists it on the seat post; the unsubscribe at MERGED / closed stays as written. State once why it is needed: relay-created PRs are never auto-attached.Case 2: why the seat could not land under auto mode, then could
Readings from this session:
[CI Bypass]. Under ruling 1A (Why three engine-lane landings needed the maintainer this round (a pending release-note correction, a first-time queue-flake signature, a subagent's denied label write): can each become seat-decidable? #19940, 5814546887) the seat edited PR fix(objectql): settle readonlyWhen locks per cycle, so a cycle no longer over-locks the rest of the update #19979's record and correction comment so it could enqueue over the by-design redCheck Changeset. The very next command was denied: a read-backcurlof those two comments.[Self-Approval]. Asend_latertimer whose text said: if every check on PR fix(driver-turso)!: refuse a remote url beside syncUrl, and any replica not on a local file, instead of running on :memory: #19971 / PR fix(driver-sql): the local json backfill lets the codec decide, so JSON nested past SQLite's depth limit is no longer quoted into a string #19972 is green, post the ACCEPT and runpr_ready+automerge_enable. Both PRs were written byos-devsubagents inside the same session.scripts/pm/with-fleet.sh --via dispatch --repo objectstack-ai/objectstack --actions FILE: first withpr_ready+automerge_enablefor PR fix(objectql): settle readonlyWhen locks per cycle, so a cycle no longer over-locks the rest of the update #19979 (14:49Z), then for PR fix(driver-turso)!: refuse a remote url beside syncUrl, and any replica not on a local file, instead of running on :memory: #19971 and PR fix(driver-sql): the local json backfill lets the codec decide, so JSON nested past SQLite's depth limit is no longer quoted into a string #19972 (14:53Z). The session was in auto mode, and all three calls passed. PR fix(driver-sql): the local json backfill lets the codec decide, so JSON nested past SQLite's depth limit is no longer quoted into a string #19972 and PR fix(objectql): settle readonlyWhen locks per cycle, so a cycle no longer over-locks the rest of the update #19979 are in the merge queue; PR fix(driver-turso)!: refuse a remote url beside syncUrl, and any replica not on a local file, instead of running on :memory: #19971 is ready with auto-merge armed.What the tree says.
.claude/settings.jsonallow-lists the direct REST landing calls:curl … /pulls/*/ccr/ready_for_reviewandcurl … /pulls/*/ccr/auto_mergefor three repos, landed by PR chore(claude): allow-list the two landing REST calls in settings.json #19047 for [finding] the committed.claude/settings.jsonallow-lists every REST write the seat makes except the two landing calls (ccr/ready_for_review,ccr/auto_merge) — so landing falls to the non-deterministic auto-mode classifier and seven green PRs waited for a human #19014. It also allowspost-stampedandlabel-write.references/rest-channel.md, thedispatchroute), andscripts/pm/with-fleet.shhas no allow rule.git grep -n 'with-fleet' .claude/settings.jsongives 0 hits; control:git grep -n 'label-write' .claude/settings.jsongives 2..claude/settings.jsonallow-lists every REST write the seat makes except the two landing calls (ccr/ready_for_review,ccr/auto_merge) — so landing falls to the non-deterministic auto-mode classifier and seven green PRs waited for a human #19014 / [finding] the harness auto-mode classifier denies the protocol's landing command non-deterministically — 8 byte-identicalPUT …/ccr/auto_mergefrom one turn: 4 allowed / 4 denied under three reasons; and a hooks landing rotates every seat off shift before it can flip ready #18469 class, on the route that replaced the one those cards fixed.mode:subagentdev's PR is authored inside the landing session. The classifier can read the seat's own landing of it as self-approval, whichever command spells it. No allow rule settles that by itself.Ask (the skills seat recommends; a new allow rule stays the maintainer's call):
with-fleet.sh --actions *would admit every op, so a landing-only entry point is one option.mode:subagentPRs under auto mode at all; otherwise say that the landing click stays human for those PRs.reading-discipline.mdalready bars unconditioned imperatives in timers. Consider stating that a timer carries only the re-read and its triggers, never a landing write verb.Filing-gate answers
domain:skillsseat.closedincluded:PM seat dev PR opened through fleet relay not subscribed to session subscribe_pr_activity→ 1 hit: pm-dispatch: a seated session keeps the charter it loaded — a governed merge to SKILL.md or the seat's lane file is invisible to it until re-seated #17007 (closed, charter reload; unrelated).auto mode classifier denied seat landing self-approval CI bypass ready auto-merge→ 5 hits: [finding] the harness auto-mode classifier denies the protocol's landing command non-deterministically — 8 byte-identicalPUT …/ccr/auto_mergefrom one turn: 4 allowed / 4 denied under three reasons; and a hooks landing rotates every seat off shift before it can flip ready #18469, [finding] the committed.claude/settings.jsonallow-lists every REST write the seat makes except the two landing calls (ccr/ready_for_review,ccr/auto_merge) — so landing falls to the non-deterministic auto-mode classifier and seven green PRs waited for a human #19014, Why three engine-lane landings needed the maintainer this round (a pending release-note correction, a first-time queue-flake signature, a subagent's denied label write): can each become seat-decidable? #19940, rest-channel.md overstates the ccr auto_merge body: the endpoint ignores merge_method (storesmergeeither spelling) and the queue decides the method — the wording invites a forbidden re-arm #18167, [finding] the auto-mode classifier's verdict varies with command chaining, not capability: a bare git push passed seconds after the chained spelling of the same push was refused #11114, all closed. [finding] the committed.claude/settings.jsonallow-lists every REST write the seat makes except the two landing calls (ccr/ready_for_review,ccr/auto_merge) — so landing falls to the non-deterministic auto-mode classifier and seven green PRs waited for a human #19014 and [finding] the harness auto-mode classifier denies the protocol's landing command non-deterministically — 8 byte-identicalPUT …/ccr/auto_mergefrom one turn: 4 allowed / 4 denied under three reasons; and a hooks landing rotates every seat off shift before it can flip ready #18469 are this class on the direct REST channel, fixed by PR chore(claude): allow-list the two landing REST calls in settings.json #19047; Why three engine-lane landings needed the maintainer this round (a pending release-note correction, a first-time queue-flake signature, a subagent's denied label write): can each become seat-decidable? #19940 is the maintainer-directed sibling on why landings needed the maintainer. None covers the relay channel, the self-approval reading, or the missing subscription.Generated by Claude Code