native: the formatter and analyzer gate, one CI leg per port (#547) - #550
Open
gafferongames wants to merge 2 commits into
Open
native: the formatter and analyzer gate, one CI leg per port (#547)#550gafferongames wants to merge 2 commits into
gafferongames wants to merge 2 commits into
Conversation
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>
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 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 underbuild/— 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 ownmake/<lang>.mkbeside its test and conformance legs, registered withNATIVE_LEGS. One CI job per port, fanned out over a registry the workflow discovers rather than a list it carries:test/native/<lang>/ci.jsonnames 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 failsgo test ./....Every instrument is pinned and none comes from a machine's PATH by accident.
Status per target
Filled in once CI has run.