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
第二处门禁正上方的注释(引 #3668)论证的恰恰是同一条推理的 cancelled 版:cancelled is a run-lifecycle state, not a shard verdict … the old *) fallthrough painted a false red。abandoned 是同类生命周期状态(队列重建丢弃分片),只是当时没被写进白名单。
⇒ 此处 abandoned 的含义是「这个 job 从未运行、已被丢弃」(平台抖动下的逐 job 生命周期态),不是「该条目的 run 已废弃」。把它放绿 = 在一个仍在队、仍在被队列读取的条目上,对零测试执行发布 Test Core: success —— 正是白名单上方两行注释里 #4928 那句 published a green Test Core over zero test runs 要挡的那件事。
与 #3668 的 cancelled 有结构性不对称:cancelled 的 run 已被新 push 取代,没有任何东西依赖它;abandoned 的 job 待在一个仍然活着、仍在把关合并的 run 里。
pnpm check:workflow-status-functions 不覆盖这两处:该脚本头部明确把 needs.*.result / needs.*.conclusion 划在范围外(「Those ARE status reads … This gate is about the silent compression of status into data」)。故本单即便实施也无语料需要同步。
Activity
hotlong commentedon Aug 6, 2026
认领:PM 循环第 4 轮(devx 车道,止血单)
会话:
session_01BDmDsu2575gDxeMCxXhDE3分支:
claude/issue-6082-aggregate-abandoned-whitelistWorktree:
objectstack-issue-6082域:
domain:devx文件面:
.github/workflows/ci.yml(仅两处聚合门禁白名单及其注释;⛔ 不动 #4928 的 filter-skipped 守卫)(越界即停,报告说明)晋级与认领依据(审计,维护者可否决):本单由立卡方显式路由 devx(「本单不自派」+ 60 分钟接手窗,19:14Z 起,本认领在窗内);
finding→pm:queue的晋级按 SKILL step 8 restore-invariant 类执行 —— 门禁自身 #3668 注释已写明不变量(生命周期态非判决、*)兜底会假红),abandoned缺席即不变量破损,且该缺口正实时放大全仓队列停滞(管家第 14/15 轮实测:今日同签名三例 #6010/#6012/#6013,main 15:14Z 起零落地 4h+)。「queue it, dispatch it, report it」条款适用,不占分诊轮周期。修法严格按本单三条验证义务执行,任一不成立则窄放行或回报。Generated by Claude Code
hotlong commentedon Aug 6, 2026
验证义务 1 与 2 双双不成立 —— 按本单义务 3 退回重议,⛔ 未提交任何代码
接手实测(os-dev,
session_01BDmDsu2575gDxeMCxXhDE3,分支claude/issue-6082-aggregate-abandoned-whitelist已建但零改动、无 PR)。本单的修法带了两条前置验证义务,我逐条取证,两条都被实测反证。按本单自陈的义务 3 与派单口径(「⛔ 无法满足义务 2 时不要硬加词表」),此处停手交维护者裁决。一、前提复核:结构面成立,因果面不成立
结构面成立(
origin/main@9e3709a4):.github/workflows/ci.yml:347(test-gate/Verify test shard results)=success|skipped|cancelled).github/workflows/ci.yml:838(dogfood-gate/Verify dogfood shard results)=success|cancelled)ci.yml内abandoned零出现,两处确实落进*)兜底。因果面不成立。本单把
abandoned归因为「合并队列重建把分片整片丢弃」,并据此论证判决 moot。实测两者都不是。二、义务 1 反证:
abandoned出现时,队列条目仍然活着,判决并不 moot实证 run 31120902911(条目
pr-6010-9e3709a4…)逐 job 核过:always()):Dogfood Regression Gate (1/3)完整跑完步骤表(Boot example apps and exercise real user flowssuccess)于 17:02:51Z success;Build Core17:00:03Z success;Temporal Conformance17:00:20Z success。一个被废弃/重建的 run 不会继续把普通 job 派到 runner 上跑完。runner_id全为0、started_at == created_at、steps数组根本不存在 ⇒ 它们从未被派到 runner,执行了零个测试。这是 runner 饥饿下的逐 job 丢弃,不是 run 级解散。Test Core17:32:13Z 判红,31 秒后(17:32:44Z)fix(plugin-auth): /sso/register 门禁改用唯一那把管理员等级尺 (#5942) #6010 被移出队列(见 fix(plugin-auth): /sso/register 门禁改用唯一那把管理员等级尺 (#5942) #6010 的管家评论 fix(plugin-auth): /sso/register 门禁改用唯一那把管理员等级尺 (#5942) #6010 (comment) )。若该组早已解散,条目会在解散那一刻离队,而不是在门禁转红 31 秒后离队。判决是承重的,不是 moot 的。⇒ 此处
abandoned的含义是「这个 job 从未运行、已被丢弃」(平台抖动下的逐 job 生命周期态),不是「该条目的 run 已废弃」。把它放绿 = 在一个仍在队、仍在被队列读取的条目上,对零测试执行发布Test Core: success—— 正是白名单上方两行注释里 #4928 那句published a green Test Core over zero test runs要挡的那件事。与 #3668 的
cancelled有结构性不对称:cancelled的 run 已被新 push 取代,没有任何东西依赖它;abandoned的 job 待在一个仍然活着、仍在把关合并的 run 里。三、义务 2 反证:真实分片失败不支配聚合读数(反例实测)
义务 2 要求复现 #3668 对
cancelled的支配性(run 30271824408:一真败 + 一 cancelled ⇒ 聚合读failure)。对abandoned实测得到相反结果:run 31114735713(条目
pr-6010-f2ee1b7f…,head_shae915a0e9,run 结论failure):Test Core (3/3)(job 92661255470)"conclusion": "failure"runner_id: 1000157579),Set up job于 15:19:06Z 报##[error]Service Unavailable/Failed to resolve action download info.Test Core(job 92664660973)15:25:13Z 读到test matrix aggregate result: abandoned (filter job: success)⇒ 一个结论为
failure的分片在场,needs.test.result仍读abandoned,failure 被聚合读数吞掉了。 支配性对abandoned不成立,与cancelled恰好相反。这条反例的杀伤半径:该 run
failed_jobs: 2 / 14,唯二的红就是那个分片和它的聚合门禁。按 #3622 的设计,分片 context 不是必需检查,必需的只有裸Test Core这一个名字。所以若当时词表里有abandoned,该 run 唯一的必需检查红会翻绿,条目pr-6010-f2ee1b7f…会在 3/3 分片零测试执行的情况下直接落地。四、附带取证结论(供下一位读者省一轮)
abandoned不在needs结果的四个文档化取值(success/failure/cancelled/skipped)之列,是运行器内部 TaskResult 枚举漏出的未文档化值;docs.github.com本环境代理返回 403,拿不到官方定义。所以「加词表」这一步在文档面也没有依据,只能靠对语义的推断 —— 而实测把这个推断证伪了。pnpm check:workflow-status-functions不覆盖这两处:该脚本头部明确把needs.*.result/needs.*.conclusion划在范围外(「Those ARE status reads … This gate is about the silent compression of status into data」)。故本单即便实施也无语料需要同步。filterjob 一旦失败,Test Core / Build Core / Dogfood 会全部 skipped 而分支保护判为通过 —— 隐式 success() 今天已第三次咬人 #4928 的 filter-skipped 守卫全程未触碰。五、给维护者的备选(义务 3)
abandoned+ 存在同条目后续新 run) —— 本单自陈的备选,但实测在观测到的时序里根本不会触发:门禁 17:32:13Z 就要出结论,条目 17:32:44Z 才离队,重建后的新 run 此刻尚不存在 ⇒ 依然判红,解决不了本单要解决的症状;且要给纯 shell、contents: read的门禁加actions: read与 API 调用。abandoned更宽:只要有兄弟分片被 abandoned,聚合读数就可能吞掉任意红分片。让每个分片显式发布「我通过了」的凭据、门禁数够 N 个正面凭据才放行(declared = enforced,数正面而不是「没看到负面」),既消除这个吞噬面,又让「分片没跑」自然判红。量级 M。我的建议:D 即时止血 + C 长期修,明确否决 A;B 仅在维护者想留痕时才做,但它对本单症状无效。
Generated by Claude Code
hotlong commentedon Aug 6, 2026
PM 复核与流转(devx 车道,会话
session_01BDmDsu2575gDxeMCxXhDE3):dev 的 needs_decision 成立,本单转决策箱(摘pm:queue/pm:dispatched→needs-user-decision,认领解除 —— 派发工作已终结,零代码即正确交付)。背景:原修法(两处白名单补
abandoned)带三条验证义务派发,dev 实测证伪了前两条(完整证据见上方 comment 5208599210):abandoned非 moot —— 被丢弃分片 runner_id=0、无 steps(零执行),而队列实时消费该 run 的判决(判红 31 秒后驱逐);放绿 = 对零测试执行发布 success,正是filterjob 一旦失败,Test Core / Build Core / Dogfood 会全部 skipped 而分支保护判为通过 —— 隐式 success() 今天已第三次咬人 #4928 要挡的形状;abandoned,failure 被吞;且按 chore(ci): cut PR wall-clock ~9.5min → ~5-6min — dedupe dogfood, shard it, cache lint's build #3622 分片 context 非必需检查 ⇒ 白名单若含abandoned,该 run 会在带真失败的情况下落地。具体问题:
abandoned假红与其放大的队列驱逐环如何治(义务 3 重议)。可选方案(dev 三轴分析在报告,此处摘要):
abandoned签名进 队列管家 Routine(三仓总管):合并队列健康专责化 —— flaky 签名分诊 / 原样重投 / 新签名拦截 / 跨仓 pin 链停滞观测(座位 Routine 化第二例,维护者 2026-08-06 拍板) #5810 台账按已知环境态自动重投 + 抗抖动 —— 即时止血,且管家已在人工做同一件事(第 14 轮已提请台账升级,与本卡是同一个裁决,建议一并批)。建议:D 即批(= 批准管家的台账提请)+ C 立项长期,否决 A。 三轴:实测痛点是「PR 被驱逐、main 零落地」而非「读数难看」,D 直接命中;A 的语义无任何业务场景需要;C 把 #3622/#4928 两条不变量结构化钉死,是唯一同时保真红与消吞噬的解。「聚合吞真败」这一更宽缺陷按 attach-don't-scatter 留在本单(即 C 的完成范围),不拆孪生单。
Generated by Claude Code
baozhoutao commentedon Aug 7, 2026
裁决落档(维护者 2026-08-07 批准「按建议执行」于 identity PM 会话;执行人
session_01JwwiU9bjhwy2SWj13ho8uv。裁决范围严格限于会话内呈报的三轴建议,未涉其他待裁项)abandoned):⛔ 否决。 依据即本单 dev 的两条实测反例(comment 5208599210):abandoned非 moot(队列实时消费该 run 判决,放绿 = 对零测试执行发布 success,正是filterjob 一旦失败,Test Core / Build Core / Dogfood 会全部 skipped 而分支保护判为通过 —— 隐式 success() 今天已第三次咬人 #4928 挡的形状);真实分片失败不支配聚合读数(run 31114735713:分片 conclusion=failure 在场,聚合仍读abandoned)——加词表会把「吞真败」从潜伏态变成实弹。abandoned聚合假红(run 内零测试失败 + 分片因队列重建/丢弃 cancelled + 聚合读abandoned)自即刻起按已知环境态处置:队列管家对命中该签名的被踢 PR 原样重投,不再逐次拦截待裁。台账批准记录已同步管家锚点 队列管家 Routine(三仓总管):合并队列健康专责化 —— flaky 签名分诊 / 原样重投 / 新签名拦截 / 跨仓 pin 链停滞观测(座位 Routine 化第二例,维护者 2026-08-06 拍板) #5810。needs-user-decision回pm:queue。验收面沿 CI: Dogfood Regression Gate 把 cancelled 当失败 —— 每次连续推送都产生一条假红 #3668 先例:支配性实验 +filterjob 一旦失败,Test Core / Build Core / Dogfood 会全部 skipped 而分支保护判为通过 —— 隐式 success() 今天已第三次咬人 #4928 filter 守卫不回退 + 本单两条反例场景各一条钉。Generated by Claude Code
hotlong commentedon Aug 7, 2026
⛔ 认领(claim,C 实现轮)
session_01BDmDsu2575gDxeMCxXhDE3(devx 车道执行座位 PM;本单 19:2xZ 首轮认领→dev 实测证伪→19:36Z 转决策箱解除认领,现按 02:07Z 维护者裁决重新认领)test-gate/dogfood-gate)改为数逐分片正面凭据(declared = enforced,数「N 个我通过了」而非「没看到失败」),同时修掉「兄弟分片 abandoned 时聚合可吞任意红分片」的更宽缺陷(attach-don't-scatter,留在本单)。⛔ A 已否决不做;D 已批归管家台账,与本单无码面交集。claude/issue-6082-shard-positive-attestation.github/workflows/ci.yml(两个聚合 job + 分片侧凭据发布步骤);⛔ 不动filterjob 一旦失败,Test Core / Build Core / Dogfood 会全部 skipped 而分支保护判为通过 —— 隐式 success() 今天已第三次咬人 #4928 filter-skipped 守卫的语义(验收明文要求不回退)、⛔ 不碰 pr-automation.yml —— 与在飞 Check Changeset 会因为「别人的 PR 合进了 main」而变绿 —— merge ref 里的他人 changeset 被算成本 PR 新增的 #6129(pr-automation 面)、v17 GA 交付物:AI 一键升级客户元数据项目(升级 skill,骑在 D2 conversions 之上) #6111(skills/)不相交。filterjob 一旦失败,Test Core / Build Core / Dogfood 会全部 skipped 而分支保护判为通过 —— 隐式 success() 今天已第三次咬人 #4928 守卫不回退 + 本单两条实测反例场景各钉一条(abandoned 非 moot 场景 / 真败被吞场景)。派 1 名 os-dev(M 量级)。
Generated by Claude Code
ci: add an always-run roll-up job named `CI` so the queue's required …
fix(ci): make the diagnostics-only run-summary upload non-fatal
ci(merge-queue): name a no-runner red as infra:no-runner, with a once…