diff --git a/.agents/docs/2026-09-26-compile-database-and-issue-699-design.md b/.agents/docs/2026-09-26-compile-database-and-issue-699-design.md index 8d9194afb..f0daf3c5a 100644 --- a/.agents/docs/2026-09-26-compile-database-and-issue-699-design.md +++ b/.agents/docs/2026-09-26-compile-database-and-issue-699-design.md @@ -12,7 +12,7 @@ status: landed only; every verdict below is taken against a specification. - mcpp-community/mcpp#699 (2026-09-25), *emit build-database for IDEs: one failing member loses the whole database, and build programs cannot tell a plan pass*, from - Sunrisepeak/mcpp-language-server#23 and #24 on the GalTranslPP workspace. + Sunrisepeak/mcpp-language-server#23 and #24 on the validation project workspace. - mcpp-community/mcpp#701 and pull request #702 (2026-09-25, head `c57c12f2`): a build program declares a runtime library directory, and a passing check moves its stamp. Their consumer is mcpp-plugins 0.13.0 (`deps-vcpkg`, `deps-cmake`, `rules-qt`), whose design @@ -72,7 +72,7 @@ status: landed | **O1** | deps-cmake and deps-vcpkg run installation as `check` actions | the plugin record | design gap: no action role describes construction whose file names are unknown | §5.4 P: the `prepare` role (D9) | | **O2** | on Windows, a program started by hand does not find DLLs from a runtime search directory | this review | framework gap | §5.4 W: placement after the link (D11) | | **S7** | a contract for build plugins | this review | new specification | SPEC-007, draft 0.1 (§5.6, D12) | -| | xmake's database; GalTranslPP's incomplete Qt and its environment checks inside build programs | report §3.4; #699 | not mcpp | §3.7, §4.8 | +| | xmake's database; the validation project's incomplete Qt and its environment checks inside build programs | report §3.4; #699 | not mcpp | §3.7, §4.8 | Three statements: @@ -342,7 +342,7 @@ redirect, and §3.2's rule. ### 4.1 The report mcppls builds its model from `mcpp emit build-database --format json`. On the five-member -GalTranslPP workspace, the member GPPGUI requests the host tool `Updater` of `gpp.updater`, whose +The validation project workspace, the member gui requests the host tool `Updater` of `updater`, whose build runs a `lupdate` check that failed because the machine's Qt lacked qtdeclarative. `emit` answered `MCPP_BUILD_DATABASE_PLAN_FAILED` without `data`, the four members that planned lost their sets, and mcppls fell back to a guessed model on which clangd crashed. The issue asks for diff --git a/.agents/docs/2026-09-27-eight-reports-by-home-and-one-optimisation-plan.md b/.agents/docs/2026-09-27-eight-reports-by-home-and-one-optimisation-plan.md index 50460b55b..01c8be5c2 100644 --- a/.agents/docs/2026-09-27-eight-reports-by-home-and-one-optimisation-plan.md +++ b/.agents/docs/2026-09-27-eight-reports-by-home-and-one-optimisation-plan.md @@ -95,7 +95,7 @@ of the same round (§9.3), and the whole round lands in #727. | #724 §2.3 | Run side-effect-free generators under `emit` | feature | not the engine | decline | none | | review | An index that requires a newer mcpp prints `error: ... [E0006]` at the start of a run that then succeeds | defect (measured) | engine | a closing tip at most, and only when the run refreshed an index | W12 | | review | Library, git and index acquisitions show no progress, while toolchains do | gap | engine; xlings if its `update_packages` emits no events | one renderer, more producers; non-terminal output without `\r` | W11 | -| #726 | On Windows an xlings invocation left the registry's shim directory in front of the process `PATH`, kept `XLINGS_HOME` set for the rest of the run, and started xlings in the project's directory | defect (measured on GalTranslPP's Windows CI) | engine | fix, as pull request #727 proposes (§9.3) | W13 | +| #726 | On Windows an xlings invocation left the registry's shim directory in front of the process `PATH`, kept `XLINGS_HOME` set for the rest of the run, and started xlings in the project's directory | defect (measured on the validation project's Windows CI) | engine | fix, as pull request #727 proposes (§9.3) | W13 | | #721 | GCC 16.1 ICE | upstream | not in scope for this round | excluded | none | Everything is one round and one release, in one pull request (#727), in three @@ -711,7 +711,7 @@ The reasons are structural, not a matter of taste: - **Every object in an image must agree.** Every object and prebuilt library linked into one image must use the same CRT: the `RuntimeLibrary` mismatch check fails the link with LNK2038. The prebuilt ecosystem ships `/MD`, which is the case of - GalTranslPP with Qt and vcpkg. + the validation project with Qt and vcpkg. - **Each `/MT` image has its own CRT state.** Under `/MT`, each DLL carries its own heap, `FILE*` table, `errno` and locale. Memory or CRT objects that cross a DLL boundary are therefore unsound. A program made of several images needs one @@ -822,7 +822,7 @@ second key would be a second spelling of one fact. `/MDd`, `/MTd`) is always a second statement. The engine never lets the last word win. - A word that agrees with the resolved model is warned as redundant. - GalTranslPP's `-fms-runtime-lib=dll` therefore keeps building. + the validation project's `-fms-runtime-lib=dll` therefore keeps building. - A word that disagrees is refused. The message names the word, the key, and the value that corresponds to the word. - **Upgrade.** @@ -1045,7 +1045,7 @@ The first and last criteria fail on 2026.9.27.1: the read site is unchanged at ### 9.3 #726: an xlings invocation on Windows leaves the process as it found it (W13) -**Observation (measured on GalTranslPP's Windows CI).** A `vcpkg install` action +**Observation (measured on the validation project's Windows CI).** A `vcpkg install` action failed with `'C:\Program' is not recognized ...` in a build that installed a toolchain or a payload itself; a second build passed. @@ -1097,7 +1097,7 @@ the build. On Windows two differences existed: - `NeitherPathNorTheHomeOutlivesTheInvocation`; - `TheWindowsPrefixStartsInTheHome`. - The Windows legs of the pull request's CI. -- GalTranslPP's Windows CI against the branch, which is a real project with a +- The validation project's Windows CI against the branch, which is a real project with a `.xlings.json` at its root and 22 vcpkg ports. ## 10. What is not done, and why @@ -1200,7 +1200,7 @@ gate (§8). - The S1 addition for W10 (D6). - After the release, its nightly run is green again (W1), and it may read the generated-output record. -- **GalTranslPP.** After the release it needs: +- **The validation project.** After the release it needs: - no CRT flag at all, because W9's default is its choice; - the updater back on an `artifacts` edge (W6); - `lib.path` may point at `gpp-build.ixx` (W2). diff --git a/.agents/docs/2026-09-28-build-cost-foreign-toolsets-and-library-surface-design.md b/.agents/docs/2026-09-28-build-cost-foreign-toolsets-and-library-surface-design.md index 910c321c2..991af4b27 100644 --- a/.agents/docs/2026-09-28-build-cost-foreign-toolsets-and-library-surface-design.md +++ b/.agents/docs/2026-09-28-build-cost-foreign-toolsets-and-library-surface-design.md @@ -40,7 +40,7 @@ records their implementation. so revision 2's compatibility argument is corrected. `[lib]` accepts an unknown key without any warning, which is a defect (E12). -**Input.** The Windows CI of Sunrisepeak/GalTranslPP#3 (runs 36324593343, +**Input.** The Windows CI of the validation project's pull request (runs 36324593343, 36378870254 and 36396398845; windows-2025, 4 vCPU, mcpp 2026.9.28.2, mcpp:plugins 0.16.0), the sources of mcpp at `dbf71941`, of mcpp-plugins at `8e0362d`, of vcpkg-tool and of mcpp-index at `e9b80c5`, vcpkg's documentation of triplets and @@ -49,7 +49,7 @@ of §2.2. ## 0. Scope and the rule that selects the items -GalTranslPP is a validation project: a five-member workspace on Windows with a core +The validation project is a five-member workspace on Windows with a core library of 76 translation units, a Qt GUI, 22 vcpkg ports and one CMake project. It is evidence, not a requirement. @@ -92,14 +92,14 @@ Project-specific items are listed in §9 with the reason they stay with the proj | Reading | Value | Source | |---|---|---| | `mcpp build --workspace`, vcpkg binaries cached | 1726 s | run 36378870254 | -| of which: member `GalTranslPP` (core) | 285 s | same | -| of which: `GPPCLI`, including a second compilation of core | 315 s | same | -| of which: `GPPGUI`, including a third compilation of core | 1039 s | same | +| of which: the core member | 285 s | same | +| of which: `cli`, including a second compilation of core | 315 s | same | +| of which: `gui`, including a third compilation of core | 1039 s | same | | core's 76 compile commands in the three positions | identical except the output directory (76/76) | `mcpp emit build-database`, same run | | `mcpp build --workspace`, no vcpkg cache | 69.7 min, of which about 43 min are the 22 ports | run 36324593343 | | `mcpp pack --format release`, two members | 168 s, of which about 70 s are 2675 single-file copy actions | run 36378870254 | | files deployed beside each program by `mcpp build` | about 1270 per program, each one `stage_file` edge | `release-files.txt`, run 36396398845; `ninja_backend.cppm` | -| a no-op `mcpp run -p GPPCLI` on Windows | about 3 s; the project fast path is not taken | run 36378870254 | +| a no-op `mcpp run -p cli` on Windows | about 3 s; the project fast path is not taken | run 36378870254 | | build systems of the 22 ports at baseline `ee6a47d` | 18 CMake, 3 header-only, 1 make under msys (icu); none MSBuild | the ports' `portfile.cmake` | | `mcpp pack` of a library exporting `Alpha` and `Beta`, no lib root | exit 0, "Interface (headers only)", "Withheld (nothing)", `sources = []` | local, mcpp 2026.9.28.2 | | mcpp-plugins with `deps-*` among its default features | its own build fails: `deps/deps.cppm: module 'mcpp' not found` (and the same for `src/declare.cppm`) | local copy of mcpp-plugins `8e0362d`, mcpp 2026.9.28.2 | @@ -351,7 +351,7 @@ workspace in which several members share a library. across projects. - **The tool store** keys a path package by `tree_stamp`, which covers the files under the package root. A library's inputs are not confined to its root: - GalTranslPP's core compiles `../3rdParty/3rdModule/*.ixx` and includes headers + the validation project's core compiles `../3rdParty/3rdModule/*.ixx` and includes headers from `../3rdParty/...`. A key that sees only the root would serve stale objects. **Design.** @@ -740,7 +740,7 @@ package whose author can act on it. | Report | `mcpp pack` | always | "Interface" lists the shipped closure, and "Withheld" lists every other unit. This replaces the "(nothing)" that the local reading of §2 shows | W3 fires only for dependencies that declare a root, so libraries without a root, -such as GalTranslPP's core, cause none. +such as the validation project's core, cause none. ### 5.5 Phase 2 (conditions, no design) @@ -982,7 +982,7 @@ The existing Linux libc++ row covers `resolve({resolved, row})`. | E1 | mcpp | none; can ship alone | V or a following release | | P0 to P4, P6 | mcpp-plugins | V released; `[package] mcpp = ">=V"` | plugins 0.17.0 | | I1 | mcpp-index | E10 released (the engine and the index state one rule) | none | -| Validation | Sunrisepeak/GalTranslPP | plugins 0.17.0 | `resolved` on the masked row; `pack -p` | +| Validation | The validation project | plugins 0.17.0 | `resolved` on the masked row; `pack -p` | | I2 | mcpp-index | E6 phase 1 released | input to E6 phase 2 | ## 9. Outside this design, and why @@ -993,7 +993,7 @@ The existing Linux libc++ row covers `resolve({resolved, row})`. | Two `-p` invocations instead of `--workspace`; Updater as an `artifacts` dependency; hoisting repeated `[target.windows.build]` values to the root | the project's manifests; each is available today | | A CI job for the `release` profile | the project's CI | | Re-running build programs under `mcpp pack` | by design: the pack context (`pack_format`) is an input of the build program; the recompilation it prints costs about 1 s | -| Flat module names (`Tool`, `Dictionary`) in GalTranslPP's core | the project's naming; I3 and the facade form of I2 are the remedy when the library is published | +| Flat module names (`Tool`, `Dictionary`) in the validation project's core | the project's naming; I3 and the facade form of I2 are the remedy when the library is published | | Deriving `host-module` from a build program's imports (a consumer writes no `host-module = true` when `build.mcpp` imports the module) | a usability improvement, independent of every item here; it has its own evaluation, with its own criterion, so that it is not lost by being folded into another item | | Payloads provisioned when a build program uses them | unnecessary once families are enabled by feature (§3.4) | | An index resolver that skips versions above the engine's floor | a follow-up of E9 in mcpp-index and xlings | @@ -1041,7 +1041,7 @@ states them together, so that one slow build is not read as a regression. | Case | 0.16.0 (`detected`) | 0.17.0 default (`resolved`) | Evidence | |---|---|---|---| -| Windows with Visual Studio; mcpp resolves `msvc@system` (the usual machine, and GalTranslPP's CI) | vcpkg picks an instance itself | the same instance, named; **no rebuild**; MSBuild ports build | M1, M2a | +| Windows with Visual Studio; mcpp resolves `msvc@system` (the usual machine, and the validation project's CI) | vcpkg picks an instance itself | the same instance, named; **no rebuild**; MSBuild ports build | M1, M2a | | the same, but the machine has several instances or toolsets and mcpp resolves another one than vcpkg would | ports built by a toolset other than the program's | ports built by the program's toolset; **one rebuild** | M1 (mechanism), vcpkg `get_toolset` | | Windows without Visual Studio; managed toolset | deps-vcpkg fails: no instance | CMake and make ports build; MSBuild ports fail with the named error | M3a, M3c, M2c | | Windows with Visual Studio, and the project pins a managed toolset | ports built by Visual Studio's toolset, the program by the managed one (inconsistent) | CMake and make ports rebuilt once by the managed toolset; **an MSBuild port now stops with the named error** | M2c | @@ -1120,7 +1120,7 @@ Items checked and found in order: - no item makes the engine learn a foreign tool; - every warning has a reader; - every criterion names its denominator or its reading; -- no item is justified by GalTranslPP alone; +- no item is justified by the validation project alone; - every changed generated command line has a stated one-time cost; - every decision in §11 has a state. @@ -1166,7 +1166,7 @@ green with V. - **Sandbox.** A fresh xlings sandbox with the CN mirror configured for mcpp and xlings. It checks that the released V and plugins 0.17.0 install, build and run the index members and the examples of this design. -- **GalTranslPP.** PR #3 is rebased onto the latest upstream and adopts the +- **The validation project.** PR #3 is rebased onto the latest upstream and adopts the results: `plugins-core` through the family features, `mcpp pack -p` from the root, and `resolved` in its CI. Its Windows CI measures the build again against the readings of §2. diff --git a/.agents/docs/2026-09-28-ecosystem-design-and-optimisation-plan.md b/.agents/docs/2026-09-28-ecosystem-design-and-optimisation-plan.md index 87c989459..5749ea30b 100644 --- a/.agents/docs/2026-09-28-ecosystem-design-and-optimisation-plan.md +++ b/.agents/docs/2026-09-28-ecosystem-design-and-optimisation-plan.md @@ -389,7 +389,7 @@ the Windows CI default row runs it. **Canary projects.** - `.github/release-canaries.toml` lists real projects with their build commands: - GalTranslPP, mcppls, the xlings self-build. + the validation project, mcppls, the xlings self-build. - A release-candidate workflow builds each with the candidate mcpp, rewriting the project's pin in its own checkout, never by a commit to the project (self-review §6.9). No new override mechanism is added to xlings for this. @@ -427,7 +427,7 @@ release WS10 verification script and canaries, from this release cut (`YYYY.M.D.N`). - **xlings first.** Protocol 1.3 is additive, and mcpp's pin moves after it. - **WS1 before WS9.** WS1 lands in mcpp before the qt-base recipe changes, so the - mcpp fix is observed on the unchanged payload first: GalTranslPP on Windows + mcpp fix is observed on the unchanged payload first: the validation project on Windows must place the toolset's CRT with no warning. - **The measurement gates the qt-base payload.** The payload changes only after `moc.exe` is shown to start from a CRT-less payload through the action `PATH`, @@ -605,7 +605,7 @@ it. A task that depends on another names it in the last column. - **The docs' `llvm@20.1.7` is what the first-run default picks.** The tables of docs/01 and docs/20 agree with `native_first_run_spec` on macOS and on Windows with MSVC. The `llvm@22.1.8` readings of the review came from project pins - (mcpp's own `[toolchain] macos`, GalTranslPP's manifest). M6 makes the function + (mcpp's own `[toolchain] macos`, the validation project's manifest). M6 makes the function the one authority and the tables its checked copies. - **mcpp reads no `prevLines`.** Its renderer already owns its frames, so X3 can drop the field from the producers without a change in mcpp. @@ -619,7 +619,7 @@ M9 pins X's release -> CI on three hosts, with M2's measurement -> merge -> I1-I3 after M2's measurement is green -> merge -> index artifact N1-N3 after the mcpp release is indexed verify verify-published.sh against the new and the previous pair in fresh SubOS - sandboxes with the CN mirror; GalTranslPP on Windows with the new mcpp and + sandboxes with the CN mirror; the validation project on Windows with the new mcpp and qt-base revision 1; then the issues are closed with their readings ``` @@ -699,7 +699,7 @@ implementing it, and the readings. steps. A list written from reading the files is the claim; the lint's output is the reading. - **F8. The release gate's first reading was of its own harness.** The first - release run of 2026.9.28.2 (36363585412) failed the GalTranslPP canary before + release run of 2026.9.28.2 (36363585412) failed the validation project canary before it built anything: `release_canaries.py` started `bash` by name, and a Windows program that does so gets `System32\bash.exe`, the WSL launcher, because the loader searches the system directory before `PATH`. The gate held and no tag @@ -707,14 +707,14 @@ implementing it, and the readings. runner has tests, and the canaries were dispatched on the fix's branch before the release was dispatched again (#731). - **F9. A packaging revision reaches a consumer when its index does.** The - GalTranslPP canary, dispatched on #731's branch after `qt-base` revision 1 + the validation project canary, dispatched on #731's branch after `qt-base` revision 1 was published, built, ran and packed the project with the candidate, and stated once that `xim-x-qt-base\6.11.1\bin` ships the MSVC C++ runtime: the resolver placed the toolset's set instead, as WS1 specifies. The payload was revision 0 because the job restores the whole mcpp home from CI's cache, its index copy included, and that copy predates the revision; by that index the installed payload is current. A consumer receives revision 1 on the - first use after its index refreshes (GalTranslPP's own CI caches the + first use after its index refreshes (the validation project's own CI caches the payloads and not the index; its reading follows the release). ### 8.3 Readings @@ -762,15 +762,15 @@ The two sections not run are Windows behaviour, read on the Windows CI rows (#717, #720, #723, #724, #725, the progress of an index refresh) passes in all three runs. -**GalTranslPP on Windows.** The real project the review started from, read +**The validation project on Windows.** The real project the review started from, read three ways with mcpp 2026.9.28.2, each with the LLVM row (llvm@22.1.8) over the Visual Studio 2026 toolset (MSVC 14.51.36231) on `windows-2025`: | Reading | Build, run, pack | The runtime beside the program | |---|---|---| -| 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) | -| 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 | -| 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 | +| the release's canary (the candidate, CI's cached mcpp home) | 4 of 4 commands held; the CLI's banner line | `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) | +| the project's CI, pin 2026.9.28.2 (the validation project's pull request, `0681f59`) | success in 41 minutes | no runtime copy in `qt-base`'s `bin`: nothing is stated; the package carries the set the build placed | +| 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 cli and gui | ### 8.4 Self-review @@ -792,7 +792,7 @@ change to a generated command line crosses every test and comment that reads that command, and those are found by searching for the old spelling, not by thinking of invariants. -**Stability.** The release gate works and costs time: the GalTranslPP canary +**Stability.** The release gate works and costs time: the validation project canary builds its vcpkg dependencies without a cache on `main`, about fifty minutes, before any archive is built. Its cache is saved per run, so later releases from `main` restore it. The measurement workflow renames system files on a @@ -800,7 +800,7 @@ disposable runner and restores them from bash in an `always()` step. **User experience.** A project that wrote the #718 workaround (`dialect_cxxflags = ["-fms-runtime-lib=dll"]`) is told once that the word is -redundant; GalTranslPP carries it. Off a terminal, xlings still passes the +redundant; the validation project carries it. Off a terminal, xlings still passes the sub-index build scripts' frames through (openxlings/xlings#629). **Compatibility.** On Windows the first build after the upgrade re-runs each diff --git a/.agents/docs/2026-09-28-ecosystem-review-of-two-days-of-mcpp-and-xlings.md b/.agents/docs/2026-09-28-ecosystem-review-of-two-days-of-mcpp-and-xlings.md index 4257d39ff..255a563b3 100644 --- a/.agents/docs/2026-09-28-ecosystem-review-of-two-days-of-mcpp-and-xlings.md +++ b/.agents/docs/2026-09-28-ecosystem-review-of-two-days-of-mcpp-and-xlings.md @@ -28,7 +28,7 @@ are upstream and are cited only where they shape a signal. **Evidence.** Each finding below cites code at `origin/main` (mcpp `acb9f52b`, xlings `d53162a`) or a measured output: CI runs on `main`, two xlings sandboxes -against the published releases, the GalTranslPP Windows build on +against the published releases, the validation project Windows build on mcpp 2026.9.28.1, and the output the maintainer reported from a real terminal. A finding without such evidence is marked as a hypothesis. @@ -47,11 +47,11 @@ effect is visible and recoverable. P2 is noise, wording or cost. - **Sandbox verification.** In an xlings SubOS sandbox with the CN mirror for both tools, the published pair reads `13 ok, 0 failed`. The same script against mcpp and xlings 2026.9.27.1 reads `5 ok, 8 failed`. -- **Real-world build.** GalTranslPP (Sunrisepeak/GalTranslPP#3) is a 22-port +- **Real-world build.** the validation project (the validation project's pull request) is a 22-port vcpkg and Qt workspace with a project `.xlings.json`. - On mcpp 2026.9.27.1, its Windows build failed with vcpkg's compiler detection (#726). - With the pin moved to 2026.9.28.1, every step passes: `build --workspace`, - `run -p GPPCLI`, `pack --format release`, the CLI starting from the release + `run -p cli`, `pack --format release`, the CLI starting from the release layout, and `emit build-database`. That is run 36346122142. - Its output is the source of §2.1 and §2.3. - **mcpp-index.** A full sweep with the 2026.9.28.1 pin runs on the upstream branch @@ -62,7 +62,7 @@ effect is visible and recoverable. P2 is noise, wording or cost. ### 2.1 P0 · mcpp · The toolset's CRT yields to a CRT copy found in a dependency's directory -**Observed (GalTranslPP, Windows, llvm@22.1.8, MSVC 14.51).** For every program +**Observed (the validation project, Windows, llvm@22.1.8, MSVC 14.51).** For every program that links Qt, ten warnings of the form: ``` @@ -135,7 +135,7 @@ chunk. ### 2.3 P2 · mcpp · One fact, many warnings - **The redundant CRT word, once per member.** - - GalTranslPP writes `dialect_cxxflags = ["-fms-runtime-lib=dll"]` at workspace + - The validation project writes `dialect_cxxflags = ["-fms-runtime-lib=dll"]` at workspace level, and every member inherits it. - A `--workspace` build plans each member as a root, so the redundancy warning appears once per member: five times. @@ -177,7 +177,7 @@ chunk. is true only for GCC, and the comment above measures Clang's plain rule. - **The consequence.** Every clang++ build on Windows gets no `-MMD`, and a header edit does not rebuild the objects and BMIs that include it. Since #718 the LLVM - row is the default Windows row, so this is the default experience. GalTranslPP + row is the default Windows row, so this is the default experience. The validation project prints the degradation once per member. - **Direction.** - The depfile is emitted for Clang on every host; only GCC's filtered form is @@ -198,7 +198,7 @@ chunk. - **Consequences.** No CI job builds mcpp with clang on Linux. The #722 function-size gate, which needs a clang compile database, runs by hand. - **The docs disagree with what resolves.** `docs/01` and `docs/20` name llvm@20.1.7 - as the macOS and Windows default, while Windows CI and GalTranslPP resolve + as the macOS and Windows default, while Windows CI and the validation project resolve llvm@22.1.8. The documentation should state what the resolver picks. The selection code was not traced in this review. @@ -279,7 +279,7 @@ chunk. - A lint over the workflows would find the pattern: `| tee` followed by a `grep` that is not about success. 4. **A pinned canary needs a person to move its pin.** - - GalTranslPP pins mcpp in `.xlings.json`. It measured #726 only after its pin + - The validation project pins mcpp in `.xlings.json`. It measured #726 only after its pin was moved by hand. - A small set of real projects, rebuilt against each release candidate with the pin overridden, would turn this into a release gate. @@ -297,8 +297,8 @@ chunk. | Issue | Home | Priority | Next step | |---|---|---|---| -| mcpp #718 | engine | done; reading passes | close with the GalTranslPP reading and e2e 814, and file §2.1 as its own issue | -| mcpp #726 | engine | closed | closed during this review, with the GalTranslPP reading | +| mcpp #718 | engine | done; reading passes | close with the validation project reading and e2e 814, and file §2.1 as its own issue | +| mcpp #726 | engine | closed | closed during this review, with the validation project reading | | mcpp #729 | CI | P1 | fail the step on the build's status; build with llvm@22.1.8; wire the size gate after it | | mcpp #728 | specification | P2 | decide the order rule; then implement or restate | | mcpp #677, #397 | trackers | P2 | re-verify their open items against `acb9f52b` in the next sweep | @@ -331,5 +331,5 @@ chunk. **Order and verification.** xlings first, then the mcpp pin, then the index. The same sandbox script, extended by one assertion per item, is run against the new -and the previous versions. GalTranslPP is built on Windows as the real-world +and the previous versions. The validation project is built on Windows as the real-world reading for §2.1, §2.3 and §3.1. diff --git a/.agents/skills/mcpp-contributing/SKILL.md b/.agents/skills/mcpp-contributing/SKILL.md index a9be82b5b..e747335a4 100644 --- a/.agents/skills/mcpp-contributing/SKILL.md +++ b/.agents/skills/mcpp-contributing/SKILL.md @@ -222,6 +222,16 @@ Agent(Claude Code 等)在执行任务时,**同样必须遵守 PR 流程** ### Agent 的典型工作流 +## Language of commits, pull requests, CHANGELOG entries and release notes + +Commit messages (subject and body), squash-merge messages, pull-request titles +and descriptions, CHANGELOG entries and release notes are written in English, +in declarative sentences, with no emoji and no attribution trailers. A release's +notes are its `## []` section of CHANGELOG.md (release.yml extracts it), +so an English CHANGELOG entry is an English release. Entries before 2026.9.28.3 +remain as written. The user-facing documentation keeps both languages +(docs/ and docs/zh/). + ```bash # 1. 从最新 main 切分支 git checkout main && git pull origin main diff --git a/.agents/skills/mcpp-release/SKILL.md b/.agents/skills/mcpp-release/SKILL.md index 72b406b7b..e28e37d0d 100644 --- a/.agents/skills/mcpp-release/SKILL.md +++ b/.agents/skills/mcpp-release/SKILL.md @@ -318,7 +318,7 @@ gh workflow run release.yml --ref "v$NEW_VERSION" # 1. 在 main 上修复 git checkout main && git pull # ... 修改代码 ... -git commit -m "fix: 描述" +git commit -m "fix: " git push origin main # 2. 更新 tag 指向新 commit(包含修复) @@ -350,7 +350,7 @@ gh workflow run release.yml --ref "v$NEW_VERSION" | `.github/tools/gtc` | GitCode CLI(release create/upload、PR) | | `.github/workflows/release.yml` | Release workflow 定义(四平台 + publish-ecosystem) | | `install.sh` | 安装脚本(随 release 发布) | -| `CHANGELOG.md` | Release notes 来源(按 `## [X.Y.Z]` 提取) | +| `CHANGELOG.md` | Release notes 来源(按 `## [X.Y.Z]` 提取);条目、commit 与 release notes 一律用英文(2026.9.28.3 起) | > **注意版本 bump 的两个阶段**:`mcpp.toml` + `fingerprint.cppm` 在发版**前**改 > (它们定义要发什么);`.xlings.json` 只在发版成功、镜像并进索引后才可更新 diff --git a/CHANGELOG.md b/CHANGELOG.md index c36ebcf55..4f74104c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,79 +1,125 @@ # Changelog -> 本文件追踪 `mcpp-community/mcpp` 公开仓的版本演进。 -> 格式参考 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/)。 +> The release history of `mcpp-community/mcpp`, in the form of [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). +> Each `## []` section is that release's notes. Entries are written in English +> from 2026.9.28.3 on; earlier entries remain as written. ## [2026.9.28.3] - 2026-09-28 -本版本实施 #734 设计中 mcpp 的部分:构建插件体系的三层(`mcpp.core`、官方通用库、插件)、 -构建信息、工作区成员只构建一次、批量放置、`pack -p`、库接口规范的第一阶段与包的版本下限。 -设计、测量、任务划分与实施记录见 -`.agents/docs/2026-09-28-build-cost-foreign-toolsets-and-library-surface-design.md`,规范见 -SPEC-007 §9 与新的 SPEC-008。配套的 mcpp-plugins 0.17.0 以本版本为下限。 - -### 行为变化 - -- **被其他成员以 path 依赖使用的工作区成员只构建一次(E1)。** 消费方构建之前,成员在自己的目录中 - 作为自身构建的根构建一次,由它的 ninja 判断过期(包括成员根目录之外的头文件);消费方经 stage - 边取得其对象与 BMI,按内容比较。条件是成员在消费方图中的构建键输入与它作为根时相等 - (`package.index` 除外,它只记来源);不相等时照旧在消费方图中编译,`-v` 写出不同的输入。同时 - 构建的两个消费方以文件锁轮流使用成员目录。一个五成员 Windows 工作区的核心库此前被编译三次。 -- **程序旁的文件由一个进程放置(E4)。** 程序的 deploy 条目在两条及以上时成为一条 `stage_list` - 边,读取规划写出的 `placements.list`;`mcpp stage --list` 对每个目的地保持单文件语义。在 - Windows 首次构建上,1270 条单文件放置耗时 4.5 s,一个进程复制同样的文件耗时 0.5 s。 -- **库接口的第一阶段(E6,SPEC-008)。** `mcpp pack` 写出未进入发布闭包的导出模块(W2),"Withheld" - 一行列出每个未发布的单元(此前没有接口根时显示 "(nothing)",而两个导出模块既未发布也未列出); - `mcpp build` 在包导入依赖(本工作区成员除外)的非公开模块时警告(W3);缺少接口根的警告写明对 `mcpp pack` 的后果 - (W1)。全部为警告。 -- **快路径在一次确认之后恢复。** 编辑源码后的那次构建经完整路径确认了图,却不重写内容未变的 - build.ninja,而快路径以 build.ninja 的时间比较每个源码;此前编辑之后的每次构建都被拒绝,直到图的 - 文本改变。现在确认时移动 build.ninja 的时间(e2e 832,2026.9.28.2 在 Linux 上同样复现)。 -- **快路径看见 path 依赖的整棵源码树。** 此前只扫描依赖的 `src/`;依赖在别处的 host module - (例如 mcpp-plugins 的 `deps/vcpkg.cppm`)编入消费方的构建程序,不在任何 ninja 边上,被编辑后 - 构建报告"无事可做"。现在扫描依赖的整棵树,跳过隐藏目录、`target` 与嵌套的包(e2e 831)。 -- **每个下载只占一行。** 非终端输出此前在开始时写一行 `Downloading ()`,完成时再写一行 - `... done, in