Commit ce2145e
* fix(scripts): check-single-authz-resolver 判据改判「同时查询两张表」+ 真实仓库阳性对照 (#6286)
ADR-0090 D3 把 sys_user_role 改名为 sys_user_position 之后,检查 (1) 的判据
`src.includes('sys_user_role') && src.includes('sys_user_permission_set')`
在全仓命中 0 个文件 —— 门禁结构上无法变红,两条 ALLOW 豁免的是一条永不触发
的启发式。规范解析器自己都不触发自己的启发式。
三处改动:
1. 词表收敛到 GRANT_TABLES 单一出处,判据从「同时提到两个字符串」改为
「同时查询两张表」(表名作为 find/query/select/count/aggregate 调用的引号
实参)。实测:一词替换命中 20 个文件、其中 18 个是噪声(生成的翻译包、
zod schema 注释、常量表、lint Set 字面量、页面元数据、testkit fixture);
查询形状把同一语料收到 2 个,且不靠豁免名单做收窄。
按落点收窄(限 security/)已量证不可取:原始 bug 就在 packages/rest/
src/rest-server.ts,不在任何 security/ 目录下。
2. ALLOW 按新判据重新策展,每条豁免带理由:
- CANONICAL 保留(唯一合法解析器,同时是阳性对照的对象);
- default-permission-sets.ts 移除(新判据不再触及它,实测 0 命中);
- explain-engine.ts 新增(explain 诊断镜像,非 request-context 解析器)。
3. assertCanonicalStillMatches:真实仓库上的阳性对照,每次真实运行都跑 ——
规范解析器必须被检查 (1) 的启发式命中,否则按名变红。这是本次改名能
悄无声息废掉判据的直接原因:此前全部断言都跑在合成 fixture 上,而合成
fixture 与判据同步漂移,永远绿。匹配与上报在代码里分成两步
(queriesAllGrantTables 决定匹配,ALLOW 决定上报),阳性对照才可断言。
self-test 的 fixture body 改为从 GRANT_TABLES 生成,并补上改名的反向证明
(整体改名 / 部分改名 / 解析器移走,三种都必须红且点名)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BDmDsu2575gDxeMCxXhDE3
* docs(scripts): ALLOW 注释归位 —— 移除说明移到 Map 上方,并链到 #6352
原先 default-permission-sets.ts 的「已移除」说明写在 explain-engine 条目的
数组内部,读起来像是在解释 explain-engine 的豁免。移到 ALLOW 的文档块里,
与两条现存豁免分开;explain-engine 的理由补上 #6352 单号,读者能直接找到
那条 parity 风险的观察单。
纯注释改动,判据与 ALLOW 成员未变。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BDmDsu2575gDxeMCxXhDE3
* fix(scripts): 判据的实参窗口排除左括号,嵌套调用不再算作读取调用
`[^)'"`]{0,80}` 排除了右括号却没排除左括号,于是 `find(wrap('sys_user_position'))`
会被判为「read call 读取该表」—— 表名其实是内层调用的实参,不是这次读取的。
与该正则自己注释里的声明(「是这次调用的靠前实参,而非嵌套在其中之物」)不符。
改为 `[^()'"`]{0,80}`。真实语料命中面不变(仍是规范解析器 + explain-engine
两个,门禁真实运行仍绿),这是精度修正而非收窄结果。
self-test 补上 11 条读取调用拼法断言,把召回侧钉死:
- 肯定式(会红):member 调用、helper 调用带前置实参(规范解析器用的正是
tryFind 这种拼法,丢了它阳性对照本身就会塌)、双引号、模板字面量、实参换行;
- 否定式(平凡成立,仅备案):注释、常量表、无引号对象键、Set 字面量、
页面元数据,以及本次修的嵌套调用。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BDmDsu2575gDxeMCxXhDE3
* docs(scripts): 修正实参窗口注释 —— 现在排除的是两个括号,不只右括号
上一提交把 `[^)'"`]` 改成 `[^()'"`]`,注释仍写「不跨越另一个引号或右括号」。
补上左括号并给出具体例子(`find(wrap('sys_user_position'))` 不算读取该表),
让注释与正则一致。纯注释。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BDmDsu2575gDxeMCxXhDE3
---------
Co-authored-by: Claude <noreply@anthropic.com>
1 parent b70e534 commit ce2145e
1 file changed
Lines changed: 406 additions & 33 deletions
0 commit comments