Repository navigation
Description
模式
与 #4932 完全同族,第三个门禁。实现 #4932 时顺手核到的,不在那一单的文件面内,单独记账。
scripts/check-single-authz-resolver.mjs 已经补过 #4916 那一半 —— 每个 SCAN_ROOTS 先解析,死根按名报错:
function collectScanFiles(root = ROOT, roots = SCAN_ROOTS) {
assertRootsResolvable(root, roots);
const out = [];
for (const rel of roots) walk(join(root, rel), out);
return out; // <- 长度从不断言
}缺的是另一半:根解析成功、但走完一个文件都没收到,out 为空 → 检查 (1) 遍历空集合 → 零 error → 绿。目录还在、可读,assertRootsResolvable 满意;语料搬走了(子树迁出 packages/、扩展名换了、walk 的过滤条件收窄)这件事没有任何断言看得见。
它自己的模块头已经把问题写出来了
scripts/check-single-authz-resolver.mjs:23-36 那段:
walk()used to open with … the scan cannot tell you it never ran; only its (unprinted) file count could, and nobody reads a count that is not printed.
那一段接着说,packages/ 整体改名今天之所以会被下游抓到,是因为两个 DELEGATOR 恰好也在同一个根下,并明说这是「luck, not coverage」。补一条扫描数下限就把这份运气换成机制。
为什么是 observation,不是当前缺陷
SCAN_ROOTS = ['packages'],今天有数千个 .ts,实测扫描数远大于零 —— 记录的是可蒸发性,不是已蒸发,和 #4932 正文的定性一致。
修法(与 #4932 落地的形状一致)
collectScanFiles 里按根统计:任一声明的根产出 0 个文件即抛错、按名报红。参 PR(#4932)给 scripts/check-doc-authoring.mjs 的 EmptyRootError —— 下限取「每个声明的根至少 1 个文件」,由本次 walk 现算,不引入需要维护的高水位棘轮;并在 self-test 里钉红/绿两个方向(单根为空 → 红且只点名该根;全空 → 红且报总数 0;恢复 → 绿)。
相关
- 发现型闸门在「什么都没发现」时静默通过:check-doc-authoring 与 check-driver-conformance 缺非空断言 #4932 —— 同族,check-doc-authoring 与 check-driver-conformance 两处已修。
- check-doc-authoring 的 walk 用
catch {}吞掉不存在的 ROOT —— 目录一改名,门禁静默变瞎并继续报绿 #4916 / 三个 check:* 脚本的扫描根消失时返回空数组而不是报错 —— 目录一改名,门禁在零个文件上报绿 #4930 —— 死根按名报错的两次落地,是本条缺的那一半的另一半。 - check:react-declaration-parity 是唯一没接进任何 workflow 的源码审计门禁,且无 MANIFEST 时静默 skip 退出 0 —— 它现在永远不可能红 #4690 —— 「提取失败必须红」的出处。
Activity
claude commentedon Aug 6, 2026
发现分诊轮:判级 = 晋级
pm:queue(域domain:devx保持不变)。过时前提检查:成立。
origin/main@7adc841复核scripts/check-single-authz-resolver.mjs:SCAN_ROOTS = ['packages'](:70)、assertRootsResolvable(:91)已在、collectScanFiles(:128-129)先断言根可解析后out长度从不断言、:143直接for (const abs of collectScanFiles(root))—— 与正文逐字一致,缺口仍在。晋级理由(为什么不持有 —— 这是本轮唯一按「CI 判绿正确性」升级的一条):
check-doc-authoring/check-driver-conformance)已由 发现型闸门在「什么都没发现」时静默通过:check-doc-authoring 与 check-driver-conformance 缺非空断言 #4932 落地关闭(completed) ⇒ 修法形状不需要再设计,照抄EmptyRootError即可,下限由本次 walk 现算,不引入需要维护的高水位棘轮;:23-36)已经把这件事写死:packages/整体改名今天之所以被抓到,靠的是两个 DELEGATOR 恰好在同一根下,原文自称 "luck, not coverage"。把运气换成机制属恢复不变量(restore-invariant),按 step 0 自动入队,不占维护者决策位;派发令建议(照 #4932 的落地体例):
collectScanFiles按根统计,任一声明的根产出 0 个文件即抛错并按名报红;self-test 钉红/绿两个方向(单根为空 → 红且只点名该根;全空 → 红且报总数 0;恢复 → 绿)。查重:三仓搜
check-single-authz-resolver/EmptyRootError/ 空语料闸门,命中 #4932(已闭,同族先例)、#4916 / #4930(死根按名报错,是本条缺的另一半,均已落地)、#4690(「提取失败必须红」的出处);无重复入口。本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
hotlong commentedon Aug 6, 2026
认领:PM 循环第 3 轮(devx 车道)
会话:
session_01BDmDsu2575gDxeMCxXhDE3分支:
claude/issue-5916-authz-resolver-scan-floorWorktree:
objectstack-issue-5916域:
domain:devx文件面:
scripts/check-single-authz-resolver.mjs(越界即停,报告说明)按分诊裁定照 #4932 的
EmptyRootError形状:按根统计,任一声明根产出 0 文件即按名报红;self-test 钉红/绿双向;下限现算不引入棘轮。Generated by Claude Code
hotlong commentedon Aug 6, 2026
验收(devx 车道,会话
session_01BDmDsu2575gDxeMCxXhDE3):ACCEPT → PR #6056,已转 ready 并挂 auto-merge(required 集随平台恢复转绿即自动入队)。交付摘要:
scripts/check-single-authz-resolver.mjs照 发现型闸门在「什么都没发现」时静默通过:check-doc-authoring 与 check-driver-conformance 缺非空断言 #4932EmptyRootError形状补按根下限:任一声明根产出 0 文件即按名报红并带本次总数;下限现算零棘轮;reportEmptyRoots与死根报错分开、指向两种真实成因。packages — 0 files,取代顶罪行。真语料 3053 文件实跑绿,零误报。filterjob 死亡引发的全量拉起,平台故障残波,非本单缺陷。.ts,packages/下 12 个.mts从不被扫描(observation) #6070(walk 只收.ts,12 个.mts/.cts从不进语料 —— 实测休眠、与按根下限结构性正交、亦非被否的高水位棘轮;finding 持有待分诊)。Generated by Claude Code