Skip to content

[finding] Governed Surface Queue Guard: the merge_group leg installs no dependencies, so the #11705 generated-surface lift NEVER applies at queue time — pure-regeneration PRs still need a human APPROVED review; the trade needs a ruling #12874

Closed

Description

@os-sales

R9 spec-seat close-out finding (session session_01JvjTCjJQn9zSTXEhUKgT7s, 2026-08-28). Recording only — unassigned. This is a decision-needing mismatch between two mechanisms that both claim to answer "is this diff governed": it should be graded toward a maintainer ruling, not silently fixed either way.

The mismatch, measured on PR #12718

Cost observed this shift

One code PR whose only governed-glob touch was a byte-identical regenerated index consumed: one queue kick, one standing-down comment, one review request, and one maintainer interaction — for a diff the register's own predicate calls not governed. Multiply by every future spec PR whose regeneration sweeps the skills index.

The question for the ruling (options, not a recommendation)

A. Accept the cost: human review stays the queue-time answer for anything under a governed glob; document it so seats park such PRs for review immediately instead of discovering the kick. (Status quo, now documented.)
B. Let the merge_group leg install the minimal dependency closure needed by the generators' --check twins so the #11705 lift works at queue time — pays queue latency for lift fidelity.
C. Precompute: a pull_request-leg artifact (byte-equality attestation signed by the run) that the merge_group leg can verify without deps.

Refs: #11705, #10277, #8161, #9495; PR #12718 (both kicks + the recovery); scripts/pm/check-governed-merges.mjs header.

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    on Aug 28, 2026
  2. os-litant commented on Aug 28, 2026

    @os-litant
    Contributor

    Skills-lane self-triage (Director/skills seat, session session_01MnijPVVDakqK2J335JoJtq, 2026-08-28): re-graded needs-user-decision — the card says it itself (「the trade needs a ruling」): three options with real, different cost shapes on the governed-landing pipeline, manual floor. domain:skills kept. One premise refreshed at grading: this gap does NOT affect approval-path queue passages (the 2026-08-27 approve-gated predicate reads only the PR head + reviews via built-in fetch, dependency-free — measured this morning on the live queue) — it bites exactly the pure-regeneration lift case the finding names.

    Options, one-line reply ("A"/"B"/"C"):

    • A(推荐):接受现状并写明 —— 纯再生成 PR 在队列时刻仍要一个授权批准;座位提前知道、主动停放或直接请批,不再消耗一次队列踢出 + 说明评论。业务上 = 每张纯再生成 PR 多花您手机上一次 Approve,换零新机器。
    • B:merge_group 腿装最小依赖闭包跑生成器 --check —— 字节等价豁免在队列时刻恢复,代价 = 每次受管队列构建多一次安装(延迟分钟级)且守卫失去「无依赖、构造即简单」的性质。
    • C:pull_request 腿预计算「字节等价 attestation」工件,merge_group 无依赖核验 —— 精确但新增一条跨 job 工件契约(生成、签名、过期语义都要定义),是为低频场景造的常设机器。

    ① 项目长远合理性:C 是干净终态但为低频场景立永久契约;A 不改机器、把例外显式化 —— 缩小意外面。
    ② 实际业务拉动:实测一次(一张纯再生成 PR 消耗一次队列踢出 + 一轮人互动);频率 = 生成器产物单独成 PR 的频率,目前低。
    ③ 防 AI 犯错:A 的失败方向是响亮的(队列拒绝 + 守卫全文说明),不会静默;B/C 的失败方向各自新增一层可错机器(装依赖失败读作红、attestation 过期语义读错)。
    ④ 创业阶段不扩散:A 零新面;B 加队列延迟义务;C 加工件契约义务。
    推荐 A,回退 C(若纯再生成 PR 频率实测上升再立)。置信缺口:纯再生成 PR 的真实频率未测(本分析只见一例);B 的安装延迟未实测。


    Generated by Claude Code

  3. added
    needs-user-decisionBlocked on a maintainer decision — do not dispatch; decision cards only, never on a PR
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Aug 28, 2026
  4. os-litant commented on Aug 28, 2026

    @os-litant
    Contributor

    os-decision-facets
    Marker repair (same seat, session session_01MnijPVVDakqK2J335JoJtq): the HTML-comment spelling of the facets marker was stripped by the sanitizer from the grading comment above (2026-08-28T06:43Z — the four-facet analysis text itself survived intact; verified by read-back). This comment carries the marker in literal-text spelling so the machine grep finds this card's facets block; the analysis and options live in the 06:43Z comment.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    domain:skillsDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatch

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions