Skip to content

mcpp 2026.9.27.1: #704-#716, feature tools, artifacts, payload revision - #1

Closed
speak-agent wants to merge 4 commits into
mainfrom
claude/epic-thompson-3nq5kn
Closed

speak-agent wants to merge 4 commits into
mainfrom
claude/epic-thompson-3nq5kn

Conversation

@speak-agent

Copy link
Copy Markdown
Owner

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:

Commit Content
85c9037 mcpp-community#704, mcpp-community#705, mcpp-community#707, mcpp-community#708, mcpp-community#710, mcpp-community#712, mcpp-community#713, mcpp-community#714, mcpp-community#715, mcpp-community#716
aac072c mcpp-community#709 feature tools, mcpp-community#711 artifacts dependency edge
c136000 xlings install_targets record and recipe revision; LOCPATH/GCONV_PATH in bundle-all packs
bba733a tests, specs, docs, CHANGELOG, version 2026.9.27.1, xlings version vectors, faster ELF reads

Defects

Features

Payload revision and self-contained locale (openxlings/xlings#620, mcpp-community#621)

  • A dependency whose installed revision differs from its index entry's revision reads as not installed.
  • A runtime payload with revision above 0 enters the runtime contract (revision=<n>). With revision 0 the contract text is unchanged.
  • Bundle-all packs copy the glibc payload's lib/locale and lib/gconv and export LOCPATH and GCONV_PATH, keeping values the user already set.

Specs and docs

  • SPEC-001 v1.5, SPEC-004 v1.8, SPEC-005 v1.4, SPEC-007 v0.3.
  • docs 04, 05, 06, 07, 30 and 50, in English and Chinese.
  • CHANGELOG entry for 2026.9.27.1.

Tests

Verification status

Dependencies and follow-ups

  • xlings pin: kXlingsVersion and the .github pins stay at 2026.9.26.2 until xlings 2026.9.27.1 is released. .github/tools/check_version_pins.sh checks that they move together.
  • Refresh vectors: modules/versioning/tests/data/semver-vectors.tsv is vendored from xlings 2026.9.27.1; refresh it when the pin moves.
  • Parked split: branch wip/prepare-split holds a split of src/build/prepare.cppm into src/build/prepare/*.cppm. GCC 16.1 fails on it with an internal compiler error (segmentation fault in add_imported_namespace, at import mcpp.cli; in src/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

…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
@speak-agent

Copy link
Copy Markdown
Owner Author

Superseded by mcpp-community#719.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

A host build ignores [target.<host triple>]: its cxx_runtime has no effect and no diagnostic says so

2 participants