|
4 | 4 | > Each `## [<version>]` section is that release's notes. Entries are written in English |
5 | 5 | > from 2026.9.28.3 on; earlier entries remain as written. |
6 | 6 |
|
| 7 | +## [2026.9.30.2] - 2026-09-30 |
| 8 | + |
| 9 | +This release answers five reports on 2026.9.30.1 while building xlings |
| 10 | +(`.agents/docs/2026-09-30-build-wall-time-progress-count-and-hang-plan.md`): a |
| 11 | +build that did not exit after its status row stopped, a status row whose count |
| 12 | +was mostly bookkeeping, planning that preceded every edit's compile by three |
| 13 | +seconds, mcpp#744, and mcpp#732. On a clean build of xlings the command starts |
| 14 | +ninja at 1.3 s instead of 4.5 s; an edit of one source builds in 8.0 s instead |
| 15 | +of 10.5 s; a build with nothing to do is unchanged at 0.05 s. |
| 16 | + |
| 17 | +### Fixed |
| 18 | + |
| 19 | +- **A build no longer hangs after ninja.** The stack animation could spawn |
| 20 | + pieces onto cells it already held once its stack reached the right edge |
| 21 | + short of its target, and its loop then never ended while the status row held |
| 22 | + the terminal's line lock; the build joined the row's thread and waited for |
| 23 | + ever (about 1% of interactive builds). Every loop of the animation now grows |
| 24 | + the stack or ends. A property test drives every animation over 2000 seeds and |
| 25 | + every game over 500 under a watchdog; it fails on the previous animation. |
| 26 | +- **The status row counts the work of the build.** A clean build of xlings |
| 27 | + counted 1195 steps, of which 503 placed files the global cache serves and 460 |
| 28 | + were dependency scans, and read 967/1195 when its first compile began. The |
| 29 | + cache pass is reported by its `Cached` lines and not counted; the scans that |
| 30 | + wait on no action run first, shown as `Scanning f/t`; and `Building f/t` |
| 31 | + counts the compiles, links, archives and actions: 0/232 at the first compile |
| 32 | + of the same build. The fast path runs the same passes (e2e 842, 843). |
| 33 | +- **A vendored xlings is replaced from the newest source (mcpp#744).** |
| 34 | + `MCPP_VENDORED_XLINGS` when set, otherwise the newer of the xlings released |
| 35 | + with mcpp and the xlings on `PATH`; the note that no newer source is |
| 36 | + available was false when a newer xlings was on `PATH`. `Updating` and `Note` |
| 37 | + are each stated once per process (e2e 846). |
| 38 | +- **A module name is unique within one program, not within one build |
| 39 | + (mcpp#732).** An `artifacts` program, or a workspace member that shares no |
| 40 | + program with another, may provide a module of the same name as another |
| 41 | + program of the build. An import is resolved in the importing package's |
| 42 | + closure; two BMIs of one name lie below their packages' directories, and each |
| 43 | + compile is told which one a name means (a module map for GCC, |
| 44 | + `-fmodule-file=` for Clang, `/reference` for MSVC). Two providers that one |
| 45 | + program links are refused, naming that program's package, and one file |
| 46 | + reached as two packages is recognised whatever its spelling. When every name |
| 47 | + has one provider, `build.ninja` and `compile_commands.json` are byte-identical |
| 48 | + to 2026.9.30.1's (e2e 847, 848). |
| 49 | + |
| 50 | +### Changed |
| 51 | + |
| 52 | +- **Planning walks each package tree once.** A source pattern with an empty |
| 53 | + literal prefix walked the whole package tree: the 127 patterns of |
| 54 | + `compat.libarchive`, expanded about three times per plan, opened its 35 |
| 55 | + directories 13,406 times. A walk is now kept per tree for the command and |
| 56 | + revalidated by its directories' modification times. A planned edit of one |
| 57 | + xlings source opens 1,749 package directories instead of 30,372, and its |
| 58 | + scan phase takes 43 ms instead of 0.91 s. |
| 59 | +- **The version of the vendored xlings is asked once.** It is kept per |
| 60 | + process, and under the home keyed by the binary's path, size and |
| 61 | + modification time, so a command that loads its configuration no longer runs |
| 62 | + `xlings --version` (0.35 s) when the binary has not changed. |
| 63 | +- **Planning states where its time goes.** Each phase of planning, and each |
| 64 | + step of its last phase, logs its duration under `build/stage` whenever the |
| 65 | + log file or `--verbose` would show it. |
| 66 | + |
7 | 67 | ## [2026.9.30.1] - 2026-09-30 |
8 | 68 |
|
9 | 69 | This release revises what a build prints, from a report on `mcpp build` in the |
|
0 commit comments