Skip to content

0.12.0 — which interfaces this implementation provides, derived not written - #23

Merged
Sunrisepeak merged 1 commit into
mainfrom
interfaces-are-declared-and-derived
Sep 20, 2026
Merged

Sunrisepeak merged 1 commit into
mainfrom
interfaces-are-declared-and-derived

Conversation

@Sunrisepeak

Copy link
Copy Markdown
Member

The gap

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 (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 --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 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.

… 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.
@Sunrisepeak
Sunrisepeak merged commit f714a39 into main Sep 20, 2026
2 checks passed
@Sunrisepeak
Sunrisepeak deleted the interfaces-are-declared-and-derived branch September 20, 2026 13:35
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.

1 participant