Skip to content

feat: 0.0.97 架构级修复批次 — scanner/flag/build-graph/cfg/nasm/workspace(#224-#235 + R6)#236

Merged
Sunrisepeak merged 22 commits into
mainfrom
feat/v0.0.97-remediation
Jul 18, 2026
Merged

feat: 0.0.97 架构级修复批次 — scanner/flag/build-graph/cfg/nasm/workspace(#224-#235 + R6)#236
Sunrisepeak merged 22 commits into
mainfrom
feat/v0.0.97-remediation

Conversation

@Sunrisepeak

Copy link
Copy Markdown
Member

0.0.97 架构级修复批次(单 PR / 逐簇 commit)

ffmpeg-m/opencv-m 全源码直编在 0.0.95/0.0.96 上暴露的第二层缺口,加 index 仓测试模块包所需的默认命名空间语法空洞。全部以根因收敛点的架构级修复完成(非 workaround),按"每一类问题一个 commit 修复节点"组织。设计与实施计划见 .agents/docs/2026-07-18-*

逐簇 commit

commit issue 修复
perf(scanner) #225 glob 遍历从字面前缀起 + 排除 .git/target/子模块;mcpp run 复用解析缓存(不再每次重扫大子模块,此前 ~9.5s)
feat(manifest) #227 #228 [[build.flags]] 数组表 + glob {a,b} 花括号;清单层 closed-grammar 守卫([[x]] typo 硬报错不静默丢数据)
fix(flags) #226 #234 include 全族(-I/-iquote/-isystem/-idirafter/-iprefix/-L)按项目根重写 + 含空格值 shell 引号;顺修 MSVC include_dirs 绝对化
fix(build) #233 #235 对象路径碰撞时镜像源相对路径 + 唯一性断言;编译边 depfile 追踪(过滤 GCC -fmodules 反向规则)根治 purview/普通头 stale
fix(build) #229 cfg 条件 sources 对 path/git 依赖 + test 模式统一 per-package 求值(#218 同类根治)
fix(nasm) #232 nasm 走工具链同款 resolve_xpkg_path(autoInstall) 同步供给门;config 错误不再被吞
feat(workspace) #224 R6 根锚点继承 + [indices] default={path} 默认命名空间重定向(url 形式 loud 拒绝)+ mcpp run -p <member>
chore(release) bump 0.0.96 → 0.0.97 + CHANGELOG

实施方式

  • 单 PR,8 个修复 commit + docs/merge 提交,可逐节点 review。
  • 双 worktree 并行开发(track α = scanner/plan/ninja_backend/flags/graph;track β = prepare/xlings/fetcher/project/cli/execute/manifest.toml,文件集不相交),最后合并——merge-tree 预验证无冲突。
  • 每个 commit:严格 TDD(测试先红后绿)、独立 spec+quality review、Critical/Important 修复后复验。合并后全量复验。

验证

  • 每 commit mcpp build + mcpp test(35/35 单测二进制)全绿。
  • 9 个新 e2e(114–122)+ 6 个扩展单测文件,合并后在 0.0.97 二进制上全绿。
  • 全量 run_all.sh 回归通过(除本沙箱环境性失败:缺 gcc symlink 的 54/62 在未改基线上同样失败)。
  • 最终整支 review(cross-cutting/集成)通过。

Closes #224 #225 #226 #227 #228 #229 #232 #233 #234 #235

备注:#230(windows workspace 崩溃)已于 0.0.96 修复;windows CI 用 0.0.97 pin 复验后可一并关闭。#215(cppfly Clang 反射)待上游 P2996,不排期。

…e per-package funnel (path/git deps + test mode) (#229)
…_xpkg_path gate (index refresh + hard error); stop swallowing config bootstrap errors (#232)
…pace index redirect + `mcpp run -p <member>` (#224, R6)
…232, workspace #224/R6/run-p

Brings track β (C5/C6/C7) onto track α (C1-C4). File sets disjoint except prepare.cppm (different regions, auto-merged).
…, build-graph identity, cfg funnel, nasm gate, workspace/R6)

Closes #224 #225 #226 #227 #228 #229 #232 #233 #234 #235 + R6.
#230 already fixed in 0.0.96; #215 deferred (upstream P2996).
… $ORIGIN

C3's shell_quote_arg (#234, for compile-time defines-with-spaces) was applied
to per-unit LINK flags too, double-quoting the already-escaped rpath token
`-Wl,-rpath,'$$ORIGIN'` → literal `'$ORIGIN'` in RUNPATH → dependency .so's
next to the exe couldn't be resolved (e2e 55/56/57/64 regressed vs 0.0.96).
join_flags gains shellQuote (default true for user compile flags); the
link-flag join passes false. Regression test locks it.
Generalizes d3ad223: C3's shell_quote_arg (#234) was applied to ALL per-unit
flags, breaking two kinds of element that legitimately contain a token-boundary
space — raw descriptor flags (compat.lua `-include mcpp_lua_platform_config.h`
→ gcc saw one malformed arg → aarch64/macos/windows cross-build FAILED) and
mcpp-generated pre-escaped link flags (rpath `$ORIGIN`). join_flags now quotes
ONLY `-D`/`/D` define tokens whose value holds a space (the sole producer of
an intra-value space); everything else is verbatim = 0.0.96 tokenization.
+regression test RawMultiTokenFlagIsNotQuoted; LinkFlagsAreNotReQuoted +
QuotesFlagValueWithSpace still green.
test_ninja_backend asserted Linux/POSIX-shaped output that fails on the
windows self-host runner (unrelated to product behavior, which is correct
per-platform): (1) CxxModule...Depfile asserts the POSIX-only filtered gcc
depfile → skip on Windows (MSVC uses deps=msvc); (2) MsvcIncludeDirs... breaks
on the runner's C:\ temp path whose ':' is ninja-escaped → run the (host-
independent) MSVC-dialect check on POSIX; (3) QuotesFlagValueWithSpace expects
single-quote but shell_quote_arg uses double-quote on Windows → assert the
platform-appropriate spelling. Product unchanged.
The awk filter strips GCC -fmodules' reversed make-rules; Clang's module
(.pcm) depfile shape differs and applying the GCC-shaped filter there is
untested. macOS CI (Clang) failed e2e 118 because the purview-rebuild depfile
didn't behave. Gate posixDepfile to CompilerId::GCC — Clang/MSVC keep the
pre-#235 behavior (no compile-edge depfile; header/purview rebuild tracking on
Clang is a follow-up, same as 0.0.96 → not a regression). e2e 118 now declares
`# requires: gcc` so it skips where GCC isn't the toolchain (macOS has no gcc
capability per run_all.sh). Linux GCC: depfile active, 117/118 green.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Workspace path dependencies and inherited index paths cannot be centralized reliably

1 participant