progmune-runtime 3.7.55 → 3.7.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,67 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.7.57] — 2026-10-04(未发布)
4
+
5
+ ### §51 held-out 验证 + §52-53 决策门禁 + 修冤枉第一刀(Data Mutation 族移除)
6
+
7
+ **§51 held-out 主路径验证**(`REALWORLD_HELD_OUT_V2.md`,commit `71339ca3`):
8
+ immich(115k★ NestJS,此前从未参与诊断)暴露 3.7.55 四刀**未泛化**——153 条
9
+ NESTJS_NO_VALIDATION(immich 用 APP_PIPE 注入形态注册全局校验,刀 1 只学了两种形态);
10
+ **聚合吞掉维度彻底失败**:authentication 0 分 + 174 条违规仍 APPROVED(83)/HIGH——
11
+ 假 BLOCKED 会被人立刻反对,「auth 0 分 + 通过」是静默放行。召回侧首次教科书级
12
+ 位置命中:SSRF 打在 OAuthRepository.getProfilePicture = GHSA-hq46(§50 的
13
+ 「主路径 0 命中」修正为「有 1 次」)。R95/R96/R97 入册。
14
+
15
+ **§52 NestJS 注册事件解析**:APP_PIPE/APP_GUARD 注册事件收集(@Module providers
16
+ 含 spread 多跳回溯 + 数组常量 + 文本兜底)、数组路径别名展开、@Module(configVar)
17
+ 回溯——immich 153 条 → 0,逐条归因到「全局管道 + 入参是已校验 DTO」。
18
+
19
+ **§53 决策门禁**(`DECISION_GATES_V1.md`,首次改动 src 判定逻辑):已观察的安全
20
+ 协议(authentication/authorization/data_integrity)任一低于 50 分 ⇒ decision 封顶
21
+ NEEDS_REVIEW;coverage LOW 且可测 ⇒ 同上;观察度不足 ⇒ confidence 封顶 MEDIUM。
22
+ 修两处「声明与实现分离」(R102):废票注释无人消费、confidence 分子恒真。
23
+ 第一版门禁被自己数据否决后收窄(coverage 缺 protocols.json 恒不可测 ⇒ 仅可测时
24
+ 生效)。实测 9 真实项目:门禁触发 3/9、6 个不触发(有反例,R101)。R101/R102 入册。
25
+
26
+ **修冤枉第一刀:移除 "Data Mutation Without Audit Trail" 规则**。数据依据:
27
+ fp-gold 131/131 全 FP(七仓九片);TS 盲测 gold 795 条 0 条此族;PyGoat 8 条全
28
+ unlabeled 且样本全 FP 形态;84 条 GHSA 无审计轨迹类。根因是**概念性失明**:
29
+ 真实架构里审计在框架/中间件层(ORM 拦截器/触发器/日志系统),函数名判据永远
30
+ 不可能满足。与授权族保留对照(R92):授权族真实世界有 TP(fr 语料 8/9 命中),
31
+ 此族全口径 TP=0。若未来有函数级审计判据(decorator 通道),按「先语料后规则」重提。
32
+
33
+ **效果**:盲测 LOST 423 条**全部**是本族(非本族 LOST=0、ADDED=0,逐条归因);
34
+ fp-gold 131 条 FP 随之消失;docmost 产品告警流 1320 → 992(-328 条全为本族噪声,
35
+ 头部族构成不变、判定 APPROVED(87) 不变);排序器 DEFAULT_RULE_PRIOR 同步删条目。
36
+
37
+ **门**:taintpath 160/0 / webshape 72/0 / fr-007 pre5·post0 + fr-016 pre7·post0 /
38
+ 反向验证:典型样本本族 0 条转红 / batch-scan 119 项目逐条归因如上 / tsc 0 错
39
+
40
+ ## [3.7.56] — 2026-10-02
41
+
42
+ ### 排序告警流进产品(§49.15 方案 b 落地,未发布)
43
+
44
+ **告警排序器产品化**:`alert-ranker.ts` 自 blind-benchmark 迁入 `src/trust/`(评估脚本
45
+ 改 import,对表测试差 0.000 确认同一实现)。`evaluateTrust` 在 IR 提取的同一批
46
+ `functions` 上跑 `detectSafeguardViolations`(batch-scan 同款口径:language 必传、
47
+ params 名/类型、exported 近似 exposed),产出**排序后的 safeguard 告警流**:
48
+
49
+ - `TrustDecision.overall.safeguardAlerts`:`total` + `groups`(推荐形态:按族分组,
50
+ 组间按先验、组内按语义分,防整族沉底)+ `topRanked`(全局平铺,minPerRule=1
51
+ 保底)。族先验来自 fp-gold 标注(DEFAULT_RULE_PRIOR,贝叶斯平滑 α=8),
52
+ `learnPrior` 可重估;排序不删告警(§49.16),输出条数 == 输入条数。
53
+ - **证据流与判定分离**:告警不进 violations、不扣分、不改 decision/score。
54
+ - 终端报告新增 "Ranked Safeguard Alerts" 区块(每族前 3 条 + 先验 + 语义理由)。
55
+
56
+ **实测**:docmost decision APPROVED(87) 不变(分离成立);告警流 1320 条 / 21 族,
57
+ 头部 = Input Validation / Data Integrity(FK) 族,语义理由可解释。
58
+ ⚠ 口径注记:1320 与 §49.17 的 1202 差 +9.8%——recall-probe 用 extractIRWithTypes、
59
+ 产品路径用 extractIR(两个提取器函数集略异);排序器的族先验基于 withTypes 口径
60
+ 的 fp-gold,迁移到产品口径的偏差未量化,如实记录待补核。
61
+
62
+ **测试**:engine 23/23(新增 safeguardAlerts 排序不变量 + 判定分离 2 条)、
63
+ trust 全家 67/67、alert-ranker-check 对表 0.000。
64
+
3
65
  ## [3.7.55] — 2026-09-29
4
66
 
5
67
  ### 主路径(trust 判定)真实项目首测 + NestJS 失明误报修复(§50)