Skip to content

dispatch-gates cannot see runtime staging dependencies between gate scripts (digest sandbox broke on a staged gate's new import) #13000

Closed

Description

@hotlong

Observation from PR #12997's patch round (2026-08-28), recorded with measurements by the dev on #12881:

scripts/pm/dispatch-gates.mjs cannot see RUNTIME STAGING dependencies between gates — the case where one gate script copies another gate's source into a sandbox tree and executes it. Concrete instance: scripts/objectui-changeset-digest.mjs stages scripts/check-adr-0087-registration.mjs into a fw-gate/ sandbox; a PR that added an import (js-comment-mask.mjs) to the staged gate broke the digest's self-test with ERR_MODULE_NOT_FOUND, and the derivation scored check:objectui-changeset as silent for that diff because that family declares exactly one population (.changeset) and the "edits a gate script" convention-trigger fires only on the edited gate's OWN families, never on the families of gates that stage a copy of it.

CI caught it (the digest self-test failed loudly), so there is no silent hole today — the cost is one avoidable red round per future occurrence. Possible mechanizations, for whoever picks this up: (a) a staging-manifest registry that dispatch-gates reads (each stager declares the gate files it copies), or (b) a convention-trigger that greps stager scripts for the edited gate's filename. Evidence trail: PR #12997 (the miss and the fix, gap note in its body), #12881 (the dev's measured explanation).

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Aug 28, 2026
  2. added
    pm:queueReady for the PM dispatch loop
    domain:devxDomain lane — seat card indexed by label:pm:seat
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Aug 28, 2026
  3. huangyiirene commented on Aug 28, 2026

    @huangyiirene
    Collaborator

    定级:Task · priority:p2 · domain:devx · pm:queue

    分诊席位,session session_01Aujz2zykf5LXt3T98gRsGe。落点 scripts/pm/dispatch-gates.mjs ⇒ 车道表 scripts/(门禁类,SUBJECT 是 CI 质量)⇒ domain:devx。

    priority:p2 —— ⭐ 采信卡自己的诚实定价:「CI caught it (the digest self-test failed loudly), so there is no silent hole today — the cost is one avoidable red round per future occurrence.」 ⛔ 这不是安全缺口,是一次可避免的返工。

    复现 ✅

    scripts/objectui-changeset-digest.mjs:1999   const gateRepo = join(tmp, 'fw-gate');
                                    :229/:403/:439/:1916  引用 check-adr-0087-registration.mjs
    scripts/check-adr-0087-registration.mjs  'js-comment-mask' → 零命中
                                              正对照 'import' → 45   ✅
    

    ⇒ 那个引发 ERR_MODULE_NOT_FOUND 的 import 已不在树上,与卡说的「PR #12997(the miss and the fix)」一致。


    ⭐ 这是本轮第三个同源的 dispatch-gates 推导盲区

    卡 盲区 本轮定级
    #12956 .objectui-sha diff 推导不出任何 pin 关键门 —— 一个门按 job output 过滤(一跳之隔),另一个刻意不过滤 Bug · p1
    #12983 门自己的头注释低估了 self-test 的实树接触面 Task · p2
    #13000(本卡) 门脚本之间的运行时暂存依赖(一个门把另一个门的源码拷进沙盒执行) Task · p2

    ⭐ 三者的根因是同一个:dispatch-gates 的推导模型是**「声明的路径」,而每一个被找到的盲区,都是真实依赖不表现为一条声明路径**的情形 ——

    ⇒ ⚠️ 逐例打补丁会一直找到新的例。 取卡者(无论接三者中的哪一张)应当知道另外两张的存在 —— ⛔ 而不是把自己那一例当孤例修掉。


    ⚠️ 取卡者围栏

    相关

    PR #12997(miss 与 fix,其正文有 gap note)· #12881(dev 的实测解释)· ⭐ #12956(同源盲区,p1)· ⭐ #12983(同源盲区,p2)


    Generated by Claude Code

  4. removed
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    on Aug 31, 2026
  5. claude commented on Aug 31, 2026

    @claude
    Contributor

    Label hygiene — domain:devx execution PM seat (#6023), session session_01Pk26oZ12t5N1hwGW1m1MgC.

    Stripped pm:dispatched from this closed card. 关闭即摘 pm:* — a pm state label on a closed issue asserts something false (pm:dispatched says a dev is working on it; pm:awaiting-maintainer says a manual action is still outstanding), and it makes the card visible to state sweeps that should no longer see it.

    ⛔ Nothing about the card's outcome is changed or re-judged here — domain:*, type and priority are left alone, since routing and grading are not state. This is the round's standing sweep for "closed but still carrying pm:*", not a verdict on this issue.

    ⚠️ Cause, for the record: GitHub's Fixes #n auto-close does not strip labels — measured 8/8 with no exception on this lane today. Cards closed that way need the strip done by hand, and these predate the sweep.


    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:devxDomain lane — seat card indexed by label:pm:seatpriority:p2Medium: important, M3

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions