0.12.0 — which interfaces this implementation provides, derived not written - #23
Merged
Merged
Conversation
… written mcpp 2026.9.20.1 compares a consumer's `[kernel-abi] requires-interfaces` against the resolved implementation's `provides-interfaces` at dependency resolution and refuses before anything is compiled. openkal-linux and openkal-windows carry that array; this package did not, so a consumer that declared a requirement got no answer on macOS --- neither a refusal nor a confirmation, which is the shape of a check that silently does not run. THE ARRAY IS NOT WRITTEN BY HAND, and the step that keeps it honest is the one the two sibling implementations already run. "The exported surface is complete and contains nothing else" now regenerates it from the objects this package builds and fails the run if the two disagree. That is clause 9's surface comparison stopped one step earlier: the walk deciding whether each group is exported whole already answers which interfaces this implementation provides, so regenerating is the same derivation rather than a second one. The step also prints what it derived, so a disagreement names the right answer instead of only reporting that there is one. The array committed here is this implementation's claim to provide every interface --- the same claim `--complete` on the line above already makes. If the artefact disagrees, this run says so and prints what it found. BACKWARD COMPATIBLE, AND THIS REPOSITORY'S OWN CI IS THE TEST. `[kernel-abi]` is an unknown top-level table to an engine that predates the key, and an unknown top-level table is ignored. The pin here is mcpp 2026.8.27.1, three weeks older than the release that introduced the key, so a green run on this branch is that statement measured rather than asserted.
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.
The gap
mcpp 2026.9.20.1 compares a consumer's
[kernel-abi] requires-interfacesagainst the resolved implementation'sprovides-interfacesat dependency resolution, and refuses before anything is compiled. openkal-linux (0.15.0) and openkal-windows (0.10.0) carry that array; this package did not.A consumer that declared a requirement therefore got no answer on macOS — neither a refusal nor a confirmation. That is the shape of a check that silently does not run.
The array is derived, not written
The step "The exported surface is complete and contains nothing else" now regenerates the array from the objects this package builds and fails the run if the two disagree — the same step openkal-linux and openkal-windows already carry, so the three implementations answer the question the same way.
It is clause 9's surface comparison stopped one step earlier: the walk that decides whether each group is exported whole already answers which interfaces this implementation provides, so regenerating is the same derivation rather than a second one. A declaration derived from the thing it describes cannot disagree with it, and an implementation that gains an interface cannot forget to say so.
The step also prints what it derived, so a disagreement names the right answer rather than only reporting that there is one.
The committed array is this implementation's claim to provide every interface — the same claim
--completeon the line above already makes. If the artefact disagrees, this run says so and prints what it found.Backward compatible, and this repository's CI is the test
[kernel-abi]is an unknown top-level table to an engine that predates the key, and mcpp ignores an unknown top-level table (it refuses an unknown member of a table it knows — that asymmetry is why both new tables in this wave are top-level).The pin here is mcpp 2026.8.27.1, three weeks older than the release that introduced the key. A green run on this branch is that statement measured rather than asserted.