Skip to content

2026.9.5.4: the fast path compares every declared build-program input - #570

Merged
Sunrisepeak merged 6 commits into
mainfrom
chore/emoji-sweep-remainder
Sep 5, 2026
Merged

2026.9.5.4: the fast path compares every declared build-program input#570
Sunrisepeak merged 6 commits into
mainfrom
chore/emoji-sweep-remainder

Conversation

@Sunrisepeak

@Sunrisepeak Sunrisepeak commented Sep 5, 2026

Copy link
Copy Markdown
Member

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 skips prepare_build when no source is newer than build.ninja, and prepare_build is 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 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: the build reported 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 becomes 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, 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 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.

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 cover bench/, tools/, scripts/, mcpp.toml or README.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.md also gains the Cortex-M row its English counterpart already has, and its status column now reads the same words.

Verification

check_docs_style.sh passes, every touched shell script parses, both touched Python files compile, and the e2e suite runs on this branch.

…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.
@Sunrisepeak Sunrisepeak changed the title Remove the remaining decorative markers from comments and documentation 2026.9.5.4: the fast path compares every declared build-program input Sep 5, 2026
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.
@Sunrisepeak
Sunrisepeak merged commit 3386022 into main Sep 5, 2026
37 checks passed
@Sunrisepeak
Sunrisepeak deleted the chore/emoji-sweep-remainder branch September 5, 2026 16:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants