Commit 620f9c1
committed
fix(scanner, manifest, build): one answer per question, and no key that reaches no decision (2026.9.9.1)
Four defects with two shapes behind them: a question answered twice whose
answers are read by different sites, and a key that is parsed and then reaches
no decision. Design record:
.agents/docs/2026-09-09-two-answers-and-two-silences.md
`module : private;` was read as an implementation partition. The name tokeniser
admits `:` so that `M:part` scans as one token, and the partition test is "the
name contains a colon" -- but the colon in the private module fragment comes
first and belongs to no name. A valid file was refused at scan time with a
sentence that is false about it. A regression from #433, first released in
v2026.8.18.1: on clang the same source built and ran under 2026.8.17.1.
The scanner also no longer records an identity no source could have declared;
a BOM combined with a fragment previously produced a BMI named after a colon.
A UTF-8 byte-order mark is consumed where bytes become lines, and by every TOML
document mcpp reads. MSVC writes one by default, so this is ordinary input.
The failure it caused appeared at the consumer (`module 'x' not found`) rather
than at the file that was wrong. UTF-16/32 is refused by name.
`module_lang` and `module_output` become per-edge, bound from what the scan
found rather than from the file's extension. A module-extension file need not
provide a module, and where the classifier and the scanner disagreed the edge
carried an interface's flags with no BMI: clang accepted `-fmodule-output=`
with no value and wrote no BMI at all, and compiled implementation units as
interfaces. GCC's interface spelling is the plain language, so the identical
project built there and not on clang.
`ConditionalConfig::empty()` replaces two hand-written gates that omitted
`libraries` and `linkLibraryDirs`, so a predicate carrying only a
`[target.<pred>.runtime]` table was parsed and discarded. It composes
`BuildInputs::empty()` and the existing `XlingsConfig::empty()`, closing a
fourth instance in the xpkg gate. All 228 descriptors in mcpp-index parse
identically before and after.
`[runtime]` and `[target.<pred>.runtime]` now report an unsupported key, the
rule `[build]` and `[target.<triple>]` have followed since #418 and #249.
Deliberately not done: no detector for GNU-spelled `ldflags` reaching MSVC.
`ldflags` is a documented raw pass-through and `[runtime] libraries` is the
supported neutral form; inspecting the former would be a second answer to a
question the author already answered.1 parent ead8dfe commit 620f9c1
23 files changed
Lines changed: 1802 additions & 30 deletions
File tree
- .agents/docs
- docs
- zh
- modules
- libs/src
- manifest/src
- toolchain-model/src
- versioning/src
- src
- build
- modgraph
- tests
- e2e
- unit
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| |||
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
38 | 42 | | |
39 | 43 | | |
40 | 44 | | |
41 | 45 | | |
| 46 | + | |
42 | 47 | | |
43 | 48 | | |
44 | 49 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 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 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
8 | 77 | | |
9 | 78 | | |
10 | 79 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
854 | 854 | | |
855 | 855 | | |
856 | 856 | | |
| 857 | + | |
| 858 | + | |
| 859 | + | |
| 860 | + | |
| 861 | + | |
| 862 | + | |
| 863 | + | |
| 864 | + | |
| 865 | + | |
| 866 | + | |
| 867 | + | |
| 868 | + | |
| 869 | + | |
| 870 | + | |
| 871 | + | |
| 872 | + | |
| 873 | + | |
| 874 | + | |
| 875 | + | |
| 876 | + | |
| 877 | + | |
| 878 | + | |
| 879 | + | |
| 880 | + | |
| 881 | + | |
| 882 | + | |
| 883 | + | |
| 884 | + | |
| 885 | + | |
| 886 | + | |
| 887 | + | |
| 888 | + | |
| 889 | + | |
| 890 | + | |
| 891 | + | |
| 892 | + | |
| 893 | + | |
857 | 894 | | |
858 | 895 | | |
859 | 896 | | |
| |||
965 | 1002 | | |
966 | 1003 | | |
967 | 1004 | | |
| 1005 | + | |
| 1006 | + | |
| 1007 | + | |
| 1008 | + | |
| 1009 | + | |
| 1010 | + | |
968 | 1011 | | |
969 | 1012 | | |
970 | 1013 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
381 | 381 | | |
382 | 382 | | |
383 | 383 | | |
384 | | - | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
385 | 404 | | |
386 | 405 | | |
387 | 406 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
744 | 744 | | |
745 | 745 | | |
746 | 746 | | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
| 755 | + | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
| 766 | + | |
| 767 | + | |
| 768 | + | |
| 769 | + | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
| 775 | + | |
| 776 | + | |
| 777 | + | |
747 | 778 | | |
748 | 779 | | |
749 | 780 | | |
| |||
843 | 874 | | |
844 | 875 | | |
845 | 876 | | |
| 877 | + | |
| 878 | + | |
| 879 | + | |
| 880 | + | |
| 881 | + | |
846 | 882 | | |
847 | 883 | | |
848 | 884 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
326 | 326 | | |
327 | 327 | | |
328 | 328 | | |
329 | | - | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
330 | 346 | | |
331 | 347 | | |
332 | 348 | | |
| |||
| 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 | |
|---|---|---|---|
| |||
496 | 496 | | |
497 | 497 | | |
498 | 498 | | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
499 | 513 | | |
500 | 514 | | |
501 | 515 | | |
| |||
0 commit comments