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
docs: the 2026-09-28 round's implementation record, readings and self-review (#733)
The plan of the 2026-09-28 round is landed (revision 4). Section 8 records the departures from section 7, nine findings (F7: the lint's reading of the #729 siblings; F8: the release gate's first reading was of its own harness, #731; F9: a packaging revision reaches a consumer with its index), the before and after reading of every task, the three sandbox runs (27 ok and 0 failed for the new pair), GalTranslPP on Windows three ways, the index's full sweep with 2026.9.28.2, and a self-review. The CHANGELOG of 2026.9.28.2 names #731. Documentation only.
Copy file name to clipboardExpand all lines: .agents/docs/2026-09-28-ecosystem-design-and-optimisation-plan.md
+127-3Lines changed: 127 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,12 +1,13 @@
1
1
---
2
2
subject: design
3
-
status: active
3
+
status: landed
4
4
---
5
5
6
6
# An ecosystem design for mcpp and xlings: one authority per fact, and the work that follows from it
7
7
8
-
**Status:** active, revision 3 (2026-09-28). The design is settled; §7 divides it
9
-
into tasks and is the implementation record.
8
+
**Status:** landed, revision 4 (2026-09-28). The design is settled; §7 divides it
9
+
into tasks, and §8 records their implementation: mcpp 2026.9.28.2 and xlings
10
+
2026.9.28.2 are released and indexed.
10
11
11
12
-**Revision 1** proposed the design and seven decisions.
12
13
-**Revision 2** records the reviewer's answers: D1 to D7 are settled as
@@ -16,6 +17,8 @@ into tasks and is the implementation record.
16
17
-**Revision 3** divides the workstreams into tasks per repository, with the
17
18
dependencies between them and the criterion of each (§7). Facts found while
18
19
dividing them, which change no decision, are recorded in §7.4.
20
+
-**Revision 4** records the implementation (§8): where it departed from §7,
21
+
nine findings, the before and after reading of each task, and a self-review.
19
22
20
23
**Input.** The review `2026-09-28-ecosystem-review-of-two-days-of-mcpp-and-xlings.md`
21
24
(cited below as "the review §n"), the #717-#726 round's records, and the
@@ -687,4 +690,125 @@ implementing it, and the readings.
687
690
failed on the Windows row and found it. The detector accepts both spellings,
688
691
the comment in `cli.cppm` states the exception, and the CHANGELOG lists the
689
692
one re-run.
693
+
-**F7. §7.4 named the wrong sibling of #729.** It listed the LLVM step of
694
+
`ci-windows.yml` among the builds piped into `tee` without `pipefail`; that
695
+
step runs under `shell: bash`, which GitHub starts with `-eo pipefail`, and
696
+
is not affected. The lint's reading of the workflows before the change is
697
+
seven W1 problems: in `ci-linux.yml` the LLVM, musl-gcc and GCC cold-rebuild
698
+
steps and two example steps, and in `ci-fresh-install.yml` two template
699
+
steps. A list written from reading the files is the claim; the lint's output
700
+
is the reading.
701
+
-**F8. The release gate's first reading was of its own harness.** The first
702
+
release run of 2026.9.28.2 (36363585412) failed the GalTranslPP canary before
703
+
it built anything: `release_canaries.py` started `bash` by name, and a Windows
704
+
program that does so gets `System32\bash.exe`, the WSL launcher, because the
705
+
loader searches the system directory before `PATH`. The gate held and no tag
706
+
was created. The workflow now names the step's bash (`CANARY_BASH`), the
707
+
runner has tests, and the canaries were dispatched on the fix's branch before
708
+
the release was dispatched again (#731).
709
+
-**F9. A packaging revision reaches a consumer when its index does.** The
710
+
GalTranslPP canary, dispatched on #731's branch after `qt-base` revision 1
711
+
was published, built, ran and packed the project with the candidate, and
712
+
stated once that `xim-x-qt-base\6.11.1\bin` ships the MSVC C++ runtime:
713
+
the resolver placed the toolset's set instead, as WS1 specifies. The payload
714
+
was revision 0 because the job restores the whole mcpp home from CI's cache,
715
+
its index copy included, and that copy predates the revision; by that index
716
+
the installed payload is current. A consumer receives revision 1 on the
717
+
first use after its index refreshes (GalTranslPP's own CI caches the
718
+
payloads and not the index; its reading follows the release).
719
+
720
+
### 8.3 Readings
721
+
722
+
**Before and after, per task.** Each criterion of §7 was read against the
723
+
released 2026.9.28.1 (xlings 2026.9.28.1) and against this round's versions.
724
+
725
+
| Task | Criterion | 2026.9.28.1 | 2026.9.28.2 |
726
+
|---|---|---|---|
727
+
| X1 | the index build script runs once per `update` (E2E-91 S6; sandbox) | 2 runs | 1 run |
728
+
| X2 | a store hit reads "is in the store", then "active: a -> b" | "is already installed", "upgraded" | as specified |
729
+
| X3 | every `download_progress` event names its stream (E2E-123 P3; sandbox) | no `stream`| named, bounded by the elapsed time |
730
+
| X4 | off a terminal, the xim index download prints two lines (E2E-123 P1; sandbox, CN mirror) | 162 lines (769 in a CI log) | 2 lines |
731
+
| X5 | the marker; #617's handoff; #624's nested home (E2E-120 S6, E2E-124; sandbox) | no marker; "package file not found" | as specified |
732
+
| M1 | e2e 819 L1 to L6; e2e 820 W1 to W5 on the Windows row (VS 2026, MSVC 14.51.36231) |`--crt` unknown | pass |
733
+
| M2 | e2e 820 W6; e2e 799 D; the measurement (run 36361809507) | the tools do not start as actions; `--path-prepend` unknown | the tools start as actions on the Visual Studio row and on the masked row (managed msvc@14.44.35207), and do not start directly |
734
+
| M3 | e2e 118 on the Windows row | asserted only the missing depfile | the rebuild is asserted and passes |
735
+
| M4 | e2e 818 criteria 5 and 6; e2e 820 W7; e2e 821 | 0 statements (818); A1 fails (821) | once; once at `[workspace.build]`; once per run of the edge |
736
+
| M5 | the lint on the workflows before and after the change | 7 W1 problems | 0 |
737
+
| M6 | the docs check on the Linux, macOS, Windows and bare Windows rows | no `defaultToolchain`| gcc@16.1.0, llvm@20.1.7, llvm@20.1.7 and gcc@16.1.0: 0 problems on each row |
738
+
| M7 | unit `ConditionalOrder.*`; the sandbox section #728| lexical order | specificity |
739
+
| M8 | the canaries; `verify-published.sh`| not present | see F8 and the sandbox table below |
740
+
| I1, I2 | the static test; the Windows install tests of `qt-base` and `qt` (openxlings/xim-pkgindex#898) | the test fails at `qt` and `qt-base`| both recipes install and pass their checks with revision 1 |
741
+
| N1 | the full sweep with mcpp 2026.9.28.2 (run 36376460690) | pinned to 2026.9.28.1 | 22 shards green (linux default 6, linux llvm 9, macos 2, windows 5) |
742
+
| N2 |`red_members.py selftest` (seven cases) | not present | pass; on the full sweep, "No member failed." |
743
+
744
+
**CI.**mcpp#730's last head (`feb5743f`): every workflow concluded success;
745
+
the two jobs of the xcode-27 image fail as known red (#669). The two earlier runs
746
+
on the branch found F4, F6, the fast path that e2e 821 assumed on every host
747
+
(it serves only ELF products, #400), and the measurement's three harness
748
+
defects; each was fixed on the branch.
749
+
750
+
**Sandbox readings.**`tests/release/verify-published.sh` in fresh SubOS
751
+
sandboxes (`xlings subos use <n> --sandbox`), with the CN mirror set for xlings
752
+
and for mcpp, against what the index publishes:
753
+
754
+
| mcpp | xlings | ok | failed | not run | The failures |
755
+
|---|---|---|---|---|---|
756
+
| 2026.9.28.1 | 2026.9.28.1 | 15 | 12 | 2 | every section this round adds, each with the reading of §8.3's second column |
757
+
| 2026.9.28.1 | 2026.9.28.2 | 20 | 7 | 2 | the seven mcpp sections: mcpp's registry runs its pinned xlings 2026.9.28.1 and carries no marker (two); no `defaultToolchain`; the lexical order; the three `place-dlls` legs (`--crt` unknown) |
758
+
| 2026.9.28.2 | 2026.9.28.2 | 27 | 0 | 2 | none |
759
+
760
+
The two sections not run are Windows behaviour, read on the Windows CI rows
761
+
(e2e 820, e2e 118, the measurement). Every section kept from 2026.9.28.1
762
+
(#717, #720, #723, #724, #725, the progress of an index refresh) passes in
763
+
all three runs.
764
+
765
+
**GalTranslPP on Windows.** The real project the review started from, read
766
+
three ways with mcpp 2026.9.28.2, each with the LLVM row (llvm@22.1.8) over the
767
+
Visual Studio 2026 toolset (MSVC 14.51.36231) on `windows-2025`:
768
+
769
+
| Reading | Build, run, pack | The runtime beside the program |
770
+
|---|---|---|
771
+
| the release's canary (the candidate, CI's cached mcpp home) | 4 of 4 commands held; `GalTransl++ CLI v3.1.1`|`qt-base` revision 0 from the cached home: its copy is stated once as a packaging fault, and the toolset's set is placed (F9) |
772
+
| the project's CI, pin 2026.9.28.2 (Sunrisepeak/GalTranslPP#3, `0681f59`) | success in 41 minutes | no runtime copy in `qt-base`'s `bin`: nothing is stated; the package carries the set the build placed |
773
+
| the same, without the #718 workaround (`229f0d1`, run 36378870254) | success in 35 minutes; no statement that a CRT word is redundant | the model alone chooses the dynamic CRT: the packages carry `MSVCP140*` and `VCRUNTIME140*` beside GPPCLI and GPPGUI |
774
+
775
+
### 8.4 Self-review
776
+
777
+
**Architecture.** Each fact that §1 set out to give one authority now has one:
778
+
the files beside a PE program (`mcpp.build.runtime_placement`, read by the
779
+
plan, `place-dlls` and `mcpp pack`), the order of conditional tables
780
+
(`mcpp.manifest.cfg_selector`, read by both manifest readers), the host's
781
+
default toolchain (`pins::host_default_toolchain`, read by the first run,
782
+
`self env` and the docs check), and a home (`home_identity::is_home`, read by
783
+
every xlings reader). Two statements remain second copies by construction:
784
+
`verify-published.sh` embeds the PE synthesiser of `tests/e2e/_synth_pe.py`,
785
+
because a sandbox sees no checkout, and the index keeps its own list of red
786
+
members, because the owner of a failure is a fact of the index.
787
+
788
+
**Crossings.** The pull-request template's table was filled before CI and
789
+
still missed one crossing (F6: the action `PATH` against the stability of an
790
+
action's command line). The table asks which invariants a change crosses; a
791
+
change to a generated command line crosses every test and comment that reads
792
+
that command, and those are found by searching for the old spelling, not by
793
+
thinking of invariants.
794
+
795
+
**Stability.** The release gate works and costs time: the GalTranslPP canary
796
+
builds its vcpkg dependencies without a cache on `main`, about fifty minutes,
797
+
before any archive is built. Its cache is saved per run, so later releases
798
+
from `main` restore it. The measurement workflow renames system files on a
799
+
disposable runner and restores them from bash in an `always()` step.
800
+
801
+
**User experience.** A project that wrote the #718 workaround
802
+
(`dialect_cxxflags = ["-fms-runtime-lib=dll"]`) is told once that the word is
803
+
redundant; GalTranslPP carries it. Off a terminal, xlings still passes the
804
+
sub-index build scripts' frames through (openxlings/xlings#629).
805
+
806
+
**Compatibility.** On Windows the first build after the upgrade re-runs each
807
+
action once and, for GNU-dialect compiles, rebuilds once; a program whose
808
+
search directories carry an older runtime copy receives the toolset's. No
809
+
index descriptor changes meaning under D7 (§8.3).
810
+
811
+
**Open after this round.**openxlings/xlings#629 (the frames), mcpp #669 (the
812
+
xcode-27 image's SDK), and the reach of a packaging revision, which is the
813
+
reach of the consumer's index (F9) and is not a defect.
Copy file name to clipboardExpand all lines: .agents/docs/README.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -30,7 +30,7 @@ Records that declare one. Everything else is listed by date below.
30
30
31
31
### design
32
32
33
-
-[An ecosystem design for mcpp and xlings: one authority per fact, and the work that follows from it](2026-09-28-ecosystem-design-and-optimisation-plan.md) — active
33
+
-[An ecosystem design for mcpp and xlings: one authority per fact, and the work that follows from it](2026-09-28-ecosystem-design-and-optimisation-plan.md) — landed
34
34
-[The compile database, `emit build-database`, and #701/#702: triage against the specifications, and one design](2026-09-26-compile-database-and-issue-699-design.md) — landed
35
35
-[Issues #693 to #696: triage against mcpp's contracts, and one repair plan](2026-09-25-issues-693-696-triage-and-repair-plan.md) — landed
36
36
-[Workspace inheritance, flag scoping and the published form: a unified repair plan (#690)](2026-09-25-issue-690-workspace-build-inheritance-consistency.md) — landed
@@ -107,7 +107,7 @@ Records that declare one. Everything else is listed by date below.
107
107
### 2026-09
108
108
109
109
-[Two days of mcpp and xlings: a review of what merged, what is known, and what is open](2026-09-28-ecosystem-review-of-two-days-of-mcpp-and-xlings.md) — active
110
-
-[An ecosystem design for mcpp and xlings: one authority per fact, and the work that follows from it](2026-09-28-ecosystem-design-and-optimisation-plan.md) — active
110
+
-[An ecosystem design for mcpp and xlings: one authority per fact, and the work that follows from it](2026-09-28-ecosystem-design-and-optimisation-plan.md) — landed
111
111
-[Eight reports after 2026.9.27.1: implementation plan](2026-09-27-eight-reports-implementation-plan.md) — active
112
112
-[Eight reports after 2026.9.27.1: what each one is, where it belongs, and one optimisation plan](2026-09-27-eight-reports-by-home-and-one-optimisation-plan.md) — active
113
113
-[The compile database, `emit build-database`, and #701/#702: triage against the specifications, and one design](2026-09-26-compile-database-and-issue-699-design.md) — landed
0 commit comments