Skip to content

fix(strix): keep model preflight timeout positive - #1601

Merged
seonghobae merged 1 commit into
mainfrom
fix/strix-positive-model-timeout-current-main
Sep 1, 2026
Merged

fix(strix): keep model preflight timeout positive#1601
seonghobae merged 1 commit into
mainfrom
fix/strix-positive-model-timeout-current-main

Conversation

@seonghobae

@seonghobae seonghobae commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Successor scope

Supersedes closed Draft #1597 without reusing or force-updating its branch. Current protected base is main@547fcc875d70a9489b30a6863692c977f1444fe2; exact head is c6aa8761bb2b1007e9c05ac51748fd7734735ff3. Effective diff is exactly .github/workflows/strix.yml plus tests/test_strix_llm_timeout_contract.py.

Root cause

Strix 1.5.3 passes LLM_TIMEOUT to asyncio.wait_for. The central workflow exported LLM_TIMEOUT=0, which immediately cancels preflight instead of disabling the timeout. This explained the empty LLM CONNECTION FAILED seen after contextual-orchestrator health/route/probe had already succeeded.

TDD / execution evidence

The predecessor #1597 recorded a RED contract requiring the documented 300-second timeout. Its one-shot repair runner 33506853161, job 99852828311, then changed only LLM_TIMEOUT=0 to LLM_TIMEOUT=300; PYTHONPATH=. python3 -m pytest -q tests/test_strix_llm_timeout_contract.py completed 1 passed. The subsequent push failed solely because the workflow's GitHub App token lacked permission to update .github/workflows/strix.yml; source/test execution was already GREEN.

Before constructing this successor, the current protected-main Strix workflow blob (672c9b796e707d2b8ec345c95e16f17e66461ddb) was compared with the predecessor pre-fix writer blob and is byte-identical. The successor tree is therefore current protected main plus only the already-verified one-line timeout repair and regression contract. No stale main bytes, temporary source-fix workflow, force push, provider bypass, fallback, severity, retry, or fail-closed policy weakening are included.

Fresh exact-head checks/reviews remain authoritative for landing. Queue/review waits are non-blocking; do not weaken gates to make them pass.


Devin Review

Supersede closed draft #1597 from current protected main. The Strix workflow blob on main is byte-identical to the pre-fix blob verified in #1597; the one-line LLM_TIMEOUT=300 repair and regression contract already passed the focused runner test before the workflow-permission-only push rejection. No provider bypass, fallback, severity, retry, or fail-closed policy change.
@coderabbitai

coderabbitai Bot commented Sep 1, 2026

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 40 minutes.

Check out review usage here.

View limit details

Limit 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.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Team

Run ID: 18f5e6bb-b97e-4a10-870e-a7ab75a2cf11

📥 Commits

Reviewing files that changed from the base of the PR and between 547fcc8 and c6aa876.

📒 Files selected for processing (2)
  • .github/workflows/strix.yml
  • tests/test_strix_llm_timeout_contract.py

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.

❤️ Share

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

@seonghobae
seonghobae merged commit 5f81d8e into main Sep 1, 2026
16 of 34 checks passed
@seonghobae
seonghobae deleted the fix/strix-positive-model-timeout-current-main branch September 1, 2026 12:26

@devin-ai-integration devin-ai-integration 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.

Devin Review found 2 potential issues.

Devin Review

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.

🔍 Contract edits can skip Strix quality

The changed-path workflow omits this test from its paths filter. A later contract-only edit can bypass the dedicated Strix quality job.

Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

IS_PR_EVIDENCE_RUN: ${{ (github.event_name == 'pull_request_target' || github.event.client_payload.pr_number != '') && 'true' || 'false' }}
run: |
export LLM_TIMEOUT=0
export LLM_TIMEOUT=300

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.

🟡 Required Strix quality check always fails

When LLM_TIMEOUT is 300, the required shell contract still demands 0 and records a failure. Every workflow change therefore fails quality CI.

