2026.9.5.4: the fast path compares every declared build-program input - #570
Merged
Conversation
…mentation The sweep that accompanied 2026.9.5.3 covered docs, README.md, CHANGELOG, the engine sources, tests, examples and the workflow files. It did not cover bench/, tools/, scripts/, mcpp.toml or README.zh-CN.md, which still carried the warning and star markers in comments and prose. Program output keeps its markers: a line a user reads on a terminal is neither documentation nor a comment. README.zh-CN.md also gains the Cortex-M row its English counterpart has, and its status column now reads the same words that one does.
`rerun_if_changed("data/table.csv")` states that the program must run
again when that file's content changes. The project-level fast path skips
prepare_build when no source is newer than build.ninja, and prepare_build
is where the program's cache is read; the check the fast path did run
asked only about glob path sets. A data file is neither under src/ nor
named with a C++ extension, so the mtime sweep cannot see it either.
Editing it therefore left the previous run's generated header in place:
`Finished dev in 0.00s`, and the program compiled the previous bytes.
The fast path now compares the three kinds of input the cache records: a
glob's path set, a declared file's content hash, and a declared
environment variable's value. `glob_inputs_stale` is renamed
`program_inputs_stale` because the name was the reason the other two were
never asked about.
e2e 612 uses the program's output as its criterion -- a stale header and
a fresh one make the binary print different strings -- and runs the other
half of the control: with nothing touched, the next build still takes the
fast path, which "always rebuild" would also pass the first assertion
with. Verified failing on 2026.9.5.3 and passing here.
Found by mcpp.tools.embed, the first non-rule member of mcpp:plugins: it
writes a data file into a header while the build program runs, so it
submits no action and falls entirely on this path.
Documentation for both languages, CHANGELOG, and version 2026.9.5.4.
Two versions of one package are reconciled by mangling the secondary copy's module names. The two branches that refuse name both versions and who asked for them; the third reported only that the package declares no named C++ module to rewrite, which is a true statement about a package the reader never asked to be staged and says nothing about the conflict that brought it there. A C package reaches it: compat.vulkan-runtime compiles one C file, so a manifest that pins one version of it while a dependency asks for another got a message about modules. It now names both versions, both requesters, and what to do. examples/10 moves its pin to compat.vulkan-runtime 2026.09.06, the version compat.vulkan asks for since mcpp-index#350. The example is the consumer that found this.
The version compat.vulkan asks for since mcpp-index#351, where a soname carried by two installed payloads is decided by symbol coverage rather than by which store path sorts last.
…ment had left open The heterogeneous-build plan gains the rows for this round: the declared payload set and the candidate walk in the two runtime adapters, the fast path comparing every declared build-program input, the diagnostic for a version conflict on a package with no C++ module, and the first member of the tools half of mcpp:plugins. The multi-device document's section 12.4 listed pocl/lavapipe and the rule package in the index as not done. Both are done, and neither took more hours: conda-forge publishes Linux binaries for the two drivers, so the work was repacking and closure verification rather than building mesa, and the rules moved to their own repository and are published as one package whose members features select.
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.
2026.9.5.4
Two changes: a build-graph correctness fix, and the remainder of the marker sweep.
The fast path compares every declared build-program input
rerun_if_changed("data/table.csv")states that the program must run again when that file's content changes. The project-level fast path skipsprepare_buildwhen no source is newer thanbuild.ninja, andprepare_buildis where the program's cache is read; the staleness check the fast path did run asked only about glob path sets (#359). A data file is neither undersrc/nor named with a C++ extension, so the mtime sweep cannot see it either. Editing it therefore left the previous run's generated header in place: the build reportedFinished dev in 0.00sand the program compiled the previous bytes.The fast path now compares the three kinds of input the cache records: a glob's path set, a declared file's content hash, and a declared environment variable's value.
glob_inputs_stalebecomesprogram_inputs_stale, because the name was the reason the other two were never asked about.e2e 612uses the program's output as its criterion, since a stale header and a fresh one make the binary print different strings. It also runs the other half of the control: with nothing touched, the next build still takes the fast path, which an "always rebuild" fix would pass the first assertion without. Verified failing on 2026.9.5.3 and passing here.Found by
mcpp.tools.embed, the first non-rule member ofmcpp:plugins: it writes a data file into a header while the build program runs, so it submits no action and falls entirely on this path.The remainder of the marker sweep
The sweep that accompanied 2026.9.5.3 covered
docs/,README.md, the CHANGELOG, the engine sources, tests, examples and the workflow files. It did not coverbench/,tools/,scripts/,mcpp.tomlorREADME.zh-CN.md. Program output keeps its markers: a line a user reads on a terminal is neither documentation nor a comment.README.zh-CN.mdalso gains the Cortex-M row its English counterpart already has, and its status column now reads the same words.Verification
check_docs_style.shpasses, every touched shell script parses, both touched Python files compile, and the e2e suite runs on this branch.