Commit 5807e36
authored
Four issues in one batch, joined by two architectural threads: "one decision,
one derivation" (#254 and #258 are both a decision derived in two places that
had drifted apart), and a new invariant, "failures must be audible" — three
of the four were the engine quietly doing less when a precondition was not
met.
#261 — the clang scan rule produced P1689 JSON via shell redirection, which
forced a `cmd /c` wrapper on Windows and with it cmd.exe's 8191-char ceiling,
a quarter of CreateProcess's. clang-scan-deps has -o since LLVM 17, so the
redirect and the wrapper are both gone. The unbounded axis is separately
addressed by extending #247's response-file mitigation from the link rules to
every rule carrying $local_includes.
#257 — editing a file pulled into a module interface via a purview #include
did not retrigger the rebuild under Clang; the build silently reused a stale
BMI. 0.0.97 had conflated "emit a depfile" with "filter GCC's reversed module
rules" into one predicate, and scoped both to GCC because Clang's shape was
unverified. Measured: Clang emits a single plain rule with nothing to filter,
so the gate was guarding against a shape that does not exist, at the cost of
the correctness contract bundled with it. Split into two predicates. Also
gives C and GAS edges the depfile they never had on any toolchain.
#258 — `sources` was OS-conditional but `flags` was not, so a manifest
covering three OSes had to show each OS the other two's flag entries, all
matching zero sources by construction. The vendored-opencv port paid 703 stub
files, 32 globs and ~23 guaranteed dead-glob warnings for that. The fix is
the type behind the feature: mcpp's two conditional axes each hand-picked
which build fields they could carry and picked different subsets, so
BuildInputs makes membership answerable by the type rather than by a list
someone must remember to update.
#254 — every xpkg per-OS splice and xpm asset table keyed on a compile-time
HOST constant while `[target.'cfg(...)']` was evaluated against the resolved
target. Cross builds got the wrong leg; native builds cannot observe it,
which is why three-platform CI never caught it. The axes are now distinct
types with no conversion and no construction from a bare string, and the
platform parameter lost its host default — a silent default is how this
survived.
#256 — no mcpp defect (the crash is in the Clang frontend on the import
side), but mcpp bundles LLVM and the hazard lands on the module-package
pattern this project recommends. Adds documented guidance and a state canary
over the bundled toolchains.
Review and CI found four defects this batch introduced, all fixed here:
diag::flush was never called in production (the channel built to stop silent
degradation was silently degrading); -MMD was applied to `.s`, which is not
preprocessed; the response file swallowed backslashes in paths this file does
not own, breaking every `import std;` on Windows; and the target platform was
computed before the target triple was fully resolved.
Deliberately out of scope: #259 (root cause traced to a silent per-dep skip
on the xlings side; investigation posted there) and the manifest unknown-key
policy (#263).
Design: .agents/docs/2026-07-22-v0.0.102-batch-254-261-design.md
Triage: .agents/docs/2026-07-22-issue-triage-254-261.md
1 parent af25d18 commit 5807e36
27 files changed
Lines changed: 2698 additions & 196 deletions
File tree
- .agents/docs
- docs
- src
- build
- cli
- manifest
- platform
- pm
- scaffold
- toolchain
- tests
- e2e
- unit
Lines changed: 30 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
117 | 117 | | |
118 | 118 | | |
119 | 119 | | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
Large diffs are not rendered by default.
Lines changed: 533 additions & 0 deletions
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
6 | 32 | | |
7 | 33 | | |
8 | 34 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
267 | 267 | | |
268 | 268 | | |
269 | 269 | | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
376 | 376 | | |
377 | 377 | | |
378 | 378 | | |
379 | | - | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
380 | 387 | | |
381 | 388 | | |
382 | 389 | | |
383 | 390 | | |
384 | | - | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
385 | 412 | | |
386 | 413 | | |
387 | 414 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
| 13 | + | |
13 | 14 | | |
14 | 15 | | |
15 | 16 | | |
| |||
334 | 335 | | |
335 | 336 | | |
336 | 337 | | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
337 | 346 | | |
338 | 347 | | |
339 | 348 | | |
| |||
0 commit comments