feat(xlings): show progress during silent bootstrap installs + fetching-index status#139
Merged
Merged
Conversation
Sunrisepeak
added a commit
that referenced
this pull request
Jun 21, 2026
* fix(build): self-heal stale build.ninja on 'missing and no known rule' When a dependency package under the registry is reinstalled/moved but keeps the same version string, the build fingerprint (which does not yet cover registry dep state) is unchanged, so the cached build.ninja is reused. Ninja then aborts with 'missing and no known rule to make it' and the build hard-fails, forcing the user to run `mcpp clean` by hand. Add that signature to is_stale_ninja_failure so try_fast_build drops to a full graph regeneration (same invocation) instead of failing — the stale graph is rewritten against the current dep state and the build proceeds. (Folding registry dep state into the fingerprint to avoid the regen entirely is a larger follow-up; see .agents/docs/2026-06-22 §T-j.) * chore: bump version 0.0.57 -> 0.0.58 Release carrying the follow-up batch: scanner raw-string fix (#138), first-run progress (#139), toolchain effective-resolution (#140), doctor runtime-dep check (#141), and the build.ninja self-heal above.
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.
Problem
On a first run,
mcppsits silently onBootstrap ninja into mcpp sandbox (one-time)for a long time with zero feedback. The underlyingxlings installruns as a directstd::system()call with all output redirected to the null device, and there is no spinner — so a slow, network-bound install looks frozen.Fix (output-only — install order and mirror logic unchanged)
Elapsed-time spinner during the silent direct install in
install_with_progress: the blockingstd::system(directCmd)now runs on a worker thread while the main thread paints an in-place braille spinner + elapsed seconds to stderr (\r ⠋ installing <target> (12s)), refreshing every ~200ms, then clears the line. Guarded by!quiet && mcpp::platform::terminal::is_tty()(reuses the existingis_tty()helper). The thread is alwaysjoin()ed before computing the exit code; return-value logic is identical."Fetching package index" status:
ensure_init(the one-time, marker-gated first bootstrap step that precedes the first real install) now emitsprint_status("Fetching", "package index (one-time)")when not quiet, so the user knows the silent wait that follows is expected.Scope / non-goals
src/xlings.cppmis touched. The TTY guard reuses the existingmcpp::platform::terminal::is_tty()(no new platform helper).Verify
mcpp build— clean.mcpp test— 22 passed; 0 failed.