You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
(mcpplibs/openkal-llvm-runtime#22), openxlings/xim-pkgindex#843 and
11
+
mcpplibs/mcpp-index#428; §9 records the closure. This record turns the decisions of
9
12
`2026-09-15-641-642-link-forms-standards-and-paths.md` ("the triage record")
10
13
into work: one pull request per repository, the order in which they merge and
11
14
release, the criterion each task is held to, and a ledger whose rows are
@@ -28,40 +31,40 @@ the parallel work trees of §8.
28
31
29
32
| id | task (triage §) | owner | depends on | status |
30
33
|---|---|---|---|---|
31
-
| M1 | a required compiler family's version is taken from pins that name the same payload; the refusal no longer states a false reason (§3.1) | lead | - |branch: unit `RequiredFamilyPins.*`; M1 probe reads `llvm@30.0.16248370` on 2026.9.15.1 |
32
-
| M2 |`mcpp pack --features` reaches every build pass `pack` performs (§3.6) | lead | - |branch: e2e 689 (fails on 2026.9.15.1: `pack --features installer failed`) |
33
-
| M3 | a dependency's C++ shared library in a graph whose C++ runtime is a package is refused before compiling, unless `cxx_runtime` states `self-contained` for shared libraries; under that statement the library links the provider's objects (§3.3) | lead | - |branch: e2e 690, four legs (fails on 2026.9.15.1: the refusal is absent) |
34
-
| M4 |`linkage = "static" \| "shared"` in `[targets.<n>]` and `[target.<sel>.targets.<n>]` states the package's default form; precedence and the information line (§3.4) | W1 | - |branch: unit `LinkageForm.*`, manifest cases; e2e 692 (fails on 2026.9.15.1: no libfw.so for a silent consumer) |
35
-
| M5 | dependency link forms are computed once before the root's build program and applied where they are today; `MCPP_DEP_<NAME>_LINKAGE` and `mcpp::dep_linkage` for the root's program (§3.5) | W1 | M4 |branch: e2e 693 (fails on 2026.9.15.1: `'dep_linkage' is not a member of 'mcpp'`) |
36
-
| M6 | a C++-layer provider that states `[package] standard` compiles its implementation units at that level; module units stay at the graph's (§3.2) | W2 | - |branch: unit `CxxLayerStandard.*` (9), `CacheKey` case; e2e 696 (fails on 2026.9.15.1: `new.cpp` at `-std=c++20`) |
37
-
| M7 | the object address of a source outside its declaring package is relative to its owning package, or a hashed directory when no package owns it (§3.7 item 3) | W3 | - |branch: unit `ObjectAddress.*`; e2e 698 leg A (fails on 2026.9.15.1: `obj/installer/__up/__up/dep/...`) |
38
-
| M8 | the host-tool sub-build runs in a short key-named scratch directory (§3.7 item 2) | W3 | - |branch: unit `ToolStoreScratch.*`; e2e 698 leg B |
39
-
| M9 | files the engine opens from ninja-invoked subcommands go through one extended-length path helper on Windows (§3.7 item 1) | W3 | - |branch: unit `PlatformFs.*`; e2e 698 leg C (Windows readings from CI) |
40
-
| M10 | CI: the llvm-dependent e2e scripts of M3 and M6, and the existing 663, run on a job that has llvm, with their PASS lines asserted (§1.8) | lead | M3, M6 |branch: `ci-linux-e2e.yml` hermetic job step |
41
-
| M11 | user documentation with its Chinese mirror; SPEC changes; CHANGELOG; version 2026.9.15.2 | lead, W1-W3 | M1-M9 |todo|
42
-
| M12 | the triage and plan records closed with their readings | lead | all |todo|
34
+
| M1 | a required compiler family's version is taken from pins that name the same payload; the refusal no longer states a false reason (§3.1) | lead | - |done (#644, `55a856d2`): unit `RequiredFamilyPins.*`; M1 probe reads `llvm@30.0.16248370` on 2026.9.15.1 |
35
+
| M2 |`mcpp pack --features` reaches every build pass `pack` performs (§3.6) | lead | - |done (#644, `55a856d2`): e2e 689 (fails on 2026.9.15.1: `pack --features installer failed`) |
36
+
| M3 | a dependency's C++ shared library in a graph whose C++ runtime is a package is refused before compiling, unless `cxx_runtime` states `self-contained` for shared libraries; under that statement the library links the provider's objects (§3.3) | lead | - |done (#644, `55a856d2`): e2e 690, four legs (fails on 2026.9.15.1: the refusal is absent) |
37
+
| M4 |`linkage = "static" \| "shared"` in `[targets.<n>]` and `[target.<sel>.targets.<n>]` states the package's default form; precedence and the information line (§3.4) | W1 | - |done (#644, `55a856d2`): unit `LinkageForm.*`, manifest cases; e2e 692 (fails on 2026.9.15.1: no libfw.so for a silent consumer) |
38
+
| M5 | dependency link forms are computed once before the root's build program and applied where they are today; `MCPP_DEP_<NAME>_LINKAGE` and `mcpp::dep_linkage` for the root's program (§3.5) | W1 | M4 |done (#644, `55a856d2`): e2e 693 (fails on 2026.9.15.1: `'dep_linkage' is not a member of 'mcpp'`) |
39
+
| M6 | a C++-layer provider that states `[package] standard` compiles its implementation units at that level; module units stay at the graph's (§3.2) | W2 | - |done (#644, `55a856d2`): unit `CxxLayerStandard.*` (9), `CacheKey` case; e2e 696 (fails on 2026.9.15.1: `new.cpp` at `-std=c++20`) |
40
+
| M7 | the object address of a source outside its declaring package is relative to its owning package, or a hashed directory when no package owns it (§3.7 item 3) | W3 | - |done (#644, `55a856d2`): unit `ObjectAddress.*`; e2e 698 leg A (fails on 2026.9.15.1: `obj/installer/__up/__up/dep/...`) |
41
+
| M8 | the host-tool sub-build runs in a short key-named scratch directory (§3.7 item 2) | W3 | - |done (#644, `55a856d2`): unit `ToolStoreScratch.*`; e2e 698 leg B |
42
+
| M9 | files the engine opens from ninja-invoked subcommands go through one extended-length path helper on Windows (§3.7 item 1) | W3 | - |done (#644, `55a856d2`): unit `PlatformFs.*`; e2e 698 leg C (Windows readings from CI) |
43
+
| M10 | CI: the llvm-dependent e2e scripts of M3 and M6, and the existing 663, run on a job that has llvm, with their PASS lines asserted (§1.8) | lead | M3, M6 |done (#644, `55a856d2`): `ci-linux-e2e.yml` hermetic job step |
44
+
| M11 | user documentation with its Chinese mirror; SPEC changes; CHANGELOG; version 2026.9.15.2 | lead, W1-W3 | M1-M9 |done (#644): docs 04, 07, 10, 20, 22, 30, 50 with mirrors; SPEC-001 v1.4 criterion 9; CHANGELOG; 2026.9.15.2|
45
+
| M12 | the triage and plan records closed with their readings | lead | all |done: this revision, §9|
43
46
44
47
### 0.2 Packages: mcpplibs/libcxx and mcpplibs/openkal-llvm-runtime, one pull request each
45
48
46
49
| id | task | owner | depends on | status |
47
50
|---|---|---|---|---|
48
-
| P1 |`llvm.libcxx` 22.1.8.3: `[package] standard = "c++23"` replaces `[build] cxx_standard`; a CI leg builds a c++20 consumer with the released engine | lead | M6 released |todo|
49
-
| P2 |`openkal-llvm-runtime` next patch: the same statement | lead | - |todo|
50
-
| P3 | both tags published and mirrored to GitCode | lead | P1, P2 |todo|
51
+
| P1 |`llvm.libcxx` 22.1.8.3: `[package] standard = "c++23"` replaces `[build] cxx_standard`; a CI leg builds a c++20 consumer with the released engine | lead | M6 released |done: mcpplibs/libcxx#1 (`2aa6724d`); CI green on five rows under 2026.9.15.2, and before the release under `mcpp_ref=feat/641-642` (run 34896741837)|
52
+
| P2 |`openkal-llvm-runtime` next patch: the same statement | lead | - |done: mcpplibs/openkal-llvm-runtime#22 (`246bc669`), 0.9.7; green under its pin and under `mcpp_ref=feat/641-642` (run 34895002497)|
53
+
| P3 | both tags published and mirrored to GitCode | lead | P1, P2 |done: tags `22.1.8.3` and `0.9.7`; each GitHub archive and its GitCode mirror byte-identical (sha256 `b7360797…`, `8914579f…`) and opened as a tar|
51
54
52
55
### 0.3 Index and payloads
53
56
54
57
| id | task | owner | depends on | status |
55
58
|---|---|---|---|---|
56
-
| I1 | openxlings/xim-pkgindex: the release bot's `mcpp` bump merged | lead | release |todo|
57
-
| I2 | mcpplibs/mcpp-index: `llvm.libcxx` 22.1.8.3 and the `openkal-llvm-runtime` patch; the index CI's `MCPP_VERSION` moves to 2026.9.15.2 | lead | P3, I1 |todo|
59
+
| I1 | openxlings/xim-pkgindex: the release bot's `mcpp` bump merged | lead | release |done: #843 (`15d78b85`), +22/-3, four hashes equal to the downloaded archives; pointer `index_version``15d78b8`; the host installed `mcpp@2026.9.15.2` through the CN mirror|
60
+
| I2 | mcpplibs/mcpp-index: `llvm.libcxx` 22.1.8.3 and the `openkal-llvm-runtime` patch; the index CI's `MCPP_VERSION` moves to 2026.9.15.2 | lead | P3, I1 |done: #428 (`83801b98`); the artifact published; the full member sweep under 2026.9.15.2 green after #429 (§9.4)|
58
61
59
62
### 0.4 Verification
60
63
61
64
| id | task | owner | depends on | status |
62
65
|---|---|---|---|---|
63
-
| V1 | a fresh SubOS sandbox with CN mirrors for xlings and mcpp runs the scenarios of §7 against the published engine and index | lead | I1, I2 |todo|
64
-
| V2 | replies on #641 and #642 naming the release and what the framework writes | lead | V1 |todo|
66
+
| V1 | a fresh SubOS sandbox with CN mirrors for xlings and mcpp runs the scenarios of §7 against the published engine and index | lead | I1, I2 |done: SubOS `v641`, 18 of 18, `fails=0` (§9.3)|
67
+
| V2 | replies on #641 and #642 naming the release and what the framework writes | lead | V1 |done: issuecomment-5675298116 and -5675298352|
65
68
66
69
## 1. The review
67
70
@@ -330,3 +333,91 @@ with a READING line:
330
333
331
334
e2e numbers: lead 689-691, W1 692-695, W2 696-697, W3 698-699. A tree removes
332
335
its `target/` after its branch is merged.
336
+
337
+
## 9. Closure
338
+
339
+
### 9.1 The engine pull request
340
+
341
+
mcpp-community/mcpp#644 ran CI twice.
342
+
343
+
-**Round 1: three red jobs, none of them in the engine.** On all three hosts
344
+
`00_fixture_path_hygiene.sh` refused e2e 696 and 698, which wrote manifest
345
+
paths without `host_path`. On windows-2022 e2e 698's consumer passed a command
346
+
with two quoted words to `std::system`, and cmd.exe stripped the outer quotes
347
+
("The filename, directory name, or volume label syntax is incorrect"). Both
348
+
were fixed in the scripts, together with the refinements measured meanwhile
349
+
(§1.9: the qualified dependency name, the Mach-O visibility rule).
350
+
-**Round 2: 40 checks green.** The hermetic job printed the asserted lines of
351
+
663, 690 (`READING private copy: runtime_error not matched by its class`) and
352
+
696. On windows-2022 e2e 698 read `LongPathsEnabled: 1`, an estimated longest
353
+
sub-build path of 279 characters, and a deep tool build that exits 0.
354
+
- An independent read-only review of the diff against §2 and the triage record
355
+
reported no defect.
356
+
- The squash merge `55a856d2` is byte-identical to the tested head `0cde03d2`.
357
+
Every workflow on `55a856d2` is green; `ci-fresh-install` waited twenty
358
+
minutes for the index, timed out before the bump merged, and passed on its
359
+
second attempt.
360
+
361
+
### 9.2 The release
362
+
363
+
Release run 34900385287 built the four archives, sealed the manifest and ran
364
+
`publish-ecosystem`. Each archive and its `.sha256` were uploaded to GitCode from
365
+
this host as the build job published them; each counted as done at a GET of 200
366
+
with the upstream size, and the GitHub mirror answered the same four sizes.
367
+
openxlings/xim-pkgindex#843 was merged after its four hashes were compared with
368
+
the archives downloaded from GitCode; the pointer read `index_version 15d78b8`,
369
+
and `xlings install mcpp@2026.9.15.2` through the CN mirror installed a binary
370
+
that reports 2026.9.15.2.
371
+
372
+
### 9.3 The sandbox
373
+
374
+
`2026-09-15-641-642-verify.sh`, run in a fresh SubOS `v641` with CN mirrors for
375
+
xlings and mcpp, against the published engine and index: 18 of 18, `fails=0`.
376
+
377
+
| section | reading |
378
+
|---|---|
379
+
| A |`mcpp --version` 2026.9.15.2; both mirrors CN, read back from mcpp's xlings configuration |
380
+
| B |`llvm.libcxx` 22.1.8.3 and `openkal-llvm-runtime` 0.9.7 are in the index |
381
+
| C | a required llvm on a fresh home resolves `llvm@22.1.8`|
382
+
| D | a c++20 program over `llvm.libcxx` 22.1.8.3 builds, the report names the package as the C++ layer, and the program prints `1-2`|
383
+
| E | a shared dependency over the graph runtime is refused naming the private copy; with the statement it builds and runs |
384
+
| F | a package default `linkage = "shared"`: the silent consumer gets the shared library and its build program reads `shared`; an explicit `linkage = "static"` under `--strict` gets no shared library, the information line, and reads `static`|
385
+
| G |`mcpp pack --format dir --features extra` succeeds |
386
+
387
+
The same script run before the package revisions were indexed (SubOS
388
+
`v641pre`, `llvm.libcxx` 22.1.8.2) differs in D alone: the c++20 program stops at
389
+
`no template named 'bad_expected_access'`. That run is the control: the engine
390
+
change needs the package's statement, and the statement is what 22.1.8.3 adds.
391
+
392
+
### 9.4 The index members under the new engine
393
+
394
+
mcpplibs/mcpp-index validates only the descriptors a change names on a pull
395
+
request or a push, so the full member sweep under `MCPP_VERSION` 2026.9.15.2
396
+
was dispatched by hand.
397
+
398
+
-**Run 34933120467 on `83801b98`:** every member built and tested on Linux
399
+
(default and llvm), macOS and Windows except `nanodbc` on the two Linux legs.
400
+
Both stopped before compiling, on `compat.unixodbc`'s download:
401
+
`connecting… 306s` and `download artifact missing`. The descriptor named only
402
+
`www.unixodbc.org`, which did not answer from the runners or from a host in
403
+
CN; the weekly sweep of 2026-09-13 had passed, so neither the member nor the
404
+
engine had changed.
405
+
-**The fix, mcpplibs/mcpp-index#429 (`0d278e98`):** upstream publishes the
406
+
same dist tarball as the asset of its GitHub release `v2.3.14` (sha256
407
+
`4e2814de…`, equal to the descriptor's, with `libltdl/`). The descriptor
408
+
names it as GLOBAL and a new GitCode mirror, `mcpp-res/unixodbc` release
409
+
`2.3.14`, byte-identical, as CN.
410
+
-**Run 34939202738 on `0d278e98`:** 27 jobs successful and one skipped (the
411
+
job that runs only when a sweep fails); `nanodbc 13s ok` on both Linux legs.
412
+
Every member of the index builds and passes its tests under 2026.9.15.2.
413
+
414
+
### 9.5 What remains open
415
+
416
+
-**F1**, a shared package over a static package: recorded in the triage
417
+
record §3.3.5, for its own record.
418
+
-**F2**, the payload's Mach-O shared default: `llvm.libcxx`'s CI measured the
419
+
catch-by-type property for the graph's runtime on macOS arm64
420
+
(`runtime_error not matched by its class`), as libc++'s comparison rules
421
+
predict; the payload's origin is still unmeasured and touches builds that work
422
+
today.
423
+
-**F3**, the std module initialiser linked into every C++ image (§1.9).
0 commit comments