|
19 | 19 |
|
20 | 20 | ### C1 索引侧谓词与两个调用点 |
21 | 21 |
|
22 | | -- [ ] **T1** `xpkg_name_form_violation(declaredNs, declaredName)` + `_from_lua` 导出(`src/manifest/xpkg.cppm`) |
23 | | -- [ ] **T2** `mcpp xpkg parse` 接入谓词,违规 exit 1;`--json` 输出 `error` 字段(`src/cli/cmd_xpkg.cppm`) |
24 | | -- [ ] **T3** `loadVersionDep` install 分支 fail-fast;已解析到安装物的路径 `ui::warn`(`src/build/prepare.cppm`) |
| 22 | +- [x] **T1** `xpkg_name_form_violation(declaredNs, declaredName)` + `_from_lua` 导出(`src/manifest/xpkg.cppm`) |
| 23 | +- [x] **T2** `mcpp xpkg parse` 接入谓词,违规 exit 1;`--json` 输出 `error` 字段(`src/cli/cmd_xpkg.cppm`) |
| 24 | +- [x] **T3** `loadVersionDep` install 分支 fail-fast;已解析到安装物的路径 `ui::warn`(`src/build/prepare.cppm`) |
25 | 25 |
|
26 | 26 | ### C2 生成源 |
27 | 27 |
|
28 | | -- [ ] **T4** `emit_xpkg` 输出 `namespace` + FQN `name`;无 namespace 时 stderr 提示;`--namespace` 覆盖开关(`src/pm/publisher.cppm` + emit CLI) |
| 28 | +- [x] **T4** `emit_xpkg` 输出 `namespace` + FQN `name`;无 namespace 时 stderr 提示;`--namespace` 覆盖开关(`src/pm/publisher.cppm` + emit CLI) |
29 | 29 |
|
30 | 30 | ### C3 依赖侧收敛 |
31 | 31 |
|
32 | | -- [ ] **T9** `selectDependencyCandidate` 全候选落空 → 明确失败(`prepare.cppm:1516-1541`) |
33 | | -- [ ] **T10** discovery 档命中后 `extract_xpkg_namespace(*lua)` 回填真实 ns(声明为空则保持空) |
34 | | -- [ ] **T11** discovery 档拒绝声明了非空 `namespace` 的描述符 |
35 | | -- [ ] **T12** did-you-mean:仅失败路径的全索引扫描,三约束写进实现注释 |
| 32 | +- [x] **T9** `selectDependencyCandidate` 全候选落空 → 明确失败(`prepare.cppm:1516-1541`) |
| 33 | +- [x] **T10** discovery 档命中后 `extract_xpkg_namespace(*lua)` 回填真实 ns(声明为空则保持空) |
| 34 | +- [x] **T11** discovery 档拒绝声明了非空 `namespace` 的描述符 |
| 35 | +- [x] **T12** did-you-mean:仅失败路径的全索引扫描,三约束写进实现注释 |
36 | 36 |
|
37 | 37 | ### C4 测试 |
38 | 38 |
|
39 | | -- [ ] **T5a** 单测:谓词 6 例(含 `CompatAliasIsClean` 回归锁) |
40 | | -- [ ] **T5b** 单测:依赖侧解析(三档成功 / 第三方 ns 裸名失败 / P3 空 ns 锁) |
41 | | -- [ ] **T5c** e2e:split 描述符 → 秒级自解释失败;改 FQN → 通过 |
42 | | -- [ ] **T5d** e2e:裸名请求第三方 ns 包 → 失败 + did-you-mean;改写后通过 |
| 39 | +- [x] **T5a** 单测:谓词 6 例(含 `CompatAliasIsClean` 回归锁) |
| 40 | +- [x] **T5b** 单测:依赖侧解析(三档成功 / 第三方 ns 裸名失败 / P3 空 ns 锁) |
| 41 | +- [x] **T5c** e2e:split 描述符 → 秒级自解释失败;改 FQN → 通过 |
| 42 | +- [x] **T5d** e2e:裸名请求第三方 ns 包 → 失败 + did-you-mean;改写后通过 |
43 | 43 |
|
44 | 44 | ### C5 文档与版本 |
45 | 45 |
|
46 | 46 | - [x] **T13** 用户文档 §2.5(`docs/05-mcpp-toml.md` + `docs/zh/05-mcpp-toml.md`) |
47 | | -- [ ] **T14** CHANGELOG 0.0.105 段(含 breaking:裸名不再解析第三方命名空间包) |
48 | | -- [ ] **T15** `mcpp.toml` version → 0.0.105 |
49 | | -- [ ] **T11b** 修订 `2026-06-26 §4.4/§4.6(a)` 表述;更新 `prepare.cppm:1456-1459` 注释 |
| 47 | +- [x] **T14** CHANGELOG 0.0.105 段(含 breaking:裸名不再解析第三方命名空间包) |
| 48 | +- [x] **T15** `mcpp.toml` version → 0.0.105 |
| 49 | +- [x] **T11b** 修订 `2026-06-26 §4.4/§4.6(a)` 表述;更新 `prepare.cppm:1456-1459` 注释 |
50 | 50 |
|
51 | 51 | ### C6 验收与合入 |
52 | 52 |
|
53 | | -- [ ] **T6** 全索引 `mcpp xpkg parse` 回归(期望恰好 2 报错),结果贴 PR |
| 53 | +- [x] **T6** 全索引 `mcpp xpkg parse` 回归,结果贴 PR。**实测 49/49 mcpplibs 描述符全过、0 违规**(非设计预期的 2 —— 上游 mcpp-index 已先行修好两例);完整 registry(200+)另见 §2.1b 的 xlings-native 修正 |
54 | 54 | - [ ] **T7** 单 PR(`Fixes #278`)→ CI 全绿 → `gh pr merge --squash --admin` |
55 | 55 |
|
56 | 56 | ### C7 生态 |
57 | 57 |
|
58 | 58 | - [ ] **T16** release 0.0.105 四平台 + 镜像 xlings-res 双端 + xim-pkgindex PR + `xlings install mcpp` 真装验证 |
59 | | -- [ ] **T8** mcpp-index:`chriskohlhoff.asio` / `tensorvia-cpu` 改 FQN;lint job 改调 `mcpp xpkg parse` |
| 59 | +- [x] **T8** mcpp-index:**上游已完成** —— `chriskohlhoff.asio` / `tensorvia-cpu` 均已是 FQN,#116 的 `tests/check_package_name.lua` 已合入。该 Lua 守卫现与 `mcpp xpkg parse` 冗余但无害,可留作保险(其 CI 本就跑 `mcpp xpkg parse pkgs/*/*.lua`,升级 MCPP_VERSION 到 0.0.105 后自动获得引擎侧防护) |
0 commit comments