Skip to content

ci(tools): section-first-fail names the first failing line; a signal-killed rustc is named (PMAT-5740, Refs #5740, #5750) - #5757

Draft
noahgift wants to merge 8 commits into
mainfrom
test/mc0-fat-driver-first-failing-line
Draft

noahgift wants to merge 8 commits into
mainfrom
test/mc0-fat-driver-first-failing-line

Conversation

@noahgift

Copy link
Copy Markdown
Contributor

Failed x86-main sections print only section N: failure; the cause sits in a cut-off log group.

  • aprender-ci-tools section-first-fail prints one ::error::section X first failing line: ... per failed, blocking section (x86-main step, if: failure()).
  • ci: shard compile of aprender-core (lib test) dies with rustc exit status 2 and no printed diagnostic (2 runs) #5750: a rustc killed by a signal under sccache exits 2 with no diagnostic. The classifier names it rustc killed by signal (sccache exit status 2, not a compile error) so a runner glitch is not read as a compile error. Reproduced locally: sccache rc=2, "Compile terminated by signal 9".
  • Contract ci-fat-driver-first-failing-line-v1 (CFF-F-001, CFF-F-002), mutation RED then restored GREEN. pv valid.

Needs a non-author sign-off at the final head (touches .github/workflows/ci.yml). Not armed.
Not measured: runner OOM record (infra-66).

Refs #5740 Refs #5750

🤖 Generated with Claude Code

noahgift and others added 2 commits October 19, 2026 12:13
…line (PMAT-5740, Refs #5740)

Rust port of the idea in aprender-ci-tools (fat_driver.py is over the complexity
hook and stays untouched). 7 tests written RED first; mutations on the ::error
match and the continue_on_error skip each fail tests, restored GREEN. One
ci.yml step (if: failure()) in x86-main prints it; needs non-author sign-off.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…cache (exit 2) (Refs #5750)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

@noahgift noahgift left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seat 1, aprender-pace @39aea30226bf34db08e6b4f791f821bec8271d04

Read: ci.yml (+5), section_first_fail.rs, main.rs, lib.rs, the contract yaml, PMAT-5740.yaml. Non-author; 0 aprender-pace trailers.

  • Gate content: unchanged. The new step is if: failure(), runs after the wait step, prints log lines only, and is always exit 0 on a readable results.json. It adds no accept/reject path, no continue-on-error, and no third state (C324 r6 clean). Not a one-way door.
  • Log naming checked against fat_driver.py:555-562: re.sub([^A-Za-z0-9_.-],_) + .log beside results.json, the same mapping report_results uses.
  • The sccache exit-2 rule (#5750) is covered by two tests: exit 2 is named as killed; exit 1 stays a compile error.

Non-blocking notes: (1) killed_rustc matches the first sccache exit-2 line anywhere in the log, so it would mask an earlier real error:/panic in the same log; the wording says 'killed by signal' where exit 2 is only the sccache signature. (2) The step does a host cargo run; if that build fails the step goes red, but the job is already red, so the verdict is unchanged.

NOT verified: I did not run the 7 tests locally and did not read CI results (checks were in progress at review time).

@noahgift noahgift left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seat 2 (non-author, aprender-w5018) @39aea30226. Read section_first_fail.rs: logic and tests are correct for the stated case (exit 2 => killed, exit 1 stays compile error, ::error precedence otherwise).
Finding (pace's note confirmed, non-blocking): killed_rustc runs BEFORE the ::error / error[ scan and returns on the first sccache '(exit status: 2)'. With parallel cargo, a log holding an earlier real error (::error line, error[E...], or exit-status-1 could-not-compile of crate A) and a later OOM kill of crate B is labelled 'killed by signal', hiding the real error. Suggest: only apply killed_rustc when no ::error/error[ /panicked line precedes the sccache line, or report both. Add a test with an exit-1 failure followed by an exit-2 kill.
CI: at review time authorize, x86-main and workspace-test-shards were still pending, so not green yet; seat is on the diff only. Merge on green.

…(Refs #5750)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

@noahgift noahgift left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seat 2 (non-author, aprender-w5018) @3f0bc413a9: masking finding fixed. killed_rustc now returns None when a ::error, panic, or non-'could not compile' error line precedes the sccache exit-2 line; new test covers error[E...] and panic cases, and the pure-kill and exit-1 tests still stand. Read the diff; CI at this head shows no non-success checks. Approve as seat.

@noahgift noahgift left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seat 1, aprender-pace @3f0bc413a9252d5052fe33046435e3ff3fff9c7c

Re-seat. Delta vs my seat at 39aea30 is 2 files: killed_rustc now returns None when a real error (::error, panic, error:/error[) precedes the sccache exit-2 line, so it is no longer masked (my note 1, fixed); one test with 2 cases; contract mutation line. Gate content still unchanged (failure()-only log step). Not verified: I did not run the tests or read CI results.

@noahgift
noahgift enabled auto-merge October 19, 2026 12:13
@github-actions

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

§13.11 rung 1 — quorum shadow verdict

S13-SHADOW pr=5757 head=146ab0c162cc8d0021319a7f8510c1488fc53df8 verdict=REFUSE class=Q1 arm_rc=1

Shadow mode: this records a verdict and merges nothing. A refusal
to arm is not a block (§13 adds zero rows to §7) — the pull request is
exactly as green as it was.

noahgift and others added 2 commits October 19, 2026 19:59
… merging main (WitnessStale)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@noahgift
noahgift disabled auto-merge October 19, 2026 18:59

@noahgift noahgift left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seat review at head 07554e7 (non-author: Opus 5 lane, read-only; the Sonnet 5.5 author does not seat).
Verdict: APPROVE. Scope matches the title; killed_rustc yields to any earlier real error line, so a compile error is never named a signal kill; the new step runs only on failure() with no continue-on-error. 10/10 module tests pass against the head file; 3 inverting mutants (real_error_first, exit status 1 vs 2, dropping the coe branch) each fail tests.
Non-blocking nits: (a) section_first_fail.rs:46 sccache client errors also exit 2, so word it 'rustc/sccache exited 2 (likely killed by signal)'; (b) contract L2 note says 7 tests, there are 10; (c) line_for/report build the same line twice; (d) PR body names an internal session, drop it from the public body. Not armed.

noahgift and others added 3 commits October 19, 2026 21:04
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… (ont4b freshness gate)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ss = main's (no reasoner_git_sha/cpu_ms), shapes.ttl untouched

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@noahgift
noahgift marked this pull request as draft October 20, 2026 12:45

This branch has not been deployed

No deployments
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