Skip to content

Commit d0b2996

Browse files
committed
docs(design): #641 and #642 landed; bootstrap pin 2026.9.15.2 (released, mirrored, indexed)
1 parent 55a856d commit d0b2996

5 files changed

Lines changed: 349 additions & 28 deletions

‎.agents/docs/2026-09-15-641-642-implementation-plan.md‎

Lines changed: 112 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
---
22
subject: triage
3-
status: active
3+
status: landed
44
---
55

66
# #641 and #642 implemented: the plan, its review from eight angles, and the ledger
77

8-
**Status:** active. This record turns the decisions of
8+
**Status:** landed on 2026-09-15 as mcpp 2026.9.15.2 (mcpp-community/mcpp#644),
9+
`llvm.libcxx` 22.1.8.3 (mcpplibs/libcxx#1), `openkal-llvm-runtime` 0.9.7
10+
(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
912
`2026-09-15-641-642-link-forms-standards-and-paths.md` ("the triage record")
1013
into work: one pull request per repository, the order in which they merge and
1114
release, the criterion each task is held to, and a ledger whose rows are
@@ -28,40 +31,40 @@ the parallel work trees of §8.
2831

2932
| id | task (triage §) | owner | depends on | status |
3033
|---|---|---|---|---|
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 |
4346

4447
### 0.2 Packages: mcpplibs/libcxx and mcpplibs/openkal-llvm-runtime, one pull request each
4548

4649
| id | task | owner | depends on | status |
4750
|---|---|---|---|---|
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 |
5154

5255
### 0.3 Index and payloads
5356

5457
| id | task | owner | depends on | status |
5558
|---|---|---|---|---|
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) |
5861

5962
### 0.4 Verification
6063

6164
| id | task | owner | depends on | status |
6265
|---|---|---|---|---|
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 |
6568

6669
## 1. The review
6770

@@ -330,3 +333,91 @@ with a READING line:
330333

331334
e2e numbers: lead 689-691, W1 692-695, W2 696-697, W3 698-699. A tree removes
332335
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).

‎.agents/docs/2026-09-15-641-642-link-forms-standards-and-paths.md‎

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
---
22
subject: triage
3-
status: active
3+
status: landed
44
---
55

66
# Link forms, standard levels and a path limit: the asks of #641 and #642, read against the code
77

8-
**Status:** active, revision 1, for review. No code has changed.
8+
**Status:** landed on 2026-09-15 as mcpp 2026.9.15.2 (mcpp-community/mcpp#644),
9+
with `llvm.libcxx` 22.1.8.3 and `openkal-llvm-runtime` 0.9.7 in the index
10+
(mcpplibs/mcpp-index#428). The recommendations D1 to D4 were adopted; D4's
11+
Windows measurement became e2e 698 leg C on the pull request's own windows-2022
12+
run instead of a separate pull request. Where the landed form differs from this
13+
revision, `2026-09-15-641-642-implementation-plan.md` §1.9 records it: the
14+
dependency spelling `namespace.name` is published for `dep_dir` and
15+
`dep_linkage`; on Mach-O a shared library over a graph runtime exports what its
16+
sources mark with default visibility; the M3 remedy follows whether the package
17+
constrains its own form. The body below is revision 1, unchanged.
918

1019
Engine code was read at `69fae268` (origin/main, mcpp 2026.9.15.1). The
1120
issues measured 2026.9.14.2 and 2026.9.14.3; every probe below reproduces its

0 commit comments

Comments
 (0)