Skip to content

mcpp pack reports its build as planning: the pack's ninja drive has no progress report #753

Description

@speak-agent

Summary

mcpp pack builds before it packs. That build reports no progress: build_and_pack drives ninja with a default BuildOptions, whose progress is unset (src/pack/pipeline.cppm, the build of each configuration group). mcpp build attaches a progress::Build report (src/build/execute.cppm).

As a result, a pack whose build compiles shows only the planning heartbeat for as long as the compile runs. There is no Compiling line and no status row.

Measurement

Release v2026.10.1.1, job "build + upload (linux / x86_64)" (run 36790174544, job 110147157268). The step runs mcpp build --target x86_64-linux-musl with the bootstrap engine, then <fresh mcpp> pack --target x86_64-linux-musl --mode static. The fresh engine's fingerprint differs, so the pack recompiles mcpp:

23:42:52  Workspace building member 'mcpp'
23:42:52  Resolving toolchain / Resolved gcc@16.1.0 -> x86_64-linux-musl
23:43:52  Planning · 1:00
...
23:48:53  Planning · 6:00
23:49:30  Packing mcpp v2026.10.1.1 (static, stripped)

The 6 min 38 s are mostly the compile. The release of 2026.9.30.2 shows the same shape: run 36702587348, Planning · 1:00 to 6:00.

Expected

The pack's build is reported as mcpp build reports one: the Compiling lines and the status row, and Finished before Packing. The dispatch pass of a --format that a package provides should be reported the same way.

Activity

  1. speak-agent commented on Oct 1, 2026

    @speak-agent
    MemberAuthor

    Fixed in 2026.10.1.2 (#754), following .agents/docs/2026-10-01-pack-drive-and-selection-independent-compile-design.md.

    The pack was one symptom of a wider gap: each command assembled its own ninja options, and of eleven construction sites one attached the report and one passed the job count. Measured on 2026.10.1.1, [build] jobs = 3 reached ninja from mcpp build only; mcpp test and mcpp pack ran ninja's default.

    • The backend takes -j from the plan and reclaims stale bmi_schedule = "on" tokens before the first drive of each build directory, for every command.
    • A drive is reported whenever the command opened the report; mcpp test's own per-test drives state that they write their own lines.
    • mcpp pack builds every configuration first, writes Finished before the first Packing line, reports the dispatch pass of a provided --format, and fills the global dependency cache.

    Verification:

    • e2e 871: a cold mcpp pack writes Compiling and Finished before Packing; its JSON output stays one document; under jobs = 1, no two compiles overlap under build, test or pack. It fails on 2026.10.1.1 and passes on 2026.10.1.2 under GCC 16 and clang 22.
    • The release job of v2026.10.1.2 (run 36818095279, "build + upload (linux / x86_64)"), the measurement in this report: the fresh engine's pack recompiles mcpp and now writes the package lines, Building 251/414 · 1:36 to 411/414 · 5:36, and Finished release [optimized] in 5m49s before Packing mcpp v2026.10.1.2 (static, stripped).
    • GalTranslPP PR 3 with 2026.10.1.2 (run 36824209051): both mcpp pack -p ... --format release steps state their builds and their dispatch passes, and finish in 83 s together.
    • The sandbox script .agents/docs/2026-10-01-pack-drive-and-selection-verify.sh: sections 4 (the pack states its build) and 5 (jobs = 1 bounds mcpp test) pass on 2026.10.1.2 in an xlings subos --sandbox with the CN mirror. On 2026.10.1.1 section 5 fails there with overlapping compiles, and section 4 fails on the host with no Compiling line.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions