Skip to content

native: the formatter and analyzer gate, one CI leg per port (#547) - #550

Open
gafferongames wants to merge 2 commits into
mainfrom
native-gate-547
Open

native: the formatter and analyzer gate, one CI leg per port (#547)#550
gafferongames wants to merge 2 commits into
mainfrom
native-gate-547

Conversation

@gafferongames

Copy link
Copy Markdown
Contributor

The gate half of #547.

The law is that what schema emits for a target reads as that language's own code. Two of its three parts are machine-checkable, and this lands them: the language's standard formatter in check mode and its standard analyzer at default strictness, over the generated code of both corpora — the examples corpus under generated/, the tables corpus under build/ — red on any finding. The third part, the fluent-reader review, is a person's and belongs on each row's own pull request.

Most of these legs are red today, deliberately. They are not skipped and no finding is silenced. Each red leg's findings are enumerated below and filed as one issue per target, as work owed by the emitter.

Shape

One make native-<lang> per port, in that port's own make/<lang>.mk beside its test and conformance legs, registered with NATIVE_LEGS. One CI job per port, fanned out over a registry the workflow discovers rather than a list it carries: test/native/<lang>/ci.json names the make target, the sibling runtime the analyzer needs on disk to typecheck what the emitter wrote, the toolchains to install, and the make overrides. A port with a conformance driver and no native row fails go test ./....

Every instrument is pinned and none comes from a machine's PATH by accident.

Status per target

Filled in once CI has run.

gafferongames and others added 2 commits September 5, 2026 08:05
The law in #547 is that what schema emits for a target reads as that
language's own code. Two of its three parts are machine-checkable, and
this lands them: the language's standard formatter in check mode and its
standard analyzer at default strictness, over the generated code of both
corpora, red on any finding.

One `make native-<lang>` per port, in that port's own make/<lang>.mk
beside its test and conformance legs, registered with NATIVE_LEGS. One
CI job per port, fanned out over a registry the workflow discovers
rather than a list it carries: test/native/<lang>/ci.json names the
target, the sibling runtime the analyzer needs to typecheck what the
emitter wrote, the toolchains to install and the make overrides. A port
with a conformance driver and no native row fails `go test ./...`.

Every instrument is pinned, and none comes from a machine's PATH by
accident: clang-format and clang-tidy 18 by exact archive version,
google-java-format by version and sha256, ESLint by lockfile, Credo by
an exact version in its own mix project, and the rest from the toolchain
the workflow already installs.

.clang-format at the root is the one style a tool does not supply, and
it is written from the estate's own C and C++.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ing (#547)

A leg that stopped at its formatter hid its analyzer's findings behind a
whitespace diff, and the whole finding list is what an emitter is owed.
Every leg now runs both instruments and reports at the end.

The Dart finding is fixed here rather than filed, because it is a
formatter difference the emitter can close without moving a byte on any
wire: a unit whose Dart surface is the banner and nothing else ended on
the blank line that follows the banner, and dart format collapses it.
Four units of the tables corpus carried it. The committed generated/
tree is unchanged, and no golden moves.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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