更新时间:2026-08-10 00:06 CST
维护身份:
speak-agent状态:Draft,尚未批准合并、尚未发布 本文只记录可公开的仓库事实;本地用户名、绝对工作区路径、临时目录、凭据和个人邮箱均有意省略。
本轮已经把用户确认的四组设计决策实现到 mcpp-community/mcpp#400:
- 包和模板统一使用
[ns.]name[@version][:tname],省略ns时严格等于mcpplibs;version和tname可省略;不引入--variant;只有一个模板时, 即使没有声明default = true,它也自动成为默认模板。 - mcpp 不探测 GPU、Mesa、NVIDIA、WSL、ICD 或驱动来源。xlings/xim 负责图形栈和 运行时事实,mcpp-index 负责 C++ 包依赖关系,mcpp 只消费规范化后的 provider、 artifact、provenance 和 link intent。
- mcpp 默认使用自己的运行时;根项目或 workspace 根可以在
mcpp.toml中选择 xlings SubOS。暂不提供 CLI override。SubOS 只是本次根构建/运行的本地 OS 环境, 不传递为依赖约束,成员和源码库自己的 SubOS 声明不会污染消费者。 - AUR 自动化只收口
mcpp-bin。mcpp-m的文件、远端和发布路径均未修改。
实现本身已经完成主要代码、单元测试、E2E、英文/中文文档、release manifest 和
AUR reconciler。当前不能合并的主要原因不是上述核心实现,而是新“精确命名空间”
契约暴露了 xlings 仓库中仍然存在的裸 ftxui/gtest 声明。修复已经放在独立
Draft PR openxlings/xlings#521,
8/8 CI 通过,等待用户 review 和普通合并。
| 项目 | 当前状态 | 说明 |
|---|---|---|
| mcpp 实施 issue | #398,OPEN | 冻结范围和验收条件;已更新为 Draft、逐 commit/checkpoint、隐私安全、普通合并 |
| mcpp 汇总 issue | #397,OPEN | C1-C9、特殊保留项和最终残留工作的统一入口 |
| mcpp Draft PR | #400,Draft | 本轮唯一 mcpp 实施 PR |
| scaffold 缺陷 | #380,OPEN | 代码已实现,仍需发布后二次验收才可关闭 |
| glibc 冲突 | #392,OPEN | 代码已实现,仍需发布后二次验收才可关闭 |
| Rule A/B | #396,OPEN | 代码已实现,仍需发布后二次验收才可关闭 |
| mcpp-index issue | #196,CLOSED | 修复不可变 mcpplibs.capi.lua@0.0.3 的裸 Lua 依赖 |
| mcpp-index PR | #197,MERGED | Form-B bridge 精确声明 compat.lua@5.4.7,10/10 CI 通过 |
| xlings issue | #520,OPEN | 跟踪 xlings 裸兼容包声明 |
| xlings Draft PR | #521,Draft | 精确声明 compat.ftxui、compat.gtest 并刷新 lock,8/8 CI 通过 |
mcpp 分支为 feat/template-runtime-graphics-aur,基线为
80291ca01a982c1e8c00e43bfa97ffe68516e6d7。核心实现和原生诊断 checkpoint 是
ed4cf64279a5da94c736742338e5b01d90e297b8;随后增加中文交接、验证账本、公共发布身份,
以及不泄露本地路径的 exact-index 路由诊断。本文更新时远端 HEAD 为
9a47ccf5727a2756451812da2c98e18e1f034409。相对基线共有 31 个可追溯 commit,改动
111 个文件,约 15,049 行新增、1,692 行删除。接手时仍须重新比较本地与远端 HEAD,
不要把本文快照当成可变分支的永久 HEAD。
设计和验证文档按以下顺序阅读:
.agents/docs/2026-08-09-mcpp-template-runtime-graphics-aur-focused-design.md.agents/docs/2026-08-09-mcpp-template-runtime-graphics-aur-implementation-plan.md.agents/docs/2026-08-09-mcpp-template-runtime-graphics-aur-validation.md.agents/docs/2026-08-09-xlings-mcpp-ecosystem-convergence-design.md- 本文
- 新增共享
PackageSelector,统一解析包依赖、mcpp add、xpkg 和模板 provider。 - 裸名称只规范化为
(mcpplibs, name),不再按短名称跨命名空间猜测。 - 显式点分命名空间保持精确,例如
mcpplibs.capi.lua、compat.ftxui。 mcpp add与mcpp new使用同一身份风格。- 模板语法固定为
[ns.]name[@version][:tname];先解析:,再解析@。 version省略时选择最新稳定版本;不会把 prerelease 当默认,也不接受模糊latest别名。tname省略时:一个模板自动默认;多个模板必须有且仅有一个显式 default, 否则给出确定性错误。- 旧
pkg:列表写法仅保留一个迁移周期并打印可复制的新命令提示。 - exact miss 会打印实际尝试的 canonical selector,并只把其它命名空间作为 “did you mean” 诊断,不自动回退。
- 在访问配置、索引或网络前验证项目名称。
- 拒绝绝对路径、路径分隔符、
./..、控制字符、Windows device basename、 尾随点/空格以及旧PROJECT占位名等不安全输入。 - 模板变量改为单次渲染,插入值中的
{{...}}不会被二次扫描。 - 未知变量、未闭合 token、目录逃逸、symlink、类型冲突、读取/写入/复制失败都会 明确失败。
- 在目标同级 staging 目录完整生成、关闭并同步文件、重新解析 manifest 后,才用 no-replace rename 提交;失败不留下半成品目标或 staging 残留。
- Linux、macOS、Windows 的独占提交分别放在平台实现中,不把平台 API 混入通用层。
- 引入纯
RuntimeSelection:只有McppDefault与NamedSubos两种状态。 - 只有根项目/workspace 根的
[xlings].subos生效;没有 CLI override。 - workspace 成员独立运行时可以有自己的根选择;作为 workspace 成员或依赖被消费时, 不传播自己的 SubOS。
- 构建、运行、测试和快速路径共享一次解析出的不可变
RuntimeBinding。 - binding 保存 owner、provider、runtime id、环境、路径和 contract hash;cache key 包含该 hash,运行时配置变化会正确失效。
- 旧
MCPP_SUBOS_DIR不再改变选择结果。 - xlings 环境的
set/prepend语义保留调用方已存在变量并去重,不把显式空值误当缺失。
- 精确解析并查找
glibc@<version>,不会从多个 payload 中取“第一个看起来能用的”。 - 内部 ELF64-LE 读取器解析
PT_INTERP、DT_RPATH/RUNPATH、DT_NEEDED、 GNU verneed/verdef,不调用外部 shell probe。 - Rule A:host DSO 的
GLIBC_*需求不得高于选中 libc 的 export floor。 - Rule B:最终解释器、直接/传递 libc 必须与同一个 RuntimeBinding 一致,拒绝 host/private 或两个 private libc 混用。
- post-link verdict 与 artifact stat、RuntimeBinding contract 一起缓存;缓存 mismatch 仍然保持失败,不能靠下一次运行重新探测变绿。
mcpp doctor读取构建时已经保存的 verdict,不重新观察另一个当前 host。- 非 Linux 平台只保留 typed no-op 边界,不执行 ELF/glibc 规则。
- mcpp 只接受结构化
RuntimeRequirement、RuntimeProvider、RuntimeArtifact和LinkIntent。 - 每条事实携带 canonical namespace/name/version/source/provenance;同名 provider 不会相互覆盖。
- xlings 选中的 runtime facts 优先于 descriptor fallback,并以完整身份排序,保证 contract hash 与输入顺序无关。
- link-time search 与 runtime search 分离:runtime dirs 不再错误进入
-L;ELF、Mach-O、 PE 分别渲染自己的 link intent。 resolution.jsonschema 2 保存 binding、requirements、providers、artifacts、link intent 和 post-link verdict。mcpp why runtime只读取保存结果,不启动探测命令。- 增加源码边界测试,防止 mcpp 后续引入 GPU、vendor、driver、ICD 探测分支;需要重新诊断
host/provider 时,提示用户使用
xlings doctor。
- release workflow 新增不可变
mcpp-release.jsonschema 1。 - manifest 由最终公开 GitHub release inventory 和实际下载 payload 重新计算,不信任上传 顺序或 sidecar 文本。
- 四个现有平台是最低完整集合,未来符合命名契约的平台也必须进入 manifest,不能静默遗漏。
- manifest 只允许首次创建;同名且字节不同会拒绝,rerun 只能验证相同内容。
publish-ecosystem必须等待 manifest job 完成。- 版本已经准备为
2026.8.9.1;当前 mcpp 内部 xlings pin 为已发布的2026.8.9.2,待 #521 合并并发布后还需要更新到新 xlings 版本。
- 只管理
mcpp-bin;mcpp-m和mcpp-git不在 reconcile verdict 或 push 范围。 - 支持 release event、定时恢复和手动触发。
- 选择最新完整稳定 release,验证
mcpp-release.json、两个 Linux payload 和 sidecar, 再生成.SRCINFO。 - 使用 Arch
vercmp,拒绝倒退;相同版本可检测并修复 drift。 - clone、认证、AUR maintenance、RPC lag 都有明确分类和有界重试。
- 只允许 fast-forward push,不提供 force、空仓库首次发布或旧 run 重跑旁路。
- 已对公开
v2026.8.8.4做真实 Archmakepkg --printsrcinfo/--verifysourcedry-run;目标应为2026.8.8.4-1,公开 AUR 观测仍是2026.8.1.1-1,本轮没有发布。
- 同步 README、中文 README、getting-started、manifest、toolchain、identity、AUR、release 和 changelog。
- 明确无
--variant、无 CLI SubOS override、SubOS 非传递、mcpp 不探测 GPU、AUR 只管理mcpp-bin。 .agents/docs中保留详细设计、拆分计划和 RED/GREEN/CI/release 验证账本。- 已清理文档中的本地绝对路径和旧 squash/admin-bypass 描述;当前流程是 Draft、逐 commit、 用户明确 review 后普通合并。
以下顺序就是实现历史;不要 rebase、amend、squash 或 force-push:
| Commit | 内容 |
|---|---|
52706c9 |
写入聚焦设计、实施计划和初始验证账本 |
527b26e |
共享精确 PackageSelector,收口包身份 |
93db300 |
精确 TemplateSpec、版本和默认模板选择 |
dce8619 |
事务式、跨平台安全的项目脚手架 |
ac0670f |
根本地 RuntimeSelection/RuntimeBinding |
7850702 |
Linux ELF/runtime closure Rule A/B |
6904673 |
provider-neutral runtime provenance 与 LinkIntent |
234a4df |
不可变 release manifest |
08857c7 |
mcpp-bin AUR desired-state reconciler |
dae4384 |
真实 SubOS view 与 RuntimeBinding 对齐 |
76fee4e |
准备 2026.8.9.1 版本和 pin/docs |
04a348e |
E2E capability 正确识别 Python |
0108ee1 |
ELF parser fixture 只在 Linux 执行 |
e6050b7 |
依赖精确继承 index 声明命名空间 |
d008a21 |
依赖选择保留 index owner identity |
c569152 |
runtime closure 正确处理 ELF SONAME 复用 |
679c7ab |
E2E fixture 与精确身份契约对齐 |
65fc77b |
fake xlings fixture 提供真实 runtime contract |
e3b93ac |
exact miss 保留 version-floor 根因 |
1ef3112 |
malformed exact descriptor 变为明确错误 |
4d8d080 |
module mangling 使用实际 authored modules |
12b0b95 |
macOS BMI E2E 只检查自身稳定 edge |
92caaf9 |
Windows scaffold 测试清理前关闭文件流 |
4e39a8e |
Draft PR 流程和文档隐私清理 |
0cc6a2a |
libc poison fixture 尊重隔离 MCPP_HOME |
ed4cf64 |
workspace 继承相对 index 时使用 lexical root anchor |
9f6161a |
新增完整中文 PR 交接文档 |
6e42d6c |
同步 Arch、CI 和跨仓库验证账本 |
cf39cb2 |
AUR 使用 speak-agent 公共 noreply 身份,并增加隐私回归 |
189c6d1 |
记录隐私安全 AUR checkpoint 和 12/12 契约结果 |
9a47ccf |
exact miss 输出隐私安全的 index route 状态,供 Windows 原生定位 |
每个逻辑 commit push 后都在 PR #400 留有 checkpoint。issue #380、#392、#396 也已经 收到“实现已进入 Draft、但发布前不关闭”的状态评论。
症状:Linux、macOS、Windows 和 aarch64 中“使用新 mcpp 构建 xlings”的任务报错:
ftxui 被严格解释为 (mcpplibs, ftxui),而索引中的真实包是 compat.ftxui。
这不是应该在 mcpp 中恢复 fallback 的理由;恢复 fallback 会破坏用户确认的命名空间 语义。处理方式分两层:
- mcpp-index #197 已把不可变
mcpplibs.capi.lua@0.0.3的裸 Lua 依赖用 index-side Form-B bridge 精确改为compat.lua@5.4.7,已经正常合并。 - xlings #521 把根依赖改为
compat.ftxui、测试依赖改为compat.gtest,并刷新 lock。 该 PR 仍是 Draft,8/8 CI 通过,不能 admin/bypass 合并。
初版 binding 只信任声明 identity;真实安装中 loader/libc view 可能经过 xlings 重定位或 版本视图转换,导致“声明 glibc”与实际闭包不一致。修复后,binding 从选中的 SubOS view 获取 canonical payload,并保留声明/provider provenance;缺失、过期或混合闭包都明确失败。
- ELF parser synthetic fixture 在非 Linux 也执行:改为 typed platform skip。
- Python E2E capability 通过错误方式推断:改为真实可执行能力判断。
- fake xlings 只有元数据、没有 loader/libc 物理事实:补足真实 runtime contract,未增加产品 fallback。
E2E #170 原先要求第三次构建“整个图没有任何工作”。macOS 合法重建生成的 iOS init/link edge,但 stage/main BMI 已经稳定。测试现在只约束它负责验证的 stage/main edge,避免把 平台合法工作误判成 BMI 回归。最新 macOS ARM64 E2E 已通过。
- 单元 fixture 在
remove_all前仍持有两个ifstream;Linux 允许删除打开文件,Windows 拒绝。修复为在清理前结束 stream lifetime。 - workspace 根
[indices] acme = { path = "index" }在 Windows 上经weakly_canonical后可能因为 short-name/case alias 与成员视图失去字符串身份。现在使用(workspace_root / relative_path).lexically_normal(),既把相对 index 锚定到根,又不改变 用户声明的 lexical identity。新增 focused unit,相关本地 E2E #12 通过;但ed4cf64的原生 Windows E2E 2/2 仍在 workspace member 的mcpp add acme.util@2.0.0失败,因此该提交不是完整修复。 - 失败 job 为 run
31321961040/ job93266267511;错误只有package 'acme.util' not found in any configured index和tried: (acme, util)。同一原生 Windows 矩阵的PmIndexRoute.WorkspaceMemberReadsRootAnchoredRelativeIndex已执行并通过,说明纯单元 fixture 没有覆盖真实进程/工作目录视图。 - 已下载该 job 构建的 Windows artifact,并在隔离 Wine 环境中同时用手工 member 和
mcpp new m1重放;两条mcpp add acme.util@2.0.0都通过,所以不能把 Wine 结果外推为 GitHub Windows 已修复。 9a47ccf增加永久、隐私安全的route:诊断,只报告 local index 的 root/pkgspresent/absent,不输出盘符、用户目录或绝对路径。下一轮原生日志将区分 workspace inheritance、路径锚定和 descriptor read 三层;拿到证据前不猜测修复。
E2E #156 用 $HOME/.mcpp 注入旧 libc,但测试实际选择了 MCPP_HOME。因此它先污染了当前
mcpp,而没有进入目标 nested-tool regression。fixture 现在使用
${MCPP_HOME:-$HOME/.mcpp} 对应的状态根,精确重跑通过。
曾尝试用隔离环境的 MinGW cross toolchain 构建当前 mcpp,以更快复现 Windows 行为;构建
停在现有 GCC module 与 windows.h language-linkage 冲突,未修改产品代码,也未污染 host。
因此 Windows 结论只接受 GitHub 原生 runner 终态,不从 Linux source review 或 cross-build
推断。
第一次真实 Arch 容器拉取受到 Docker Hub registry header timeout,按 transient 记录,未 伪装成通过。随后真实 Arch dry-run 已完成并验证两个 Linux 源。公开 AUR 仍落后,之前的 发布任务遇到 AUR SSH maintenance;本轮没有绕过、force-push 或手工覆盖远端。
- 最新源码完整 C++ unit/integration:
72/72,0 fail。 - 一轮隔离 Linux 全量 E2E:186 pass、1 fail、19 个平台/能力 skip。唯一失败是 #156 的 fixture 根错误,修复后精确重跑通过。
ed4cf64后精确重跑 #12 和 #156 通过,完整 72/72 unit 再次通过。9a47ccf按 TDD 先得到缺少IndexRoute::describe的 RED;实现后 focusedPmIndexRoute12/12、真实 E2E #12 通过,且诊断不包含本机路径。该提交尚未重新宣称 最新源码全量 unit/E2E 均通过。- 重点 E2E 已覆盖 package/template、事务 scaffold、RuntimeBinding、root-local SubOS、
Rule A/B、provider provenance、stored
why runtime、AUR/release 脚本。 - release manifest contract:12/12。
- AUR state-machine/contract:12/12,包括公共
speak-agent发布身份契约。 - 所有变更 shell 通过
bash -n,Python generator/tests 通过 bytecode compile,workflow YAML 可解析,git diff --check通过。 - 公开
v2026.8.8.4四平台 payload/sidecar replay 生成的 manifest 字节稳定;manifest SHA256 为6614ba2db65c8c28cb5a9d3466bd6cf3007634221da76d25216785061c647edb。
不要把上述“一轮全量后精确修复”写成“最新 HEAD 已重新全量 206 个 E2E 全绿”。最终完整 结论仍需要 latest-head CI 和发布后二次验证。
scripts/aur/mcpp-m/**聚合 SHA256 在实现前后都为afb8a647e04483a86985119e07086016f49d55f177ee6257094c336d226113c6。- host xlings 配置聚合 SHA256 在状态化测试前后都为
f218aadf3792ee815c8535ce0ca0bb53f634fecbdbc5d0d47db442052d786d1b。 - 原始 checkout 的用户改动未被暂存、覆盖或清理;实施在隔离 worktree 中进行。
- PR diff 已扫描常见 Linux/macOS/Windows home path、runner 用户名和临时目录模式,未发现 本地路径泄露。
以下是 ed4cf64 的终态快照;共 12 success、5 failure、1 cancelled。cancelled 不是 pass:
| 状态 | Job |
|---|---|
| PASS | hermetic Linux E2E |
| PASS | macOS ARM64 E2E |
| PASS | musl + LLVM toolchain |
| PASS | MinGW Linux→Windows build + Wine run |
| PASS | Windows→Linux cross-build及 Linux artifact run |
| PASS | Linux unit、GCC cold toolchain、Linux E2E 1/2 和 2/2 |
| PASS | Windows build/unit/package、Windows E2E 1/2 |
| FAIL(已知外部边界) | Linux 构建/运行 xlings |
| FAIL(已知外部边界) | macOS xlings LLVM E2E |
| FAIL(已知外部边界) | aarch64 mcpp + xlings |
| FAIL(已知外部边界) | Windows toolchains + regressions 中的 xlings 构建 |
| FAIL(mcpp 内部,仍在定位) | Windows E2E 2/2 的 workspace root local index |
| CANCELLED | bare Windows/no-Visual-Studio;被后续 push 的 concurrency 取消,不作结论 |
四个已知失败都发生在构建当前 xlings source 时的裸 ftxui exact miss;对应 #521,
不能在 mcpp 中用 fallback 掩盖。Windows E2E 2/2 是独立的 mcpp 问题,不能归入 #521;
9a47ccf 的 latest-head 原生矩阵需先给出 route 状态,再做下一笔最小修复。
以下项目必须明确交接,不能因为“代码已经很多”而省略:
- 等待
9a47ccf的 mcpp latest-head CI 证据。 特别读取 Windows E2E 2/2 的route:行;ed4cf64已经由原生 runner 证明没有完整解决根相对 index。 - 用户 review xlings #521。 8/8 CI 已通过,但仍为 Draft/REVIEW_REQUIRED。
- 普通合并 xlings #521。 不使用 admin、bypass、squash、force 或历史改写。
- 发布新的 xlings 稳定版本。 当前
2026.8.9.2不含 #521;需要正常 version bump、 tag、全平台 release CI 和资产核验。 - 更新 mcpp #400 的 xlings pin。 pin 到包含 #521 的新稳定版本,作为独立 commit、push 和 checkpoint;然后重新跑 latest-head mcpp 全矩阵。
- 补最终交付账本。 更新
.agents/docs/...validation.md中过时的 CI、Arch 和跨仓库 “not started” 段落,记录终态 job/run、PR/merge commit、release asset/checksum。 - 用户 review mcpp #400。 只有用户明确同意后才能从 Draft 转 ready,并走普通合并。
- 发布 mcpp
v2026.8.9.1。 验证 tag、版本字符串、所有平台资产、sidecar、最终公开 inventory 和不可变mcpp-release.json;running/cancelled/superseded 不算通过。 - GitCode/生态镜像。 按发布边界补 GitCode resource,验证 ranged/full download 和 hash; 必要时更新 xim-pkgindex,但不把 provider policy 搬进 mcpp。
- AUR
mcpp-bin收敛。 从合并后的固定 main/release 状态运行 reconciler,等待 AUR maintenance 恢复,验证 RPC 可见、.SRCINFO、两个架构 checksum 和 fresh install。 - 全生态 fresh-home 验证。 在隔离 HOME/XLINGS_HOME/SubOS root 中验证:安装、
[ns.]name[@version][:tname]模板、唯一默认模板、多个 SubOS/glibc、build/run/test、 OpenGL/Vulkan provider provenance 的 PASS/FAIL/NOT_EXERCISED 表达。 - issue 收口。 #398 随 PR 合并关闭;#380/#392/#396 只在发布后二次验收通过后关闭, 并留言精确 release/测试证据。残留工作统一写回 #397。
- 原始 issue/PR 全量整理未完成。 C1-C9 和其它开放 PR/issue 的最终关闭/合并仍需按 #397 清单继续;特殊保留 #43、#260 以及标记为保留/Draft/do-not-merge 的项不要动。
- 确认
gh api user --jq .login返回speak-agent。 - 检查 PR #400 本地 HEAD、远端 HEAD 和 clean worktree;不要在原始用户 checkout 上工作。
- 等
9a47ccf的 Windows E2E 2/2 输出隐私安全的route:状态;只按原生证据修复。 四个裸ftxui失败归入 #521,其余失败必须单独 RED/根因/修复/commit/checkpoint。 - 把最新终态快照评论到 #400;不要重复 rerun 已被新 HEAD 取代的旧 workflow。
- 请用户 review #521;得到明确同意后,转 ready 并普通合并,随后按 xlings release skill 正常发版。
- mcpp 独立 commit 更新新 xlings pin,push 后评论 checkpoint,再等待新的 latest-head 全矩阵。
- 所有代码和依赖 gate 通过后,独立 commit 更新验证账本;做 diff/privacy/mcpp-m/host-config 边界复核并 push/comment。
- 把本文“尚未完成”逐项清零,再请求用户 review #400;没有 review 不转 ready。
- 普通合并、release、GitCode、AUR、fresh-home 生态验证完成后,再按证据关闭 issue。
每个逻辑变化都执行同一套流程:
- 先写或选中能复现问题的 focused test,记录 RED;
- 做最小实现,记录 GREEN;
- 跑相关回归和
git diff --check; - 扫描 diff,确保没有本地用户名、绝对路径、临时目录、个人邮箱或凭据;
- 只暂存明确文件,不使用宽泛
git add -A; - 使用
speak-agent的 GitHub noreply commit identity; - 一个逻辑变更一个 commit,立即 push 到 Draft PR;
- 立即在 PR 留中文 checkpoint:问题、根因、改动、测试、当前阻塞;
- 不 amend/rebase/squash/force-push,不使用 admin/bypass;
- pending、skipped、cancelled、superseded 任务绝不记为 PASS。
- 不恢复跨命名空间短名称 fallback。
- 不增加
--variant。 - 暂不增加 CLI SubOS override。
- 不把 SubOS 作为库的传递依赖要求。
- 不让 mcpp 探测 GPU、Mesa、NVIDIA、WSL、ICD 或驱动来源。
- 不把 xlings/xim provider policy 复制进 mcpp-index 或 mcpp。
- 不修改或发布
mcpp-m。 - 不碰明确特殊保留的 issue/PR。
- 不在用户未 review 时把 Draft 转 ready 或合并。
用户 review 时建议优先确认以下五点:
ns省略严格等于mcpplibs是否符合预期,包括 exact miss 不 fallback。- 唯一模板自动默认、多模板显式 default/tname 的错误边界是否足够直观。
- RuntimeBinding 是否真正只由根/workspace 根选择,成员和依赖完全不传播 SubOS。
- 图形栈是否保持“xlings/xim 诊断和选择,mcpp-index 描述关系,mcpp 只构建”的责任分层。
mcpp-binreconciler 是否满足幂等、单调、checksum、fast-forward-only,同时完全隔离mcpp-m。
在这五点确认前,PR #400 和 #521 都应保持 Draft。