Skip to content

Fix nightly CI: workflow bugs, test hangs, diagnosability, milestone automation (Fixes #3149) - #3154

Merged
acoliver merged 4 commits into
mainfrom
issue3149
Aug 8, 2026
Merged

Fix nightly CI: workflow bugs, test hangs, diagnosability, milestone automation (Fixes #3149)#3154
acoliver merged 4 commits into
mainfrom
issue3149

Conversation

@acoliver

@acoliver acoliver commented Aug 8, 2026

Copy link
Copy Markdown
Collaborator

TLDR

Fixes the nightly CI workflow across Windows and macOS — corrects workflow bugs (dead step, skipped harness steps, missing timeouts, cancel-in-progress), adds milestone auto-assignment to failure issues, improves failing-test log diagnosability, and addresses three test-failure clusters: LB registration network hangs, React/Ink act() warning floods, and Windows process-spawn test hangs.

Dive Deeper

nightly.yml workflow corrections

  • cancel-in-progress: true — back-to-back manual dispatches now cancel the superseded run instead of serializing in the concurrency group, which caused multi-hour runner-pool queue-waits.
  • timeout-minutes: 30 on windows_ci and e2e_full — prevents runaway jobs from blocking the runner pool indefinitely.
  • Removed dead macOS-gated step in windows_ci (the macOS matrix entries never run inside the Windows job).
  • Added if: always() to test:scripts and test:shell in macos_ci — these platform-coverage steps now run even when the main test step fails, instead of being silently aborted.

Milestone auto-assignment

  • resolve_milestone() bash function reads package.json from main via gh api, parses the version with jq, and resolves an exact-title open milestone.
  • Milestone is set on both newly-created issues and existing-commented issues (long-lived failure issues stay on the current release milestone).
  • Fail-soft: if milestone resolution fails (API error, no matching milestone), the notification still goes out with a warning.
  • Added contents: read permission for the Contents API call.
  • Fixed jq shell-quoting bug: inner double-quotes around version string must be backslash-escaped inside the outer double-quoted --jq argument.

Failing-test log diagnosability

  • failureExcerpt() in run-bun-tests.ts collapses repetitive React "not wrapped in act(...)" warning blocks (~10 lines each, can repeat dozens of times) to a one-line count, then uses head+tail truncation to keep assertion failures visible within the budget.
  • Both JUnit XML (4000 chars) and console output (6000 chars) now use the new function instead of a naive slice(-N) tail.
  • Guarded against slice(-0) returning the whole string when budget splits to tail = 0.

Load-balancer context-window timeout (Cluster C)

  • Root cause: resolveSubProfileContextWindow called provider.getModels() (real network) per LB member during registration. On CI with fake keys, each call hung ~20s (SDK connect-timeout). With 3 members, that is 60s — enough to exceed the per-file timeout.
  • Fix: raceWithTimeout() helper bounds each getModels() to 3s. On timeout, the member degrades gracefully to an undefined context window (advisory — the LB falls back to its configured limit).
  • Concurrent resolution: resolveLoadBalancerSubProfiles changed from sequential for...of to Promise.all, keeping input order preserved.
  • New test: profileApplication.lb.contextWindowTimeout.test.ts — 3 tests covering single hang, concurrent resolution (3 members complete in ~one timeout, not three), and rejection degradation (asserts contextWindow is undefined).

React/Ink act() leak reduction (Cluster B)

  • Root cause: ink-testing-library uses a custom React reconciler that React act() from react does NOT fully track. stdin.write triggers keypress handlers that call setState synchronously (sync leaks) and commit-queue promise chains that call setState asynchronously (async leaks).
  • Fix: Proxy wrapper in render.tsx wraps stdin.write in sync act(), eliminating all synchronous state-update leaks (76 to 40 warnings in the worst-affected test).
  • Limitation: The remaining 40 async leaks are an ink-testing-library limitation — wrapping waitFor in async act() breaks AuthDialog (deep async chain stalls inside async act). The Proxy is safe and reduces warnings without breaking any tests.

Windows spawn-test bounded exit (Cluster A)

  • Root cause: runAndWait in shellJobWindowsSpawn.test.ts awaited spawned.exited with no timeout. On Windows, a genuinely hung process (ConPTY stall, interactive prompt) could hang indefinitely, consuming the entire per-file budget.
  • Fix: awaitBoundedExit() helper bounds the wait to 15s. On timeout, it uses taskkillTree(pid) (which runs taskkill /T /F) to reap the entire process tree — not just the outer PowerShell wrapper (child.kill() on Windows only kills the outer process and orphans the inner Start-Process child).

Reviewer Test Plan

  1. nightly.yml changes: Review the workflow diff against the issue acceptance criteria. The cancel-in-progress, timeout-minutes, dead-step removal, and if: always() additions are self-contained YAML edits.
  2. Milestone resolution: The bash function is fail-soft by design. To verify manually: dispatch the nightly workflow on a branch, force a test failure, and confirm the created issue has the correct milestone.
  3. failureExcerpt: Run bun test packages/cli/test/run-bun-tests.test.ts — 34 tests including 7 new failureExcerpt tests (edge cases, combined collapse+headTail, truncated warnings, empty string, tiny budget).
  4. LB context-window timeout: Run bun test packages/providers/src/runtime/__tests__/profileApplication.lb.contextWindowTimeout.test.ts — 3 tests (completes in ~6s on macOS).
  5. render Proxy: Run the InputPrompt, AuthDialog, and PermissionsModifyTrustDialog test suites — all pass with the Proxy in place.
  6. Windows bounded exit: Cannot verify on macOS (Windows-only tests are skipped). The awaitBoundedExit helper is structurally sound — review the taskkillTree import and the race-against-timeout pattern.

Testing Matrix

🍏 🪟 🐧
npm run
npx
Docker
Podman - -
Seatbelt - -

Linked issues / bugs

Fixes #3149

Summary by CodeRabbit

  • Reliability

    • Load-balancer profile setup now continues when provider model lookups are slow or unavailable, with bounded waits and graceful fallback behavior.
    • Windows process cleanup and test timeouts reduce hangs during automated validation.
  • Developer Experience

    • Test failure reports now retain key assertions and summaries while reducing repetitive warning output.
    • Rendered test input interactions provide more consistent behavior with React state updates.
  • CI Improvements

    • Superseded nightly runs are canceled, long-running jobs time out, and failure notifications receive improved release tracking.

…automation (Fixes #3149)

Cluster C (cross-platform): resolveSubProfileContextWindow in
loadBalancerProfile.ts called provider.getModels() per LB member during
registration. On CI with fake API keys each call hangs ~20s (SDK
connect-timeout), making the two subagentOrchestrator-loadBalancer tests
exceed their per-test timeout on both Windows and macOS. Add
raceWithTimeout (5s bound) and switch the per-member resolution from a
sequential for-loop to concurrent Promise.all so N members resolve in
the time of one, not N.

Cluster A (Windows): shellJobWindowsSpawn.test.ts runAndWait() awaited
spawned.exited with no timeout. If a spawned PowerShell process hangs
(ConPTY stall, slow cold-start, interactive prompt), this await blocks
forever, consuming the entire per-file timeout budget. Add
awaitBoundedExit() that races spawned.exited against a 15s timeout and
kills the child on expiry — a genuine source fix, not a timeout widening.

Cluster B (React/Ink): ink-testing-library's custom React reconciler is
not fully tracked by React's act(). Sync state updates from keypress
handlers leak as act() warnings. Add a stdin Proxy in render() that
wraps stdin.write in sync act(), eliminating sync leaks (76->40 warnings
in PermissionsModifyTrustDialog). The remaining 40 warnings are async
state updates from promise chains — an ink-testing-library limitation
that async act() cannot capture without breaking AuthDialog's deep async
chain.

Diagnosability: run-bun-tests.ts retained only the last 6K chars of a
failing file's output. For dialog tests that tail was entirely React
act() warnings, making assertion failures unrecoverable. Add
failureExcerpt() that collapses multi-line act() warning blocks to a
one-line count and uses head+tail truncation, keeping assertion failures
visible within the budget. Apply to both console and JUnit output.

Workflow (Part 2): remove dead macOS-gated step in windows_ci; add
if: always() to macos_ci test:scripts and test:shell; add
timeout-minutes: 30 to windows_ci and e2e_full; set
cancel-in-progress: true.

Workflow (Part 3): notify_failure now resolves the milestone from
package.json version (read from main via gh api, jq-parsed, exact-title
match against open milestones) and applies it to both the create and
existing-issue paths. Fails soft: logs a warning and continues if the
milestone cannot be resolved.
@github-actions github-actions Bot added the maintainer:e2e:ok Trusted contributor; maintainer-approved E2E run label Aug 8, 2026
@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 33 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 9d6b1129-a17b-4cfd-a74a-b2d3b943889e

📥 Commits

Reviewing files that changed from the base of the PR and between c3b112f and 24b169e.

📒 Files selected for processing (6)
  • .github/workflows/nightly.yml
  • packages/cli/run-bun-tests.ts
  • packages/core/src/services/shellJobWindowsSpawn.test.ts
  • packages/providers/src/runtime/__tests__/profileApplication.lb.contextWindowTimeout.test.ts
  • scripts/tests/nightly-bun-native-smoke.test.ts
  • scripts/tests/release-process-b.test.ts
📝 Walkthrough

Walkthrough

The PR improves nightly reliability with bounded process and provider waits, clearer failure excerpts, React act() handling for stdin writes, and workflow updates for cancellation, timeouts, test continuation, permissions, and release milestones.

Changes

Nightly reliability and diagnostics

Layer / File(s) Summary
Bounded concurrent provider resolution
packages/providers/src/runtime/profile-application/loadBalancerProfile.ts, packages/providers/src/runtime/__tests__/*
Provider model lookups use a 3-second timeout and concurrent sub-profile processing. Tests cover hanging and rejected providers.
Bounded Windows process cleanup
packages/core/src/services/shellJobWindowsSpawn.test.ts
Windows behavioral tests terminate timed-out process trees instead of waiting indefinitely.
Bounded failure-output reporting
packages/cli/run-bun-tests.ts, packages/cli/test/run-bun-tests.test.ts
Failure excerpts collapse repeated React warnings and preserve relevant head and tail output within a character limit.
Act-wrapped render input
packages/cli/src/test-utils/render.tsx
The render helper executes stdin.write inside React act() and forwards other stdin members.
Nightly workflow and issue notification
.github/workflows/nightly.yml, scripts/tests/nightly-notifier-repository.test.ts
The workflow cancels superseded runs, adds job timeouts, continues selected macOS tests after failures, and applies the current release milestone to failure issues when available.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related issues

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 20.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the workflow fixes, test-hang fixes, diagnosability improvements, and milestone automation.
Description check ✅ Passed The description includes all required sections, detailed change context, a reviewer test plan, a testing matrix, and the linked issue.
Linked Issues check ✅ Passed The changes address the linked issue's workflow, milestone, failure-log, load-balancer, React/Ink, and Windows process-management requirements.
Out of Scope Changes check ✅ Passed The workflow, implementation, and test changes are directly related to the linked issue's nightly CI reliability and correctness objectives.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch issue3149

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Walkthrough

Before this PR, the nightly CI workflow suffered from multiple reliability issues: cancel-in-progress was disabled, causing queued runs to pile up; jobs lacked timeouts and contained dead or conditionally skipped steps; and failure notifications did not track milestones. Test runs were also fragile — Windows spawn tests could hang indefinitely, load-balancer profile registration could stall on provider model lookups, and CLI test logs were flooded with repetitive React act() warnings that buried actual assertion failures. After this PR, the nightly workflow enables cancel-in-progress, adds explicit timeouts, removes dead steps, and guards critical paths with always() conditions. Failure notifications now auto-resolve and attach the current milestone. On the test side, Windows spawn waits are bounded with full process-tree reaping, load-balancer context-window resolution is capped at 3 seconds and runs concurrently, and failing test output is collapsed and truncated so the real failure remains visible.

Release Notes

Bug Fixes

  • Enabled cancel-in-progress in nightly CI to prevent superseded runs from serializing in the concurrency group.
  • Added timeout-minutes to nightly jobs and removed dead/misleading steps that could waste runner minutes.
  • Guarded macOS coverage steps with if: always() so they still run when the main test step fails.
  • Bounded Windows spawn-test waits and added full process-tree reaping on timeout to prevent hung test files from exhausting the per-file budget.
  • Added a 3-second timeout around load-balancer sub-profile context-window resolution to stop provider getModels() network hangs from stalling registration.
  • Reduced React/Ink act() warning floods in dialog tests by wrapping stdin.write in a Proxy that executes inside act().

Tests

  • Added Windows spawn bounded-exit coverage verifying the spawner exits before the backstop and that the background tree stays alive for cleanup.
  • Added load-balancer context-window timeout tests covering single-member hangs, concurrent resolution timing, and graceful degradation when the provider lookup rejects.
  • Added/updated nightly workflow structural tests for cancel-in-progress, permissions, and milestone automation expectations.
  • Added CLI log-truncation tests for failureExcerpt() covering warning collapse, head/tail truncation, empty output, and tiny budgets.

Refactor

  • Switched load-balancer sub-profile resolution from sequential for...of to concurrent Promise.all while preserving input order.
  • Replaced naive tail-slice truncation in run-bun-tests.ts with failureExcerpt() that collapses repetitive warning blocks and keeps assertion failures visible in both console and JUnit output.

Chore

  • Implemented milestone auto-resolution in nightly failure notifications by reading package.json from main via gh api, parsing the version with jq, and applying the matching open milestone to created or updated issues.

Changes

Layer File(s) Summary
ci .github/workflows/nightly.yml Fixes nightly CI workflow bugs: enables cancel-in-progress, adds timeouts, removes dead steps, adds always() conditions, and implements milestone auto-resolution on failure notifications.
tests packages/core/src/services/shellJobWindowsSpawn.test.ts, packages/providers/src/runtime/tests/profileApplication.lb.contextWindowTimeout.test.ts, scripts/tests/nightly-bun-native-smoke.test.ts, packages/cli/test/run-bun-tests.test.ts, scripts/tests/nightly-notifier-repository.test.ts, scripts/tests/release-process-b.test.ts Adds and updates tests to verify CI fixes: Windows spawn bounded exit, load-balancer context window timeouts, CLI log truncation, and workflow permission/milestone expectations.
cli packages/cli/run-bun-tests.ts, packages/cli/src/test-utils/render.tsx Improves test diagnosability with output-collapsing helpers for failing test logs and suppresses React act() warnings in dialog tests via Proxy-wrapped stdin.
providers packages/providers/src/runtime/profile-application/loadBalancerProfile.ts Prevents load-balancer registration hangs by adding a 3-second timeout to sub-profile context window resolution and switching member resolution from sequential to concurrent.

Sequence Diagram

sequenceDiagram
  participant PM as ProfileManager
  participant LB as LoadBalancerProfile
  participant RP as resolveLoadBalancerSubProfiles
  participant RSP as resolveLoadBalancerSubProfile
  participant Prov as ProviderManager
  LB->>RP: resolve sub-profiles concurrently with 3s context-window timeout
  RP->>RSP: resolve each referenced sub-profile
  RSP->>PM: load referenced profile
  RSP-->>RP: return resolved sub-profile
  RP-->>LB: return resolved sub-profile list
  LB->>Prov: register LoadBalancingProvider
Loading

Magnitude

🎯 3 (L)
567 additions, 26 deletions, 10 changed files across 3 packages, 11 acceptance criteria

Related

No related items found.

Pre-merge Checks

Check Status Note
Title Clear and descriptive title that summarizes the fix scope and references the linked issue.
Description All required template sections present: TLDR, Dive Deeper, Reviewer Test Plan, Testing Matrix, and Linked issues / bugs.
Linked Issues Most acceptance criteria are addressed, but two key items are missing or incomplete: (1) #3084 Windows serialization in packages/core/run-bun-tests.ts is discussed but not actually modified in the code changes; (2) Ink dialog tests still emit ~40 act() warnings (reduced from 76) due to ink-testing-library limitations, falling short of the 'pass without act() warnings' criterion. The 3-consecutive-green-nights criterion cannot be verified from code alone.
Out of Scope No clearly out-of-scope items identified; all changes align with nightly CI reliability, test stability, and failure-notification improvements. The only gaps are unfulfilled acceptance criteria within scope (see linked_issues note).

Walkthrough generated by LLxprt PR Review. Planner issue: #2256

Comment thread .github/workflows/nightly.yml Outdated
@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

OpenCodeReview — automatic reviews suspended

Automatic OCR reviews are suspended for this PR after 2 of 2 automatic reviews.

To get more reviews you can:

  • Check the box below to re-enable automatic reviews (resets the counter), or

  • Comment /review, /ocr, or /open-code-review to request a single review on demand.

  • Re-enable automatic reviews

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/nightly.yml:
- Around line 233-242: Update the macOS test steps following “Run tests and
generate reports” by assigning that step an id and gating each dependent step on
its result being success or failure while also requiring the workflow not to be
cancelled. Replace the unconditional always() conditions for “Run shell-script
behavioral tests (`#2606`)” and the adjacent test step, preserving execution after
test failure but preventing execution after cancellation.
- Around line 648-690: Update the milestone lookup in resolve_milestone to use
gh api --paginate when fetching open milestones, so exact title matching
searches every page rather than only the first 100 results. Preserve the
existing filtering, warning, and empty-result behavior.

In `@packages/cli/run-bun-tests.ts`:
- Around line 362-391: Refactor the loop in the output-processing flow to
eliminate the multiple continue statements that violate
sonarjs/too-many-break-or-continue-in-loop. Preserve the existing warning
start/end handling, truncation recovery, skip-count behavior, and kept-line
output by restructuring the branches with if/else-if logic; do not add an inline
lint suppression.

In `@packages/core/src/services/shellJobWindowsSpawn.test.ts`:
- Around line 261-272: Update the timeout cleanup around taskkillTree to await
its taskkill process completion, using its close or error result, before
rejecting the timeout promise. Remove the independent spawned.child.kill call so
recursive tree termination finishes before the timeout rejection; preserve the
existing handling for already-terminated processes.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 23794745-cb58-4220-82ca-bb4b47da073b

📥 Commits

Reviewing files that changed from the base of the PR and between 658ee04 and c3b112f.

📒 Files selected for processing (8)
  • .github/workflows/nightly.yml
  • packages/cli/run-bun-tests.ts
  • packages/cli/src/test-utils/render.tsx
  • packages/cli/test/run-bun-tests.test.ts
  • packages/core/src/services/shellJobWindowsSpawn.test.ts
  • packages/providers/src/runtime/__tests__/profileApplication.lb.contextWindowTimeout.test.ts
  • packages/providers/src/runtime/profile-application/loadBalancerProfile.ts
  • scripts/tests/nightly-notifier-repository.test.ts

Comment thread .github/workflows/nightly.yml Outdated
Comment thread .github/workflows/nightly.yml
Comment thread packages/cli/run-bun-tests.ts Outdated
Comment thread packages/core/src/services/shellJobWindowsSpawn.test.ts Outdated
…ontents:read permission

The nightly.yml changes (cancel-in-progress: true, contents: read for
milestone resolution) require the structural validation tests to match.
Both release-process-b.test.ts and nightly-bun-native-smoke.test.ts
were asserting the old values.
- nightly.yml: guard macOS test steps with !cancelled() instead of
  always() so they don't burn runner minutes after workflow cancellation
- nightly.yml: paginate milestone resolution (--paginate --slurp) so
  milestone title search covers all open milestones, not just page 1
- run-bun-tests.ts: refactor collapseActWarnings loop to use if/else-if
  branches instead of multiple continue statements (sonarjs lint rule)
- shellJobWindowsSpawn.test.ts: use boundedTaskkill (awaited) instead of
  fire-and-forget taskkillTree so the process tree is fully reaped
  before rejecting the timeout promise
…ut bound

- nightly.yml: replace misleading comment about cancel-in-progress
  that claimed only manual dispatches are cancelled (OCR finding)
- contextWindowTimeout.test.ts: widen concurrent bound from 7s to 8s
  to reduce flaking on slow Windows CI runners while still detecting
  sequential execution (9s)
@github-actions

github-actions Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI N/A% N/A% N/A% N/A%
Core N/A% N/A% N/A% N/A%
CLI Package - Full Text Report
CLI full-text-summary.txt not found at: coverage_cli/packages/cli/coverage/full-text-summary.txt
Core Package - Full Text Report
Core full-text-summary.txt not found at: coverage_core/packages/core/coverage/full-text-summary.txt

For detailed HTML reports, please see the 'coverage-reports-24.x-ubuntu-latest' artifact from the main CI run.

@acoliver
acoliver merged commit ed1257c into main Aug 8, 2026
42 checks passed
acoliver added a commit that referenced this pull request Aug 14, 2026
…d evals-nightly issue creation (Fixes #3226, #3227, #3228) (#3229)

* Clear responseText on tool-call in JSON mode (Fixes #3226) (#3227) (#3228)

In JSON (non-quiet) output mode, handleText accumulates ALL text across
model iterations into responseText. When the model states the answer
before calling tools (common with step-3.7-flash) and repeats it in the
final iteration, the accumulated response becomes duplicated (e.g.
$blue$$blue$). Quiet mode already discarded intermediate text on
tool-call (#728); JSON mode had no equivalent.

Fix: clear responseText when a tool-call event is dispatched, mirroring
the quiet-mode quietTextBuffer discard. This is safe for stream-json
and plain-text modes where handleText returns responseText unchanged
(the clear is a no-op). Fixes the save_memory eval failure that broke
evals-nightly since 8/07.

Also:
- Bump Windows CI (Nightly) timeout 30->60 min (#3227). PR #3154
  reduced it from 60 to 30, but the suite takes ~47-50 min so the job
  was always cancelled.
- Add notify_failure job to evals-nightly.yml (#3228) so eval failures
  auto-create tracked issues with milestone/label, matching nightly.yml.

* Address CodeRabbit + OCR review: guard JSON.parse in test, prevent duplicate issue creation on retry

* Fix actionlint SC2215: single-line gh issue list in create_issue_once
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

maintainer:e2e:ok Trusted contributor; maintainer-approved E2E run

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Nightly: make it green and correct (test failures, dead/skipped steps, timeouts, milestone on failure issue)

1 participant