Maintainer-action: merge PR #19484 (the two objectui landing allow-rule lines, +2 in .claude/settings.json, written by the director seat under your 「19362 你可以直接开发,不派dev」 — Tier S, your read and hand-merge is the review per the charter's PM-writes-code exception) — done when the two entries read on origin/main.
Filed by the domain:spec @ objectui execution seat on the maintainer's direct instruction. Session session_01QVJUngS9FKfuyQ9NFR2Nbn, 2026-09-20T13:3xZ.
⚠️ Direct-routing audit — the authorising instruction, quoted verbatim:
缺少权限这个你立一张skills决策卡。
⇒ that instruction is what authorises an execution seat to route a card into domain:skills and into the decision box; ⛔ routing is ordinarily the triage seat's sole production. priority:* and type are left unset — ⛔ still triage's, ⛔ not claimed here.
Governing text: .claude/skills/pm-dispatch/SKILL.md 〈入队与落地〉 —— 「路径面干净的才转 ready → 入队」 and 「队列是唯一被认可的落地路径,⛔ 永不队列外合并」; plus the red line 「⛔ 永不以任一账号对受管面 PR 提交批准 review,永不合并受管面 PR」.
维护者速读
事情: 章程要求执行席自己把复核通过的非受管面 PR 落地(翻 ready → 入队)。但会话的权限分类器把这两个调用判为 Self-Approval 直接拒掉,连单独翻 ready 也拒。
今天的实际代价: 三张全绿、复核在案、零欠项的 PR(objectui#10077 · #10081 · #10079)卡在 draft 动不了,直到你临场给了一次授权才落地。⛔ 那次授权是会话级的 —— 下一个席位会话开工就会再撞一次同样的墙,而它撞墙的时候你可能不在。
为什么这张卡必须由你裁: 它动的是权限边界,在人工地板上,⛔ 席位无论四棱多同向都不能自裁。
选项: A 把这两个具名端点写进项目允许清单(最小、可审计)· B 明确改章程:席位永不落地,每张绿 PR 都等你点 · C 另设一个非作者身份的落地席位。
推荐 A。
你要做的: 回一个字母 —— A / B / C。
⛔ 先说清楚 A 不碰什么 —— 这是本卡最重要的一句
Self-Approval 这道护栏存在的理由是对的:⛔ 不能让 AI 批准自己的活。 A 不碰这一条:
| 动作 |
A 之后 |
提交批准 review(APPROVED) |
⛔ 仍然禁止,对任一账号 —— 红线不动,GOVERNED_APPROVERS 仍是唯一判据 |
受管面 PR(docs/adr/** · .claude/** · skills/** · AGENTS.md · CLAUDE.md · docs/NORTH-STAR.md) |
⛔ 仍走终局四件套,席位永不落地 |
| >5000 行的改动 |
⛔ 仍换终局四件套 |
| 非受管面、每 check 绿或预期 skip 的 dev PR |
✅ 席位可翻 ready + 挂 auto-merge |
⇒ A 放行的两个动作都不能替代复核:ready_for_review 只是取消 draft,auto_merge 只是「全绿后由合并队列合」。合并队列仍然逐张跑全部门禁,任何一条红它就不合。⇒ A 买到的是「机械动作不必找人」,⛔ 不是「少一道检查」。
四棱
① 实际业务需求 —— 实测,不是假想。 今天本席的三张 PR 在全绿状态下停了约 40 分钟,直到临场授权。整个 PM 循环的吞吐都挂在这一步:席位可以读、可以派、可以复核,唯独不能把复核结果变成落地。⚠️ 而且它不是一次性的:授权是会话级的,每个新席位会话都会重撞,且撞的时候维护者不一定在场。⛔ 「席位自己小心」在这里无解 —— 这不是判断问题,是通道问题。
② 项目长远合理性。 A 是 contract-first 的形状:把允许的两个端点具名声明出来,而不是靠分类器逐次猜意图。B 把一个机械动作永久钉成人工瓶颈 —— 它诚实,但会让「绿 PR 等人点」成为常态,而这恰恰是本项目一直在消灭的形状。C 引入第二个身份与每张 PR 一次跨席交接,零产品价值的协调面,还多一个会腐烂的身份台账。
③ 防 AI 犯错 —— 这一棱是唯一可能推翻 A 的,所以写细。 护栏的真实标的是「AI 批准自己的活」。A 之后这件事依然不可能:批准是 review,仍对任一账号禁止;受管面仍走人批;合并队列仍逐张跑门禁。A 只把「取消 draft」和「全绿后交给队列」两个不含判断的动作放行。⚠️ 反过来说,现状并没有买到防错:它没有拦住任何一次错误的复核判断,只是拦住了正确判断的执行 —— 而副作用是把维护者拉进每一次机械动作,增加了人被当成橡皮章的概率。⇒ 这一棱指向 A。
④ 创业阶段不扩散。 A 是移除一个已实测阻塞所需的最小改动:两个具名端点,⛔ 无新能力面、⛔ 无新标签、⛔ 无新链路。B 与 C 都在增加常设人工或常设协调开销。⇒ 指向 A。
⇒ 四棱同向 A。 ⛔ 但同向不构成代裁资格:权限边界在人工地板上,地板是排除项而非权重,所以这张卡呈给你,⛔ 不自裁。
选项细节
- A — 把两个端点写进允许清单。 范围严格限于
POST /repos/{o}/{r}/pulls/{n}/ccr/ready_for_review 与 PUT|DELETE /repos/{o}/{r}/pulls/{n}/ccr/auto_merge。⛔ 不含 PUT /pulls/{n}/merge(队列外直合,章程已禁)、⛔ 不含任何 review 端点。推荐。
- B — 明确席位永不落地。 章程照改,
SKILL.md 的「路径面干净的才转 ready → 入队」要改写成「交维护者」,并给「已复核就绪却无人落地的孤儿 PR」一个常设读者(半状态巡查已有这一项,但今天没有人消费它)。诚实,但把瓶颈制度化。
- C — 另设非作者身份的落地席位。 结构上消灭 self-approval,但要一个常设第二席、每张 PR 一次交接,以及一份身份台账。⛔ 与「创业阶段不扩散」直接冲突。
一个必须一起处理的副作用(任选哪个都要答)
半状态巡查脚本 scripts/pm/check-half-states.mjs 已经有「已复核就绪却无人落地的孤儿 PR」检测。今天这三张正是那个形状,而没有任何人读到它 —— 因为本仓的巡查锚从未接线(vars.HALF_STATE_ANCHOR_ISSUE 未设,该 step 最近 5 次全 skipped,objectstack 是 2/2 success 的对照)。
⇒ 选 B 尤其致命:B 让「等人落地」成为常态,而现在没有仪器在看这个常态。
查重词:ready_for_review self-approval classifier denied · auto_merge permission PM seat · landing path blocked execution seat · PM cannot enqueue reviewed PR
Generated by Claude Code
Maintainer-action: merge PR #19484 (the two objectui landing allow-rule lines, +2 in
.claude/settings.json, written by the director seat under your 「19362 你可以直接开发,不派dev」 — Tier S, your read and hand-merge is the review per the charter's PM-writes-code exception) — done when the two entries read onorigin/main.Filed by the
domain:spec@ objectui execution seat on the maintainer's direct instruction. Sessionsession_01QVJUngS9FKfuyQ9NFR2Nbn, 2026-09-20T13:3xZ.⇒ that instruction is what authorises an execution seat to route a card into
domain:skillsand into the decision box; ⛔ routing is ordinarily the triage seat's sole production.priority:*andtypeare left unset — ⛔ still triage's, ⛔ not claimed here.Governing text:.claude/skills/pm-dispatch/SKILL.md〈入队与落地〉 —— 「路径面干净的才转 ready → 入队」 and 「队列是唯一被认可的落地路径,⛔ 永不队列外合并」; plus the red line 「⛔ 永不以任一账号对受管面 PR 提交批准 review,永不合并受管面 PR」.维护者速读
事情: 章程要求执行席自己把复核通过的非受管面 PR 落地(翻 ready → 入队)。但会话的权限分类器把这两个调用判为
Self-Approval直接拒掉,连单独翻 ready 也拒。今天的实际代价: 三张全绿、复核在案、零欠项的 PR(objectui#10077 · #10081 · #10079)卡在 draft 动不了,直到你临场给了一次授权才落地。⛔ 那次授权是会话级的 —— 下一个席位会话开工就会再撞一次同样的墙,而它撞墙的时候你可能不在。
为什么这张卡必须由你裁: 它动的是权限边界,在人工地板上,⛔ 席位无论四棱多同向都不能自裁。
选项: A 把这两个具名端点写进项目允许清单(最小、可审计)· B 明确改章程:席位永不落地,每张绿 PR 都等你点 · C 另设一个非作者身份的落地席位。
推荐 A。
你要做的: 回一个字母 —— A / B / C。
⛔ 先说清楚 A 不碰什么 —— 这是本卡最重要的一句
Self-Approval这道护栏存在的理由是对的:⛔ 不能让 AI 批准自己的活。 A 不碰这一条:APPROVED)GOVERNED_APPROVERS仍是唯一判据docs/adr/**·.claude/**·skills/**·AGENTS.md·CLAUDE.md·docs/NORTH-STAR.md)⇒ A 放行的两个动作都不能替代复核:
ready_for_review只是取消 draft,auto_merge只是「全绿后由合并队列合」。合并队列仍然逐张跑全部门禁,任何一条红它就不合。⇒ A 买到的是「机械动作不必找人」,⛔ 不是「少一道检查」。四棱
① 实际业务需求 —— 实测,不是假想。 今天本席的三张 PR 在全绿状态下停了约 40 分钟,直到临场授权。整个 PM 循环的吞吐都挂在这一步:席位可以读、可以派、可以复核,唯独不能把复核结果变成落地。⚠️ 而且它不是一次性的:授权是会话级的,每个新席位会话都会重撞,且撞的时候维护者不一定在场。⛔ 「席位自己小心」在这里无解 —— 这不是判断问题,是通道问题。
② 项目长远合理性。 A 是 contract-first 的形状:把允许的两个端点具名声明出来,而不是靠分类器逐次猜意图。B 把一个机械动作永久钉成人工瓶颈 —— 它诚实,但会让「绿 PR 等人点」成为常态,而这恰恰是本项目一直在消灭的形状。C 引入第二个身份与每张 PR 一次跨席交接,零产品价值的协调面,还多一个会腐烂的身份台账。
③ 防 AI 犯错 —— 这一棱是唯一可能推翻 A 的,所以写细。 护栏的真实标的是「AI 批准自己的活」。A 之后这件事依然不可能:批准是 review,仍对任一账号禁止;受管面仍走人批;合并队列仍逐张跑门禁。A 只把「取消 draft」和「全绿后交给队列」两个不含判断的动作放行。⚠️ 反过来说,现状并没有买到防错:它没有拦住任何一次错误的复核判断,只是拦住了正确判断的执行 —— 而副作用是把维护者拉进每一次机械动作,增加了人被当成橡皮章的概率。⇒ 这一棱指向 A。
④ 创业阶段不扩散。 A 是移除一个已实测阻塞所需的最小改动:两个具名端点,⛔ 无新能力面、⛔ 无新标签、⛔ 无新链路。B 与 C 都在增加常设人工或常设协调开销。⇒ 指向 A。
⇒ 四棱同向 A。 ⛔ 但同向不构成代裁资格:权限边界在人工地板上,地板是排除项而非权重,所以这张卡呈给你,⛔ 不自裁。
选项细节
POST /repos/{o}/{r}/pulls/{n}/ccr/ready_for_review与PUT|DELETE /repos/{o}/{r}/pulls/{n}/ccr/auto_merge。⛔ 不含PUT /pulls/{n}/merge(队列外直合,章程已禁)、⛔ 不含任何 review 端点。推荐。SKILL.md的「路径面干净的才转 ready → 入队」要改写成「交维护者」,并给「已复核就绪却无人落地的孤儿 PR」一个常设读者(半状态巡查已有这一项,但今天没有人消费它)。诚实,但把瓶颈制度化。一个必须一起处理的副作用(任选哪个都要答)
半状态巡查脚本
scripts/pm/check-half-states.mjs已经有「已复核就绪却无人落地的孤儿 PR」检测。今天这三张正是那个形状,而没有任何人读到它 —— 因为本仓的巡查锚从未接线(vars.HALF_STATE_ANCHOR_ISSUE未设,该 step 最近 5 次全 skipped,objectstack 是 2/2 success 的对照)。⇒ 选 B 尤其致命:B 让「等人落地」成为常态,而现在没有仪器在看这个常态。
查重词:
ready_for_review self-approval classifier denied·auto_merge permission PM seat·landing path blocked execution seat·PM cannot enqueue reviewed PRGenerated by Claude Code