Skip to content

Commit 1911600

Browse files
committed
docs: the final self-review, with the readings this delivery actually produced
1 parent 96b856b commit 1911600

1 file changed

Lines changed: 35 additions & 0 deletions

File tree

‎.agents/docs/2026-10-01-ecosystem-build-plugin-framework-plan.md‎

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)