Skip to content

Tags: mcpp-community/mcpp

Tags

v2026.10.3.1

Toggle v2026.10.3.1's commit message
Revert "ci: temporary skip_canaries input for #759 round-5 release"

This reverts commit 12e8e6d.

v2026.10.1.3

Toggle v2026.10.1.3's commit message
2026.10.1.3: a source for every tool a build uses, declared, programm…

…able and observable

Every tool a build uses now has a source that can be declared, decided by a build
program, and read back (mcpp#755, protocol 15). A project that writes none of the
new keys builds exactly as before, and its output is unchanged.

v2026.10.1.2

Toggle v2026.10.1.2's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
2026.10.1.2: a pack states its build, every drive takes the job count…

…, and a unit's compile does not depend on the member selection (#751, #753) (#754)

Implements .agents/docs/2026-10-01-pack-drive-and-selection-independent-compile-design.md and resolves #751 and #753.

- Every ninja drive takes the job count and the stale-token reclaim from the
  plan, and is reported whenever the command opened the report, unless its
  caller writes its own lines (mcpp test's per-test drives).
- mcpp pack states its build: package lines, the status row, and Finished
  before the first Packing line; one Finished for several configurations; the
  dispatch pass is reported; a pack fills the global dependency cache.
- Every package's BMIs lie below its own directory except the root's, as
  object files have since #233; a unit reads one module map of what it reaches
  through its imports (a GCC mapper, a clang argument file of -fmodule-file=
  lines, an MSVC command file of /reference lines).
- A file a member lists from outside its directory belongs to that member, not
  to the workspace's virtual root.
- Position independence follows the target: every unit of an ELF target that
  is not freestanding is compiled with -fPIC.

Verification: CI on 71d09f0 (42 passed; the two xcode-27 jobs fail as on
main, #669). GalTranslPP built with mcpp from this branch on windows-2025,
run 36814777279 on the final head: mcpp run -p GPPCLI after
build --workspace took 10 s (3m22s on 2026.9.30.2), both release packs 89 s.

v2026.10.1.1

Toggle v2026.10.1.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
2026.10.1.1: member selection, build programs prepared once, a pack o…

…ver several members, and output streams (#748, #749, #750) (#752)

Implements .agents/docs/2026-09-30-member-selection-and-build-program-cost-plan.md.

- Member selection (#750): one selection for build, test, pack and emit
  build-database; -p is repeatable and the selection is a set in [workspace]
  members order; --exclude; an unknown member, --exclude with -p, --workspace
  with -p and a second -p on run are refused before planning.
- A test over several members plans once per configuration and runs each
  member's tests with its own runtime directories; the test stream adds a
  group_build record, build_group, and a per-test build_ms.
- Build programs (#748): the bundled mcpp module and each host module are
  compiled once per key and kept by provenance (engine and index output in the
  global cache, project-owned output in the workspace); a workspace's programs
  compile concurrently and run in their serial order; the process launcher is
  safe for concurrent callers.
- Pack over several members (#749): --workspace, a repeated -p and --exclude
  pack several members with one plan and one build per configuration, a stage
  directory per member and one dispatch pass; a member fails alone; a target
  name resolves for the member an action is for.
- Output streams: narration on standard error on every command, results on
  standard output; mcpp run -q writes exactly the program's output; a mcpp run
  whose build failed exits 101.

v2026.9.30.2

Toggle v2026.9.30.2's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
2026.9.30.2: a selected workspace member declares as the root, the cl…

…ang MSVC row states its compiler version (#746), and a shared member is compiled once per configuration (#747)

The release canary of v2026.9.30.2 on mcpp-language-server stopped the
release before any build job ran. This change fixes that defect, mcpp#746, and
a test gap, for release as 2026.9.30.2.

- A selected workspace member declares as the root. The workspace plan's
  virtual root declares only its members, and the rules that grant the root's
  own declarations a privilege read its edges alone, so a rooted workspace's
  own package, or a member selected with -p, lost the position it held when
  planned as its own root. PrepareState::declaredByRoot now answers for the
  root and each selected member, and the kind and reference clashes, the git
  lock, the identity write-back, edge linkage, direct target-side candidates
  and the index refresh ask it. Two selected members that disagree about one
  dependency's checkout or link form are refused, naming both (e2e 850).
- mcpp#746: the version of the toolset's cl.exe, read from its
  VS_FIXEDFILEINFO as clang reads it, is passed as -fms-compatibility-version
  with the toolset words, so it is on every command and in every key
  (e2e 760, unit tests).
- e2e 851 states that a member two configurations use is compiled once in
  each, with the union of one configuration's features.

v2026.9.30.1

Toggle v2026.9.30.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
2026.9.30.1: a build names each package when it does work, one status…

… row with a screen of dots, --play-game, Finished from one minute, and one lock entry per identity (#743)

Build output design revision 3 (.agents/docs/2026-09-30-build-output-refinement-design.md), from a report on `mcpp build` in the xlings repository with 2026.9.29.5.

A package is named once, when it does work: Compiling at its first step that is not a dependency scan, or Cached with its units when the global cache places them; nothing is folded. A package inside the project is named by its short name, version and directory, any other by its identity and source, and the name's colour states the source. The cache pass runs through the report. One status row, aligned with the verbs and drawn half a second into the command, leaves in one write that overwrites the old rows in place, with autowrap off for the row; it states the last steps running once ninja has none left to start. Its screen of 24 braille cells (mcpp.ui.dots_screen) plays the chomper, the snake, the stack or the ions; MCPP_PROGRESS names one, or plain, or off. --play-game[=snake|stack|runner] plays a game on the screen from the keyboard, in the terminal's foreground only, and the terminal's mode is restored on exit and on a signal. A build program has a line when it runs or fails, and a failure names its package. Finished states how the time was spent from one minute, names the longest compile by its source file, and states the profile's descriptor on the fast path as well, from the step record's header. The step record is version 2.

A bare key of a path or git dependency states only the short name, and a contradicting namespace is reported once per consumer manifest. A planned build leaves a committed mcpp.lock unchanged: the lock holds one entry per identity again.

The Windows resource script moves to docs/res, the packaging and release scripts to tools, and the empty cdb.json is removed. The bundled xlings is 2026.9.30.1.

v2026.9.29.5

Toggle v2026.9.29.5's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
2026.9.29.5: a workspace's build programs are reused across selection…

…s, the build database plans by configuration, and a build reports each step once with its outcome while a status line states the build (#742)

The validation project's post-release run of 2026.9.29.4 and the
cross-verification of this pull request found six problems in the commands
around a workspace build, and a build that printed nothing for 40 minutes.

- A member's build program is reused whichever members a command selects
  (its graph document lists only its own closure's requests), and the
  members' programs run dependencies first.
- `mcpp emit build-database` and `mcpp build --configure-only` plan a
  workspace by configuration, as the build does; a command of several
  configurations publishes the root compile_commands.json once, as their
  union (SPEC-005 v1.6).
- `mcpp pack` summarises more than eight outputs by directory.
- A build reports each step once, with its outcome: ninja is read as it runs
  (its status lines, its log, a step record beside build.ninja, and the start
  of check and prepare actions from the engine's wrapper); a package's line is
  written when every step of it has run or when the build ends; dependencies
  are folded unless --verbose; a build program has one line; a failed step is
  reported when it fails; `Finished` states the whole command's time and how
  it was spent.
- On a terminal the running lines and one status line are drawn below the
  output; in a log the status line is repeated after a minute of silence.
  Terminal detection works on macOS and Windows, and a Windows console
  receives UTF-16.
- e2e 839 to 843, unit tests, docs in both languages, the design documents,
  CHANGELOG; version 2026.9.29.5.

Merged after both gates passed: this pull request's CI (the two xcode-27 legs
are the known #669) and the validation project's cross-verification with the
mcpp built from this branch (Sunrisepeak/GalTranslPP run 36591168092).

v2026.9.29.4

Toggle v2026.9.29.4's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
2026.9.29.4: a program shipped through artifacts links with its own c…

…losure's line, and ${mcpp.bin_dir} is the declaring member's product directory, in a workspace plan (#741)

The validation project's post-release build of 2026.9.29.3, and its
cross-verification against this pull request, found two plan-level values used
where a workspace member's own value is meant.

- A program shipped through artifacts links with its own closure's line in a
  workspace plan: a link group of its own closure (LinkGroup::linkOnly) holds
  the link line and runtime contract and places nothing. The plan's line pools
  the dependencies' flags and not a member's, so a library the program's
  package states through its build program was missing (e2e 838 A1-A3).
- ${mcpp.bin_dir} in an action a workspace member's build program declares is
  that member's product directory (e2e 838 A4; docs/30 in both languages).
- Version 2026.9.29.4; design document section 17.1.

Merged after both gates passed: this pull request's CI, and the validation
project's build, run, pack and release layout with the mcpp built from this
branch (Sunrisepeak/GalTranslPP run 36537600583).

Refs #734.

v2026.9.29.3

Toggle v2026.9.29.3's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
2026.9.29.3: a program shipped through artifacts in a workspace plan …

…waits for no plan-level runtime file, and its own runtime files are beside it (#740)

The validation project's post-release build of 2026.9.29.2 stopped with
"'bin/translations/qt_gppcli_en.qm', needed by 'obj/gpp_updater/Updater.exe',
missing and no known rule to make it".

- The link edge of a unit outside the link groups (a program shipped through
  artifacts) no longer takes the plan's deploy set as order-only inputs in a
  workspace plan: the virtual root has no program, and nothing places that set.
- A member's runtime set includes the closure of every package whose program
  the member ships through artifacts, so the program's own runtime files are
  in the member's product directory, as they were beside a root's program.
- e2e 833 G9 states both; G2 and G3 count compile and link outputs, since a
  plan of another selection stages the runtime files again.
- Version 2026.9.29.3; design document section 17.1.

Refs #734.

v2026.9.29.2

Toggle v2026.9.29.2's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
2026.9.29.2: a workspace plan reads what a member states about itself…

… from the member (#739)

The plan's root in a workspace plan is a virtual root that holds the values
shared by the whole graph. Five statements a member makes about itself were
read from that root in 2026.9.29.1 and were therefore empty, and a member's
product directory lacked the shared libraries its libraries need
(.agents/docs/2026-09-29-workspace-build-graph-design.md, section 17.1).

- A member's relative [indices].path is anchored at the member when the member
  is loaded (e2e 120).
- The std module is built when a selected member's target entries import std
  (e2e 836 M1).
- Each selected member's [resources] and windows_code_page are compiled against
  the member's directory and include directories, under res/<member>/, and
  embedded into the member's images only (e2e 837). A quoted include or
  resource file in a script is found through the include directories, as the
  resource compiler finds it.
- Every graph-built shared library of a member's closure is placed in the
  member's product directory (e2e 835 L3).
- [build] linkage is a root-position value.
- A member's unknown mcpp: capability is refused, and its cfg() and schema
  warnings are reported, as a root's (e2e 836 M2, M3).
- Version 2026.9.29.2.

Refs #734.