Repository navigation
ai-summary: stop benign warnings flipping timeouts to CRASH - #141
Merged
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
Adjusts the ai_job_summary timeout handling so “marker-absence” GitHub timeout-minutes kills are reported deterministically as infra:timeout (TIMEOUT/RED) even when benign warning text seeds error_sections, preventing the LLM from misclassifying timeouts as CRASH.
Changes:
cli.py: Make the no-LLM timeout fast-path depend onjob_status.status_text == "TIMEOUT"(not onerror_sectionsbeing empty) and set an explicit timeouterror_message.summarize.py: Suppress the “Log truncated…” caveat when the job status itself isTIMEOUT, avoiding redundant messaging for pure timeouts.test_cli.py: Add a regression test ensuring warning-noise (“failed” in warnings) doesn’t trigger an LLM call and still yieldsinfra:timeout.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| .github/actions/ai_summary/tool/ai_job_summary/cli.py | Makes marker-absence TIMEOUT classification deterministic and sets a concrete timeout error message (no LLM). |
| .github/actions/ai_summary/tool/ai_job_summary/summarize.py | Avoids showing the truncation warning under Error Message for pure TIMEOUT statuses. |
| .github/actions/ai_summary/tool/ai_job_summary/tests/test_cli.py | Adds coverage for timeout logs that include warning noise matching the error regex. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
ppetrovicTT
force-pushed
the
ppetrovic/ai-summary-timeout-not-crash
branch
from
June 23, 2026 15:35
7e3546b to
5d626c3
Compare
A marker-absence TIMEOUT already means crash/exit/test/eval were ruled out, so leftover error sections are noise (e.g. UMD hugepage "...failed" warnings). They were defeating the no-LLM timeout path, and the LLM has no TIMEOUT verdict so it relabelled them CRASH. Gate the path on status, not on the absence of error sections, and state the timeout explicitly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ppetrovicTT
force-pushed
the
ppetrovic/ai-summary-timeout-not-crash
branch
from
June 23, 2026 15:39
5d626c3 to
5275868
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.
Problem
A pure GitHub
timeout-minuteskill was reported as CRASH, blaming an unrelated compiler warning.Real case: tt-metal run
27993444376job82855477860(bh_lb_DeepSeek_PREFILL). The job ran 1h42m with tests passing, then GitHub killed the step ontimeout-minutes. The summary concluded CRASH and cited areader_combine.cpp-Wunused-but-set-variablewarning (which is-Wno-error'd — a pure warning, not a build failure).Root cause
The no-LLM
infra:timeoutfast-path (added in #134) was guarded bynot extracted.error_sections. Benign warnings that contain the word "failed" — e.g. UMD hugepagebind_area_to_memory_nodeset() failed(Issue #893) — match the error regex and seederror_sections. That kicked a real marker-absence timeout off the deterministic path and onto the LLM, which has noTIMEOUTverdict in its enum and so labelled the truncated log a CRASH.GitHub's own
##[error]The action has timed out.is a runner annotation emitted outside the run-with-log capture, so the tool never sees it — a marker-absence timeout is the only signal available, and it must not be overridable by warning noise.Fix
cli.py: gate the no-LLM timeout path on status, not on the absence of error sections. ATIMEOUTstatus already meansget_job_statusruled out crash / nonzero exit / test failure / eval failure, so any remaining error sections are noise. Set an expliciterror_messageso the conclusion is stated, not inferred.summarize.py: gate the "Log truncated…" note onstatus_text != "TIMEOUT", matching the existing header flag — drops the redundant caveat on a pure timeout.test_cli.py: new case — truncated log with warning-noiseerror_sections→infra:timeout, LLM not called.Status stays
TIMEOUT(RED). 275 tests pass.🤖 Generated with Claude Code