You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(run): the cached fast path dropped the subos environment
`mcpp run` has two paths and only one of them had been taught about subos
declarations. The full path resolves the toolchain and applies them; the fast
path skips prepare_build entirely and built its own child environment. So a
program got its environment on the run right after a build and lost it on
every run after that -- for a GL application, "it worked once and now the
window is black", with nothing in between to attribute it to.
WHICH subos is a build property and is now recorded in the build cache. WHAT
it declares is the subos's own and is re-read on every run, so installing a
graphics stack between two runs takes effect without a rebuild. That split is
also why MCPP_SUBOS_DIR moved out of the derivation: an override means "for
this invocation", and caching one would let a single `MCPP_SUBOS_DIR=… mcpp
run` silently redirect every later run.
Found by an assertion that the test did not originally have. The first version
ran `mcpp run` once, passed, and proved nothing about the path it was written
for. The fast-path check now runs first and fails loudly if the second run did
NOT take the fast path -- without it the assertion below it is vacuous and
would keep passing after the coverage silently went away. It caught a second
defect immediately: the new cache line was written before `profile=` and
parsed after `cacheMode=`, so every entry read back as stale and the fast path
was disabled for everyone.
Two dead capability tokens, and a guard so there is no third. `# requires:
linux` and `# requires: llvm` are not capabilities run_all.sh ever sets, so
65_toolchain_runtime_dirs_for_run.sh had never executed in CI -- and it
passes. The skip line for a token that cannot exist reads exactly like the
skip line for one that legitimately does not, which is what let it sit. The
runner now refuses to start when a test declares a token outside the known
universe.
The xlings pin goes back to 2026.8.6.3. It was moved to 2026.8.7.1 for tidiness
rather than need -- subos_info degrades quietly on an older xlings by design --
and CI's fresh-sandbox jobs failed with the toolchain's own g++ exiting 127,
the signature of an interpreter that is not where the binary says it is.
Whether that is a real incompatibility is worth knowing, but not on the back of
a change that does not need it.
0 commit comments