One C++ runtime per process, the graph and pack facts, bounded offline-aware planning: #646 to #649 (2026.9.16.1) - #650
Merged
Merged
Conversation
…tdout is not inherited (#648 L1, L2)
…d has its own code (#648 L5, L6) The fetcher's pre-install and retry refreshes and a project's first custom-index sync now take the refresh policy's decision, so [index] auto_refresh = false governs them. The policy half of mcpp.pm.index_refresh moves to mcpp.pm.refresh_policy, which the fetcher can import. Every offline refusal records offline-download-required, and emit build-database reports it as MCPP_OFFLINE_DOWNLOAD_REQUIRED.
…images take from one object is not a conflict (#646 F3)
…g derivation, packages of programs, git members (#647 E4, #649 E6-E8) - The forward validator reads every dependency table of its manifest, on every row, including [build-dependencies] (#647 E4.1). - A [feature-deps] restatement naming another source than the declaration in effect is refused, naming both (#647 E4.2). - One derivation names a provider for dep_dir, dep_linkage and dep_bin, so a namespace + name package's tool is published under its qualified name (#647 E4.3). - A package whose declared targets are all programs contributes nothing to a consumer's graph; package cycles are refused where the graph is resolved (package-cycle); a tool requested by its own sub-build is refused at the first repetition (#649 E6). - A git dependency selects the repository member that declares its key; a member's in-clone path edge names the same git source; a second declaration of one dependency merges its requests into the edge; the git banner names its reference (#649 E7). - --features <dependency>/<feature> is a forward of the root and never a macro; mcpp why accepts --features (#649 E8).
…bers and dependency feature tokens (e2e 710-714, 187)
…ts, packages of programs, git members, one naming derivation, package-cycle
…network access; e2e 730-735 (#648 L3, L4)
…, the offline code (#648)
An Android row built on a macOS host received the Apple SDK line, which names no --target, so -fuse-ld=lld selected ld64.lld for an ELF object. link_shape takes the host and the target's object format; a target outside the host's own family takes the generic line that carries the target. Unit LinkShape.* states the choice for every host; e2e 721 links the row on macOS.
E1, #649 X4) The metadata table is kept as JSON text for the graph document and is not interpreted. [package] reports a key the parser does not read the way [build] does: a warning for the root manifest, an error under --strict.
…raph built, and a machine-readable pack report (#647 E1, #649 E5, E9) - mcpp::graph_file(): the root package's program reads every package in dependency order with its manifest directory, features, targets and [package.metadata]; the document's content joins the re-run key. The same entry builder produces resolution.json's graph section. - mcpp pack strips the program on every row that strips (the Android row did not reach the strip step), every shared library the graph built and the staged copy of the toolchain's runtime; the Packing line states what the row does; mcpp::pack_strip() and mcpp::pack_debug_symbols_dir() carry the decision to a member that stages libraries of its own. - mcpp pack --message-format json prints one mcpp.pack envelope; pack takes --release and --dev; build, run, test, emit and pack resolve the profile with one rule (--profile wins over the shorthands). e2e 720, 722, 723; unit BuildProfile.*.
…ing homes gain the CN half (#648 L7) mcpplibs/mcpp-index#432 made the GitCode copy of the index artifact the same bytes as the GitHub copy. With mirror = CN, mcpp index update now reaches only raw.gitcode.com, gitcode.com and file-cdn.gitcode.com (traced). e2e 151 covers the fresh seed, the flat-to-region upgrade and its idempotence, and a user base that keeps its own value.
WindowsLld spelled the vocabulary the runtime-contract source scan reserves for provider selection (RuntimeContract.SourceOwnsNoProviderSpecificSelectionOrProbeBranch).
…OS and Windows job summaries, 721 as its own macOS step; migration unit tests for the region artifact
… strips and reports (S1-S5)
… the link shape; version 2026.9.16.1, CHANGELOG, records updated with the implementation's readings
…nit shim belongs to C++ units; e2e 732 bounds itself portably The macos-15 run of e2e 704 reads runtime_error=not-matched, errc=unequal under the payload default and caught/equal under host-coupled, so #646 F2 holds. The default is unchanged, and such a build is told once. The same run showed the #336 shim prepended to a C-only shared library, whose link carries no libc++, and that macOS runners have no `timeout`.
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
This pull request implements the engine side of #646, #647, #648 and #649 as one release, 2026.9.16.1. The triage record routes each of the 23 reported items, and 12 further findings from measuring them, to the repository where it belongs. The implementation plan states the review from eight angles, the task ledger with the reading that closes each row, and the refinements found while implementing:
.agents/docs/2026-09-16-646-649-four-issues-by-home.md(triage record).agents/docs/2026-09-16-646-649-implementation-plan.md(implementation plan).agents/docs/2026-09-16-646-649-probes.sh(probes)Every new e2e script fails on the released 2026.9.15.2 and passes on this branch; the plan's ledger quotes the failing line of each.
Images and runtimes (#646, #649 E10)
std::bad_cast. Such programs and tests now take the shared library's contract, and a stated self-contained program is refused asprogram-cxx-runtime-split. (e2e 700)STB_GNU_UNIQUEis vague linkage. A definition that both images take from one build object, or that the toolchain's own runtime provides for the std module initialiser, is no longer a finding. (e2e 701)approw). On other ELF rows it builds as before, with abuild/static-placementdiagnostic. (e2e 702, 307)Build programs, the link line and pack (#647 E1-E3, #649 E5, E9)
mcpp::graph_file(): the root build program reads the resolved graph, with each package's[package.metadata]kept verbatim. The graph's digest re-runs the program when it changes.[package]now reports unknown keys. (e2e 720)LinkShape.*, e2e 721 as its own macOS step)mcpp packstrips the program on every stripping row, every shared library the graph built and staged runtime copies. The status line reports what was done, and build programs read the decision. (e2e 722)mcpp pack --message-format jsonprints onemcpp.packenvelope.packaccepts--releaseand--dev, and every verb shares one profile rule. (e2e 723)Features, tools and git sources (#647 E4, #649 E6-E8)
[feature-deps]restatement with a different source is refused.dep_binpublishes the qualified name. (e2e 710, 711, 187)package-cycle), and a tool cycle is refused at its first repetition. (e2e 712)--features <dependency>/<feature>is a root forward. (e2e 714)An editor that plans in the background (#648)
compat.*dependency no longer starts a network refresh every two minutes. (e2e 730)[index] refresh_timeoutfor a refresh, an inactivity bound for an install. (e2e 732)effectsreport observednetwork, and an offline plan that needs a download has its own code,MCPP_OFFLINE_DOWNLOAD_REQUIRED. (e2e 733, 735)[index] auto_refresh = falsegoverns every implicit refresh. (e2e 734)mirror = CN, an index update reaches only GitCode. (e2e 151)Ecosystem
compat.ftxuiandcompat.gtest.omit_keys,page, the strip decision,rules-swift, library contributions from the graph).Verification