fix(ci): unbreak main — the merge-landed PR gate, and a stale loader message - #210
Merged
Conversation
…message Main CI has been red on EVERY merged PR. Two independent defects, both landed by #178's push (run 31332846716); `cuda-fat-build` in that run was cancelled by concurrency, not failing. THE GATE REDDENED MAIN FOR OBEYING IT. `check-role-discipline.py` judges every commit in the `before..after` range on its own message. A PR landed with a REAL merge commit pushes the merge AND the branch commits under it: the merge names the PR, the branch commits were never required to, so each one read as a direct push. `6603356a` (#178), `e73cbbae` (#204) and `1a02ab4f` (#196) all failed this way, in both `documentation-checkpoint` and `agent-record`. Arrival is now judged ONCE, on the commit that lands the change: `merged_pr_content` exempts what a row/* PR merge brings in. Squash-merges are untouched -- their one commit carries "(#N)" and passes on its own message. NOT a weakening, and gated as such: only the SIDE parents count, so `--not parents[0]` keeps a commit pushed straight to main from being laundered by merging a PR on top, and a merge naming no row and no PR exempts nothing. Four unit checks build real git history for those cases, plus the exact `3bbee96e..0cf3dbb` range CI ran, pinned with `has_reached_main` forced TRUE -- from a `row/*` worktree everything reports as pending PR disposition, and the test would have passed against the defect it exists to catch. Suite 47/47, and 5/5 red without the fix. A STALE MESSAGE IN A TEST. `6603356a` taught `LoadMergedBf16RawNK` to accept F8_E4M3 shards and rewrote its rejection to name the supported dtypes; `test_qwen27_dense_forward.cpp:229` still asserted the old "expected BF16", so `build-test-cpu` and both sanitizer legs failed on it. The expectation now reads the message the loader raises, and the FP8 merge path that arrived WITHOUT a test in this file gets one: a mixed BF16+FP8 merged parameter, expectations hand- computed from E4M3 bytes and the scale (never re-derived through the same dequant helper the loader calls), plus the per-channel-scale rejection. 7/7, 333 assertions. FOLLOWING_AGENTS_PROTOCOL Following-Agents-Protocol: true AI-Assisted: true Assisted-by: Claude:claude-opus-5 [ClaudeCode]
mudler
force-pushed
the
row/CI-MAIN-RED-REPAIR
branch
from
August 9, 2026 21:29
580161e to
290a2ea
Compare
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.
Main CI has been red on every merged PR. Two independent defects, both surfaced by #178's push (run 31332846716).
cuda-fat-buildin that run was cancelled by concurrency, not failing.1. The gate reddened main for obeying it
check-role-discipline.pyjudges every commit in thebefore..afterrange on its own message. A PR landed with a real merge commit pushes the merge and the branch commits under it: the merge names the PR, the branch commits were never required to, so each one read as a direct push.6603356adocumentation-checkpoint,agent-recorde73cbbae1a02ab4fArrival is now judged once, on the commit that lands the change:
merged_pr_contentexempts what arow/*PR merge brings in. Squash-merges are untouched — their one commit carries(#N)and passes on its own message.Not a weakening, and gated as such: only the side parents count, so
--not parents[0]keeps a commit pushed straight to main from being laundered by merging a PR on top, and a merge naming no row and no PR exempts nothing.2. A stale message in a test
6603356ataughtLoadMergedBf16RawNKto acceptF8_E4M3shards and rewrote its rejection to name the supported dtypes.test_qwen27_dense_forward.cpp:229still asserted the old"expected BF16", sobuild-test-cpuand both sanitizer legs failed on it.The expectation now reads the message the loader raises, and the FP8 merge path that arrived without a test in this file gets one: a mixed BF16+FP8 merged parameter, with expectations hand-computed from E4M3 bytes and the scale rather than re-derived through the same dequant helper the loader calls, plus the per-channel-scale rejection.
Evidence
tests/scripts/test_agent_role.py: 47/47; the 5 new checks are 5/5 red without the fix.3bbee96e..0cf3dbbb,0cf3dbbb..bc6e3d72,#204) now exit 0; the first exited 1 before.test_qwen27_dense_forward: 7/7, 333 assertions (was 314).scripts/agent-preflight.sh: exit 0.Not run locally: the full
ctestsweep — this box is at 100% disk. The C++ change touches one test file, which was built and run green.FOLLOWING_AGENTS_PROTOCOL