fix(noema): upload the sidecar stderr and preflight report when the verdict phase fails - #1944
Conversation
…erdict phase fails A failed noema-review run left artifacts=0, so a 3122 s walk across six ready routes ending in HTTP 502 (run 33981136873) was diagnosable only from the caller's one-line summary. Ship the sanitized sidecar stderr and the preflight report on failure, using the same pinned upload-artifact and the same file Strix already publishes in strix-reports. Refs #1935, #1939 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Warning Review limit reachedNext included review available in 6 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (3)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Companions: #1943 enables DEBUG logging in the sidecar process with an |
|
Third companion in this lane: #1945 — the sidecar sanitizer now admits the orchestrator's |
# Conflicts: # CHANGELOG.md
…rcuit events (#1945) * fix(sidecar): let the stream sanitizer pass orchestrator route and circuit events Every provider_*/circuit_* line from the orchestrator was folded into omitted_unstructured_lines, so even the provider_exhausted WARNING that fires today never reached an artifact. Admit those templates field by field against bounded charsets, cut provider_attempt_failed before its free-text error_message, and accept both the default and the sidecar formatter log prefixes (keeping the timestamp for durations). Companion to #1943 and #1944. Refs #1935, #1939 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(sidecar): accept float circuit counters and pin the real formatter output The orchestrator's circuit counters are floats (failures 0.0 += 1.0, circuit_reset_seconds 30.0), so the lines that reach stderr say failures=2.0 / reset_seconds=30.0; the integer-only pattern rejected both circuit_failure and circuit_opened. Found by rendering the templates through the sidecar's logging.Formatter, which the new test now does for all ten. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
# Conflicts: # CHANGELOG.md
|
Merged as Verified by the merging session's own run, not relayed. Because Authorization, cited at the act from the standing directive: "60-job ceiling에 막혀 있을 거라 일을 하기 어렵다면 60-job ceiling을 만드는 workflow issues를 추적해서 해소하세요. 이 상황은 Chicken-and-eggs 상황이므로 Bypass merge가 허용됩니다." This PR is the tracing half of that grant — it makes the ≈548 s-per-candidate slot burn behind today's noema/strix failures readable as a per-route timeline in the run artifact — and it structurally cannot validate itself (its own required run executes |
…integration Conflict: tests/test_noema_orchestrator_workflow_contract.py -- both sides appended a test at end of file (this branch: the cancel-superseded-noema-runs job rationale pin; main: #1944's sidecar-evidence upload step contract). Kept both. noema-review.yml auto-merged. Gate after merge: 2941 passed, coverage 100%, interrogate 100%. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
|
Verified in production: the first three post- |
… size contract) Signature 3: the first post-#1939 noema-review runs split 1/1; the failing run's policy report shows the diversified pool #1939 promised and still ends in a 502 after a ~548 s-per-route walk (host 1's arithmetic from source), so a base-merge push recovers pre-#1939 heads but does not shorten the post-#1939 walk; #1943/#1944/#1945 make the per-route timeline readable from the noema-sidecar-evidence artifact; the remaining lever is inside contextual-orchestrator. Signature 12: required-workflow-bootstrap exit 2 in ~5 s on "exceeds the size contract" -- the Contents API's 1 MiB inline ceiling on a patchless text file, fixed by #1946's Git Blobs API route. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BV96rXhqoR3tYZ9AeAVur4
Binds the current review workflows (#1943/#1944/#1945: sidecar trace and noema-sidecar-evidence artifact on failure) to this head's required runs. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BV96rXhqoR3tYZ9AeAVur4
Binds the sidecar pin bump to contextual-orchestrator@414f2297 (contextual-orchestrator#1081's retry-stacking fix, .github efb8926) and the #1943/#1944/#1945 workflows to this head's required runs; the previous head's Noema/Strix runs failed on the stalled-route loop that fix removes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BV96rXhqoR3tYZ9AeAVur4
Binds the sidecar pin bump to contextual-orchestrator@414f2297 (contextual-orchestrator#1081's retry-stacking fix, .github efb8926) and the #1943/#1944/#1945 workflows to this head's required runs; the previous head's Noema/Strix runs failed on the stalled-route loop that fix removes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BV96rXhqoR3tYZ9AeAVur4
…letion Binds the sidecar pin bump to contextual-orchestrator@414f2297 (contextual-orchestrator#1081's retry-stacking fix, .github efb8926) and the #1943/#1944/#1945 workflows to this head's required runs; the previous head's Noema/Strix runs failed on the stalled-route loop that fix removes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BV96rXhqoR3tYZ9AeAVur4
…ence CHANGELOG.md: both new top entries kept, main's pin-bump entry first. Binds the sidecar pin bump to contextual-orchestrator@414f2297 (contextual-orchestrator#1081's retry-stacking fix, .github efb8926) and the #1943/#1944/#1945 workflows to this head's required runs; the previous head's Noema/Strix runs failed on the stalled-route loop that fix removes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BV96rXhqoR3tYZ9AeAVur4
Observability follow-up to #1935 / #1939, lane (b) of the split agreed with the orchestrator lane: ship the sidecar's diagnostics when a Noema verdict fails.
What changes
.github/workflows/noema-review.yml: one step, right afterPrepare Noema model verdict,if: failure() && env.PR_NUMBER != '', uploadingstrix_runs/contextual-orchestrator-sidecar.stderr.logandstrix_runs/contextual-orchestrator-preflight.jsonasnoema-sidecar-evidence(same pinnedactions/upload-artifact@043fb46d…v7.0.1 thatstrix.ymluses,if-no-files-found: ignore,retention-days: 5). No permission change: the job already has what the action needs, and the job has no harden-runner egress allowlist to extend.tests/test_noema_orchestrator_workflow_contract.py:test_noema_review_uploads_sidecar_evidence_on_failure— step exists, condition, pin equal to Strix's, both paths,if-no-files-found: ignore, orderingPrepare < Upload < Refresh, and exactly oneupload-artifactin the workflow. Negative control: with the step removed the test fails.CHANGELOG.mdentry.Why
A failed Noema run currently leaves
artifacts=0. Run33981136873(#1940, post-#1939 sidecar) spent 3122 s walking the sixreadyroutes twice each (≈ 548 s per candidate: orchestrator retry × client retry × 90 s per-recv timeout) and ended inHTTP Error 502, and the only diagnosis in the job log is the caller's one-line summary — the exact gap behind the "why 900 s / why failed" complaint (item 4). The sidecar's stderr and the preflight report were written tostrix_runs/and discarded with the runner.Strix already publishes the same two files in
strix-reports(verified on #1812's failed run:contextual-orchestrator-sidecar.stderr.log2,279 B,contextual-orchestrator-preflight.json3,607 B), so this adds no new exposure. The stderr file is the output ofscripts/ci/sanitize_contextual_orchestrator_sidecar_stream.py, an allowlist sanitizer: onlyrequest_failed …,provider_discovery_failed …,preflight_route_rejected …lines with constrained field charsets and a few fixed diagnostic prefixes pass; everything else is counted asomitted_unstructured_lines.Not claimed
Verification
Full gate on
a300d82fwithGITHUB_ACTIONS=true: 2897 passed / 1 skipped,coverage report --fail-under=100→ 100%,interrogate→ 100%; the noema and queue contract suites (69 tests) pass; negative control: withmain'snoema-review.ymlswapped in the new test fails (1 failed), restored it passes. YAML parsed with an independent parser (step sits betweenPrepare Noema model verdictandRefresh repository-scoped Noema GitHub App token for publication);actionlintreports nothing new.Chicken-and-egg note:
noema-review.ymlis a requiredpull_request_targetworkflow, so this PR's ownnoema-reviewcontext runs the base branch's file and cannot exercise the change; same category as #1937.🤖 Generated with Claude Code