@@ -264,3 +264,38 @@ framework-lab 的 8 个用例在 ubuntu-24.04、macos-15、windows-2022 上全
264264的字段已经与那份描述同形,所以它是后续的第三种载体,而不是改写;` mcpp.lock ` 不记工具链——lock 的
265265内容是依赖解析的结果;` kind = "bin" ` 的宿主工具仍走 ` [tools.overrides] ` ——键空间与语义不同,
266266合并会让一张表有两种键。
267+
268+ ## 6. 最终自我 review(交付后,2026-10-02)
269+
270+ §5 的生态级 review 写在 CI settle 之前。这一节是交付后的复核:按 goal 列出的每个视角,给出** 这次实际
271+ 拿到的读数** ,以及明确留下的边界。
272+
273+ | 视角 | 读数 |
274+ | ---| ---|
275+ | 架构 | 核心只新增 6 个访问器、2 条指令、3 个清单键;顺序与输出各只实现一份(核心一份、L2 一份)。13 个成员迁移完成,** 没有一个成员重新实现顺序、拒绝文案或输出** ——` describe_missing ` 是唯一一份拒绝文案 |
276+ | 稳定性 | 默认路径输出逐字不变;没有本地工具链时快速路径的全部代价是一次失败的 ` open ` ;请求循环上限三轮,且请求的那次运行在 ` apply ` 与写缓存之前被丢弃,所以没有半应用状态 |
277+ | 优雅简洁 | 一条 ` SourceDecision ` 被四处读(status 行、` Finished ` 汇总、` resolution.json ` 、` mcpp why ` );` tool::choice ` 可由字符串构造,所以成员迁移对其使用者零改动 |
278+ | 用户体验 | 每个显式来源一行,带类与 ` file:line ` ;每条拒绝都列出命名它的四种方式;` considered ` 记下每一层问过什么、答了什么 |
279+ | 兼容性 | ** 未迁移的第三方插件无需改动即受益** (覆盖发生在引擎层,` xpkg_dir ` 直接回答);成员的历史环境变量保留;地板不满足时的拒绝现在会点名地板与升级方式(第 7 处发现) |
280+ | 跨平台 | Linux / macOS / Windows 全绿。跨平台本身贡献了 5 处发现:响应文件的两种 tokenize 语法、Darwin 的 ` environ ` 、宿主自己补的 ` .exe ` 后缀、Apple 链接形状拿不到 ` --ld-path ` 、gcc 16 的 ` always_inline ` 拒绝 |
281+ | 一致性 | 优先级只写两份(核心、L2);中英文档结构一一对应;` docs/tool-sources.md ` 补上了此前三处分散记述都没说出的那一对条件 |
282+ | 无感升级 | 不写任何新键的工程行为与输出不变,由既有 e2e 与 framework-lab 的 ` default ` 用例断言;插件 0.19.0 的成员在默认路径上下载与输出不变 |
283+ | 测试覆盖 | 单测 144(新增 21);e2e 873-877 加 875 里 gcc 拒绝的反例;` plugin-logic ` 29 例;framework-lab 10 例 × 3 平台;toolchain-lab 8 例 × 3 平台;CI 判据读 ` resolution.json ` ,所以在已装载荷的 runner 上也能断言「这次没要求它」 |
284+
285+ ** 11 处发现里,有 2 处是我自己的缺陷** (rules-sycl 把载荷根与程序当成一个值;` --ld-path ` 只写在
286+ Linux clang 分支里),** 3 处是编译器/工具链危害** (clang 20.1.7 的两次崩溃、gcc 16 的内联拒绝),
287+ ** 1 处是文档过度断言** (lock 记 ` local ` 从未实现)。每一处都带前后读数,没有一处靠推断结案。
288+
289+ ** 明确留下的边界:**
290+
291+ 1 . 省下的是一次性的供给成本,不是每次构建的成本——对已有暖缓存的 CI 不会再省第二次(framework-lab
292+ 的第四次构建读数)。
293+ 2 . ` xcode-27 ` 的两条 lane 仍然红,原因在上游(SDK 的 ` arm64e.x1 ` stub,lld 22.1.8 无法解析)。
294+ llvm-macos27-lab 证明了 ` release/23.x ` 的修复可用,但没有任何 LLVM 发布带着它,所以 mcpp #669
295+ 保持打开。
296+ 3 . Windows e2e 的 25 分钟超时是那条 lane 既有的 flake(main 在 2026-10-01T08:09 的运行同样超时),
297+ 重跑即过;本次的五个新用例在 Windows 上因能力缺失被跳过,不可能是原因。
298+ 4 . e2e 875 在没有装 llvm 载荷的宿主上 SKIP,而 macOS CI 正是这样的宿主——这就是第 9 处发现只能
299+ 由 lab 找到的原因,也是 lab 这种形态存在的理由。
300+ 5 . 工具链描述数据化、` mcpp.lock ` 记工具链、` kind = "bin" ` 宿主工具并入同一张覆盖表:都明确不做,
301+ 理由记在设计记录的「已知边界」。
0 commit comments