现状注记(2026-10-07):本文为 2026-09-11 时点的定位转型记录与 Phase 0~3 路线原件——排期权威已让位 MoonBit迁移总计划(2026-09-18 起);路线实质演进:Phase 0 切割已执行、Phase 2a wasm 白箱 → wasm-gc 单出口(S7 gateway)、Phase 2b/3 capi 二三批 → U2 拍板裁不做(见wasm多实例并发模型与U2拍板);「C/C++ 子集」表述中 C++ 已裁砍(2026-09-20);所引 Rust 设施随 2026-10-05 删区退役。保留为定位决策档案。 记录日期:2026-09-11 决策依据:2026-09-06 全面代码审阅报告(docs/current/07-质量与裁定/代码审阅与修复追踪20260906.md)、SharpTutor 三个 Issue(A/B/C,2026-09-07)、前端切割战略讨论、wasm32 冒烟实测(2026-09-11) 取代:
CIDE_MOBILE_TEACHING_THREE_LANGUAGE_PLAN.md的"移动端优先"定位(该文档已于 2026-09-11 归档至../archive/ARCHIVE_CIDE_MOBILE_TEACHING_THREE_LANGUAGE_PLAN.md) 核心定位转型:从"移动端教学编辑器"到"教学 C/C++ 子集参考执行引擎(白箱)" 现状注记(2026-09-27):本文为定位转型决策记录(宪法层)。其后两次演进未回写正文、以注记承接:① MoonBit 迁移(2026-09-18 起,总计划)——本文 §6 的 Rust 侧排期让位于总计划 S 系列;② U2 拍板(2026-09-19,wasm多实例并发模型与U2拍板)——§5.3 capi 第二/三批与 §6 Phase 2b/3 裁不做(详见各节注记)。
0. 决策摘要
| 决策项 | 结论 | 依据 |
|---|---|---|
| 前端 | 切割,本仓库只做后端;前端交给社区(已有 SharpTutor/WPF 第一个外部消费者) | 前端 30 条审查发现几乎全是架构级;移动端取舍持续拖累桌面端;自研编辑器问题簇收敛成本高于价值 |
| 移动端 | 放弃原生移动;"看"的场景由未来 Web 前端的移动浏览器天然覆盖 | 软键盘/IME/手势/触控目标是自研编辑器在移动端的固有硬伤;编辑场景本就在有键盘的设备 |
| 许可证 | MIT | 对教育产品集成最友好(无 copyleft 顾虑,SharpTutor 类商用零障碍) |
| 交互资产 | 时间旅行/单步语义标注/内存映射/指针追踪/知识卡片是核心资产,先固化协议(wire format)再优化引擎 | 协议是公共承诺与宪法;引擎内部优化(CoW)在协议稳定后可独立推进 |
| wasm32 | 白箱形态主出口之一,已冒烟实证 | 零代码修改产出 3.75MB .wasm,Node 下 C API 全链路 + E3070 安全检测全部工作 |
1. 背景与动因
1.1 审阅报告的结构性结论
2026-09-06 全仓库审阅(137 条发现)完成后,已完成四批修复(详见报告第 0 节追踪表):
- 第一批崩溃止血(8 项 P0):递归深度防护、自含 struct 环检测、算术溢出家族、catch_unwind、乘法溢出、apply_fix 中文 panic;
- 第二批 CI 门禁(4 项 P0):shadow 退出码 + clang 预检 fail fast、三层对账带牙齿——门禁化当天暴露 4 例被恒绿掩盖的存量差异;
- 第三批 codegen soundness(10 项):全局初始化位模式、类型化自增、char 字节宽度、嵌套赋值槽位、static 隔离、ULL、enum 折叠、逻辑规范化;
- 提前插入的教学检测(V-P1-6/12/13):栈缓冲区溢出 E3070、无效 free 三场景诊断、scanf 字符流化 + 第四批 Flutter 首批。
修复过程验证了两个关键事实:
- 前后端接缝本来就是干净的——四批修复全部在后端完成,五层测试防线独立验证,未碰 Flutter;
- 问题密度分布高度不均——后端问题修完即收敛(防线全绿、clippy 零警告),前端 30 条几乎全是架构级(渲染管线缓存、巨型 IdeState、自研编辑器 IME),需要的是重构而非修补。
1.2 现场证据:移动端取舍拖累桌面端
实际使用反馈确认:软键盘 IME、手势交互、触控目标(审查 P2 记录 <44px、无 Semantics)在移动端持续出问题;为兼容移动隐喻(悬浮球呼吸动画、小屏 Tab 布局)付出的设计折中直接拉低桌面体验。手机适合"看"(时间旅行回放、可视化),不适合"编辑"——而"看"恰恰是 wasm32 + Web 前端天然覆盖的场景。
1.3 外部信号:SharpTutor 三个 Issue
第三方教学 IDE(SharpTutor,WPF/.NET,三进程架构)主动提出把 Vitro 后端作为 C/C++ 执行引擎接入,并提交了三个高质量 Issue(复现步骤、对照用例、根因分析全部核实无误):
- Issue A(bug,教学阻断)✅ 已修复(2026-09-11):scanf 格式串空白指令不跳白——
"%d %c %d"读3 + 4时%c捕获空格。核实补充:sscanf 同样中招,根因在共享的parse_scanf_specs只提取%转换符、丢弃格式串空白字符,scanf/sscanf/fscanf 全族同病。锚点:vitro_vm/src/host/io.rs+parse_scanf_specs。修复:解析结果改为有序项序列ScanfItem::{Spec, Whitespace},空白指令只跳白不取参,参数计数按Spec项数统计。 - Issue B(bug,两个根因已定位)✅ 已修复(2026-09-11):lambda 调用缺陷——B1 立即调用
[](..){..}(2,3)编译错(vitro_typeck/src/expr/call.rs:100的 lambda 分支依赖lookup_var,Lambda 表达式节点查不到落到:197兜底);B2 任何函数实参位置调用 lambda 运行时 StoreLocal 越界(补充发现:不限 printf,自定义函数同样触发;症状与审查报告 §7.2-7 临时槽位家族三起历史 bug 同构);B3:197误用E3045_CompoundAssignType报调用错误(建议文本串行的真因,非 error_catalog 问题)。修复落点:typeckresolve_call_ptr增加 Lambda callee 分支且与变量形式共用rewrite_lambda_call(消除双轨);新增错误码E3066_CallNonFunction;codegen 新增is_lambda_closure_type单一判定——lambda 变量槽位与闭包对象保底 4 字节(B2 实测根因:无捕获闭包 size=0,帧内无槽位,StoreLocal冲出 1MB 线性内存),实参一律按 1 word 地址压栈(双字段捕获闭包曾多压 1 word 致参数错位)。 - Issue C(提案):为 headless 消费者提供机器可读边界。关键事实:capi 路线已有生产级先例——shadow 驱动(初为 Python ctypes,2026-09-13 起 Go 版
scripts/shadow_verify)自始就直调 C ABI,截至当日跑完 671 个用例。提案实质是"把已验证的边界补全",不是新建边界。
结论:外部消费者已经出现,后端作为独立组件的定位是被需求推着成立的,切割是把这个事实固化。
2. 新定位:教学 C/C++ 子集参考执行引擎
定位扩展(2026-09-12 同步声明,CSharp前端引入计划.md §11 待办①): 在 C/C++ 主轴之上新增 C# 教学子集作为第二前端(SharpTutor 锚定,启动时序 与批次见
CSharp前端引入计划.md)。本文件的 架构纪律(三出口一核心、防线体系、行为资产清单)对 C# 前端同等生效。
类比:quickjs 之于 JS 教学/嵌入——小、白箱、可嵌入、行为与标准对照诚实。
2.1 保持不变的资产
- 五层测试防线与"Golden 只能来自 Clang"原则;
- 教学诊断体系(错误码 + 修复建议 + 知识卡片);
- 安全检测(E3070 栈溢出、E3060/E3061 UAF/Double-Free、E3072 循环包含、无效 free 三场景等);
- C/C++ 教学子集及
*_FAILURES.md诚实记录文化; - 时间旅行/统一模式引擎(Phase 13 起)。
2.2 三出口一核心架构
vitro 引擎核心(Rust workspace,禁止平台 API 耦合)
│
├─ native cdylib / C ABI(capi)
│ 第一消费者:vitro_cli、scripts/shadow_verify.go(已退役)(capi 直调,685 用例生产验证)
│ 外部消费者:SharpTutor(.NET P/Invoke 子进程)、Python 工具链
│
├─ wasm32-unknown-unknown(.wasm + 薄 JS/TS 绑定)
│ 浏览器前端(社区)、在线教学演示、移动浏览器"看"场景
│ 冒烟已实证:零修改构建,C API 全链路 + E3070 在 wasm 下工作
│
└─ vitro_cli serve(JSON-lines 会话模式,新增)
headless 交互:step/seek/breakpoint 的脚本化消费
实现必须复用 capi 同一套入口函数——三出口一套语义,禁止第三套实现漂移
架构纪律(写进 AGENTS.md 编码约定):
- 新能力一律先落"语言中立 Rust 层"(
session_api/engine::session_ops;原 flutter_bridge 已随重构批次 R2 整删),三个出口只做薄包装; - 复杂返回结构(StepPayload、内存区域、事件流)过边界统一走 JSON 字符串序列化,不搞扁平结构体数组(性能换稳定性与版本容忍度;ctypes 消费已证明字符串边界够用);
- capi 是公共 API,承诺即契约——补全同时引入
vitro_abi_version()。
2.3 移动端决策记录
- 放弃:Android 原生(cargo-ndk 双 ABI、adb/logcat 流水线)、移动交互隐喻;
- 保留:不做删除性动作——
CideFlutter/整体迁出本仓库时按现状带走(社区若接手 Flutter 前端可用),本仓库 CI/脚本/文档全部去前端化; - 覆盖"看"场景:wasm32 + 任何 Web 前端在移动浏览器天然可用;
- 诚实记录:这是战略转向,与立项愿景(移动教学)不同,原因如 §1.2。
3. 交互资产重构:协议先行
3.1 资产盘点(从 107 个 Dart 文件提炼,迁移时固化)
| 资产 | 后端来源 | 交互语义要点 |
|---|---|---|
| 时间旅行 Seek | unified engine + CheckpointManager | 任意回退/前进;回退后文件状态、变量历史、输出窗口的一致性契约 |
| 单步语义标注 | 16 种算法步骤模板 + TraceAnalyzer | 每步附带"这行在做什么"的教学描述 |
| 内存映射可视化 | MemoryState + malloc 行号追踪 + 外部碎片 | 步进时哪些区域变化、泄漏/越界高亮 |
| 指针追踪动画 | PointerSnapshot 四状态 | Valid/Freed/Null/Dangling 的实时箭头与状态迁移时机 |
| 知识卡片 | 错误码 + 修复建议 + 根因推断(RootCauseHint/MisconceptionPattern) | trap 时卡片出现的时机与内容分层(现象/原因/解法) |
| 变量历史 | frameCache(滑动窗口) | 随 seek 联动的变量值回放 |
| 热力图 | heatmap line_counts | 执行频度的行级着色 |
3.2 两层解耦:协议层 vs 引擎层
协议层(对外,Phase 1 内定稿 v0.1,SharpTutor 参与回放校验)——docs/spec/ 下定义语言中立 wire format:
2026-09-11 修订:schema 定稿从 Phase 3 前置到 Phase 1——第一批
vitro_step_next_json的输出即 StepPayload,协议不可能晚于消费它的 API(SharpTutor 评审论据,已采纳)。CoW 等引擎内部优化仍以 schema v0.1 定稿为前置。
StepPayload稳定 schema:步号/行号/函数 display_name(教学可读)与 mangled 双字段/变量快照/输出增量/事件流(含差分编码StepPayloadDelta的既有机型);- 指针四状态(Valid/Freed/Null/Dangling)与
accessed_vars读写的枚举值文档化; - seek 语义(回退到第 N 步时各视图如何联动的一致性契约)+ frameCache 窗口语义文档化(窗口 2000 帧 / 驱逐最早 20% / 越窗 seek = 检查点恢复 + 正向重放);
- 断点订阅、内存区域查询(
kind: global|stack|heap+status+alloc_line,见 §5.3 第二批)、热力图查询的请求/响应格式; - schema 版本化:字段只增不改语义,废弃走双写过渡期。
引擎层(对内,协议稳定后独立优化)——对应审查报告 §7.3-12/13 与 V-P1-9/4:
- 时间旅行每步全量 1MB memcpy 的 O(n²) 降为"最近检查点 + 脏页(MemoryImage::Delta 已有 4KB 分页机制)+ output/trace 截断式恢复";
- 快照边界完整化:VFS(
snapshot_files/restore_files已存在未接线)、local_sym_map、伪时间(time()改 step 派生确定性时钟)纳入快照闭环,文档化不可恢复项清单。
顺序纪律:schema 定稿 → 引擎 CoW。 协议与内部表示解耦后,两边互不阻塞。
3.3 vitro_cli serve 会话模式设计要点
- JSON-lines(NDJSON):每行一个请求/响应,天然流式、可
jq、任意语言可消费; - 请求带
id字段做关联(异步竞态对账)、错误帧与响应帧同构({"id":n,"error":{...}})、提供session.reset(长寿命防抖进程复用场景,避免高频重启进程)——SharpTutor 评审新增,已采纳; - 会话生命周期镜像 capi:
session.create / session.reset / compile / run / step.next / seek / breakpoints.set / memory.regions / payload.get / session.destroy; - 与 capi 共用入口函数(见 §2.2 纪律 2);
- 输出走结构化通道(
OutputKind::Stdout/Stderr/Note+ capivitro_get_program_output*/vitro_get_engine_notes*)—— 原计划"复用 shadow 的清洗规则单一来源"已被更彻底的方案取代:审查 E-P1-5 的根因是引擎把程序 stdout 与 引擎附注写进同一条字节流,清洗规则散落十余处且会在程序打印同类文本时误删真实输出,故废除清洗、 改为源头打标。✅ 已完成(2026-09-11),详见代码审阅与修复追踪20260906.md第 5 条。
4. wasm32 白箱化:冒烟实证与路线
4.1 冒烟结果(2026-09-11 实测)
| 层级 | 范围 | 结果 |
|---|---|---|
| cargo check 层 1~3 | 全部 10 个编译器 crate + runtime + vm + vitro_native 主 crate | ✅ 零错误 |
| release 构建 | vitro_native.wasm 3.75MB(vitro_cli.wasm 4.46MB 同样产出) |
✅ |
| Node 运行 | 实例化 → session → compile_unit → compile_all → run → get_output | ✅ hello from wasm32、3 + 4 = 7 |
| 白箱特性 | E3070 栈溢出检测 | ✅ 教学诊断完整(含变量名与容量) |
两个设计红利的兑现:VFS 内存沙盒使"无真实文件系统依赖"(wasm 移植头号死穴不存在);catch_unwind 的 wasm32 cfg 预铺设直接生效(附带记录:wasm 下统一模式入口无 catch_unwind,panic 走 abort,为已知差异)。
4.2 唯一阻碍点与修复
实例化要求 __wbindgen_placeholder__ 等 import——flutter_rust_bridge 生成代码的 wasm-bindgen 残留。冒烟以 Proxy stub 证实 C API 路径完全不触碰它们。
修复:lib.rs 中 FRB 模块(frb_generated、api 层)加 #[cfg(not(target_arch = "wasm32"))] 门控——与前端切割同构的天然动作,小时级。冒烟脚本位于 %TEMP%/wasm_smoke/(smoke2.js、smoke_e3070.js),固化为 scripts/wasm_smoke/ 后进入 CI。
4.3 体积与优化(可选,后置)
3.75MB → 目标 2MB 内:wasm-opt(-O --strip-debug)+ LTO + opt-level = "z" 评估 + wee_alloc/默认分配器对比。教学场景一次加载后缓存,体积非首要矛盾。
5. 切割清单(Phase 0 执行手册 · ✅ 已于 2026-09-11 执行完毕)
以下清单保留为执行记录与验收依据;逐项落地结果见
CHANGELOG.md[Unreleased] Removed段。
5.1 仓库拆分
| 动作 | 内容 |
|---|---|
| 迁出 | CideFlutter/ 整目录(含 assets/templates——注意:shadow 防线与 E2E 模板用例依赖 CideFlutter/assets/templates/*.c,迁出前先把模板用例源复制到 native/tests/cases/templates/ 并改 shadow 加载路径) |
| 删除/迁出 | scripts/build_flutter.py、scripts/test_mobile.py、scripts/build_release.py 的 Flutter 段 |
| CI | .github/workflows/ci.yml 移除 Flutter/Android job;新增 wasm32-check job(cargo check target + Node 冒烟) |
| 文档 | AGENTS.md 重写为后端视角(定位、三出口架构、边界纪律)✅;docs/current/ 前端相关文档归档至 docs/archive/(2026-09-11 执行:17 份旧文档移入,索引与核心文档重写)✅;新增 docs/spec/(协议 schema)✅ |
| README | 重写:五分钟跑通第一个 demo(vitro_cli run + wasm 浏览器 demo)是社区前端的启动门槛 |
5.2 许可证与治理
- 全仓库换 MIT(LICENSE + Cargo.toml
license字段); - 依赖许可证盘点:
cargo deny(或手工cargo tree全量过一遍)确认传递依赖无 GPL 类污染,盘点结果记录入档; vitro_abi_version()引入 + capi 变更日志(语义化版本:加函数=minor,改签名/语义=major);- FRB 生成代码随前端走,本仓库删除
flutter_rust_bridge依赖(这也是 wasm 门控的一部分)。
5.3 capi 补全分批(Issue C 落地方案,已按 SharpTutor 评审修订,见 CAPI评审回复与实现状态.md)
横切契约(全部批次适用):复杂返回 JSON 字符串 + rust-alloc 所有权(vitro_free_string 释放,废弃 caller-buffer 双轨);所有新入口 catch_unwind;状态码 0=成功/负数=入参错误/正数=领域状态(1=trap、2=waiting_input);Session 指针句柄非线程安全(跨线程需调用方同步);UTF-8 输入输出契约。
| 批次 | 函数族 | 受益方 |
|---|---|---|
| 第一批 | vitro_abi_version / vitro_engine_version(git hash)/ vitro_last_error;vitro_compile_json(诊断含 end_line/end_column 字段,默认"起点+1"退化值,severity 枚举含 warning/hint);vitro_set_max_steps / vitro_set_call_depth_limit(V-P1-10)/vitro_set_deterministic 最小形态(time 固定 + rand 种子固定,判分确定性);vitro_run_json(return_value/trap/waiting_input/steps_executed);输出游标增量 vitro_get_output_delta;vitro_set_breakpoints / vitro_step_next_json / vitro_get_step_payloads_json;vitro_free_string |
SharpTutor 立即可用(80% 场景),StepPayload schema v0.1 随本批定稿(双方回放场景校验)。实现进度(2026-09-11):13/13 全部落地——含断点/单步三函数与 StepPayload serializable 类型链(UnifiedEngine 已由 Session 持有,三出口共用同一会话),逐项状态见 CAPI评审回复与实现状态.md §10.1 |
| 第二批 | vitro_get_memory_regions_json(新增 kind: global|stack|heap 合成枚举 + status: allocated|freed)/ vitro_read_memory_bytes_json(字节粒度)/ vitro_get_heap_stats_json / vitro_get_struct_fields_json;错误码表机器可读导出(error_catalog.rs → JSON,含"超出教学子集"E4001~E4031 段声明 + 审查报告 §8 已知差异清单机器可读化) |
内存可视化、断点调试类前端。〔已裁不做,2026-09-19 U2 拍板:19 声明冻结现状不新增;对应能力以 serve 协议为终态载体(C2 三段式已落 serve 过渡形态即正式形态)〕 |
| 第三批 | run_auto_steps / seek_to_step / get_vis_events / get_heatmap / vitro_demangle;时间旅行完整体验 |
schema v0.1 发布后按增量演进。〔已裁不做,2026-09-19 U2 拍板:并发与嵌入诉求由 wasm 多实例模型承担;MoonBit 侧对应能力随 S7/S8 协议/教学片重建〕 |
运行时保险丝契约(SharpTutor 评审新增):max_steps 与调用栈深度上限为会话级配置(教学内容 = 可控地撞上限并拿教学 trap,而非无限等待);杀进程即安全退出(VFS 全内存、无文件锁/临时目录依赖);JIT 与断点/热力图完整性从 V-P1-2 提级为行为契约(含断点的循环排除出 trace 编译,验收含全路径回归用例)。
6. 阶段规划(已按 SharpTutor 评审修订,2026-09-11)
| 阶段 | 内容 | 规模 | 前置 |
|---|---|---|---|
| Phase 0:切割准备 ✅ 已完成(2026-09-11) | 依赖盘点、模板用例迁移、切割清单执行、MIT 化、AGENTS/README 重写 | 2~3 天 | 无 |
| Phase 1:边界补全 | 语言中立 Rust 层提炼(session/unified/memory/breakpoints 下沉);capi 第一批(含 deterministic 最小形态与运行时保险丝契约,见 §5.3);vitro_cli serve JSON-lines(含 id 关联/错误帧同构/session.reset);vitro_abi_version();StepPayload schema v0.1 定稿(双方回放场景校验,定稿后 CoW 方可动工);Issue A/B 修复 ✅ 已完成(2026-09-11) |
1~1.5 周 | Phase 0 |
| Phase 2a / 2b:并行 | 2a wasm 白箱:FRB 门控(产物免 stub);JS/TS 绑定包;wasm 进 CI;体积优化;浏览器最小 demo。2b capi 第二批:内存 API(kind 三段式合成/字节读取)+ 错误码机器可读导出 | 各约 1 周,互不抢资源(wasm 走构建/绑定层,第二批走纯 capi 层) | Phase 1 |
| Phase 3:时间旅行完整面 | capi 第三批(run_auto/seek/vis_events/heatmap/demangle);时间旅行 CoW(V-P1-9)+ 快照边界完整化(VFS/local_sym_map/完整 step 派生伪时钟——与 Phase 1 判分确定性分层:前者服务重放,后者服务判分) | 2~3 周 | schema v0.1 定稿(Phase 1) |
排序修订说明:SharpTutor 建议 wasm 完全后置于第二批;上游采纳"schema 提前"但 wasm 改为并行而非后置——wasm 是社区前端生态的冷启动开关(浏览器 demo 承载"五分钟跑通"承诺),且与第二批无模块冲突。详见
CAPI评审回复与实现状态.md§7。 失效注记(2026-09-27):Phase 2a(Rust wasm 白箱)→ 已由 MoonBit wasm-gc 单出口取代(总计划 F-5,MoonBit 侧 S7 gateway 片);Phase 2b capi 第二批 → 已裁不做(U2 拍板);Phase 3 时间旅行 CoW → 已被 2026-09-22 性能裁定取代(checkpoint + 写集 undo,见性能探究实录③);完整 step 派生伪时钟 → MoonBit host 已以确定性时钟(恒 0)落地。本表保留为 2026-09-11 原始排期存档。
Issue A/B 可单独提前:与切割无依赖,纯后端修复 + 回归测试,半天量级。✅ 已于 2026-09-11 完成(A 与 B1/B2/B3 全部修复并进回归防线,详见 CHANGELOG [Unreleased])。
Phase 1 实现进度(2026-09-11):
vitro_cli serveJSON-lines 会话模式 ✅ 已落地(native/src/bin/vitro_cli.rs::cmd_serve)——id 关联 / 错误帧同构 /session.reset/ 与 capi 共用同一套入口语义;- 语言中立层提炼 ✅ 部分落地:新增
native/src/session_api.rs,capi 第一批的 JSON 结果构造全部下沉,capi与serve共用同一实现(防三出口漂移,纪律 §2.2-2);- StepPayload schema v0.1 ✅ 文档发布:
docs/spec/STEP_PAYLOAD_SCHEMA_V0_1.md(含回放场景校验记录;字段冻结由native/tests/step_payload_schema_v0_1_test.rs机械保证);对端三组回放场景仍待 SharpTutor 执行;- 隔离预算会话配置 ✅ 经 capi(
vitro_set_quarantine_budget)与 serve(config.set)双出口暴露。
6.1 验收标准(每阶段,已按评审补充)
- Phase 0:仓库无 Flutter 依赖可完整交付;防线全绿;LICENSE/README/AGENTS 就位;
- Phase 1:SharpTutor 用 capi 第一批(含 deterministic 最小形态)+ serve 跑通三进程架构集成,其 15 用例冒烟集全绿;StepPayload schema v0.1 文档发布(含双方回放场景校验记录);重复编译内存有界固化为回归断言(实测基线:10000 次交替编译 RSS 平台期);Issue A/B 回归用例进
crash_regression_tests.rs✅(2026-09-11 已完成,10 个用例,Expect 值取自 Clang/Clang++ 实测 Golden); - Phase 2a:
scripts/wasm_smoke/进 CI;社区用户npm i vitro-wasm五分钟跑通 hello world + 一次 E3070 演示; - Phase 2b:内存地图三段式(global/stack/heap + freed 保留可见)经 SharpTutor WebView2 消费验证;错误码 JSON 导出 + 已知差异机器可读化上线;
- Phase 3:协议 schema 增量演进(只增不改语义);10 万步程序的 seek 延迟较全量快照方案有量级改善(基准:
benches/unified_perf_baseline.c,当前约 18,500 步/秒)。
7. 风险与诚实记录
- 协议设计是单向门:StepPayload schema 发布后改语义成本极高,Phase 3 定稿前必须用现有 frameCache/StepStreamBatch 的真实消费场景回放校验;
- 三出口漂移风险:serve 必须复用 capi 入口(纪律已在 §2.2),否则重蹈"typeck 与 codegen 双轨语义"覆辙(审查 §7.2-8 的既有教训);
- 前端真空期:切割后到社区前端成熟前,本项目自身无 GUI——
vitro_cli(compile/run/step/unified)是过渡期唯一交互形态,其体验需要维护好; SharpTutor 依赖协调(✅ 已完成,2026-09-11):capi 第一批签名经 SharpTutor 完整评审并达成一致,逐条结论与六个开放问题的回答见CAPI评审回复与实现状态.md(含三项实证:重复编译内存有界、alloc_line 已存在、frameCache 越窗行为;该档已归档——capi 后续批次经 U2 拍板裁不做,见《出口分档与宿主策略.md》);其 §8 对等承诺(15 用例冒烟集 / capi/serve 骨架 PR / schema 回放场景)附 review 基线已接受;- wasm 已知差异:统一模式 panic 无 catch_unwind(abort);
time()/clock()真实墙钟破坏重放确定性的存量问题(V-P2 记录)在 wasm 下同样存在——Rust 侧随 Phase 3 裁停冻结不修,MoonBit 侧已以确定性时钟(恒 0)随 host 落地; - 遗留 P1/P2 清单不因切割作废:审查报告 V-P1-1~14、T-P1 剩余项等仍按报告优先级排期,本计划不替代既有修复路线。
8. 与既有文档的关系
代码审阅与修复追踪20260906.md:继续作为修复进度权威追踪(第 0 节);CAPI评审回复与实现状态.md:capi 签名定稿的评审依据(SharpTutor 诉求逐条回应 + 开放问题答案),实现 §5.3 第一批时对照执行;../archive/ARCHIVE_CIDE_MOBILE_TEACHING_THREE_LANGUAGE_PLAN.md:移动端定位部分被本文档取代(2026-09-11 已归档),三语言服务目标(C/C++/信)不变;C语言子集规范.md/C++子集规范.md:子集规范不变,仍是行为契约;CLI使用手册.md:Phase 1 扩展 serve 命令后更新;- 各
*_FAILURES.md:继续作为防线 5 双向监控的事实源(Phase 2b 错误码机器可读导出后与代码常量共同作为事实源)。