ci: gate interface reproducibility on stable OR nightly moon - #3964
Open
bobzhang wants to merge 2 commits into
Open
ci: gate interface reproducibility on stable OR nightly moon#3964bobzhang wants to merge 2 commits into
bobzhang wants to merge 2 commits into
Conversation
The committed pkg.generated.mbti files and formatting must be reproducible by one toolchain repo-wide, but which one changes over time: nightly output formats land before they are promoted to stable (today: nightly moon info drops the trailing blank line every .mbti ends with). Hard-gating on stable alone blocks every PR generated with nightly during such transitions. New interface-check workflow: an interface-stable leg and an interface-nightly leg each regenerate interfaces and formatting and diff against the tree; the interface-gate job passes when at least one leg reproduces the committed state, and fails with regeneration guidance when both fail (a format-mixed tree). stable-check drops its two exit-code gates accordingly; its deny-warn check, tests, and bundle steps are unchanged. Branch protection should require interface-gate rather than either leg. Signed-off-by: Codex CLI <codex@openai.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Nightly moon info no longer emits the trailing blank line at the end of generated interface files. Regenerate all 78 interfaces with today's nightly (v0.10.5+001eef869) so the tree is format-homogeneous on the nightly side of the interface-check gate; the diff is exactly one removed blank line per file, with no interface-content changes. Regeneration is idempotent and moon fmt reports no further changes. Signed-off-by: Codex CLI <codex@openai.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
🟢 Ready to approve
The changes are consistent with the stated CI/toolchain transition goal and the diffs are limited to deterministic CI wiring plus mechanically regenerated .mbti snapshots.
This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.
Pull request overview
Updates CI to make interface/format reproducibility gating tolerant to stable vs nightly moon output differences, and aligns the committed pkg.generated.mbti snapshots with nightly’s current formatting (removing the trailing blank line) to avoid perpetual churn.
Changes:
- Added a new
interface-checkworkflow with stable + nightly legs and aninterface-gatejob that passes if either toolchain reproduces the tree. - Removed the
moon info/moon fmtgit diff --exit-codegates fromstable-check(now handled byinterface-check). - Regenerated committed
pkg.generated.mbtifiles to match nightly output (trailing blank line removed).
File summaries
| File | Description |
|---|---|
| v128/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| unit/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| uint64/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| uint16/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| uint/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| tuple/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| test/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| string/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| string/internal/regex_parser/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| string/internal/regex_engine/symbol_map/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| string/internal/regex_engine/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| string/internal/regex_engine/ast/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| strconv/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| sorted_set/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| sorted_map/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| set/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| result/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| ref/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| range/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| random/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| random/internal/random_source/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| quickcheck/splitmix/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| quickcheck/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| queue/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| priority_queue/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| prelude/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| option/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| math/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| list/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| lexbuf/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| lazy/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| lazy_list/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| json/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| internal/strconv/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| internal/regex_engine/shared_types/rechar_set/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| internal/regex_engine/shared_types/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| internal/regex_engine/automata/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| internal/edit_distance/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| int64/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| int16/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| int/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| immut/vector/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| immut/sorted_set/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| immut/sorted_map/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| immut/priority_queue/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| immut/internal/sparse_array/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| immut/internal/path/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| immut/hashset/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| immut/hashmap/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| immut/array/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| hashset/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| hashmap/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| float/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| error/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| env/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| encoding/utf8/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| encoding/utf16/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| encoding/base64/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| encoding/ascii/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| double/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| diff/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| deque/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| debug/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| coverage/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| cmp/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| char/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| bytes/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| bytes/internal/regex_engine/symbol_map/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| bytes/internal/regex_engine/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| bytes/internal/regex_engine/ast/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| byte/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| builtin/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| buffer/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| bool/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| bigint/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| bench/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| array/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| argparse/pkg.generated.mbti | Remove trailing blank line in generated interface snapshot |
| .github/workflows/stable-check.yml | Drop interface/format diff gates; defer to interface-check |
| .github/workflows/interface-check.yml | Add stable/nightly interface+format reproducibility with OR gate job |
Review details
- Files reviewed: 79/80 changed files
- Comments generated: 0
- Review effort level: Lite
We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.
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.
Summary
Adopting the nightly toolchain for day-to-day development surfaced a CI conflict: nightly's
moon infodrops the trailing blank line everypkg.generated.mbtiends with, whilestable-checkhard-gated interface reproducibility with the stable toolchain on every PR — so any interface regenerated with nightly failed CI.This PR makes the gate toolchain-transition-proof:
interface-checkworkflow: aninterface-stableleg and aninterface-nightlyleg each runmoon info --target wasm,wasm-gc,js,native+moon fmtand diff against the tree. Theinterface-gatejob passes when either leg reproduces the committed state, and fails with regeneration guidance when both fail — which happens exactly when the tree is format-mixed (interfaces regenerated with different toolchains).stable-checkdrops its twogit diff --exit-codegates (now covered by the workflow above); its--deny-warncheck, tests, and bundle steps are unchanged.pre-release-check's equivalent gates were alreadycontinue-on-error.pkg.generated.mbtiregenerated with nightly (v0.10.5+001eef869) as the new canon: the diff is exactly one removed trailing blank line per file, no content changes, verified idempotent. Until stable picks up the format, the stable leg is expectedly red and the gate stays green via nightly.Rollout note
Branch protection should require
interface-gate(not either individual leg) — the losing leg during a transition window is expected to show as a failed job; only the gate expresses the OR policy.Validation
Local, with today's nightly:
moon check --deny-warnandmoon check --target allclean, fullmoon test6929/6929,moon bundle --allclean,moon fmtno drift, regeneration idempotent.Signed-off-by: Codex CLI codex@openai.com
🤖 Generated with Claude Code