Prompt for agents
Update scripts/ci/test_strix_quick_gate.sh in assert_strix_workflow_pr_trigger_hardened so its LLM_TIMEOUT contract requires the new positive 300-second value instead of 0. Keep the other unlimited timeout assertions unchanged, and ensure the existing Strix changed-path quality workflow executes both the Python regression test and the shell contract consistently.
Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

seonghobae added a commit that referenced this pull request Sep 1, 2026
Supersede the temporary 300-second model deadline from #1601 with a version-gated Strix 1.5.3 compatibility launcher. Keep LLM_TIMEOUT=0 for actual inference, normalize only the two inconsistent warm-up wait_for calls, and retain pinned-executable SHA-256 validation and fail-closed module/version checks.

Recorded RED: 05d4521.
seonghobae pushed a commit that referenced this pull request Sep 1, 2026


#1601 (already on main) fixed a real bug: Strix 1.5.3 passes LLM_TIMEOUT to
asyncio.wait_for, so LLM_TIMEOUT=0 immediately cancels contextual-orchestrator
model preflight rather than meaning "unbounded" as intended. It changed the
workflow's own export to LLM_TIMEOUT=300 (a positive value the compat launcher
then neutralizes into an unbounded deadline), and added a dedicated regression
for that contract, but left this test's assertion checking for the literal old
string. Updated it to assert the new value.
seonghobae pushed a commit that referenced this pull request Sep 2, 2026
… main

exact-head-path-policy failed on this branch's own copy of
scripts/ci/test_strix_quick_gate.sh for two unrelated stale assertions,
neither touching this PR's actual Strix evidence-hardening diff:

1. The LLM_TIMEOUT assertion (line 302) still expected the round-6
   'export LLM_TIMEOUT=300' value this PR itself introduced on
   2026-09-01 to match #1601's contemporary state. Main later reverted
   strix.yml back to 'export LLM_TIMEOUT=0' via #1658 ("remove the 300s
   LLM_TIMEOUT cap") without ever having carried the 300 assertion on
   main's own copy of this file, so a same-line 3-way merge always kept
   this branch's now-stale text with no conflict to surface it. Restored
   the assertion to match main's (and strix.yml's) current, unchanged
   content.

2. The scheduler-heartbeat cron assertion (line 1562) still expected the
   pre-#1704 'cron: "*/30 * * * *"' quarter-hourly schedule. #1704
   ("lengthen scan-pr-queue's own heartbeat, don't drop it") lengthened
   pr-review-merge-scheduler.yml's repository-local scan to hourly
   ('cron: "30 * * * *"') for the same Actions-capacity reason as #1630,
   and added/updated the matching pytest contract
   (tests/test_actions_queue_saturation_scheduler_cadence.py,
   tests/test_required_workflow_queue_contract.py) but missed this
   repo's separate, duplicate shell-harness assertion of the same
   contract. Confirmed this exact failure reproduces identically on
   fresh main (same stale assertion, same actual hourly cron) -- it
   predates and is unrelated to this PR's diff. Updated the assertion to
   match #1704's now-current cron and added the mirroring
   assert_file_not_contains for the retired quarter-hourly string, same
   pattern #1704 already established in its own pytest contract.

Verified on the merged head (origin/main merged in via the preceding
merge commit, mergeable_state was "behind" only, no conflicts):
- bash scripts/ci/test_strix_quick_gate.sh (full harness): PASS, 0
  failures (previously 2: the LLM_TIMEOUT and cron assertions above).
- PYTHONPATH=. python3.12 -m coverage run -m pytest tests -q: 2644
  passed, 1 skipped, 21 subtests.
- coverage report --show-missing: 100% on scripts/ci.
- interrogate: 100% (RESULT: PASSED, minimum: 100.0%, actual: 100.0%).
- python -m compileall on the five exact-head-path-policy test files,
  bash -n scripts/ci/strix_quick_gate.sh, git diff --exit-code: all
  clean after this commit.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BV96rXhqoR3tYZ9AeAVur4
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