⚠️ 排期权威已让位(2026-09-18 起):实际排期载体为 MoonBit迁移总计划.md §10 S 系列(其后砍 C++ 裁定 2026-09-20 又消解了 U3 C++ 线等批次)。本文保留为 U 批次历史口径与未闭环项索引:U0(J9 埋雷/口径换代)、U1(教学内容防线三批——算法标注 golden 已于 2026-09-14 收官 113 键全 ✅)、U2(19 声明冻结,已由 U2 拍板落定)等已消化项以本文为历史口径;未消化项由总计划承接。冻结终局注记(2026-10-04):
native/Rust 区冻结(tagrust-oracle-freeze)后,U4/U5/U6 等 Rust 侧实施批次不再排期——其等价义务由 MoonBit 活跃区对应包重建时消化(U 批次编号在本文与其余文档的历史叙述中继续可读)。定位(原始):本文是两份计划的合并执行方案,取代两者的批次表,作为后续重构的唯一排期权威: ①
三语化整备审计计划.mdv1.1(S 系列——CS 前就绪度审计、 防线换代、止血批次;已归档,其 §1~§4 审计证据链与 §5.0 裁定为历史留痕); ②重构评估报告20260912.md(独立重构评估—— 分模块评估、风险清单、动态探针实测;已归档,其 §1~§4 证据为历史留痕)。合并原则:三语化计划贡献时序骨架(CS 系列硬门禁逻辑)与防线换代(S0/S1);评估报告贡献 新缺陷集(7 项动态实锤 + 静态复核清单)与逐项验证标准(红→绿纪律)。凡两份计划重叠的批次 合并且不降验收线;凡评估新发现且无批次的,按风险与时序归入对应波次。
两份母文档的裁定合并为一个执行哲学:防线照不到的地方,缺陷以 GB 为单位存在(三语化 §1); 事实大于脑测,全绿 ≠ 覆盖(评估 §0)。因此每个波次的顺序都是:先让防线说真话 → 再动手术 → 手术的验收线由换代后的防线执行。
v1.1 修订(同日):吸收三份外部审查(① typeck/codegen 全量精读 + clang 差分实测; ② vitro_vm/vitro_runtime 全量精读;③ 出口层(capi/session/engine/diagnostics/unified)与 前端六小模块逐行审查——多数发现带 [已复现] 标注)。两处最重的新 P0 经本路线图独立抽验 确认:RAII 假 Double-Free(实测触发 E3061)、小数组循环体 ×
MAX_TRACE_LEN=256截断 (实测a[11]/a[12]在 n=300 双双值栈溢出)。批次内容与优先级已同步(§7 吸收记录); 新增全库模式级结论——保险丝三形态失效(死代码 / 口径错 / 只写不读),防伪绿机制相应 新增"保险丝可触发性义务"(§4)。C ABI 契约止血(三种字符串所有权 / catch_unwind 缺失 / 头文件漂移)自 U6 提前至 U0——下游正在按书面契约消费,按契约释放即 UAF。
0. 统一裁定(v1.1 三层裁定的合并修订)
| 层 | 裁定 | 依据(两份计划合并) |
|---|---|---|
| ① 编译器管线五段 + VM 字节码执行器 opcode 语义核心 | 不重写 | 三语化 §5.0-①(660 shadow 逐字节锚是最硬资产);评估复核支持:逐指令内存安全层质量确实好 |
| ② 资源生命周期域(原"统一模式子系统",范围扩大) | 重构区(补设计,不推倒) | 三语化 §5.0-②(两洞 + 一提交四缺陷 + 复发);评估追加实锤:regions 只增不删(动态实测 14B/次 + O(N²))、output_chunks 无界、trace 无界 × 检查点 50× 克隆、检查点淘汰悬空 Delta——范围从 unified/ 扩至 vitro_vm 累积状态(regions/trace/output)与 capi 出口缓冲 |
| ③ 宿主资源与输入防御域 | 收口范围(扩大) | 三音化 §5.0-③(as 转换/磁盘/留痕);评估追加:负参三处(capi 负 argc abort、serve payload.get panic、int a[]; 接受)、栈溢出三通道(宏展开/数组后缀链/init list)——输入域防御归此层 |
| ④ 静默错值域(新增层) | 独立 P0 治理 | 评估动态实锤:{f(),3} 静默置 0、十进制溢出静默 0、errno 子系统不可达、合法 C++ 误拒;三音化 S1 的"教学内容零防线"(P0-1 概念教反)同属此层——对教学引擎,无诊断的错误输出信任成本最高,无论触发面宽窄一律 P0 |
| 升级判据(合并) | ① 同一子系统 ≥2 次 GB 级资源事故 → 进重构区(三音化,已触发);② 静默错值类缺陷单独立 P0(评估新增);③ 修复必须同类清查(三音化 §4-1 制度化) | —— |
v1.1 补充(三份外部审查后):全库"形式正确但逻辑存疑"的病灶收敛为三类可机检模式—— ① 保险丝失效三形态:死代码(
EXPAND_DEPTH_FUSE只在 depth=0 入口检查)、口径错(宏预算 数 token 不数字节——4KB 源码实测产出 67MB 展开,保险丝不触发)、只写不读(suffix_count从未 比较;步数保险丝曾被set_max_steps硬编码抹掉而从未生效);② 参数语义在调用方与被调方之间 不一致(raiitarget_depth差一 /payload.get负end/ capi 负argc/fseek负偏移不 clamp);③ 多路径语义分叉(JIT wrapping vs 解释器 trap;host memset/memcpy 绕过 UAF 检测; sprintf/snprintf/scanf("%s") 缺 strcpy 已有的容量校验)。防伪绿机制新增对应义务:每一道保险丝、 上限、防护都必须有能触发它的测试(§4)。
1. 波次总览与时序
[Wave 0] U0 观测与口径换代 ────────────┐ (防线先说真话:护栏先行,先证会红再上线)
├─→ CS0 (SourceLang 单源化) ─→ CS1 (前端骨架/ch01-04) ─→ U4 (tag v0.1-cs)
[Wave 1] U1 教学内容防线 + P0 静默错值 ─┘ │
(与 CS0/CS1 并行) ▼
[Wave 2] U2 资源生命周期重构 + U3 槽位手术/C++寄生收口 + U3.5 模板子系统
│ ← 硬门禁:未完成不开 CS2 / CS3
▼
CS2 (class/继承/ARC) ─┬─→ CS3a ─→ CS3b (异常展开) ─→ CS4~CS6
│
[Wave 3] U5 语义单源与三路径收敛(与 CS2/CS3 并行)
▼
[Wave 4] U6 契约收口(随 CS3 交付) + U7 探索性测试常设化与结构债(持续)
| 波次 | 批次 | 来源映射 | 时序 | 规模 |
|---|---|---|---|---|
| Wave 0 | U0 观测与口径换代 + 契约止血 | S0 + S2.5 提前 + 评估 Phase 0 + 红→绿纪律 + 出口层审查(C ABI 三所有权 / catch_unwind / 头文件) | CS0 前(~1-2 周) | 中 |
| Wave 1 | U1 教学内容防线 + P0 静默错值与崩溃收口 | S1 + 评估 Phase 1 + 三份审查新 P0(RAII 差一 / trace 截断 / 宏字节预算 / 深度五通道 / 词法保真 / 常量折叠) | 与 CS0/CS1 并行(~2-3 周) | 大 |
| Wave 2 | U2 资源生命周期重构 | S2-B + 评估 Phase 2(扩容)+ vm/runtime 审查资源项(vis_event / printf 宽度 / 数组快照 / fseek / freed_logs) | CS1 后、CS2 前——硬门禁(~2-3 周) | 大 |
| Wave 2 | U3 槽位手术 + C++ 寄生收口 + 模板子系统 | S2-A + S3 + 评估 C1/C2/T1/T2 + 审查(变参 16 word 溢出 / 容器重复实例化 / 嵌套 struct 覆盖) | 与 U2 同窗——硬门禁(~2-3 周) | 大 |
| Wave 3 | U5 语义单源与三路径收敛 | 评估 Phase 3 | 与 CS2/CS3 并行(~2 周) | 中 |
| Wave 4 | U6 发布节奏与流程契约 | S4(C ABI 契约技术项已提前至 U0) | CS1 交付点起步 | 小 |
| Wave 4 | U7 探索性测试常设化与结构债 | 评估 Phase 5 + S1 property 延伸 + 前端审查低危项(标注对账 / Type 判等 / 孤儿文件) | CS4 起,持续 | 持续 |
时序改动的理由(相对三音化 v1.1 的两处):① S2.5 拆分提前——观测设施(RSS 护栏/事故留痕/磁盘清理) 必须先于它要验证的重构存在,且下游 SharpTutor 正在消费含泄漏洞的
10591ad二进制,止血不能再等 CS2 前夜;② T1/T2 模板缺陷并入 U3——CS2 直接复用类布局注册/单态化路径(三音化 §3-R3), 模板实例化无上限(一行代码 OOM 编译器)与类实例化静默丢弃是 CS2 前置风险,不是"深水区可选"。
2. 批次详表
U0 观测与口径换代(Wave 0,CS0 前)
原则:任何重构动刀之前,验证它的仪器必须在线,且仪器本身被证明会红。
| # | 内容 | 来源 |
|---|---|---|
| 1 | 断言强度审计:① SKIP 全量清点(全 workspace ignore/skip 清单化,逐条删除或登记豁免);② vitro_better 16 例逐例审计(Clang 失败原因归档,能换 gcc 参照的换,不能的降级 known_issue 入册);③ known_issue 三例设处置期限(spfa 修模板;两个 sizeof 差异迁出 known_issue、转入 C语言子集规范 已知差异);④ 弱断言扫描(纯 contains 类升级结构化);⑤ 报告口径三分类分列(完全匹配率与约定通过率分开报) |
S0 |
| 2 | 运行时资源护栏:长跑驱动(replay/shadow/serve 冒烟)加宿主 RSS 峰值监控断言(驱动侧 psutil 独立测量,超限 fail 并回显峰值)。上线前先用已知会泄漏的程序(如远距 seek 压力程序)证明护栏会红 | S2.5-② + 评估 Phase 0(先证会红) |
| 3 | 事故留痕制度:docs/current/07-质量与裁定/INCIDENTS/ 归档模板(现象/峰值/最小复现/根因/修复验证);补录第二次泄漏事故(根因 = engine.rs:268-315 无界收集,零留痕实锤);diag_mem.ps1 转正 scripts/diag_mem.ps1 |
S2.5-④ + 评估 Phase 0 |
| 4 | 磁盘卫生:清除已死 android 交叉 target(2.6GB,实测)+ cargo clean 策略制度化 + CI target 体积预算检查 |
S2.5-③ |
| 5 | as 无防御转换收口(第一批):clippy 加 checked_conversions + cast_possible_wrap 转deny;命中清单化;算术→索引/容量类清零(含已实锤的 capi/mod.rs:160 负 argc、engine.rs:351 裸 as usize、get_payloads 负参 panic——负参三处在此一并修复);其余登记豁免理由 |
S2.5-① + 评估 R9 |
| 6 | 红→绿纪律制度化:CI 规约——每个缺陷修复必须先提交会失败的用例(CI 留痕 FAIL 记录),修复提交引用用例编号;杜绝"修完才写必然通过的测试" | 评估横切 |
| 7 | C ABI 契约止血(自 U6 提前——下游正按书面契约消费,CAPI评审回复与实现状态.md:141 承诺"全部 JSON 为 rust-alloc 所有权",照做即 UAF):① vitro_get_capabilities_json 的 OnceLock 静态指针改独立分配(或改契约并三处文档同步);② capi/mod.rs 其余 22 个入口统一补 catch_unwind(当前只有 first_batch 有,文档承诺全覆盖);③ vitro_capi.h 补齐 19 个缺失声明(实测更正,原记 17;含 vitro_free_string 与整个 *_json 族——头文件只出现在注释里)与三种所有权的书面标注;④ shared/ 三个孤儿文件(func_meta/symbol/type_utils,无 mod 声明从未编译)删除 |
出口层审查 P0-1/P0-2/P2-14 + 裁定 §13.1 实测 |
| 8 | 脚本埋雷验证(防线自身的防线,裁定第五域 D1 / 判据 J9——先于一切批次):实测 7 个"表面正确"实例(serve_smoke 只测 happy path 与 2 个 P0 panic 并存、engineering_health 从未阻塞、shadow_verify 22 例无 oracle 计入通过等——共同结构:通过的语义是"脚本自己没崩"而非"被检查对象正确");每个判定型脚本必须留"注入必然违反 → 必须变红"的实证记录,顺序:serve_smoke(现成雷:seek 越界 / payload.get 负参 panic,本路线图已独立复现 exit 101)→ ci_three_tier_check → shadow_verify;J9:埋雷记录 = 0 的判定型脚本,其"全绿"不得作为任何结论的依据 |
裁定 §13.2/§13.3 W0-1 |
验收标准(补充 D1/J9):三个判定型脚本各有一条"注入→必须红"的留痕记录合入 CI;serve_smoke 补边界/负值/极值样例后对已知 2 个 panic 必须红。
验收标准:人为注入 100MB 级泄漏用例 → 护栏必须红(仪器自检);防线报告新口径上线;SKIP 登记表归档;known_issue ≤ 真实待修数;负参三处的红→绿用例全绿({"start":0,"end":-1} JSON 得到错误响应而非进程死亡;负 argc 得到错误码而非 abort);C ABI 契约测试(对每个 _json 出口按契约 free 一遍——capabilities_json 修复前该测试必须红)。
完成判据:上述全部合并 CI 全绿;第二次泄漏事故归档存在;target 体积回落并在 CI 可见。
U1 教学内容防线 + P0 静默错值与崩溃收口(Wave 1,与 CS0/CS1 并行)
原则:第一批 C# 用例进防线时,防线得是说真话的;引擎教给学生的每一个值都得是对的;学生写对的代码不得被报错。
| # | 内容 | 来源 |
|---|---|---|
| 1 | 教学内容防线(防线 6):① 算法标注 golden——41 模板 + 高频 E2E,每算法 3~5 关键 step 的 semantic_label/description 人审固化,CI 回归(首批目标即审查实锤的误标:二分三分支因判定顺序不可达、right=mid 打印硬编码差一、insert 子串误判插入排序);② 标注-行为一致性 property——随机抽样 step 断言标注与实际效果一致;③ 诊断文案 golden——error_catalog 码→文案片段表进测试 |
S1 + 前端审查 #13 + 裁定 Q7-G1b(靶料三源纪律:教材/OJ 外部先验错误分布 / 真实现场形态扩展 / MisconceptionPattern 兜底,逐模式先红后绿、禁止单源自证,见 §4 合成靶料效力边界) |
| 2 | R1 初始化列表静默置 0(动态实锤 a[0]=0):flatten 兜底改报错,4 字节元素 Identifier 之外全走 gen_expr;char 数组路径同步 |
评估 R1 |
| 3 | 初始化基址槽被嵌套调用覆盖(外部审查已复现:double a[3]={1.0, take(mk(4)), 3.0} → 数组越界假错 / 内存写坏):base_temp 持有期间的嵌套 gen_expr 写 slot0——根治在 U3 槽位手术,本批次先做触发面止血(初始化路径改用专用基址槽) |
typeck/codegen 审查 P0-1 |
| 4 | RAII 析构作用域差一(本路线图抽验实锤 E3061 假 Double-Free):emit_dtors_for_scope_exit 的 start_frame_idx = target_depth.saturating_sub(1) 改为语义对齐调用方(长度 vs 索引),for 的 continue 每轮重复析构 for-init 对象一并修复;形状化回归(break/continue + 外层 RAII) |
typeck/codegen 审查 P0-2 |
| 5 | emit_zero_init → Memset + trace 截断改 Abort(本路线图抽验实锤:for(...){int a[12];...} n=300 值栈溢出——合法教学代码被判错):① codegen 零初始化改 Memset 指令(同文件 :461 已有先例,实测当前 5.00 指令/字节);② jit_trace.rs:90-93 录满 256 条返回 Finish 改 Abort(半截循环体的 trace 编译是栈不平衡根源);③ 边界用例固化(循环体指令数跨 256 阈值两侧) |
typeck/codegen 审查 P0-5 |
| 6 | 宏展开双保险丝修复:① 深度检查移入 expand_inner(死代码复活,评估实锤 5 万层栈溢出,外部审查精测 2MiB 栈 N=2000 崩);② 预算改按累计字节数计费(当前只数 token 个数——#define S(x) x x + 4KB 字面量实测 14 层即 67MB,零诊断;trace 单条长度同步封顶) |
评估 R2 + 前端审查 #1/#2 |
| 7 | R3 数值字面量溢出静默 0(动态实锤):十进制/八进制溢出报 E1006(对齐 hex/bin 口径);顺带词法保真三处(\x 只吃 2 位、08 拆两个 token 零诊断、.5 不识别拒绝合法 C) |
评估 R3 + 前端审查 #12 |
| 8 | 递归深度防护补全(五通道):enter_depth 只挂在 parse_primary/parse_statement 两点——补:抽象声明符递归(含 is_abstract 分支,~150 层即崩)、parse_init_list、parse_assign/parse_ternary 右结合链、一元运算符链、数组后缀链(suffix_count 补上限比较);解析后统一 AST 深度预算(超限报错)——一并封死 typeck 遍历/AST Drop 的左结合长链栈溢出(外部审查实锤 5000 项 a+a+... 崩,且崩在 typeck 非 codegen) |
评估 H2/H3/M4 + 前端审查 #3 + typeck/codegen 审查 P0-4 |
| 9 | 常量折叠溢出改 checked:cond.rs:326/332(/、%)、decl.rs:830/845/846(取负/移位)全部改 checked_*,失败报 E1014/E1020——外部审查在 30 万次随机 token 汤中 10 次命中 panic 家族(debug 崩 / release 静默错值的"构建配置决定语义") |
前端审查 #4 |
| 10 | 回滚收口 ParseCheckpoint:统一快照结构(pos + errors_len + typedef_names + anonymous_structs),替换 5 处 self.pos = checkpoint(外部审查两处独立复现同名 __anon_struct_N 重复进 program.structs;合法复合字面量 (struct {int a;}){7}.a 被误拒 E3002) |
评估 M3 + 前端审查 #6 + typeck/codegen 审查 #7 |
| 11 | 预处理器两处防线修复:① 跨文件条件栈污染——头文件的 #endif 弹掉包含者的 #if(实锤 E1011 报错位置错乱/代码被吞),按 include 边界记账;② include 环检测 fail-open 改 fail-closed(key_for 失败当前直接放行 + 长链静默漏报——20 文件环 0 诊断实锤) |
前端审查 #7/#8 |
| 12 | int a[]; / int a[-5] / int a[0] = {1,2}:编译期报错(评估实锤接受无边界检查;外部审查实锤 a[0]={1,2} 静默变 2 元素;Clang 均拒绝) |
评估 C5/T6 + typeck/codegen 审查 #15 |
| 13 | packed 布局数值差异防线锚:shadow 新用例 sizeof_struct_packed.c(struct { char c; int i; } 等 padding 敏感形状——Vitro packed 5 / Clang 自然 8)预期 output_gap → known_issue 登记 + C语言子集规范.md §2.10 差异表指向(与 U0#1③ 的 sizeof×2 处置同构:"已记录差异非待修");原则一般化:与 Clang 的数值类差异零 golden 覆盖即防线失效 |
复刻评审 M14(2026-09-15 复核实锤:存量唯一 superficial 覆盖 sizeof_struct_union.c 为单 int 成员,对分歧零敏感;见 §7A) |
验收标准:int a[2]={f(),3} 断言 a[0]==7 或明确诊断(不得静默 0);RAII 探针(break + 外层对象)断言与 clang 输出逐行一致且无 E3060/E3061;for(...){int a[12];} × 300 断言输出 43500 类正确值而非值栈溢出;10 万层宏嵌套断言 E1017;S(S(...)) 字节放大用例断言保险丝触发(当前 67MB 无诊断);5000 项左结合链断言深度诊断而非崩溃;_Static_assert(1<<1000) 断言报错且 debug/release 同语义;"趟数教反"级缺陷在 CI 可见。
完成判据:≥25 个红→绿用例入 CI(每例有 U0 制度要求的先红留痕);全防线(含 U0 新口径)复跑零回归。
U2 资源生命周期重构(Wave 2,CS1 后 CS2 前——硬门禁)
原则:这是泄漏复发洞所在的重构区(裁定 ②)。窗口与缓存的生命周期从未被设计过——本批次补设计,不推倒状态机/快照语义。
| # | 内容 | 来源 |
|---|---|---|
| 1 | seek 重放循环内窗口化:循环内按 frame_cache_window_size 滚动截断(复用 trim_frame_cache 语义)——泄漏复发洞(engine.rs:268-315 静态亲读实锤)的根治 |
S2-B④ |
| 2 | regions 登记表重构:free 后条目永存(实测 14B/次无界 + malloc/free 扫描 O(N²) 实测 8.94s/10万次)→ 紧凑结构(已释放条目归并 freelist 摘要 + 上限 + O(1)/O(log N) 索引);隔离区(UAF 检测窗口)语义不得破坏——见 堆有界隔离决议.md,重构前先写隔离语义的差分保护用例 |
评估 R4(新增) |
| 3 | output_chunks 有界化:环形缓冲 + vitro_get_output_length O(1)(增量缓存长度,废除全量拼接);putchar 逐字符 String 分配合并 |
评估 R11(新增) |
| 4 | trace 有界化 + 检查点克隆消除:trace 环形上限;检查点快照对 output/trace 改 Arc 共享或差量引用(消除 50× 克隆放大,snapshot.rs:117-118) | 评估(新增)+ S2-B⑤ |
| 5 | 检查点淘汰悬空 Delta 修复:snapshot.rs:246-255 分支改为注释意图(删 Full 时级联删后续 Delta 直到下一个 Full)——seek 静默错内存(无报错的最坏调试器缺陷) | 评估 R8(新增) |
| 6 | 检查点快照内存预算实测归档:20 × VMSnapshot 全量 1MB 内存的宿主 RSS 实测 | S2-B⑤ |
| 7 | run_batch 每帧双份 clone(frame_cache.extend(payloads.clone()))消除;早退丢帧修复(max_steps 超限时先 extend 再返回 Err——当前已执行步的 payload 永久丢失且 max_collected_step 与 VM 脱节) |
评估 §2.3 + 出口层审查 P1-8 |
| 8 | vis_event_queue 非 unified 出口只进不出:vitro_run/serve/cli 全程不 drain,算法模板命中行在循环内每次 push 一条(10M 步上限 → 数百 MB~GB 常驻);统一模式的 drain 掩盖了该缺陷——非统一出口补 drain 或有界环形 |
vm/runtime 审查 P0-2 + 出口层审查 P1-6 |
| 9 | printf 族宽度/精度容量上限:apply_width 的 repeat(pad_len) 对用户可控宽度无裁剪——printf("%999999999d",1) 单次 ~1GB 分配(含 sprintf/snprintf/fprintf 同路径);clamp 到输出预算并超限报错 |
vm/runtime 审查 P0-1 |
| 10 | 数组快照容量 clamp:Vec::with_capacity(array_size) 按声明长度预分配且逐元素 String 化——int a[50000] + unified 窗口 2000 帧 ≈ 5~20GB;clamp 到 min(声明长度, 可寻址上界) 且 payload 级截断(MAX_SHOWN 只作用于摘要不作用于 payload 的误导一并修正) |
vm/runtime 审查 P0-4 + 出口层审查 P1-9 |
| 11 | seek 重放循环补 max_steps 约束(当前循环内只有 is_cancelled,无步数判断——对比 run_batch 有);快照字段补全(stdin_eof 粘滞位/输入游标/heatmap 不回滚 → 时间旅行回到过去后行为与当时不一致,回放确定性破坏) |
出口层审查 P0-5 + vm/runtime 审查 P1-11 |
| 12 | step_next/seek 的 take-后-panic 永久丢 VM:补 execute_run 同款 catch_unwind + 归还(当前 panic 一次 → session.vm == None → 后续 step.next 一律"未初始化"的静默降级) |
出口层审查 P1-7 |
| 13 | libc/边界修复批:fseek 负偏移 clamp(二进制模式当前 debug panic / release 回绕写任意地址);bsearch key 边界检查(当前切片 panic);host_strerror 补 region 登记(当前泄漏报告漏计 + free 误报 E3027);freed_logs 部分重叠整条删除改精确裁剪(UAF 检测假阴性);register_function resize 加上限;call_user_function 的 assert! 改教学诊断 |
vm/runtime 审查 P1-2/3/4/5/13/8 |
验收标准:10 万步级长程序远距 seek 压力用例——宿主 RSS 有界(这是泄漏复发的回归用例;斜率预算 ≤64B/步,实测基线 1.2~2.3KB/步超标 19~36×,见裁定 §Q3-E6);malloc/free churn 压力——规模以显式 set_max_steps 提高步数预算后的最大可行点为准(原"100 万次"经验证 400k 即撞默认 10M 步上限、判据不可执行,裁定 §13.4),判据 = regions 条目数直接采样(Q7-G6 已关闭(2026-09-14,裁定 §5a 分段饱和定论:条目在隔离预算 256KB 处饱和恒 16387、时间分段 O(N²)→O(N);U2#2 重构方向据此收缩为 addr 索引化——消除每次操作 ~16k 条线性扫描,"归并 freelist 摘要"收益有限撤销)+ 驱动侧 RSS 双口径;>50 检查点 + 回退 seek 语义正确性用例(与不淘汰的参考实现对照);隔离区 UAF 检测差分用例全绿(重构不破坏安全检测);printf("%999999999d") 断言报错而非 GB 分配;非 unified 出口跑算法模板循环程序断言 RSS 有界;大数组 + unified 断言 payload 级截断生效;seek 回退到 EOF 前后 getchar 行为一致性用例;seek 越过程序末尾(如 10 步程序 seek(50000))返回错误帧而非 panic(裁定 R-2026-09-01/02,本路线图独立复现实锤:exit 101、engine.rs:400 split index > len)。
完成判据:压力用例全绿 + U0 护栏峰值回显在预算内;660 shadow + 全量 cargo test + 61 回放复跑零回归。
U3 槽位系统手术 + C++ 寄生收口 + 模板子系统(Wave 2,与 U2 同窗——硬门禁)
原则:CS2 直接复用 C++ 高速铺路区(类布局/this 注入/单态化/raii 插桩)。这些路径上的存量缺陷与槽位病灶必须在 CS2 开工前根除,否则 C# 的 8~12k 行新代码以三倍密度复刻渗出(三音化 §3-R2/R3/R7)。
| # | 内容 | 来源 |
|---|---|---|
| 1 | temp_slot 手术:固定 4 槽 → 作用域化分配器(bump + 释放 + debug 断言不重复占用)——一次性根除 3 起同类 bug 病灶 | S2-A① |
| 2 | 变参与初始化槽位迁移:变参 double/long long 8 字节跨槽写(call.rs:178-182)与初始化基址槽跨嵌套存活(var_decl.rs:393/542)迁移至 get_temp_slot_64/专用基址槽——与 #1 同一台手术完成 |
评估 C1/C2 并入 S2-A |
| 3 | next_local_offset 作用域回收 + 深嵌套表达式压力用例固化 |
S2-A②③ |
| 4 | T1 模板实例化上限:实例化循环加深度/总数上限(对齐 clang -ftemplate-depth=1024)+ 超限诊断——template<class T> int f(T t){return f(&t);} 当前一行代码 OOM 编译器 |
评估 T1(归入 C++ 寄生收口) |
| 5 | T2 类实例化 drain 修复:pending_class_instantiations 改循环 drain 与函数实例化同收敛(当前 Pass 3.5/3.6/4 期间静默丢弃,动态实锤合法 C++ 被误拒 E3042) |
评估 T2(同上) |
| 6 | C++ 寄生收口:2026-09-06 报告 §0 追踪表销项(E-P1-1/2 指向已删文件,逐条裁定消亡/迁移);mangled name 单源审计(D1 已做 method_mangled_name,清剩余散写);同报告 §7.1/7.2/7.3/7.5 Rust 侧建议逐条销项或显式延期 | S3 |
| 7 | 变参实参区溢出:预留固定 64 字节(16 words),>16 words 的变参调用静默覆写被调函数局部变量(8 个 double 即到顶)——改动态预留或超限诊断 | vm/runtime 审查 P0-3 |
| 8 | 内置容器重复实例化:快路径先返回后查重 → 第二个 vitro_vec<Foo> 报 E3002 假错误(合法代码被拒,外部审查实锤);查重前置 |
typeck/codegen 审查 P1-8 |
| 9 | 嵌套 struct 无查重插入:cpp_class_layout.rs:250 直接 insert 覆盖同名全局 struct(合法代码报 E3042 假错误 + 后续解析静默指向错误布局);嵌套 union 塞 structs(sum≠max)一并修 |
typeck/codegen 审查 P1-11 |
验收标准:既有 3 起槽位 bug 复现用例 + 新增槽位压力用例(深嵌套表达式 + 变参 + 结构体混合,debug 断言零冲突)全绿;f(&t) 自递归模板在 1024 层内确定性报错(不得 OOM,行为与 clang 实测对照——同一输入两侧都报错);嵌套类探针(Box<U> in 函数模板体)输出 12(clang 对齐);CS2 复用路径(类布局/this 注入/raii.rs/容器加载器)专项审查报告归档。
完成判据:C++ E2E(59 用例)+ C++ shadow(100 用例)零回归;追踪表零悬置条目。
U5 语义单源与三路径收敛(Wave 3,与 CS2/CS3 并行)
原则:同一 C 语义在解释器 opcode / host libc / JIT 模板三条路径上形式各自正确、合起来不可证明等价——收敛到单一语义源,差异必须显式进 spec。
| # | 内容 | 来源 |
|---|---|---|
| 1 | 三路径语义收敛:溢出行为统一(JIT wrapping vs 解释器教学 trap——择一,写进 C语言子集规范 与 clang 差异表);host memset/memcpy/memmove 接入 check_uaf(当前绕过 UAF 检测);JIT 化区间断点保留策略(当前热循环断点静默失效) | 评估 P2(新增) |
| 2 | set_errno 修复 + errno 子系统激活:加 GLOBAL_START(utils.rs:443);errno.h 存根;strtol/strtod errno 用例(当前 errno 子系统疑似整体不可达——动态探针) |
评估 R10(新增) |
| 3 | libc 边界修复:VFS append 死分支(追加写静默丢失);qsort 比较器超时改 trap(当前静默当 Ordering::Equal → 排序错误);strncpy/memcpy 负 n 改 trap(当前变"写满剩余内存");sprintf/sscanf 补容量与参数检查 | 评估 P2(新增) |
| 4 | 尺寸链全 checked:ast/codegen 统一 checked_mul + 超限编译期错误(int a[50000][50000] 当前 debug panic/release 负尺寸倒退帧布局);多维不定长数组 array_size 修正(char t[][4] 第二行不初始化) |
评估 C4/T3(新增) |
| 5 | 差异口径统一(sizeof/alignof)+ Layer A 残余裁定:sizeof/offsetof 按 packed 而 _Alignof 按自然对齐——同一引擎两口径并存且互不引用;统一取向或差异显式进 C语言子集规范.md 差异表(二选一,禁止无记载并存)。同批裁定 Layer A 残余两员(OpCode::Memcpy/Strlen:有 VM 实现与单测、codegen 零发射的"无生产者实现")——保留须锚定"字节码产物可用"语义并记录,否则删除 |
复刻评审 M2 + M11 残余(2026-09-15 复核:Memset 已被 U1#5 接入,仅剩两员;见 §7A) |
验收标准:三路径差分矩阵(同一 UAF/溢出/边界程序在 opcode/host/JIT 三种执行下断言同构结果)全绿——矩阵路径维度显式枚举,缺测单元 = CI 黄牌;errno 用例(strtol 溢出后 errno==ERANGE);巨数组编译期报错用例。 完成判据:差分矩阵全绿;C语言子集规范 差异表更新;shadow 复跑零非预期差异。
U6 发布节奏与流程契约(Wave 4,CS1 交付点起步)
C ABI 契约技术项(三所有权统一 / catch_unwind / 头文件补齐)已提前至 U0 #7——下游按书面契约消费即 UAF,不能再等。
| # | 内容 | 来源 |
|---|---|---|
| 1 | 发布节奏:每 CS 批次交付 = git tag + CHANGELOG 摘要 + ABI 版本确认 + 迁移说明;下游按 tag 升级不按提交追(SharpTutor 当前锚定 10591ad 已漂移 4 提交) |
S4① |
| 2 | 对接纪律成文:能力断言一律走机器出口(capabilities/error_catalog/contracts),禁止以文档为集成依据;需求分类 SLA(bug 立即/能力缺口排批次/契约澄清回执) | S4②③ |
| 3 | 同类清查义务入流程:任何缺陷修复必须在同一语义族内主动清查(修 scanf EOF → 审 getchar/fgets/sscanf 全家族;修一个 temp_slot 冲突 → 审全部占用点)——批次 F 正面先例制度化 | S4④ + 三语化 §4-1 |
| 4 | 出口稳健性尾批:release 显式 panic=abort 声明;completion context.rs 的 UTF-8 切片修复(复用 auto_fix.rs 的 safe_byte_col——pub API 定时炸弹);serve 侧 capabilities 缓存与 capi OnceLock 口径对齐;unified 会话状态所有权评估(M8 结构残余:unified 专属状态收进 UnifiedEngine、Session 只持 Option——症状已修 e3f3525,本项为生命周期所有权设计收口);wasm 三护栏(M12)——panic 护栏(实现路径:catch_unwind 跨 wasm/JS 边界不可用,走 panic hook + 出口层结构化错误返回,不得一崩即 abort)、不可用能力显式报错(自定义 include 因 std::fs 不可用当前静默失效 → 必须报错而非静默丢功能)、确定性模式下墙钟 API 走伪时钟(time() 破坏重放确定性) |
出口层审查 P1-10/P1-12 + 复刻评审 M8 残余/M12(见 §7A) |
验收标准:第一个 tag(CS1 交付即打);响应流程文档化;C ABI 契约测试入防线(误 free 场景、二次调用悬垂窗口的文档化断言)。
U7 探索性测试常设化与结构债(Wave 4,CS4 起持续)
原则(用户核心原则 #2 的落地):不能只针对已确认问题补测——它们均可复现;须以随机与探索性测试主动暴露未知失败模式。
| # | 内容 | 来源 |
|---|---|---|
| 1 | 随机差分测试常设化:随机 C 程序生成器(教学子集文法约束)× clang golden × 三执行路径(opcode/host/JIT),夜间轨道 | 评估 Phase 5(新增) |
| 2 | 资源长跑:统一模式 10 万步 + 随机 seek 序列 + 随机 malloc/free 序列 + U0 RSS 护栏,夜间轨道 | 评估 Phase 5 + S1-② 延伸 |
| 3 | 恶意输入 fuzz 扩容:模板深度/巨数组/深嵌套宏/负参类输入进 Fuzz A~E 随机矩阵(不只是固定用例) | 评估 Phase 4 验收延伸 |
| 4 | 结构债:编译管线双轨合并(~350 行×2 复制);补全增量缓存(源码哈希 + 失效标记 + 只增不减修复);compute_type_size 布局缓存;深递归迭代化评估(AST Drop/解析/typeck 深度保险丝 >10 万层报错不崩溃) | 评估 Phase 5(新增) |
| 5 | 埋雷验证常规化(2026-09-12 首次实测后升格):每批次抽 3~5 个突变(VM 算术 / typeck 重载 / 字符串边界三层轮换)注入→防线必须红→还原,检出率入批次验收;季度全量清点。裕度监控:对关键 opcode 语义统计能拦截它的用例数,margin < 3 登记为防线债(首例:unsigned 取模裕度=1、UMod 除零裕度=0,见 工作记录20260912_突变测试.md)。性能前提:实测单轮 280s(6 突变 ×(release build + 全量 shadow + cargo test)),须先内部并行(--jobs 16、只跑受影响套件)再常规化,否则每批次固定付 4.7 分钟(裁定 §13.4) |
评估横切 + 突变实测(3/3 检出,M3 裕度=1) |
| 6 | 随机 token 汤常设化:前端审查的 30 万次随机 token 输入纳入夜间轨道(历史上唯一命中的 panic 家族是常量折叠溢出——U1 #9 修复后作为回归存在) | 前端审查方法沉淀 |
| 7 | 前端低危收口批:vitro_algorithm_steps 的 math.rs 取模改用执行前快照;Type::PartialEq 对 Typeof 非自反却 impl Eq 修复 + Display 补 unsigned/const(当前诊断里 int 与 unsigned int 逐字相同);error_catalog ~36 个零引用变体清理 + E4105/E4106 接线裁定;vitro_cpp_frontend JSON 解析改 fail-fast + size 与字段累加交叉校验 + 生成脚本路径修正(当前指向 crate 化前老路径,无 drift 门禁) |
前端审查 #9/#14/#15/#21/#22 |
验收标准:随机差分连续 7 晚零未知差异(或差异全部归档为已知);补全大文件响应 <50ms。 完成判据:夜间轨道稳定运行两周;新发现缺陷全部按 U0 留痕制度归档。
3. 共同验收线(所有 U 批次生效,合并三语化 §5.3 与评估横切)
cargo test --workspace全绿 + SKIP 登记表零未登记项(U0 后);- clippy 零警告 +
checked_conversions/cast_possible_wrap索引/容量类零命中(U0 后); - C/C++ Shadow 0 非预期差异(报告三分类分列口径,U0 后);
- 产物新鲜度门禁通过(
18228f5起); - serve 冒烟 + wasm 冒烟;
- 算法标注 golden 回归全绿(U1 后);
- 长跑驱动宿主 RSS 峰值回显且在预算内(U0 后——防"防线自己泡在泄漏里跑绿");
- 红→绿留痕可审计:每个缺陷修复对应一个先红后绿的用例编号(U0 后);
- 压力用例规模 realism:步数/分配数 ≥ 真实教学语料上界,禁止缩水(U2 后);
- 差分矩阵路径显式枚举:opcode/host/JIT 三路径 × libc 语义,缺测 = 黄牌(U5 后);
- 保险丝触发测试全覆盖:每一道保险丝/上限/防护至少一个能触发它的用例(U1 后——宏深度/字节预算、AST 深度、trace 截断、输出上限、RSS 护栏……新增保险丝时先证它会红)。
4. 防伪绿机制(两份计划合并后的完整制度)
| 机制 | 内容 | 来源 |
|---|---|---|
| 红→绿纪律 | 修缺陷先写会失败的用例,CI 留痕 FAIL 记录,修复提交引用用例编号 | 评估 |
| 独立测量 | RSS/峰值由驱动侧(psutil)测,不信被测代码自报 | 评估 + S2.5 |
| 规模 realism | 压力用例必须 ≥ 真实语料上界("几十步小程序永远到不了泄漏量级"的教训) | 三音化 §2-M9 |
| 合成靶料效力边界 | 合成学生错误语料(裁定 Q7-G1b)只作防线 6 靶料,不得替代真实失败分布证据:来源必须三源混合(教材/OJ 外部先验错误分布 / 真实现场形态扩展 / MisconceptionPattern 兜底),禁止以引擎自产模式单源自证(循环论证——2 条真实现场 4 个问题仅 1 个被现有链路接住,真实形态已证明超出当前模式空间);"合成覆盖率"与"真实命中率"报告分列,逐模式先红后绿(套 J9) | 裁定 §9 G1 改判(2026-09-13) |
| golden 单源 | stdout golden 只来自 clang;资源场景参照独立参考实现 | 既有纪律 + 评估 |
| 差分矩阵 | 三路径 × 语义族矩阵显式枚举,防某路径悄悄不跑 | 评估 |
| 埋雷验证 | 季度性故意重引入历史缺陷,验证防线会红 | 评估 |
| 事故留痕 | 任何 GB 级资源事故必须按模板归档 | S2.5-④ |
| 同类清查义务 | 修复必须在同语义族内主动清查 | 三音化 §4-1 |
| 机器出口对接 | 能力断言走 capabilities/error_catalog,禁止文档级集成 | 三音化 §4-2 |
| 口径分列 | match/vitro_better/known_issue 分列展示,"约定通过"不得混入"完全匹配" | S0 |
| 保险丝可触发性义务 | 每一道保险丝、上限、防护必须有能触发它的测试;新增保险丝先证会红再上线。依据:三形态失效实锤(死代码:EXPAND_DEPTH_FUSE;口径错:宏预算数 token 不数字节;只写不读:suffix_count、步数保险丝曾被硬编码抹掉) | v1.1 新增 |
| J9 脚本可触发性(防线自身的防线) | 判定型脚本的埋雷记录 = 0 时,其"全绿"不得作为任何结论的依据;优先级 shadow_verify > ci_three_tier_check > serve_smoke(已证实空转——只测 happy path 与 2 个 P0 panic 并存)。依据:裁定 §13.2 实测 7 个"表面正确"实例,共同结构 = 通过的语义是"脚本自己没崩"而非"被检查对象正确" |
v1.2 新增(第五域 D1) |
5. 与 CS 系列的硬门禁声明(需同步进 CSharp前端引入计划.md §7)
- CS0 前:U0 完成(防线口径换代 + 护栏在线)——第一批 C# 用例进防线时,防线得是说真话的;
- CS1 前:U1 完成(教学内容防线 + P0 静默错值收口)——ch01-04 验收面的标注与语义必须正确;
- CS2/CS3 前(双重硬门禁):U2 + U3 完成——理由合并自三音化 §3-R2/R3/R7 与评估 T1/T2/C1/C2:
① ARC 插桩密度 × 槽位泄漏共振(
next_local_offset只增不减在 C# 下泄漏更快);② CS2 复用的 C++ 单态化路径上有一行代码 OOM 编译器的模板漏洞与类实例化静默丢弃;③ CS3b 异常展开(UNWINDING 状态机 + handler 栈 + 展开中间态快照)直接踩在两次泄漏的统一模式子系统上,C# 上线后 seek 频率与步数规模(13 章 521 文件语料)会放大一切无界路径。
6. 明确不做(合并两份计划,维持)
- 编译器管线五段 / VM opcode 语义核心重写(裁定 ①;重写 = 重新欠一遍行为债);
- 防线推倒重来(行为等价骨架是对的,换口径与覆盖;防线 6 是新增);
- known_issue 机制废除(诚实的记录机制,只加处置路径);
- 统一模式子系统的状态机/快照/checkpoint 语义推倒(U2 只补资源生命周期设计);
- 下游"上游包办"(SharpTutor 侧义务不变,上游只补发布节奏与对接纪律)。
7. 三份外部审查吸收记录(v1.1,2026-09-12)
输入:① typeck/codegen 全量精读 + clang 差分实测(15 项,多数 [已复现]);② vitro_vm/vitro_runtime 全量精读(P0×7 + P1×13 + P2×14);③ 出口层(capi/session/session_api/engine/diagnostics/unified)
- 前端六小模块(lexer/parser/ast/shared/cpp_frontend/algorithm_steps)逐行审查(P0×5 + P1×12 + 低危若干)。
本路线图独立抽验(2/2 确认):
| 抽验项 | 报告结论 | 抽验结果 |
|---|---|---|
| RAII break/continue 析构差一 | 假 UAF E3060 | 确认且更重:实测触发 E3061 假 Double-Free(提前析构 → 真析构二次 free),合法代码被报内存安全错误 |
MAX_TRACE_LEN=256 截断 |
a[12]×300 TRAP、a[11] OK |
确认且边界更宽:实测 a[11]/a[12] × 300 双双值栈溢出——阈值随循环体组成移动,常见教学形状普遍踩中 |
对账结论(与评估报告的关系):
| 关系 | 条目 |
|---|---|
| 确认(评估发现获独立复现) | seek 重放无界(+ 新增:循环无 max_steps 约束)、regions 只增不删 + O(N²)、output_chunks 无界、检查点淘汰悬空 Delta、负 argc/负 end/int a[];、模板实例化无上限(外部审查 3 秒栈溢出实锤)、pending_class 只排空一次、宏深度保险丝死代码、十进制字面量静默 0、anonymous_structs 回滚缺口(两处独立复现)、JIT/解释器溢出分叉、sprintf 族缺容量检查、memset 负 n、VFS append 死分支、set_errno 缺 GLOBAL_START、变参路径槽位问题、双字符串所有权(外部审查升级:按书面契约释放即 UAF,P2→P0)、catch_unwind 只覆盖 first_batch(文档承诺全覆盖) |
| 扩展(同类新形状) | 初始化路径槽位冲突新形状(base_temp 被嵌套调用覆盖 → 越界假错);左结合长链在 typeck/AST Drop 栈溢出(5000 项实锤,非 codegen——归因:类型错误时管线早退仍崩);深度防护缺口从 3 通道扩至 5 通道(抽象声明符 ~150 层即崩、assign/ternary/unary 链);常量折叠四则/移位溢出 panic 家族(随机 token 汤 10 次命中);a[0]={1,2} 静默变 2 元素 |
| 新增 P0(评估未覆盖) | RAII 析构差一(假 UAF/Double-Free);emit_zero_init×MAX_TRACE_LEN 复合(合法循环程序被判错——评估原列 P3"指令爆炸",升级 P0);宏预算按 token 数计费(4KB 源 → 67MB 零诊断);printf 宽度/精度无上限(一行代码 GB 分配);vis_event_queue 非 unified 出口只进不出;变参 >16 words 覆写被调函数局部变量;数组快照按声明长度预分配 × 2000 帧窗口(5~20GB);shared/ 三个孤儿文件从未编译 |
| 修正(对外部/既有结论的细化) | include 环检测:visited 为每次调用局部新建无脏状态,真缺陷是长链静默漏报(20 文件环 0 诊断)+ key_for 失败 fail-open;T2 失败形态两态(E3042 误拒 / 零诊断编译失败——同根因);next_local_offset 只增不减经 clang -O0 对照属容量放大而非正确性缺陷(-O2 栈着色可跑) |
| 未采信(按来源方自标) | lambda 双 E3014 重复声明——来源方复测只见一条,登记待查 |
优先级/时序变动汇总:① emit_zero_init+trace 截断 P3→P0 入 U1 #5;② C ABI 契约自 U6 提前至
U0 #7;③ RAII 差一入 U1 #4(CS1 验收面含循环+局部对象,C# 用例会立即踩中);④ 宏字节预算并入
U1 #6;⑤ 变参 16 word 溢出入 U3 #7(与槽位手术同窗);⑥ 容器重复实例化/嵌套 struct 覆盖入 U3 #8/9。
U1 规模因此 2 周 → 2-3 周,完成判据 15 → ≥25 个红→绿用例。
7A. 复刻评审(M1~M20 二审修订版)独立复核与吸收(2026-09-15)
输入:复刻提示词.md(评审输入文档未入库 git,此处仅存档名)的 M1~M20 评审表二审修订版——初审五处结论(M1 内存扩容 / M3 删 JIT / M13 手写规范不可持续 / M17 语言顺序 / M18 工具链语言)经用户反驳后撤回或降级,撤回论证溯源一致(决策语境缺失 → M20 决策日志建议)。本节对其可验证硬主张逐条机器复核(证据为 2026-09-15 仓库快照,命令可重跑),并对全部 20 项给归位。
独立复核(6 项硬主张:3 成立 / 1 部分过时 / 1 不成立 / 1 定性修正):
| # | 主张 | 复核结果 | 证据 |
|---|---|---|---|
| 1 | M15:facts check 被称"CI 门禁"但 CI 无此步骤 |
成立 | .github/workflows/ci.yml 全部步骤(build / libc 产物检查 / cargo test / three_tier / clippy / go vet / shadow ×2 / serve_smoke / replay / wasm / health)中无 facts;grep "facts" 唯一命中为 "artifacts" 子串。自称见 AGENTS.md facts 用法节——对账工具自己的口径先漂移 |
| 2 | M13:ABI 版本跨文档漂移 | 成立(AGENTS.md 一处已随 U2#13 批修正) | 代码 native/src/capi/first_batch.rs:39 = "2.1.0";AGENTS.md 已同步 2.1.0;项目更名记录.md 仍载"vitro_abi_version() 返回 2.0.0";实测发现登记20260913 D-3 实证 架构设计.md 修复慢一拍(同步至 2.0.0 后代码又升 2.1.0)——人肉追更必然滞后,属机器对账该抓的模式 |
| 3 | M14:sizeof(struct) 数值差异防线零覆盖 |
成立,且为空洞覆盖 | 存量唯一相关用例 native/tests/cases/baseline/sizeof_struct_union.c 为 struct S { int a; }——单 int 成员 packed 与自然对齐同值,对分歧零敏感;packed 布局差异(struct { char c; int i; } = Vitro 5 / Clang 8)无任何 golden / known_issue 锚 |
| 4 | M11:Layer A(Memcpy/Memset/Strlen opcode)从未接入 codegen | 部分过时 | OpCode::Memset 已被 U1#5 接入 codegen(vitro_codegen/src/stmt/var_decl.rs:464/556/633 三处发射;VM 分发 executor/memory.rs:231);Memcpy/Strlen 有 VM 实现与单测(memory.rs:195/255、executor/mod.rs:119-121)但 codegen 零发射——"无生产者的实现",非纯死代码 → 处置随 U5#5 裁定 |
| 5 | M7:"JIT/步进开关不需要(M3 已删)" | 不成立(表内自相矛盾) | M3 二审已改"撤回删除、路线重估",M7 前提失效;jit_enabled 真禁用开关是 vm_bench 方学校正(0.66x 假象 → 9.16x 实测)的方法学前提,属资产而非负担。M7 应改"保留,随 M3 重估联动"(现状即保留,无工程动作) |
| 6 | M9:next_local_offset 只增不减 = "栈泄漏(正确性问题)" |
定性过重,与 §7 修正行冲突 | vitro_codegen/src/func.rs:21 每函数入口重置 = 0——只增不减的粒度是单函数编译期,帧布局编译期固定、调用复用,无运行时栈泄漏;§7 修正行早有记载(clang -O0 对照:容量放大而非正确性缺陷,-O2 栈着色可跑)。M 表退回"正确性问题"定性恰是 M20 论点又一实锤 |
复核过程自我留痕(工具误用活例,与 M13 撤回理由同构):首轮复核以 Opcode::(实际命名为 OpCode::)grep 得出"Layer A 全域零引用、死代码成立"的错误结论并已口头输出;二轮以 OpCode:: 复验发现全链路存在,本节已修正。教训:复核命令本身必须随结论留档(本表证据列的行号与匹配形态即该义务的履行)——否则下一次复核者会以同样的 grep 重新"发现"同一个不存在的死代码。
归位(20 项对账):
| 处置 | 条目 |
|---|---|
| 五处撤回全部认同 | M1(1MB + 4 字节指针保持——教学 trap / 可视化完整渲染 / 快照经济三用途成套,与指针宽度配套);M3(JIT 路线重估而非删除;"malloc O(N²) 优先于 JIT"的优先级意见已被 U2#2 承接);M13("手写规范不可持续"撤回,保留 facts 扩对账);M17(C→C++→C# 顺序保持——超集复用 + 时序);M18(Go 保持;决策日志诉求 = M20) |
| 既有批次已覆盖(不重复立项) | M5 ≈ U2#2(regions O(N²),Q7-G6 已关闭、方向收缩 addr 索引化);M9 ≈ U3#3(next_local_offset 作用域回收,既登记;定性按 §7 修正行执行);M8 症状已修(P0-A unified_pending 清理,e3f3525),结构建议(unified 状态收进 UnifiedEngine、Session 只持 Option)登记 U6#4 尾批评估;M20 首个落地 = 语言选型评审20260914.md(评审文档未入库 git,此处仅存档名) |
| 新增待办(已同步进 §2 批次表) | ① M14 → U1#13(本轮新增行):packed 用例入 shadow、known_issue 登记 + spec 指向;原则一般化为"数值类差异零 golden 覆盖即防线失效";② M15 → 立即项:ci.yml 补 go run ./scripts/facts check 步骤(J9 埋雷记录已在 脚本埋雷验证记录.md facts 节,只差接线);"测试失败无记录"soft→hard 可行性一并评估;③ M13 细化 → facts 规则扩容:跨文档常量一致性 + 判据细化——记录"版本号历史事件"的段落豁免、陈述"当前现值"的句子对账(两者可同篇共存,如 项目更名记录.md);④ M2 → U5#5(本轮新增行):sizeof/offsetof 与 _Alignof 两口径统一或显式进 spec,禁止无记载并存(顺带裁定 Layer A 残余两员存废);⑤ M12 → U6#4 扩容(本轮改写):wasm panic 护栏 / 能力缺失显式报错 / 确定性伪时钟 |
| 登记待议 | M19(第三门前端插件化 trait Frontend)与 CS0"SourceLang 单源化"范围关系待裁定(已覆盖 or 需扩为 C# 全量铺开前置批);M10(断点顺序知识外溢)低优先 API 债;M16 已降级为改进项不立项;M6(opcode 二元编码)改判"下次真要加新类型时再做"——字节码是导出产物(export bundle / 固定索引段),改编码 = 格式版本化 + 存量迁移,且教学子集类型集近乎冻结;M4(局部变量槽位化)维持"先实测可视化损失",补充评估维度:JIT 已覆盖热循环(9x+),18 步/语句成本如今主要落在单步调试粒度而非吞吐;槽位化后变量仍在 local_vars 快照,损失仅内存网格视图 |
| 未采信 | M7(前提失效——修订表述后归档,无工程动作);M9 的"正确性问题"定性(证据相反) |
优先级建议:M14 + M15 + M13 细化(防线/门禁完整性——成本最低、与"诚实记录"哲学同构、杠杆最大)→ M5(U2#2 承接)→ M2 / M8 结构残余 → M12(U6#4)→ M11 残余(U5#5)→ M6 / M9 按需 → M19 于 C# 全量铺开前裁定。
元结论:五处撤回全部溯源"决策语境缺失",直接验证 M20 必要性;M9 定性回退(与 §7 修正行冲突)和本轮复核自己的 grep 大小写误用,是同一病灶的两个新实锤——不记录取舍与复核命令,后来者(含 AI)会重新误判,并且误判得理直气壮。
8. 状态记录
2026-09-12:U0~U7 立项。合并自三语化整备计划 v1.1(S 系列)与重构评估(Phase 系列)。 时序改动两处:S2.5 观测设施提前至 U0(护栏先于它验证的重构 + 下游正在消费含洞二进制); T1/T2 模板缺陷从"深水区"提前至 U3(CS2 复用单态化路径,属硬前置)。 待办:①
CSharp前端引入计划.md§7 时序表同步本文 §5 硬门禁;② U0 的事故归档目录与模板落库。2026-09-12(v1.2):吸收
核心资产重构裁定.md(独立裁定 + §13 多轮收敛执行方案,与本文冲突处以裁定 §13 为准)。核心修订: ① 执行顺序改为五域 D1~D5——D1(防线自身埋雷,J9)先于一切(门禁空转则所有"全绿"失效), D2 止血与 D3 oracle 建设并行,D4 生命周期重构在后,D5(Python→Go 工具链迁移)最后; ② U0 新增 #8 脚本埋雷验证;③ 三处数字更正:U0#7 头文件缺口 17→19、U2 验收线 "100 万次 malloc/free"改为"显式提步数预算后的最大可行点 + regions 直接采样(Q7-G6 先行—— 既有无界结论与裁定实测峰值平坦矛盾,重构方案 G6 复核前不得开工)"、U7#5 加 280s/轮性能前提; ④ 边界重划:重构区按"缺设计的域"而非目录划——「生命周期与参数域」含 unified/、serve/capi 参数域、vitro_vm 累积状态、collector payload 路径四处(裁定 §3 边界重划); ⑤ 新 P0 独立复核:**seek 越过程序末尾 panic(10 步程序 seek(50000) → exit 101、engine.rs:400split index 48001 > len 79,本路线图独立复现)**已入 U2 验收标准;payload.get负参 panic 与 serve 主循环 catch_unwind 缺失原已列 U0#5/#7,裁定补最小复现。 裁定文档自己的待办:③ CSHARP §7 补中止条件与 R5 判据(本版已做)。2026-09-12(同日 v1.1):吸收三份外部审查(§7)。两处新 P0 独立抽验确认(RAII 假 E3061、 trace 截断
a[11]/a[12]双崩);emit_zero_init复合缺陷 P3→P0;C ABI 契约止血提前至 U0; 防伪绿机制新增"保险丝可触发性义务"(三形态失效:死代码/口径错/只写不读)。 待办不变,新增:③ U1 #5 的 trace 截断修复需与 VM JIT 子系统协调(录满改 Abort 的语义影响 需在 C语言子集规范 记录)。2026-09-13:裁定 §13 W0 批次收口(W0-2/W0-3/W0-4 全部落地,详见裁定 §13.7)。W0-2:engine.rs 两处 panic 此前"已修复"判断经探针复跑证伪 (8 会话仍 panic,stderr 日志实证),本轮真修(split_off 钳位 + clamp 区间 先行)+ serve 主循环 catch_unwind(埋雷验证)+ 回归锚五条,interaction_probe 红→绿(1800 请求零死亡);W0-3:capabilities_json 所有权对齐书面契约 (红→绿,ABI 1.3.0)+
vitro_capi.h补齐缺失声明(实测 20 个, 导出 41=声明 41 对账)+ 三所有权分区 + capi/mod.rs 22 入口护栏全覆盖 + shared/ 三孤儿文件删除;W0-4:char 初始化器 W3053 误报(R-2026-09-12) 修复——豁免 + 同行去重(9→0),真实截断仍报警(正反向锚定)。 U0 #7 的头文件数字据此再更正 19→20。全验收:cargo 66 套件 / shadow 667/647/4/16 门禁通过 / 探针 EXIT=0 / serve_smoke / clippy 零警告。2026-09-13(续):用户实测发现登记入库与排期归位(性能 + 头文件域 15 项,
实测发现登记20260913_性能与头文件.md,§8 独立复核全部通过)。 归位决定:① H-1(include 静默跳过零诊断)+ H-2(__has_include 与 #include 口径不一)并入 U1#11 扩容为"预处理器 P0 批"(四处修复 + D-1/D-2/D-3 文档修正随批;T5/T11/T14 转 shadow 红用例;H-3 先扫存量 语料再收紧);② P-1(malloc churn 超线性)实测完成 Q7-G6 复核的一半 ——支持超线性成立,剩余仅 regions 条目数四点采样,完成后 U2#2(regions 重构)可开工;③ P-3(步数膨胀)触裁定①保护区登记"评估后议";P-6 (基准方法学)升格为仓库基准规约;P-2 排 CS 后;H-4 入 spec 差异表; H-5 并入 J4/G4;换行雷(D-4 定论)+ CI 单平台记为 U6"防线搬 Linux 前置账"。2026-09-13(续):U1#1 管道批完成(collector→infer 上下文扩容, 四项登记全部收口)。新增 InferEnv(prev_vars 行入口变量快照 / at_callee_entry + caller_is_main / lookahead 下 3 行源码)随帧传入 inferrer:P0-4 gcd mod 三轮算式全对(48%18=12 等);P1-3/P1-4 顶层 启动文案落地(quick"启动快速排序"、merge"启动归并"死代码复活); P1-1 嵌套 for 边界(dpLCS L13/matrixChain L9 离开初始化循环)。顺带 实锤上批 §7.3 append 写反(curr 被发布致中间帧标注泄漏,帧级调试 抓回)。验收:cargo 69 套件 / clippy 零警告 / serve_smoke 54/54。 防线 6① 剩余:重提取对账 → v3 清单 → golden 固化 + CI 接线。
2026-09-13(续):U1#1 P0-A/P0-B/P0-C + P1 批收口(三轮审阅驱动)。 P0-A:step_begin/run 清 unified_pending + serve_smoke 二次运行不串帧 批 ×3 断言(e3f3525)。P0-B 方案②(用户修复、独立复核通过):bst 家族 名字+语义词双条件、bst_validate/bst_delete 新算法、is_treenode_ctx 语境特征、is_recursive 恒 false 双根因修复(空函数名 + CallPtr 不匹配)
- 全链路 pipeline 测试补检测器单测盲区(cfc9e85);BSTV 三挂载语义 全对、三模板复亮、hashTable/redBlackTree/bTree 零误判。P0-C + P1 批: mod 排除 IO 行、radix count 收紧 ]++、签名行统一排除(总入口)、dp 初始化循环排除(单行形态 2/4,多行 for 登记边界)、hanoi 零盘、 step_next append 语义。登记未修:P1-3/P1-4 顶层调用区分(callee entry 帧形态,需 at_callee_entry 管道)与 P0-4 prev_vars 同批; P1-6 缺口登记入清单头注。验收:cargo 69 套件 / clippy 零警告 / serve_smoke 54/54。
2026-09-13(续):U1#1 第三批完成(用户机器复核驱动:has_word 缩写 漏报 / 四算法误判 / dp 判据 / P1 判据批 10 项)。用户以 100 行逐行 判定复核 v2 清单(62✅/25✗/13⛔,审阅意见含可复现脚本与对账输出), 五个 P0 全处置:P0-1 has_word 标准驼峰边界(isValidBST 复亮);P0-2 selection/merge 整词+sort 语境收紧(四模板误判清零);P0-3 dp 双侧 dp[ 判据 + i 形态外循环 + 文案泛化;P0-4 gcd mod 安全降级(prev_vars 管道登记下批);P1 批 10 项判据修正(minIdx/越界守卫/初始化行家族/ 位序/调用点区分/错字根因)。selection 整词回归当轮抓回。验收:cargo 68 套件 / serve_smoke 51/51 / shadow C 671(664/3/4)/ C++ 非预期 0 / clippy 零警告。主表重提取 + v3 清单 + golden 固化待用户二审后推进。
2026-09-13(续):U1#1 第二批完成(用户审阅驱动:P0-1 首帧旧值 + P0-2 结构特征误判 + P1 dp 孤儿接线)。用户审阅否决 v1 人审清单 (数值列系统性不可信),二轮修复:① P0-1 首帧旧值(同语句多帧中首帧 赋值前——run_batch 返回数组/缓存双层去重 + serve step.next 一帧发布 缓冲,三例实测错误值消失);② P0-2 结构特征误判(linear→BFS 等—— 四个结构分支收紧命名主导,代价 bstInsert/bstSearch/bstDelete 裸命名 漏检,待模板改名裁定);③ dijkstra confirm 收紧 visited[u] 形态; ④ dp 检测接线(infer_dp 孤儿激活)。红→绿:检测器单测 +7、dijkstra ×2。人审清单 v2 重写(38 模板 × 100 条,行末帧语义,覆盖缺口分档)。 验收:cargo 68 套件 / serve_smoke 51/51 / shadow C 671(664/3/4)/ C++ 非预期 0 / clippy 零警告 / facts check 绿。
2026-09-13(续):U1#1 第一批完成(防线 6 三误标修复 + 人审清单交付)。 ① 审查实锤三误标全部机器取证后修复:二分三分支不可达(mid_calc 条件 过宽短路 compare/narrow——比较行被标"计算中点",概念教反级;收紧为 声明/赋值形态)、right=mid 硬编码差一(改打印边界变量实际值,兼容 闭区间/左闭右开两种约定)、insert 子串误判(收紧 insertion / insert_sort / insertsort 形态,insert_node 实测零误判)。修复后二分 标注序列全链路实测正确。红→绿:vitro_algorithm_steps 单测 ×3 + algorithm_detector 单测 ×2。② 人审清单交付(U1#1① 人审固化环节):
05-教学体验/算法标注golden人审清单.md——88 模板批量提取,37 模板 × 58 条标注待用户逐行勾选;45 模板零标注(覆盖缺口)、7 超大模板截断、 6 cpp 模板待 C++ 口径;insert 同族子串风险 5 项(merge/binary/quick/ heap/select)待裁定。golden 固化与 CI 回归待人审完成后接线。 验收:cargo 68 套件 / shadow C 671(664/3/4)/ C++ 非预期 0 / clippy 零警告。2026-09-13(续):U1 第六批完成(#8 深度五通道 + AST 深度预算,红→绿闭环)。 五通道实测栈溢出全部复现(init_list 3000 层 / 赋值链 3000 级 / 一元链 5000 个 / 数组后缀链与左结合链 5000——后两者崩在 typeck/Drop,parser 层是循环不递归)。修复双层:五递归入口挂防护壳(
parse_init_list/parse_assign/parse_ternary/parse_unary/parse_abstract_declarator)vitro_ast::depth迭代测深后置预算(512 上限,超限mem::forget防 Drop 溢出)。首版口径错误当轮抓回:链壳共享计数使每层括号 4 计数、64 上限时 16 层括号即误伤(既有test_legal_deep_expression_ still_compiles回归红)——上限 64→256 与原"64 层语法嵌套"语义精确 等价;"链计数独立+primary 重置"中间方案因链式操作数也经 primary 而 废弃(s3 漏拦实测)。红→绿锚:crash_regression_tests +6(五通道 + 合法反向锚)。验收:cargo 68 套件 / shadow C 671(664/3/4)/ C++ 非预期 0 / clippy 零警告。U1 剩余:#1 防线 6、#11 预处理器 P0 批。
2026-09-13(续):U1 第五批完成(#6 宏双保险丝,红→绿闭环)。 ① 深度保险丝死代码复活:检查移入
expand_inner每层入口——红锚 5000 个不同名对象宏链(不触发自引用查重,token/字节均远低于预算) 旧代码实测栈溢出崩溃,修复后 E1017;既有test_preprocessor_depth_fuse旧代码下的"绿"系 token 预算同码错误 掩盖(REP 先撞 26 万 token),未覆盖深度路径——"防线照不到"实证。 ② 预算口径改字节:4KB 字面量 × S(x) x x × 14 层 = 16384 token(远低于 旧 26 万预算)实际产出 67MB 零诊断(诊断暴露 char[67108865])——emitted计费改累计字节(+1 分隔),常量 26 万 token →EXPAND_BYTE_BUDGET16MB;trace 单条长度封顶 2KB(条数封顶不防单条)。 红→绿:lexer 单测 ×3(两个精准锚 + 正常嵌套反向锚)。验收:cargo 68 套件全绿、shadow C 671(664/3/4)+ C++ 非预期 0、clippy 零警告。 U1 剩余:#1 防线 6、#8 深度五通道、#11 预处理器 P0 批。2026-09-13(续):U1 第四批完成(#3 基址槽止血,红→绿闭环)。 外部审查 P0-1 复现确认:数组/结构体初始化的写入基址存
temp_slot0, 初始化列表元素的gen_expr内部同样消费 slot0——两个实测触发分支: 变参调用 double 实参的StoreLocalD slot0(红锚dv(1, 3.5)→ "向 NULL 指针区域写入(地址 0x0010)" trap)与按值传 struct 的 Call 实参地址临时(审查原始形状take(mk(4)))。止血修复:初始化三路径 基址改专用槽get_init_base_slot()(惰性 + enter_function 重置), 初始化表达式内无嵌套声明初始化(C 语法),单槽安全;根治(作用域化 槽位分配器)在 U3。红→绿:init_base_slot_{variadic,struct_call}.c×2(golden clang)。验收:cargo 68 套件全绿、shadow C 671(664/3/4)- C++ 非预期 0、clippy 零警告。U1 剩余:#1 防线 6、#6 宏双保险丝、 #8 深度五通道、#11 预处理器 P0 批。
2026-09-13(续):U1 第三批完成(#4 + #5,全部红→绿闭环)。 ① #4 RAII 析构作用域差一:根因确认——
emit_dtors_for_scope_exit内部saturating_sub(1)把"循环体 frame 索引"再减一(长度 vs 索引 错位;其函数注释声称的"参数层 frame 0"实际不存在,enter_function即clear(),索引 0 就是函数最外层 block)。后果两支:while/do-while 的 break/continue 析构起点多退一层(外层栈对象提前析构 + 正常退出 二次析构,红锚dtor 1双现,持资源类即假 E3061);for 的 continue 起点恰为 for-init frame(每轮重复析构 init 对象,红锚dtor 9双现)。 修复:emit_dtors_for_scope_exit改直接接收帧索引(语义单源), 新增平行栈loop_break_has_init_frame(for/range-for = true)—— break 跳出整个循环语句时 init frame 随之销毁(多退一层),continue 一律从循环体 frame 起。红→绿:cpp_raii_{break_while,continue_for, break_dowhile}×3(修复前test_vitro_e2e_cpp3/81 FAIL 留痕)。 ② #5 zero_init × trace 截断复合缺陷(路线图抽验实锤形状复现:int a[12]+ 300 轮循环 → "值栈溢出"运行错误,clangtotal=89700): codegen 侧emit_zero_initsz>4 逐字节 StoreMemByte(5 指令/字节)改Memset单指令(返回值补 Pop 平衡,顺带消除该路径 temp_slot0 占用); VM 侧jit_trace.rs录满MAX_TRACE_LEN=256返回Finish改Abort(半截循环体栈不平衡 trace 不再注册)。红→绿锚:jit_zero_init_trace_boundary.c(复合)+jit_trace_overflow_abort.c(修复 2 独立锚:60 个 unrolled 赋值使循环体仍超 256 条,录满必须 Abort)。验收:cargo 68 套件全绿、shadow C 669(662/3/4)+ C++ 非预期 差异 0 门禁通过、clippy 零警告。U1 剩余:#1 防线 6、#3 基址槽、 #6 宏双保险丝、#8 深度五通道、#11 预处理器 P0 批。2026-09-13(续):U1 第二批完成(#7 + #10,红→绿闭环)。① #7 词法 保真四点(hex 转义单位误拒/超范围错乱诊断、08 拆 token 零诊断、超 u64 十进制静默 0——R3 复现修正:2^31/2^63 邻界值实际 wrapping 与 clang 一致, 真实实锤是超 u64 形状、.5 前导点误拒);② #10 回滚缺口:Rollback 三元 快照(含 anonymous_structs)+ save/restore,回滚点实测 23 处全替换 (路线图原记 5 处——crate 化后增量),复合字面量红→绿。验收:U1 锚 文件 12 条全绿、shadow 667 门禁通过、cargo 68 套件全绿、clippy 零错误。 U1 剩余:#1 防线 6、#3 基址槽、#4 RAII 差一、#5 zero_init+trace 截断、 #6 宏双保险丝、#8 深度五通道、#11 预处理两处。
2026-09-13(续):U1 第一批完成(#12 + #2 + #9,全部红→绿闭环)。 ① #12 非法数组形状零诊断:
int a[];/int b[-5](负尺寸曾静默变 VLA)/int c[0]={1,2}(曾静默改 2 元素)→check_array_dims_legality双接线 (局部+全局)+array_dim_info负字面量折叠 + init.rs 推断收紧仅 -1; 首版误伤char s[]="hello"被 shadow 6 例 compile_gap 当场抓回 (has_init_list 补 StringLiteral)——防线在换代码时说真话的实证; ② #2 初始化列表静默置 0:4 字节元素无条件 gen_expr(红锚0 3 | 0 0 0→ 绿7 3 | 11 49 93),char 路径同步; ③ #9 常量折叠 panic 家族:求值器迁址(cond.rs → parser/decl.rseval_enum_const,路线图引用过时);取负/移位改 checked(红锚_Static_assert(1<<1000)debug panic 留痕 → 双轮廓绿)。 验收:typeck_u1_p0_regression 6 条全绿(debug+release)、shadow 668 (661/3/4)门禁通过、baseline 固化 1 例。U1 剩余:#1 防线 6、#3 基址槽、 #4 RAII 差一、#5 zero_init+trace 截断、#6 宏双保险丝、#7 词法保真+R3、 #8 深度五通道、#10 ParseCheckpoint、#11 预处理器两处。2026-09-13(续):U0 #1 + #6 完成——U0 全部收官(CS0 前置门禁达成)。 #1 断言强度审计:① SKIP 清点 = 全 workspace 零
#[ignore](天然达标); ② vitro_better 16 例逐例 clang 审计(J2 二择一)——统一真实根因为NULL/bool/FILE标识符缺失(undeclared identifier 是-Wno-implicit- function-declaration压不住的硬错误;只缺 printf/malloc 头的 ~269 例被 该 flag 救为 match——16 例名单与 flag 口径的关系已实证核对):12 例补 头转真 golden、keyword_compat移 gap(register变量取地址——C 标准 禁止而 Vitro 宽容,真实扩展差异)、file_*3 例驱动新增 gap_extension 分类(gap 目录语义即"Vitro 扩展",不再冒充 vitro_better;自检表同步加行) ——vitro_better 16 → 0,J2 判据闭环;③ known_issue 处置:spfa 模板 队列溢出修复(容量MAXV*MAXV+ 注释根因)转 match;sizeof×2 用例注释 补 spec 指向(指针 4 字节模型已在 C语言子集规范 记载,bug 通道 = 已记录 差异非待修);bTree 保持登记(模板 UB);④ 弱断言扫描:全 workspace contains 断言 215 处,高危"stdout 数值 contains"子类 ~150 处(该区域由 shadow 全量字节比对兜底,cargo 侧属冗余防线)——抽样升级 1 处示范 (cpp_lambda_test的d=3.00改整行断言,contains 对 "3.001" 漏放), 全量升级登记为 U7 结构债;⑤ 口径分列:shadow 汇总已按 match/known_issue/ vitro_better/gap_extension/compile_gap/runtime_gap/output_gap 七类分列计数 (达成)。#6 红→绿规约成文:AGENTS.md 编码约定节新增"红→绿纪律" 小节(先红留痕 → 修复引用用例名 → 护栏类先证会红;本日 6 批实践为范例)。 终态:667 用例 = 660 match + 3 known_issue + 4 gap_extension + 0 vitro_better,门禁通过。2026-09-13(续):U0 #2/#3/#4 完成——观测设施收尾。② #2 RSS 护栏:
serve_smoke.py新增第三批(远距 seek 压力形状 × ctypes psapi 提交峰值采样, 与 probeutil 同口径),默认预算 512MB(当前基线的宽松护栏,非 J5 的 64B/步——那要等 U2 后收紧);实测形状峰值 75MB 绿,VITRO_RSS_BUDGET_MB=5证红(peak=75MB > 5MB → exit 1,"先证会红"义务闭环)。③ #3 事故留痕 核查结论:三项已于 2026-09-12 建档时全部完成(INCIDENTS/README 模板、 第二次泄漏补录——既有档案回填两洞完整证据链、diag_mem.ps1已转正scripts/且被 git 跟踪;仓库根另有一份未跟踪的本机副本,属用户工作区 文件不处理)——本路线图前述"剩余项"表述过时,据此修正。④ #4 磁盘卫生: 删除已死 android 交叉 target 三目录 ~2.6GB(实测 aarch64 1.6G + armv7 978M + android 7.4M);CI 新增 target 体积预算门禁(10GB,超限 fail 并回显分布);wasm32(462M,活性出口 2)不清理;target/debug本机 29GB 属开发累积,提示用户自行cargo clean(未越权代删);策略文字 制度化进 AGENTS.md 构建命令节。U0 剩余仅:#1 断言强度审计、#6 红→绿 CI 规约化。2026-09-13(续):U0 #5 第一批完成(
as收口)+ 判据实测修正。 ① 负 argc 实锤修复(vitro_set_argv的with_capacity(argc as usize)负数绕回 → capacity overflow panic 被 guard 静默吞)——红→绿锚capi_negative_argc_test用 panic hook 计数观测"guard 吞掉的 panic" (撤修复实测红);U0#5 点名的负参三处至此全闭环(负 end/负 get_payloads 随 W0-2、负 argc 随本批)。②checked_conversions14 处清零后转 deny (workspace lints):手写值域钳制全部改try_from(..).is_ok()。 ③ 判据实测修正:cast_possible_wrap全量命中 246 处,"转 deny + 其余登记豁免"不可一步到位——改为"算术→索引/容量"子类定向清理 (with_capacity 两处:一处已修、一处守卫在前;len() as i325 处受 上游有界结构约束登记豁免,U2 有界化后风险面进一步收缩),全局 deny 待存量收敛后再议。验收:cargo 67 套件全绿 + clippy -D warnings 全绿 (含新 deny)+ shadow 667 门禁通过(lexer 字面量路径改动的端到端验证)。2026-09-13(续):U0 #8 / W0-1 完成——三判定型脚本 J9 埋雷全落地 (台账:
脚本埋雷验证记录.md)。①ci_three_tier_check:注入假 KNOWN_FAILURE 条目 → hard 精确点名 / exit 1,还原复绿;②serve_smoke: 新增边界/负值/极值批(step.next 产生检查点后seek(50000)/ 负参payload.get/ 非法 JSON 行 / 存活探针——注意无检查点时 seek 提前返回、 走不到窗口路径,首版边界批因此漏触发已修正),撤 W0-2 钳位埋雷 → 3 项 FAIL / exit 1(catch_unwind 救活进程时由 id 关联断言层抓语义破坏,双保险), 还原复绿;③shadow_verify:登记 JIT 批次的引擎语义突变实例(tpl_add 加→减 → 9 例非预期差异 / exit 1)。J9 顺带抓获两处脚本自身缺陷: serve_smokeresolve_exedebug 优先在陈旧产物上假绿(已修:取 mtime 较新者, 埋雷注入 release 后仍跑旧 debug 全绿正是被它吃掉);判定型脚本须从仓库根 运行(cwd 相对路径敏感,CI 不受影响)。上一条记录的"W0-1 剩余"表述据此 作废——三脚本均有牙,U0 #8 验收线达成。U0 剩余未做项:#1 断言强度审计、 #2 RSS 护栏、#3 事故留痕、#4 磁盘卫生、#5 as 收口、#6 红→绿 CI 规约化。2026-09-13:D6 / R-2026-09-13(JIT trace P0 静默错值)修复批次落地(裁定 §14.10/§14.11 收口,对应 §13.3 W1-4):① fast path 录制期禁用修复,红→绿闭环(shadow 665/644/红 2 → 666/646/门禁通过);②
vm_bench方学校正 +VitroVM::jit_enabled结构性禁用开关,加速比 实测 9.16x~9.72x——D6 裁定保留 JIT(净收益显著),作用域收缩由修复内建(只 JIT 最内层循环);③ J10 落地:jit_path_parity.rs三锚差分防线 + 突变实测 margin=20 (≥3 门线),弱断言升级(contains→starts_with)。对 U1 #5 的关联说明:本轮修复的是 "录制期 fast path 穿透";U1 #5 的"录满 256 条返回 Finish 改 Abort"是另一独立缺陷 (jit_trace.rs:90-93,仍未修,半截 trace 栈不平衡问题照旧在册)。2026-09-14(续):防线 6① 收官——golden 固化 + CI 接线落地(U1#1 至此全部 完成,U1 整体收官,CS1 前置门禁达成)。二审全部 P0/P1 修复落地后全量重提取: 82 模板 = 37 有标注(317 首现 / 113 行)+ 45 零标注(比二审预期 34 多 3 = P0-B 复亮 bstInsert/bstSearch/bstDelete,吻合)。golden 固化
tests/golden/algorithm_annotations_v3.json+algorithm_annotation_golden_test入 CI(Rust 直调 session_api 全量比对、双向防漂移、J9 埋雷证红;直调须走 session_api::compile 含算法检测——裸 compile_pipeline 全零标注实证锚注释)。 golden 定位 = 行为基线非语义认证,人审勾选继续(更新须红→绿锚)。§7.4 has_word 表格单测落地(21 例);§7.1 定性:finished 信号已存在但结束后 step.next 重复发布末帧(低危登记待修);§6 判据锚豁免(golden 317 条全量 锚实质覆盖)。U1 全项状态:#1 ✅(golden 已接线,人审勾选开放)、 #2~#12 ✅——Wave 1 收官。验收:cargo 70 套件全绿 / clippy 零警告。2026-09-14(续):U2#1 + U2#11 前半批完成(seek 重放循环内窗口化 + 重放步数预算,红→绿闭环)。洞精确定位:
finish_replay_window(W0 批) 只在重放结束后裁窗——过程峰值无界(重放距离全长帧同时常驻 = 裁定实测 seek 峰值 1.2~2.3KB/步、63.6GB 事故形态;run_batch 每批后有 trim 而 seek 循环没有——"统一模式掩盖缺陷"的镜像形态)。修复:重放 push 后立即 trim_frame_cache(顺序追加保证 idx==len 不走占位分支, WaitingInput/Finished 分支同步补);U2#11 前半——重放循环补 max_steps 约束(此前只有 is_cancelled,对比 run_batch 有)。红锚: test_u21_seek_replay_respects_max_steps(往返验证:移除检查后 FAIL 留痕)+ test_u21_seek_replay_window_bounded 语义保护锚(窗口尾=target、 单步可索引——半开区间口径);峰值红锚 = serve_smoke RSS 形状的 修复前 75MB 基线(本日多次实测留痕)。验收:形状峰值 75MB → 23MB (-69%),斜率 ≈57B/步 ≤ 验收线 64B/步 ✓;J5 部分收紧——serve_smoke 预算 512 → 64MB(2.8× 余量,U2 剩余项后进一步)。U2#11 后半 (快照字段补全:stdin_eof/输入游标/heatmap 回滚)登记下批。 验收:cargo 70 套件 / shadow 675 零非预期 / serve 57/57(64MB 预算下)/ replay 61/61 / clippy 零警告 / facts 漂移 0。2026-09-14(续):U2#5 批完成(检查点淘汰悬空 Delta,红→绿闭环)。 洞精确定位:淘汰删 Full 时无级联(原实现仅删 Delta 时从链头级联)—— pinned 场景删 [1] 的 Full 后其后续 Delta 全悬空而链头 [0] 恒 Full 掩盖 了它,数量达标即退出;悬空 Delta 在
nearest的 base_step 解析会落到 更早的 Full(rposition ≤ base_step)——脏页叠错基准 = seek 静默 错内存(无报错,路线图定性"最坏调试器缺陷"确认)。修复:淘汰逻辑抽evict_over_limit(可直测),删 Full 时从删除点级联 drain 到下一个 Full;删 Delta 不级联(后继同 base,过度级联会误删兄弟——首版实现被evict_delta_keeps_siblings_and_pin锚当场抓回)。红锚 ×3(往返验证: 临时回退旧逻辑 → 悬空不变量锚 + nearest 错叠内存锚 FAIL 留痕 → 恢复 复绿):evict_full_cascades_dangling_deltas/nearest_on_evicted_ chain_reconstructs_correctly/evict_delta_keeps_siblings_and_pin。 引擎级对照锚:test_u25_seek_after_eviction_matches_reference(400 次 循环 >50 检查点,淘汰侧 vs 不淘汰参考侧的逐步 (x,sum) 全等 + 终值相等)。 验收:cargo 70 套件 / shadow 675 零非预期 / serve 57/57 / replay 61/61 / clippy 零警告。2026-09-14(续):U2#2-b 批完成(freed_logs 索引化,P-1 性能缺陷根治)。 稳态推演修正(隔离区容量内每块各留一条 log ≈ 16k 条——此前误推"稳态 1-2 条")后归因确认:U2#2-a 后剩余 34.8s = retain/find/check_uaf 三个 O(16k) 热点。BTreeMap<addr, info> + 互不重叠单调性(addr 序即 end 序, 降序单次探测 O(log n)):freed_logs_remove_overlapping / find_overlapping 两 API 替换 6 处 retain + Double-Free get + check_uaf;clippy 抓出初版 伪循环改 next_back 单次探测。差分保护先行(三块区间语义用例 + fuzz A 压测)。性能对照(条目四点逐位一致,行为零漂移):1M churn 34.8s → 1.45s(24×),较 U2#2-a 前基线累计 41.7×;P-1 44.6μs/次 → ~1.4μs/次(32×),超线性退化根治(G6 定论的两个痛点全部收口)。 验收:cargo 70 套件 / shadow 675 零非预期 / serve 57/57 / replay 61/61 / clippy 零警告。
2026-09-14(续):U2#2-a 批完成(regions addr 索引化,差分保护先行 + 行为 零漂移验证 + 顺带修复存量双条目缺陷)。① 差分保护用例 ×5 先行落库 (host_contract_tests,重构前全绿锁语义:稳态隔离窗口/复用复位/泄漏计数 唯一性/快照恢复 free 语义/realloc 复用);②
MemoryState.region_index(HashMap<addr, idx>,serde skip 可重建)+ push_region/find_region_mut/ rebuild_region_index/verify_region_index 四方法;热点改写 ~10 处(malloc 的 两遍扫描合并、free、realloc×3、calloc、strdup、fopen、VM 内部 free_memory、 free_region、vfs malloc_raw);快照恢复点 rebuild + reset_runtime 同步清; ③ 存量缺陷红→绿:realloc/calloc 新块无条件 push → 复用驱逐块时同 addr 双条目(泄漏虚报),红锚 test_u22_realloc_reuse_no_duplicate_entries(修复前 FAIL),改"复位 or push"后绿;④ 性能对照:四点条目数逐位一致(行为零漂移), 1M churn 60.4s → 34.8s(1.74×);登记 U2#2-b:剩余大头 = freed_logs 的 O(16k) 路径(malloc 的 retain + free 的 Double-Free find,17μs/次归因实测 吻合)——需 BTreeMap 区间结构 + 涉 check_uaf 辐射面,独立批跟进;本批边界: 范围查询类(trap_invalid_free/E3070 检查)与 vfs 改名循环保留线性(低频)。 验收:cargo 69 套件(host 100/100)/ shadow C 675 零非预期 / serve 57/57 / replay 61/61 / clippy 零警告。2026-09-14(续):Q7-G6 复核收尾——四点直接采样关闭,U2#2 解锁开工。 新增采样驱动
scripts/core_asset_verdict/regions_growth(serve 会话 config.set max_steps 提预算 → churn ×N → memory.regions 的 region_counts.heap 直接读条目数,通道失效 fail loud)。四点:1k=1002 / 10k=10002 / 100k=16387 / 1M=16387(100k 与 1M 逐位相同);墙钟 94ms/227ms/4.77s/60.4s(1M 点 ×10 规模 ×12.7 时间 ≈ 线性+常数)。定论(裁定 §5a):分段饱和模型——推进期条目 随 N 线性("14B/次"成立)+ 时间含 O(N²);饱和期(隔离预算 DEFAULT_QUARANTINE_BUDGET=256KB 填满,FIFO 驱逐+free_list 复用)条目恒 16387 (=256KB÷16B)+ 时间 O(N)(固定 ~16k 条扫描/次)。裁定"峰值平坦+≈线性"与 评估"14B/次+O(N²)"两侧均为真(观测区间不同);饱和机制是隔离区决议的 设计内行为(复用路径 is_freed 复位 + freed_logs retain 亲读确认,UAF 窗口 完好)。U2#2 重构判据修正:条目天然有界(数 MB 常驻可接受),"归并 freelist 摘要"撤销,收缩为 addr 索引化(消每次操作 ~16k 条线性扫描: free/realloc 的 iter().find ×2 + malloc 复用 find + freed_logs retain); 隔离/复用语义差分用例为不破坏判据。2026-09-14(续):R2 批完成(下游 PR 引擎回归审阅反馈两缺陷,红→绿闭环)。 ① step.next 重复投递(严重):U1#1 一帧发布缓冲的实现缺陷——首帧克隆发布 后 curr 又入缓冲,同一真实步二度投递(实测 0,0,1,违反 spec 附录 A
step_index严格递增冻结不变量)。修复:首调只建立缓冲返回空序列("滞后一帧" 的完整语义);暂停/等待输入时冲刷(断点 UI 依赖断点行帧)、恢复后重建—— 契约冻结进 schema §6.1。防线缺口同批闭合:拦得住它的 replay S1 A7b 恰好 不在任何验证循环("Go 驱动没跑")——go run ./scripts/replay入 CI + A7b 按 缓冲语义重写 + S3 A3 重写(旧 A3 的绿恰好依赖重复投递实现,与 A7b 互斥的 矛盾断言对)+ serve_smoke"单次非空"失明断言改合并序列严格递增(+3 断言)。 ② replay A4a 版本下限误拒:major != minMajor → false把 ABI 2.0.0 拒了 (≥1.1.0 本应通过,更名批升 2.0.0 当天即被误拦)——改 semver 下限 + selftest 补 5 条埋雷。红→绿:replay 修复前 A7b+A4a 双 FAIL(61/59/2)→ 61/61。 验收:cargo 69 套件全绿 / shadow C 675 零非预期 / serve 冒烟 57/57 / clippy 零警告 / facts 漂移清零。登记未修(不扩批):go vet ./scripts/...存量 3 处unsafe.Pointer(capi 长窗口扫描 ×2 + gosmoke ×1,后者注释自称 合规与事实不符;CI 无 vet 步骤故未暴露)——修复须与"CI 补 vet"同批。2026-09-14:U1#11 预处理器 P0 批完成(红→绿闭环,U1 至此仅剩 #1 防线 6 待用户二审)。 四处修复(原两处 + H-1/H-2 并入)+ H-3 收紧 + D-1/D-2/D-3 文档随批: ① 跨文件条件栈污染:
#__vitro_push_dir哨兵起同时记录条件栈深度 (include_cond_boundary)——头内未闭合#if边界自动闭合报 E1013(不再 吞包含者代码),头内多余#endif拦截报 E1011(不再弹包含者条件组、错误 不再错位到主文件——红锚实测修复前 E1011 line=3 错位);② 环检测:静态 DFS 封顶 16/64 → 64/512(20 文件环旧封顶静默漏报零诊断,红锚实测),新增 动态嵌套深度保险丝(dir_stack ≥64 报 E1015,静态/动态两口径共用MAX_INCLUDE_DEPTH防"保险丝口径错"三形态复发),key_for失败的 fail-closed 由 ③ 的 E1021 诊断承担;③ H-1:include 找不到报新码 E1021(定位 include 行、文案列出已搜索目录);既有单测曾把该缺陷固化为errs.is_empty()断言("防线固化缺陷"又一实例),已改写;④ H-2:has_include与resolve_path候选链单源 + 携带定界形式(头文件内__has_include("inner.h")不再误判 0);⑤ H-3 收紧:<>只查标准库存根——存量语料扫描 655 处<>全为标准头名、零依赖(cpp/gap/templates 同扫),wasm 冒烟与 C++ 用例 不受影响;⑥ 文档:C语言子集规范 §1.2 勘误 + 已知差异表重写 + §2.11 六项 登记(顺带修 U1#6 漏更的展开保险丝字节口径)、架构设计.md ABI 1.2.0→2.0.0。 红→绿:单测 ×8(修复前 8 FAIL)+ shadow ×4(T14 修复前 output_gap 0 vs 13、 T4/T11 修复前 vitro_better、T5 双侧失败——shadow 对 H-1 类"诊断质量"缺陷 天然盲的实证,语义锚在单测)。验收:cargo 69 套件全绿 / shadow C 675 (668 match + 3 known_issue + 4 gap_extension,零非预期)/ C++ 非预期 0 / serve 冒烟 54/54(RSS 护栏绿)/ clippy 零警告 / facts check 漂移清零 (影子总数 671→675、serve 断言 51→54 均为机器同步)。U1 剩余:#1 防线 6 的 golden 固化 + CI 接线(待人审清单二审后推进)。2026-09-14(续):U2 第二批完成(#11 后半 + #3 + #4 + #7 部分 + #8~#10, 全部红→绿闭环;经用户代码审阅一轮修订后收口)。 ① #11 后半 快照字段补全:RuntimeSnapshot 补 stdin_eof/heatmap 并随 restore 回滚——回到 EOF 前检查点后 scanf 重新读到 7、heatmap 回到当时值 (修前保留未来值 30 vs 当时 9 实测);② #3 OutputLog:output_chunks 整体替换为有界输出日志(16MB 预算内保真 / 超限丢最旧保尾 + 截断附注 / 逐通道与总长 O(1)——capi 三长度出口废除全量拼接 / ≤64B 小段合并消除 putchar 逐字符分配);锚抓回两个首版实现 bug(部分截除方向算反、截断 附注被环形逐字节吃掉——最终口径:note 不占预算不参与丢弃且位置不动 (按索引跳过,遵守模块头"附注非总在末尾"的交错顺序承诺));已知残余 登记:note 是输出侧唯一无界通道,靠 host/memory.rs 文本去重兜底; ③ #4:trace 实测为死路径(codegen 不发射 _vitro_step,事实记录于 测试注释)仍加 4096 环形防御;output/trace/heatmap 三字段 Arc+COW (检查点保存 O(1) 浅共享、make_mut 分叉;审阅指出 heatmap 深拷贝与 COW 方向矛盾后并入);serde 加 rc feature;④ #7 半闭:早退丢帧 修复(max_steps 早退先 finalize_batch 再 Err——修前 max_collected_step -1 vs VM 11 实测);"每帧双份 clone"未消除已登记:Arc 全链化波及 6+ 文件与 schema/serve/replay 链路而热路径每批仅 1 帧,收益不抵回归 风险,快照侧克隆放大已由 ③ 收口;⑤ #8:vis_event_queue VM 内环形 上限 1024(非 unified 出口不 drain 的 GB 形态根治,统一出口不受影响); ⑥ #9:printf 族宽度/精度 1MB 预算 + 四入口教学 trap(%20000000d 修前无 trap 实分配 20MB);审阅修订:删除 host_printf_n 重复校验死 代码;utils.rs 注释原断言的"%d 运行时 clamp"不存在(真实机制: 不取宽度参数 + typeck E3032 拒收)——注释改真实归因,"%*d 动态宽度 合法 C 被拒"登记 C语言子集规范 §2.10 已知差异表(U6#3 同类清查); ⑦ #10:数组快照 payload 级 256 截断 + truncated 标记(wire serde default 向后兼容);schema 冻结防线当场抓到新字段(test_substructure fields_frozen FAIL)→ 白名单 + spec §2.4 + 文档头修订说明同步;补纯 计数红锚(不引用新字段/常量,修前断言 FAIL 而非编译不过——U0#6 形态 互补)。验收(审阅后全量实跑):cargo 71 套件 999+ 通过 / clippy -D warnings 零警告(审阅抓出 3 处 unnecessary_mut_passed 已修)/ shadow C 675 零非预期 / C++ 非预期 0 / serve 57/57(RSS 峰值 25MB < 64MB)/ replay 61/61 / release 构建通过;本批触碰文件统一 rustfmt。U2 剩余: #13 libc 边界批、#6 快照预算归档;go vet 存量 + CI vet、U3 全项待续。 审阅登记的后续立项:snapshot_into 每步深拷 freed_logs(BTreeMap, 稳态可达 16387 条)是快照侧剩余的克隆放大大头,比 heatmap 更值得 单独立项(Arc 化或差量引用,与 U2#2-b 的区间结构协同)。
2026-09-14(续):U2#13 + go vet 根治批 + U3#2 先遣完成(红→绿闭环)。 ① U2#13 libc 边界批六项:fseek 负偏移三种形状(二进制绕回/文本 SEEK_SET 同病/文本 CUR-END 钳 0 静默成功)统一改为返回 -1 且游标不动(glibc EINVAL 语义,锚 test_u213_fseek_negative_offset_rejected);bsearch key 侧边界 (compar==NULL 分支野指针 key 切片 panic → 按"未找到"返回 NULL);host_strerror 补 region 登记(泄漏报告漏计 + free 误报 E3027 双锚);freed_logs 部分重叠 整条删除改精确裁剪(前缀缩 size/后缀改键插新/嵌套拆两条,UAF 假阴性窗口 保留锚 test_u213_freed_logs_partial_overlap_trimmed);register_function/ register_function_name 加 MAX_FUNCTIONS=65536 上限(超限拒绝,u32::MAX 即 OOM abort 的形态由同上限拦截——红锚用 65537 可安全留痕,极端值注明); call_user_function 的 assert! panic 改教学诊断(非 4 字节参数比较器,检查 前移到状态保存前零污染)。新文件 tests/u213_libc_boundary_test.rs 七锚。 ② go vet 存量根治 + CI 接线(ABI 2.0.0→2.1.0,加函数=minor):三处 unsafe.Pointer 误用全部是 FFI 返回指针的 uintptr→Pointer 逆向转换(vet unsafeptr 检查器对此无白名单,纯 Go 结构不可消除)——按登记过的收口路线 新增四个 buf 写入式出口(vitro_engine_version_into / vitro_abi_version_into / vitro_get_runtime_error_into / vitro_get_compile_errors_into,调用方缓冲+ 正向指针,零所有权转移),Go 侧 PtrToGoString 整体退役删除(含 gosmoke 的 cString——其注释自称"vet 合规形态"与事实不符,U2 批审阅点名的第二处);
go vet ./scripts/...零输出 + CI 新增常驻步骤;头文件四声明同步;契约 测试补 buf/指针两形态语义等价锚 ×2。gosmoke 实跑:abi=2.1.0 ✓。 ③ U3#2 先遣:变参 double/long long 实参的 8 字节位模式中转从 4 字节 slot0+占位 slot1 止血迁至 8 字节专用槽(call.rs 四处:Call/CallPtr × D/Q); 红锚用"与 4 字节槽用户共享 offset"的结构判据(struct 赋值 src 临时与 StoreLocalD 同指 24,修复后必然分离)——首版"8 对齐"判据因 offset 巧合 绿而被废弃,判据强度教训留痕。U3 剩余登记:#1 作用域化分配器全量手术 (需逐点审计 expr.rs 槽生命周期)、#3 next_local_offset 回收、#4~#9。 验收:cargo 72 套件全绿 / clippy 零警告 / shadow C 675 零非预期 / serve 57/57(RSS 峰值 24-25MB<64MB,四轮 seek 实测)/ replay 61/61 / go vet 零输出 / release 通过。2026-09-14(续):U2#13/vet 批审阅修订收口(用户审阅:2 P1 新缺陷 + 9 项 P2/P3,全部处置)。① P1-a bsearch 越界早退泄漏 qsort_depth:key 边界检查原插在 set_qsort_depth(+1) 之后且直接 return——8 次野指针 key 后 计数器恒 8,bsearch 永久 NULL、qsort 静默 no-op(用户探针实证排序结果 无声错误)→ 检查前移到 depth 递增前(与参数守卫同处);红锚 test_u213_bsearch_wild_key_leaks_no_depth(首版 helper 压栈顺序错误—— 漏 compar 且顺序颠倒——修正后红→绿);② P1-b strerror 只做了分配三步 契约的第一步:无条件 push_region 在地址复用时造同址双条目(用户实证 verify_region_index Err)+ stale freed_logs 拦截 write_memory 返回全零缓冲 → 改为与 host_strdup 逐字同型(freed_logs_remove_overlapping → find_region_mut 复用改字段 / push_region 新址)+ 写入失败显式 trap; 红锚 test_u213_strerror_reuse_no_duplicate_regions(quarantine_budget=0 构造复用路径,原双锚走全新地址恰好绕过复用——覆盖教训留痕); ③ P2/P3 全处置:四个 *_into 返回语义改完整所需长度(n>=max_len 即 截断可检测——原 min(len,max_len-1) 使 Go 侧护栏永假死代码);Go 死绑定 清零(CompileErrors/CompileErrorsLength/RuntimeError/FreeString/EngineVersion 五字段退役,"PtrToGoString 退役只退了一半"补齐);gosmoke 头注重写 (自相矛盾的 vet 豁免说法废除)+ readIntoProc 去 dll 参数;ci.yml 指向 修正;项目更名记录.md 的 vet "exit 0" 论断加勘误(用户最小复现实证旧 PtrToGoString 形态必 exit 1,该行与"3 处从未暴露"前提冲突);AGENTS.md ABI 2.0.0→2.1.0、规模评估报告 as-of 标注;CHANGELOG 补 [Unreleased] 三节(ABI 2.1.0 四出口 / U2#13 六项+P1 修订 / U3#2);serve RSS 记录 修正 23→24-25MB(用户四轮实测);register_function 返回值忽略加口径 注释(编译器侧防御静默跳过 vs host 侧超限 trap)。验收(修订后全量 实跑):cargo 72 套件 1019+ 全绿 / clippy 零警告 / go vet 零输出 / gosmoke abi=2.1.0 / shadow 675 零非预期 / serve 57/57 / replay 61/61。
2026-09-14(续):U3 第二批完成(#4 T1 上限 + #5 T2 双层根因 + #8 容器 查重,红→绿闭环)。① #4:Pass 3.6 实例化循环加 1024 轮上限 + 新码 E1022(自递归模板
f(&t)确定性诊断;OOM 形态无法安全留痕同 register_function 先例,触发锚 test_u3_template_instantiation_round_limit_ triggered 0.59s 有限完成即上限生效证明);② #5 双层根因:表层——类 实例化只 drain 一次(改为与函数同收敛循环 drain + check_class_methods); 深层(调试实证 sigs=None 定位)——函数模板实例化体的 VarDecl 替换把 TemplateId 静态 mangle 成 Class 名,visit 不再触发类合成注册 → 新增 preserve_tiid 替换变体(类路径仍用 mangle 版,成员不经 visit);③ #8: 容器合成查重前置(已注册返回占位)+ instantiated_class_names 单源 + push 点查重。红→绿锚:cpp_u3_vec_class_twice / cpp_u3_class_instantiate_ in_template(e2e + 手写 golden;开发中挖出独立存量缺陷登记:赋值右侧 与调用实参位置的函数式构造p = Point(3,4)/f(Point(1,2))裸类即失败 E3023,与本批无关,锚用规避写法,待办登记)。过程事故留痕:消元测试 临时禁用查重短路(false &&)后未及时恢复,被 cpp e2e 当场抓回(probe2 回归 E3002)——"临时调试代码必须同批清除"教训。U3 剩余登记下批: #9 嵌套 struct 查重、#7 变参实参区溢出、#6 寄生收口、#1/#3 完整槽位手术、 函数式构造存量缺陷。验收:cargo 72 套件全绿 / clippy 零警告 / shadow C 675 + C++ 零非预期 / serve 57/57 / replay 61/61 / go vet 零输出。2026-09-14(续):U3#9 止血完成(同名嵌套 struct 静默覆盖 → 显式冲突 诊断,红→绿锚 test_u3_nested_struct_conflict_diagnosed)。病灶实证:
class A{struct Inner{int x;}}+class B{struct Inner{double y;}}—— NestedStruct 展平进全局 structs 表时无条件 insert,B 的 Inner 静默覆盖 A 的,a.i.x报 E3042 假错误(成员访问指向错误布局)。止血:保留首个 + 同名不同布局显式 E3002(含"展平命名下无法共存"教学文案);嵌套 union 同路径(parser 将 union 塞 NestedStruct)同批覆盖。完整根治登记下批: 嵌套名 mangled 化(Outer__Inner)+ 字段类型引用与访问路径跟随(回归面 含 Outer::Inner 实例化既有支持)。U3 剩余:#7 变参实参区溢出、#6 寄生收口、#1/#3 槽位手术、函数式构造存量缺陷、#9 完整根治。 验收:cargo 72 套件全绿 / clippy 零警告 / shadow C 675 + C++ 95 一致 零非预期(cdylib 强制重建后复跑——发现并修正 --bin 构建不带 cdylib 的 验证盲区)/ serve 57/57 / replay 61/61。2026-09-15:复刻评审(M1~M20 二审修订版)独立复核入库(见 §7A)。 五处撤回(M1/M3/M13/M17/M18)全部认同,撤回论证溯源一致(决策语境 缺失 → M20 决策日志;首个落地 = 语言选型评审20260914.md)。6 项可验证 硬主张机器复核:3 成立(M15——AGENTS.md 自称 facts check 为 CI 门禁但 ci.yml 无此步骤;M13——ABI 版本代码 2.1.0 / 项目更名记录.md 仍载 2.0.0,跨文档漂移实证;M14——packed sizeof 防线空洞覆盖,存量 唯一用例 sizeof_struct_union.c 单 int 成员对分歧零敏感)、1 部分 过时(M11——Memset 已被 U1#5 接入 codegen,仅 Memcpy/Strlen 为 "无生产者实现")、1 不成立(M7——与修订后 M3 自相矛盾,真禁用 开关是 vm_bench 方学校正前提属资产)、1 定性修正(M9——"栈泄漏" 与 §7 修正行冲突,func.rs:21 每函数重置、属编译期帧容量放大)。 复核自我留痕:首轮
Opcode::(实际OpCode::)大小写拼写错误 grep 曾得出"Layer A 全域零引用"错误结论,二轮复验修正——M13 撤回 理由(工具误用成为结论依据)的活例;复核命令随结论留档自此为义务。 归位(详 §7A):M14 → U1#13 新增行;M2 + M11 残余 → U5#5 新增行; M8 残余 + M12 → U6#4 扩容;M15(ci.yml 补 facts check 步骤)+ M13 细化(facts 跨文档常量对账 + "历史事件段豁免/现值句对账"判据)登记 立即项;M5/M9 由 U2#2/U3#3 既有承接;M6 改判"加新类型时再做";M4 补充实测维度(单步粒度而非吞吐);M19 与 CS0 范围关系待裁定。2026-09-18:M15 接线 + M13 细化落地("多真相与文档漂移"处置批, §7A 登记的立即项全数执行)。 ① M13 细化:
scripts/facts新增常量对账判定面(auditConst)—— 真值唯一来源first_batch.rs的VITRO_ABI_VERSION;判据 = 陈述 "当前现值"的句子必须等于真值、记录"历史事件"的句子(迁移箭头 → / 首批 / 曾 / 当时 / 追加 / 条目 等)豁免(两者可同篇共存);漂移一律 人工修(自动替换会把事件句篡改成假历史)。上线即实战红:抓出 4 处此前不可见的 ABI 漂移(架构设计.md:691.2.0/ 项目更名记录.md:352.0.0/ 项目路线图.md:151.2.0/ 构建指南.md:491.2.0)——处置: 现值句更新为 2.1.0;更名记录事件句改写为明确历史叙述("更名交付时 升至 2.0.0(1.3.0 → 2.0.0…现值 2.1.0)",不篡改历史)。证红锚:const_audit_test.go8 例(夹具全取自真实漂移行)+ 埋雷记录 #3。 ② M15 接线:ci.yml 新增 "Facts doc-truth audit" 步骤(replay 之后),go run ./scripts/facts --run --cargo-log native/cargo_test_ci.log check; cargo test 步骤 tee 日志落盘,facts 从日志解析 passed/套件真值(新增--cargo-log,不重跑 30 分钟测试);shadow 真值采集器兼容 CI 产物名shadow_data.json;CI 每轮真值新鲜(无超龄红)。工具自称 CI 门禁但 workflow 无此步骤的口径漂移(M15 原始实锤)就此闭环。 ③ 数字漂移清零:门禁存量 2 处修复——路线图测试防线行拆分(影子 数字=现值行 675 / 99 对齐产物真值;cargo925拆出标 2026-09-13 as-of,防整行冻结豁免影子数字);C++拓展实施计划.md §15.5 验证快照 行级补 2026-06-13 as-of(历史时点真值不追改)。顺带人工核对出 facts 规则覆盖不到的过时分解并一并对齐 2026-09-15 产物真值: README 当前状态节(671→675、97→99、81→83、K&R 69→81、ABI"当前 1.2.0"→2.1.0);AGENTS.md 防线覆盖行(Baseline 321→359、合计 667→675、 match 660→668、C++ 100→99 = 95 一致 + 4 clang_compile_fail 名单补 2 个 U3 用例)、Baseline/K&R 目录计数行。对账链闭合: 675 = 359(含 3 JIT)+ 82 + 81 + 138 + 15;668 = 675 − known_issue 3 − gap_extension 4。④ 已知边界登记(埋雷记录 #3):行级豁免会放过 "首批 1.1.0,当前 1.2.0"混合句(漏报方向,本次人工修复 README:53 同形态);引擎版本等其他版本化常量未纳入规则,按需扩容。 验证:facts checkexit 0(漂移 0 / 冻结 151 / 坏引用 0);go vet ./scripts/...+go test ./scripts/facts/全绿。2026-09-18:D5 后续批次四站全迁——CI 活性 Python 清零。
serve_smoke.py/precompile_bytecode_libc.py/ci_three_tier_check.py/engineering_health.py全部迁 Go 并退役删除,ci.yml 四步骤同步切换。 每站均按 D5 纪律走完"双轨对账 → J9 → 切换 → 退役 → 坏引用清零": ① serve_smoke(scripts/serve_smoke,当时口径——断言面 2026-09-29 扩至 59):57/57 断言判定逐行一致、 RSS 峰值同为 24MB;J9 双通道(VITRO_RSS_BUDGET_MB=5 → 1 FAIL / exit 1; 桩 exe → 51 FAIL / exit 1);断言数:自报行字节级一致(facts 采集锚); UseNumber 复刻 Python int/float 区分;18 处坏引用全清。② precompile (scripts/precompile_bytecode_libc):--check 双侧同绿(digest 逐字节 一致);双侧真实重生成产物 JSON 逐字节一致、.rs 仅头注指向 Go(fd0c1cf 口径零语义漂移);J9 篡改源文件 → digest 失配 / exit 1。③ three_tier (scripts/ci_three_tier_check):9 套件判定/计数/hard-soft issue/退出码 一致、报告逐行一致(除时间戳与 cargo 计时行);J9 假 KNOWN 条目 → hard / exit 1,顺带抓出 title 提取缺捕获组的复刻 bug(绿路径对账不可见—— 埋雷是判定面的必要补充,此点已入台账方法论);5 处坏引用全清。④ engineering_health(scripts/engineering_health):纯报告生成器无 J9 义务;报告数值逐项一致(tie 行序差异声明于驱动头注)。运维细节: Go 版产物写出统一 CRLF(对齐 Python text-mode,git autocrlf 归一后 diff 零差异);cargo 输出行尾归一(对齐 universal newlines)。facts 的 serve_smoke 采集器已切 Go(pythonExe 死代码删除)。仍在 Python(2026-09-22 终态裁定:全部留档随 Rust 区退役,无迁移待办——"判定型默认 Go"政策只 约束新脚本):一次性取证(§13.7 豁免)/ mutation_facet_test(J3 批次突变 义务随 native/ 冻结失效)/ 活性生成器三件(触发源已冻结:容器布局源随砍 C++ 拍板、templates/ 冻结、性能基线测冻结引擎数字已记录)。死代码清理批 同日删除 3 个无消费方散测(gen_cases / test_massive / test_more)。全量 清单见docs/current/02-构建与上手/脚本总清单与必跑防线.md。