Skip to content

Commit a0ef3c2

Browse files
committed
2026.9.30.2: version, CHANGELOG, documentation and the design record
The version is 2026.9.30.2 in mcpp.toml and MCPP_VERSION. The CHANGELOG entry is the release's notes. The commands guide states what the status row counts, the dependencies guide states that a module name is unique within one program, and the workspace guide no longer refuses two members that share a module name and no program; both languages. The design record states the measurements, the plan, the tasks across repositories, and the implementation record, including W4's deferral on its own gate.
1 parent 1db3dc1 commit a0ef3c2

7 files changed

Lines changed: 1092 additions & 8 deletions

File tree

‎.agents/docs/2026-09-30-build-wall-time-progress-count-and-hang-plan.md‎

Lines changed: 1015 additions & 0 deletions
Large diffs are not rendered by default.

‎.agents/docs/README.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ superseded_by: 2026-09-07-....md # when status is superseded
1818
---
1919
```
2020

21-
319 records.
21+
320 records.
2222

2323
## By subject
2424

@@ -30,6 +30,7 @@ Records that declare one. Everything else is listed by date below.
3030

3131
### design
3232

33+
- [The build's wall time, its progress count, a hang after the build, and #732 and #744: measurements and a remediation plan](2026-09-30-build-wall-time-progress-count-and-hang-plan.md) — landed
3334
- [Build output, revision 3: every package that does work is named, the live display is one line drawn in one write, and a repeated warning is stated once per file](2026-09-30-build-output-refinement-design.md) — landed
3435
- [The workspace as the unit of build: one graph per configuration, one scheduler, product directories, and a reusable graph module](2026-09-29-workspace-build-graph-design.md) — landed
3536
- [Build progress: each step's line states its outcome, and one status line states the build](2026-09-29-build-progress-display-design.md) — landed
@@ -110,6 +111,7 @@ Records that declare one. Everything else is listed by date below.
110111

111112
### 2026-09
112113

114+
- [The build's wall time, its progress count, a hang after the build, and #732 and #744: measurements and a remediation plan](2026-09-30-build-wall-time-progress-count-and-hang-plan.md) — landed
113115
- [Build output, revision 3: every package that does work is named, the live display is one line drawn in one write, and a repeated warning is stated once per file](2026-09-30-build-output-refinement-design.md) — landed
114116
- [The workspace as the unit of build: one graph per configuration, one scheduler, product directories, and a reusable graph module](2026-09-29-workspace-build-graph-design.md) — landed
115117
- [Build progress: each step's line states its outcome, and one status line states the build](2026-09-29-build-progress-display-design.md) — landed

‎CHANGELOG.md‎

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,66 @@
44
> Each `## [<version>]` section is that release's notes. Entries are written in English
55
> from 2026.9.28.3 on; earlier entries remain as written.
66

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+
767
## [2026.9.30.1] - 2026-09-30
868

969
This release revises what a build prints, from a report on `mcpp build` in the

‎docs/09-commands-by-scenario.md‎

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -277,16 +277,23 @@ On a terminal one status row is drawn below the output and updated in place:
277277
Building ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢾⡷⠀⠰⣿⠆⠄⠄⠄⠄⠄⠄⠄⠄ 612/707 · 0:35 · gpp.gui: CMAKE ElaWidgetTools 6:10
278278
```
279279

280-
- The phase (`Planning`, `Running` for the build programs, `Building`,
281-
`Stopping` after a failure, `Checking`) is aligned with the verbs above it.
280+
- The phase (`Planning`, `Running` for the build programs, `Scanning` for the
281+
dependency scans, `Building`, `Stopping` after a failure, `Checking`) is
282+
aligned with the verbs above it.
282283
- Beside it, a screen of 24 braille cells plays one of four animations,
283284
chosen per command: a chomper whose position is the progress, a snake that
284285
eats a food in the colour of each package that starts, Tetris on its side
285286
whose stack is the progress, and an emitter whose ions build the progress
286287
bar. An animation moves slowly while mcpp works and faster as steps finish,
287288
and it stands still while the build waits.
288289
- Then come the steps finished and planned, and the time since the command
289-
started. When no step is left to start, `last N running` follows.
290+
started. When no step is left to start, `last N running` follows. The
291+
steps of `Building` are the work of the build: its compiles, links,
292+
archives and actions (2026.9.30.2+). Placing what the global cache serves is
293+
reported by the `Cached` lines and not counted, and the dependency scans run
294+
first, as `Scanning` with a count of their own; a scan that waits for a
295+
package's `prepare` or `check` action runs with the build and is counted
296+
there.
290297
- Last comes the longest-running `check` or `prepare` action. ninja reports
291298
every other step only when it finishes.
292299
- The row is first drawn half a second into the command. Every change leaves

‎docs/zh/09-commands-by-scenario.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,15 +247,15 @@ $ mcpp build
247247
Building ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢾⡷⠀⠰⣿⠆⠄⠄⠄⠄⠄⠄⠄⠄ 612/707 · 0:35 · gpp.gui: CMAKE ElaWidgetTools 6:10
248248
```
249249

250-
- **阶段**:阶段(`Planning`,构建程序阶段为 `Running`,`Building`,失败后为 `Stopping`,`Checking`)与上方的动词对齐。
250+
- **阶段**:阶段(`Planning`,构建程序阶段为 `Running`,依赖扫描阶段为 `Scanning`,`Building`,失败后为 `Stopping`,`Checking`)与上方的动词对齐。
251251
- **点阵屏**:阶段之后是由 24 个盲文点字格组成的点阵屏,每次命令随机播放四种动画之一。
252252
- 吃豆人:位置即进度。
253253
- 贪吃蛇:每有一个包开始,就吃下一颗该包来源颜色的食物。
254254
- 横版俄罗斯方块:堆的面积即进度。
255255
- 离子发射器:离子堆积成进度条。
256256

257257
动画在 mcpp 工作时缓慢移动,有步骤完成时加快,构建等待时静止。
258-
- **计数与时间**:随后是已完成与计划的步骤数,以及自命令开始的时间。当没有待启动的步骤时,追加 `last N running`。
258+
- **计数与时间**:随后是已完成与计划的步骤数,以及自命令开始的时间。当没有待启动的步骤时,追加 `last N running`。`Building` 的步骤是构建的工作:编译、链接、归档与 action(2026.9.30.2+)。放置全局缓存提供的内容由 `Cached` 行报告,不计入;依赖扫描先行,以 `Scanning` 显示,并有自己的计数;需要等待某个包的 `prepare` 或 `check` action 的扫描随构建一起运行,并计入构建。
259259
- **正在运行的动作**:最后是运行最久的 `check` 或 `prepare` 动作。其余步骤只在完成时由 ninja 报告。
260260
- **绘制方式**:状态行在命令开始半秒后才首次绘制;每次更新都以一次写入原地覆盖,不会闪烁。
261261

‎mcpp.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mcpp"
3-
version = "2026.9.30.1"
3+
version = "2026.9.30.2"
44
description = "Modern C++ build & package management tool"
55
license = "Apache-2.0"
66
authors = ["mcpp-community"]

‎modules/versioning/src/version.cppm‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ import std;
3131

3232
export namespace mcpp {
3333

34-
inline constexpr std::string_view MCPP_VERSION = "2026.9.30.1";
34+
inline constexpr std::string_view MCPP_VERSION = "2026.9.30.2";
3535

3636
} // namespace mcpp

0 commit comments

Comments
 (0)