mcpp 2026.9.27.1: #704-#716, feature tools, artifacts, payload revision - #1
Closed
speak-agent wants to merge 4 commits into
Closed
speak-agent wants to merge 4 commits into
speak-agent wants to merge 4 commits into
Conversation
…munity#708 mcpp-community#710 mcpp-community#712 mcpp-community#713 mcpp-community#714 mcpp-community#715 mcpp-community#716 mcpp-community#712 An `[xlings]` address resolves the payload xlings selected. A new module, mcpp.xpkg_version, ports xlings' version grammar (N segments, alpha segments, written-prefix equality for three or more segments, prefix ranges for one or two, operator ranges), and xpkg_payload_at selects among installed directories with it. `libglvnd@1.7` finds 1.7.0.1. mcpp-community#716 A provisioning stamp counts only while every address still resolves to a payload. A removed payload is re-provisioned online and refused offline, naming it. The build cache records the payload directories a build read, so the fast path declines when one is gone. xlings reports what each request resolved to (install_targets, protocol 1.1); mcpp records that per address and answers from the record first. mcpp-community#705 A host tool's tree stamp skips directories that hold their own mcpp.toml, and hashes paths as UTF-8. mcpp-community#710 The requesting build decides a host tool's toolchain once -- `--toolchain`, else the tool package's own (its workspace's, for a member), else the requesting build's host toolchain -- passes it to the sub-build as an override, and records it in the store key. A member built as a tool inherits the workspace root's root-position keys. mcpp-community#713 A member inherits the workspace root's `[xlings.workspace]` entries, conditional rows included; its own declaration of a package wins. mcpp-community#714 An unresolved `x.workspace = true` is refused at every position, naming the entry. `[build] sources = []` infers no library target. A rooted workspace resolves its own `workspace = true` entries. mcpp-community#715 A rule reaches a package's synthesised build program only through a device source whose extension it declared. mcpp-community#704 A host build applies its own `[target.<host-triple>]` row (toolchain, linkage, cxx_runtime), as `--target <host>` did. mcpp-community#707 `emit build-database` builds no host tool; one missing from the store is deferred with the note MCPP_BUILD_DATABASE_HOST_TOOL_DEFERRED (SPEC-005 v1.4 R2.5). mcpp-community#708 `mcpp::action::env(name, value)` and `cwd(dir)` (protocol 13), applied by the engine's action wrapper in its named form `__action`. An action with neither keeps the `__action-stamp` command line byte for byte. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MajuX4J8ewFeWvZJjzRJt5
…es (mcpp-community#711) mcpp-community#709 `[features.<f>] tools = ["<bin>"]` names the package's own programs a feature needs on the build machine. On every edge into the package, the active features' tools are requested as if the edge had written `tools = [...]`: built once for the host, reachable through `mcpp::dep_bin`. A name that is not a `kind = "bin"` target of the package is refused at load, naming the bin targets. mcpp-community#711 `x = { ..., artifacts = ["<bin>"] }` asks for the dependency's program built for the consumer's target and profile, as a link unit of the consumer's own plan, written to `bin/` beside its programs. The unit links the dependency's objects and those of every package it reaches; a package reached only through artifact edges is kept out of the consumer's images, since the edge takes the program and not the code. A package asked for artifacts is scanned and configured here even when all its targets are programs. `${mcpp.artifact:<package>/<target>}` names the output in actions, `mcpp pack` stages it beside the program, and `mcpp run` and the program-selection sites ignore it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MajuX4J8ewFeWvZJjzRJt5
The packaging revision xlings records for a payload (`.xpkg-install.json`, openxlings/xlings#620) is read in one place, `mcpp::xlings::paths::installed_revision`, and used twice. The runtime contract (fingerprint field 11) includes the revision of each runtime payload whose revision is 1 or more, so a C library reinstalled under the same version with changed content selects a new output directory. Revision 0 contributes nothing, so no existing key changes. An index dependency whose recorded revision differs from its descriptor's entry is not installed (mcpp-community#524 A): mcpp's descriptor reader now reads `revision` the way libxpkg does, and a stale payload goes back through xlings, which reinstalls it. A payload with no xlings record is judged by the marker, as before. `mcpp pack --mode self-contained` copies the bundled C library's `lib/locale` and `lib/gconv` from its payload when present and exports LOCPATH and GCONV_PATH in the launcher, keeping a value the user set (openxlings/xlings#621). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MajuX4J8ewFeWvZJjzRJt5
…ity#716; xlings version vectors; faster ELF reads Tests. e2e 802 (mcpp-community#704: a host build applies its host row, under either spelling) and 803 (mcpp-community#716: a recorded payload that is gone is refused offline, naming the address and the record). Unit tests for mcpp-community#713 (a member inherits the root's [xlings.workspace] entries and rows; its own wins), mcpp-community#714 (an unresolved `workspace = true` is named in every dependency table) and mcpp-community#710 (a member tool reads its workspace's toolchain; its own wins), for which prepare exports host_tool_declared_toolchain. Version selection. mcpp.xpkg_version gains select_installed, the one rule `mcpp::xpkg_dir` answers with (a literal name, then the xlings grammar, then the highest), and runs the conformance vectors xlings publishes, vendored as modules/versioning/tests/data/semver-vectors.tsv. ELF inspection reads a file with one sized read; filling the vector through an istreambuf_iterator made the post-link check of `mcpp test` take tens of minutes. Specs: SPEC-001 v1.5 (version answers follow xlings; packaging revision), SPEC-004 v1.8 (host row, workspace clauses 8-10, a dependency's programs), SPEC-007 v0.3 (action env/cwd, planning defers host tools, feature tools, artifacts). Docs 04, 05, 06, 07 and 30 in English and Chinese. CHANGELOG and version 2026.9.27.1. Not built or run in this session; the handover lists the verification that remains. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MajuX4J8ewFeWvZJjzRJt5
Owner
Author
|
Superseded by mcpp-community#719. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
mcpp 2026.9.27.1: the defect reports mcpp-community#704 to mcpp-community#716 and the feature requests mcpp-community#707 to mcpp-community#711, and the mcpp side of openxlings/xlings#620 and mcpp-community#621. Four commits:
85c9037aac072ctools, mcpp-community#711artifactsdependency edgec136000install_targetsrecord and reciperevision;LOCPATH/GCONV_PATHin bundle-all packsbba733aDefects
--targetapplies[target.<host-triple>], as--target <host>does (SPEC-004 §4.6).mcpp::xpkg_diranswers the payload xlings installed.install_targetsrecord first, then selects with the xlings version grammar, solibglvnd@1.7answers1.7.0.1.--toolchain, then the tool package's own declaration (a member first inherits the workspace root's[toolchain],[target.*]and[indices]), then the requesting build's host toolchain. The tool tree digest skips nested packages and hashes paths as UTF-8..workspace = truebecomes a version dependency with an empty version mcpp-community/mcpp#714:[xlings.workspace]entries and conditional rows; its own declaration of a package wins.workspace = trueis refused at every position, naming the table and the entry.[build] sources = []infers no library target.Features
emit build-databasebuilds no host tool. A tool missing from the store is deferred with the noteMCPP_BUILD_DATABASE_HOST_TOOL_DEFERRED(SPEC-005 v1.4 R2.5).mcpp::action::env(name, value)andcwd(dir), protocol 13. An action with neither keeps its protocol 12 command line byte for byte.[features.<f>] tools = ["<bin>"].x = { ..., artifacts = ["<bin>"] }builds the dependency's program for the consumer's target and puts it in the consumer'sbin/. It links none of the dependency's code;${mcpp.artifact:<x>/<bin>}names it in actions;mcpp packstages it.Payload revision and self-contained locale (openxlings/xlings#620, mcpp-community#621)
revision=<n>). With revision 0 the contract text is unchanged.lib/localeandlib/gconvand exportLOCPATHandGCONV_PATH, keeping values the user already set.Specs and docs
Tests
test_xpkg_version, including every vector of xlings'semver-vectors.tsvwith no active version;test_freestanding(payload selection, revision record);test_manifest(feature tools,artifacts,sources = [], per-entry revision);test_tool_store(nested package);test_build_directives(protocol 13, env and cwd);test_workspace_inheritance(A workspace root's xlings declaration is not visible to its members' build programs, so each member repeats it mcpp-community/mcpp#713, A non-member path package's.workspace = truebecomes a version dependency with an empty version mcpp-community/mcpp#714, A host tool's sub-build resolves its own toolchain, not the one its key records, so a workspace pinned to one LLVM installs a second mcpp-community/mcpp#710).788_emit_defers_an_unbuilt_host_tool798_a_rule_applies_through_a_source_it_claims799_an_action_runs_with_its_env_and_cwd800_a_feature_provides_its_host_tools801_a_dependency_program_is_shipped_with_the_consumer802_a_host_build_applies_its_host_row803_a_recorded_payload_that_is_gone_is_refused_offlineVerification status
85c9037,aac072c,c136000: built with gcc 16.1 and exercised locally, including 788 and 798 to 801 and hand-run checks of A host build ignores [target.<host triple>]: its cxx_runtime has no effect and no diagnostic says so mcpp-community/mcpp#704, A path package's host-tool key covers the consumer nested in its tree, so the tool is rebuilt after the consumer's own build mcpp-community/mcpp#705, A host tool's sub-build resolves its own toolchain, not the one its key records, so a workspace pinned to one LLVM installs a second mcpp-community/mcpp#710, xpkg_dir treats a bare version as a literal pin while xlings matches it against four-segment keys, so a declared payload is installed and then reported absent mcpp-community/mcpp#712 to A provisioning stamp outlives the payloads it lists, so a removed payload is never provisioned again mcpp-community/mcpp#716. The one unit-test failure,ScaffoldTransaction.ReadWriteAndCopyFailuresRollbackCompletely, comes from running as root.bba733a: committed without a build, by decision at handover. It needs a build, the unit tests and e2e 802 and 803.Dependencies and follow-ups
kXlingsVersionand the.githubpins stay at 2026.9.26.2 until xlings 2026.9.27.1 is released..github/tools/check_version_pins.shchecks that they move together.modules/versioning/tests/data/semver-vectors.tsvis vendored from xlings 2026.9.27.1; refresh it when the pin moves.wip/prepare-splitholds a split ofsrc/build/prepare.cppmintosrc/build/prepare/*.cppm. GCC 16.1 fails on it with an internal compiler error (segmentation fault inadd_imported_namespace, atimport mcpp.cli;insrc/main.cpp), so it is not part of this PR. It needs an upstream GCC report.Closes mcpp-community#704, mcpp-community#705, mcpp-community#707, mcpp-community#708, mcpp-community#709, mcpp-community#710, mcpp-community#711, mcpp-community#712, mcpp-community#713, mcpp-community#714, mcpp-community#715, mcpp-community#716 when merged upstream.
🤖 Generated with Claude Code
https://claude.ai/code/session_01MajuX4J8ewFeWvZJjzRJt5
Generated by Claude Code