@@ -564,6 +564,74 @@ measurement uses the same scripts as §2.1.
564564- Cache usage below 8 GB.
565565- A documentation-only pull request finishing under 5 minutes.
566566
567+ ### 2.7 What was built, and where it departs from §2.4
568+
569+ Implemented in mcpp #759 . Each departure below was decided by a measurement or a
570+ reading taken while building it.
571+
572+ - ** The artifact is the binary itself, not a packed copy (§2.4.1).** The Linux
573+ self-host binary has the interpreter
574+ ` ~/.mcpp/registry/data/xpkgs/xim-x-glibc/2.44/lib64/ld-linux-x86-64.so.2 ` , needs
575+ ` libgcc_s.so.1 ` from the ` xim-x-gcc/16.1.0 ` payload, and links libstdc++
576+ statically (measured locally, ` readelf ` ). A consumer that restores the
577+ sandbox runs it as it is. Packing it would test a different binary from the
578+ one every self-host build produces. ` use-built-mcpp ` runs the binary first,
579+ and only when it does not run does the bootstrap install the toolchain
580+ ` mcpp.toml ` names for the host; a binary that still does not run fails the
581+ step. The binary is 25 MB.
582+ - ** The Wine packages keep their cache (§2.4.4).** Their eviction was a
583+ consequence of F3, not a property of the cache. With one writer per key, the
584+ ` wine-debs ` cache is saved only by ` mingw-cross-wine ` on main and is no longer
585+ displaced. A release asset would have added a second thing to publish and
586+ keep current.
587+ - ** The timing tables are in the repository (§2.4.5).** They live under
588+ ` tests/e2e/timings/<host>.tsv ` , seeded from the per-test lines of the
589+ 2026-10-01 logs. A shard's membership is then a function of the commit,
590+ which makes it reproducible (` E2E_LIST=1 ` prints it). The ` e2e-coverage ` job
591+ uploads the merged durations of each run as the artifact ` e2e-timings ` , and
592+ refreshing a table is copying a file. The tables were seeded from the
593+ 2026-10-01 logs, then replaced by the durations of the first run of this
594+ change, in which 515 Linux tests ran instead of 466. Linux therefore has four
595+ shards rather than three, each budgeted at 9.9 minutes. Windows has three at
596+ 14.4 to 14.5, and macOS two at 9.1 and 9.3. The step limits are about twice
597+ the budgets: 22, 30 and 20 minutes.
598+ - ** The classifier searches exact paths (§2.4.3).** It searches for the
599+ changed path and for its translation (` docs/X ` and ` docs/zh/X ` ), and not for
600+ a bare file name. A search on the name made ` .agents/docs/README.md ` , which
601+ every new record regenerates, a code change, because release packaging names
602+ ` README.md ` . The checks of the ` docs ` job do not count as readers, because
603+ they run on every change. A document that any other script or source names
604+ starts the whole CI rather than a subset of it, which is simpler and errs
605+ towards running more.
606+ - ** The macOS legs of the target matrix and of openkal still build (§2.4.1).**
607+ They run on ` macos-14 ` , and the artifact is built on ` macos-15 ` . release.yml
608+ records that a bootstrap build linking the system libc++ with a minimum
609+ version of 14 failed at launch on ` macos-14 ` . Until the artifact is measured
610+ there, those two legs build their own, and the gate carries
611+ ` ci-lint: allow-r1 ` with that reason. Their Linux and Windows legs consume the
612+ artifact.
613+ - ** ` invariants ` and ` scan ` remain two jobs (§2.4.1).** Merging them is a
614+ rewrite of the target-matrix workflow beside a change that already rewrites
615+ twelve; it is left for a change of its own.
616+ - ** A test that never ran was broken.** 741, one of the seven ` llvm ` tests,
617+ failed on its first run in CI. The root package of its fixture was a binary,
618+ so the build linked ` cabi-probe.exe ` for ` x86_64-windows-gnu ` , and with
619+ ` allow_host_libs ` the link found the host's mingw-w64 libraries. It passed on a
620+ machine that has them and failed on every runner, and nothing noticed, because
621+ no runner ran it. The fixture's root is now a library, which is what the test
622+ says it is: "this test compiles only".
623+ - ** Coverage found more than F9.** Classifying the tests of the 2026-10-01
624+ logs found 24 that ran on no runner and were named by no workflow. The
625+ seven ` llvm ` tests are among them, and so are three ` musl ` tests: the probe
626+ named 15.1.0 while the runners installed 16.1.0. Seven ` mingw-cross ` tests
627+ are in the list too, a toolchain no shard installed. The rest were 105 (nasm),
628+ 65 (scan-deps), 239 (named by its ` E2E_ONLY ` pattern, which the check now
629+ reads), 257 (needs wine and a Linux-hosted MinGW), 658 (an attached Android
630+ device), and 873-877 (added after the logs). The capability probes now ask for
631+ a family. The Linux shards install musl, llvm, mingw-cross and nasm. 257 runs
632+ in ` mingw-cross-wine ` . 658 is the one entry of
633+ ` tests/e2e/coverage-exceptions.tsv ` .
634+
567635## Part III. Defects repaired by the next release
568636
569637### 3.1 #757 : the engine's identity is part of a build record
0 commit comments