From 6c377ce9f5fc289fbe37ff20091dd861a3c56d2c Mon Sep 17 00:00:00 2001 From: speak-agent Date: Tue, 29 Sep 2026 10:09:18 +0800 Subject: [PATCH 1/3] ci: validate every member with mcpp 2026.9.29.2; latest_mcpp -> 2026.9.29.2; ignore the workspace-root build outputs mcpp 2026.9.29.1 builds a workspace as one graph per configuration and writes the build directory, project data, compile database and lock at the workspace root. 2026.9.29.2 (mcpp-community/mcpp#739) corrects what such a plan reads from its members, among them a member's own relative [indices].path, which 47 members of this index declare. --- .github/workflows/validate.yml | 18 +++++++++++++++++- .gitignore | 6 ++++++ index.toml | 8 +++++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 0d3ae0ce..b10e1e36 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -377,7 +377,23 @@ env: # as its floor, and tests/examples/mcpp-plugins builds against it. Engine # warnings the members may newly print: W1 to W3 of SPEC-008 (the library # interface), warnings only. - MCPP_VERSION: "2026.9.28.3" + # + # 2026.9.29.1 (mcpp-community/mcpp#738) builds a workspace as one graph per + # configuration: `mcpp test -p ` plans that member and what it + # reaches in the workspace's build directory, `target///` at + # this repository's root, with the member's products in `bin//`. The + # members' own `tests/examples/*/target/` directories are no longer written. + # The directory name no longer hashes a package's own flags, so a member + # whose flags differ from another's shares the directory and ninja rebuilds + # the commands that changed. + # + # 2026.9.29.2 (mcpp-community/mcpp#739) reads what a member states about + # itself from the member: a member's own relative [indices].path is anchored + # at the member, a member whose tests import std is tested with the std + # module built, and a member's product directory holds every shared library + # of its closure. 2026.9.29.1 is not used here: its sweep refused the 47 + # members that declare their own [indices]. + MCPP_VERSION: "2026.9.29.2" jobs: lint: diff --git a/.gitignore b/.gitignore index 772af0bf..9f58afa2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,10 @@ .xlings-index-cache.json +# The workspace's build directory, project data, compile database and lock: +# mcpp 2026.9.29.1+ writes them at the workspace root for every member. +/target/ +/.mcpp/ +/compile_commands.json +/mcpp.lock # example project build/fetch artifacts tests/examples/*/target/ tests/examples/*/.mcpp/ diff --git a/index.toml b/index.toml index 3feb98ba..b9490b59 100644 --- a/index.toml +++ b/index.toml @@ -126,7 +126,13 @@ # registers mcpp.plugins 0.17.0, whose package floor it is. The release changes # no descriptor grammar; its `[package] mcpp` key is manifest vocabulary, which # an older engine reports as unsupported and ignores. +# ── 2026-09-29: latest_mcpp -> 2026.9.29.2, min_mcpp unchanged ───────────── +# +# Moved in the pull request that moves validate.yml's pin to 2026.9.29.2, +# which runs every member on every platform with it. 2026.9.29.1 is skipped: +# it resolved a member's own relative [indices].path against the workspace +# root. Neither release changes descriptor grammar. [index] spec = "1" min_mcpp = "2026.9.18.3" -latest_mcpp = "2026.9.28.3" +latest_mcpp = "2026.9.29.2" From f2dd634b16c25b26c136e5e5c9abbba0f3f9ddbc Mon Sep 17 00:00:00 2001 From: speak-agent Date: Tue, 29 Sep 2026 10:55:44 +0800 Subject: [PATCH 2/3] graphics check: read the member's program from its product directory at the workspace root mcpp 2026.9.29.1+ builds a workspace at its root and places a member's programs in bin// of the workspace's build directory; the member's own directory holds no build. --- tests/check_graphics_install_side_effects.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/tests/check_graphics_install_side_effects.sh b/tests/check_graphics_install_side_effects.sh index 9e9ebabd..5fee79ac 100755 --- a/tests/check_graphics_install_side_effects.sh +++ b/tests/check_graphics_install_side_effects.sh @@ -81,11 +81,15 @@ describe() { # which is the failure that would actually invalidate the comparison. build_and_describe() { ( cd "$PROJ" && "$MCPP" test ) > "$1" 2>&1 || true - local bin - bin=$(find "$PROJ/target" -type f -path '*/bin/*' -perm -u+x 2>/dev/null \ - | head -1) + # mcpp 2026.9.29.1+ builds a workspace at its root: a member's programs + # are in `bin//` of the workspace's build directory, and + # the member's own directory holds no build. + local pkg bin + pkg=$(sed -n 's/^name *= *"\(.*\)".*/\1/p' "$PROJ/mcpp.toml" | head -1) + bin=$(find "$ROOT/target" -type f -path "*/bin/$pkg/*" ! -name '*.so*' \ + -perm -u+x 2>/dev/null | head -1) [[ -n "$bin" ]] || { - echo "no artifact produced under $PROJ/target:" >&2 + echo "no artifact produced under $ROOT/target/*/*/bin/$pkg:" >&2 tail -25 "$1" >&2; return 1; } describe "$bin" } @@ -161,7 +165,7 @@ this check installs into. Installing the graphics stack into one home and measuring artifacts from another compares two unrelated things, and the comparison passes for any - mcpp. Clean the member's target/ (or use a checkout that has none) so the + mcpp. Clean the workspace's target/ (or use a checkout that has none) so the build actually resolves through MCPP_HOME. MSG exit 1 ;; From ae21f8066893b17291681f96f8158560bbefe6fd Mon Sep 17 00:00:00 2001 From: speak-agent Date: Tue, 29 Sep 2026 12:38:13 +0800 Subject: [PATCH 3/3] ci: validate with mcpp 2026.9.29.3; latest_mcpp -> 2026.9.29.3 2026.9.29.3 (mcpp-community/mcpp#740) places the runtime files of a program a member ships through artifacts beside it and no longer makes its link wait for a plan-level runtime file. --- .github/workflows/validate.yml | 6 +++++- index.toml | 10 ++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index b10e1e36..cfddd750 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -393,7 +393,11 @@ env: # module built, and a member's product directory holds every shared library # of its closure. 2026.9.29.1 is not used here: its sweep refused the 47 # members that declare their own [indices]. - MCPP_VERSION: "2026.9.29.2" + # + # 2026.9.29.3 (mcpp-community/mcpp#740): a program a member ships through + # `artifacts` waits for no plan-level runtime file, and its own runtime + # files are placed beside it in the member's product directory. + MCPP_VERSION: "2026.9.29.3" jobs: lint: diff --git a/index.toml b/index.toml index b9490b59..6f3da6a9 100644 --- a/index.toml +++ b/index.toml @@ -126,13 +126,15 @@ # registers mcpp.plugins 0.17.0, whose package floor it is. The release changes # no descriptor grammar; its `[package] mcpp` key is manifest vocabulary, which # an older engine reports as unsupported and ignores. -# ── 2026-09-29: latest_mcpp -> 2026.9.29.2, min_mcpp unchanged ───────────── +# ── 2026-09-29: latest_mcpp -> 2026.9.29.3, min_mcpp unchanged ───────────── # -# Moved in the pull request that moves validate.yml's pin to 2026.9.29.2, +# Moved in the pull request that moves validate.yml's pin to 2026.9.29.3, # which runs every member on every platform with it. 2026.9.29.1 is skipped: # it resolved a member's own relative [indices].path against the workspace -# root. Neither release changes descriptor grammar. +# root; 2026.9.29.2 is the version the full sweep ran with, and 2026.9.29.3 +# adds the runtime placement of programs shipped through `artifacts`. None of +# the three changes descriptor grammar. [index] spec = "1" min_mcpp = "2026.9.18.3" -latest_mcpp = "2026.9.29.2" +latest_mcpp = "2026.9.29.3"