@@ -544,4 +544,56 @@ its `target/` after its branch is merged.
544544
545545## 9. Closure
546546
547- (written when the rows of §0 are closed)
547+ ### 9.1 What shipped
548+
549+ | repository | pull request | published as |
550+ | ---| ---| ---|
551+ | mcpp-community/mcpp | #650 (` f4529b2a ` ), #651 (` 2f925d48 ` ) | 2026.9.16.1 |
552+ | mcpp-community/mcpp | #652 (` 074d87b3 ` ) | the bootstrap pin |
553+ | mcpp-community/mcpp-plugins | #28 (` dea1f09 ` ) | 0.12.0 |
554+ | openxlings/xim-pkgindex | #845 (` 1c951f0b ` ) | mcpp 2026.9.16.1 as ` latest ` |
555+ | mcpplibs/mcpp-index | #432 (` 0cbac960 ` ), #433 | the reproducible artifact; mcpp: plugins 0.12.0 |
556+ | openxlings/xlings | #597 (` 4ea4eac9 ` ) | the ` compat.* ` spelling |
557+
558+ The engine is one pull request as the goal requires, and #651 is the exception
559+ it allows: the review before the release found that #650 refuses a manifest
560+ 2026.9.15.2 builds, and the release was cancelled to carry the fix rather than
561+ ship the cliff and repair it in a second version (§1.10 item 19).
562+
563+ The release is mirrored: each of the four archives was downloaded from GitCode
564+ and compared with its published ` sha256 ` , and all four match. The plugins
565+ source archive was compared with ` cmp ` against the GitHub archive of the tag
566+ and is byte-identical; ` 90a70689b090be72 ` names both, and the index descriptor
567+ carries that digest.
568+
569+ ### 9.2 What the sandbox verified
570+
571+ ` .agents/docs/2026-09-16-646-649-verify.sh ` in SubOS ` v646 ` , with
572+ ` xlings config --mirror CN ` and ` mcpp self config --mirror CN ` inside it,
573+ against the PUBLISHED engine addressed by its store path.
574+
575+ The control against 2026.9.15.2 reads ` fails=10 ` : every change detector fails
576+ and every guard passes, which is what makes the run against 2026.9.16.1
577+ evidence rather than decoration.
578+
579+ ### 9.3 Four probe defects, and the shape they share
580+
581+ The first three runs against the published engine read ` fails=4 ` , ` fails=2 ` and
582+ ` fails=1 ` . Not one was an engine defect.
583+
584+ 1 . Sections E and F wrote ` std::println ` into a build program whose fixture
585+ states ` standard = "c++20" ` , where it does not exist. The build program
586+ failed to compile, and the section reported the engine.
587+ 2 . Section G printed its reading to standard output. mcpp discards a build
588+ program's output when it exits 0, so the reading was never seen and the
589+ section reported the engine. Both now use ` mcpp::warning ` , which is what
590+ every e2e script that reads a build program already used.
591+ 3 . Section I then failed where it had passed: the sandbox's ` $HOME ` persists
592+ between runs, a build program is cached by its source, and a cache hit does
593+ not re-run it or replay its warnings, so the probe measured the previous
594+ run. Every build program the script writes now carries a per-run token.
595+
596+ The third defect is the one worth keeping. Sections E and G passed on the run
597+ where their sources had just changed, and would have failed on the next run for
598+ the reason section I failed on that one. A probe that reads a build program has
599+ to make the build program new, or it measures the run before it.
0 commit comments