Skip to content

fix(e2e): restrict readiness polling to loopback destinations - #1244

Open
seonghobae wants to merge 8 commits into
mainfrom
sentinel-fix-ssrf-sandboxed-e2e-12469227675614479983
Open

fix(e2e): restrict readiness polling to loopback destinations#1244
seonghobae wants to merge 8 commits into
mainfrom
sentinel-fix-ssrf-sandboxed-e2e-12469227675614479983

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Problem

sandboxed_web_e2e.py accepted any HTTP(S) hostname supplied through a readiness URL. A review run could therefore poll an external service or a link-local metadata endpoint instead of the sandboxed application.

Repair

  • parse the hostname before opening the URL
  • allow literal localhost or addresses that Python's ipaddress standard library classifies as loopback
  • support the complete IPv4 loopback block, including 127.0.0.2
  • reject unspecified 0.0.0.0, public hosts, link-local metadata addresses, and non-HTTP(S) schemes
  • keep redirects disabled so an allowed endpoint cannot redirect across the boundary
  • record the boundary and APA 7 references in docs/doctoring/sandboxed-web-readiness-loopback-boundary.md

Exact-head verification

  • head: cadd69536062f400e98405fbab6e3e558080741e
  • focused readiness and sandbox tests: 22 passed; touched module 164 statements / 46 branches at 100%
  • full suite: 1,393 passed, 1 skipped
  • repository statement and branch coverage: 100% (8,356 statements / 3,216 branches)
  • public docstring coverage: 100%
  • compile, CodeGraph, and diff hygiene: PASS

Reviewers should verify that future readiness destinations remain loopback-only; do not add individual non-loopback exceptions.

Added urllib.parse.urlparse to ensure URLs targeted by wait_for_url
only point to local loopback addresses (localhost, 127.0.0.1, ::1).
This prevents Server-Side Request Forgery vulnerabilities if the
readiness URL is attacker-controlled. Added test coverage.
@google-labs-jules

Copy link
Copy Markdown

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@coderabbitai

coderabbitai Bot commented Aug 22, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@seonghobae, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 23 minutes

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.

How can I continue?

Wait for the limit to reset, then comment @coderabbitai review or push new commits to the PR.

An organization admin can change what happens after included review limits in Billing.

How do review limits work?

CodeRabbit enforces per-developer PR review limits within each organization.

For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 201f5e5e-8655-48cb-83ee-3b7d4b394e8a

📥 Commits

Reviewing files that changed from the base of the PR and between 885f2cd and a0c82c8.

📒 Files selected for processing (4)
  • CHANGELOG.md
  • docs/doctoring/sandboxed-web-readiness-loopback-boundary.md
  • scripts/ci/sandboxed_web_e2e.py
  • tests/test_sandboxed_web_e2e.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.

devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae seonghobae changed the title 🛡️ Sentinel: [CRITICAL/HIGH] Fix SSRF in sandboxed_web_e2e wait_for_url fix(e2e): restrict readiness polling to loopback destinations Aug 23, 2026
devin-ai-integration[bot]

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review current-head review for cadd69536062f400e98405fbab6e3e558080741e.

Required mechanical Checks are green on this head; Strix was still in progress at request time. The remaining Devin thread was informational (loopback IPv6/127/8 classifier) and is resolved. Independent current-head approval is required before merge.

Added urllib.parse.urlparse to ensure URLs targeted by wait_for_url
only point to local loopback addresses (via ipaddress.is_loopback).
This prevents Server-Side Request Forgery vulnerabilities if the
readiness URL is attacker-controlled. Added test coverage.
devin-ai-integration[bot]

This comment was marked as resolved.

Added urllib.parse.urlparse to ensure URLs targeted by wait_for_url
only point to local loopback addresses (via ipaddress.is_loopback).
This prevents Server-Side Request Forgery vulnerabilities if the
readiness URL is attacker-controlled. Added test coverage.
devin-ai-integration[bot]

This comment was marked as resolved.

seonghobae and others added 2 commits August 24, 2026 00:26
Added urllib.parse.urlparse to ensure URLs targeted by wait_for_url
only point to local loopback addresses (via ipaddress.is_loopback).
This prevents Server-Side Request Forgery vulnerabilities if the
readiness URL is attacker-controlled. Added test coverage.

Also fixes a CI issue in .github/workflows/strix.yml where an
invalid fallback model configuration (openai-direct vs openai_direct)
caused "LLM Provider NOT provided" errors, failing the workflow.
devin-ai-integration[bot]

This comment was marked as resolved.

@seonghobae

Copy link
Copy Markdown
Contributor Author

@opencode-agent Please review exact head a0c82c87dfc01b49698fd84db378a71942714b57. This normal descendant revert removes only the unauthorized Sentinel mechanical rollback and restores the previously vetted tree, including strict loopback-only readiness polling and newest-attempt Strix report scoping. Exact local gates: full 1,393 passed, 1 skipped, 16 subtests; 8,356 statements/3,216 branches at 100%; Strix gate harness PASS; actionlint and Bash syntax pass.

@opencode-agent

opencode-agent Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

OpenCode Review Overview

  • Head SHA: a0c82c87dfc01b49698fd84db378a71942714b57
  • Workflow run: 32655494599
  • Workflow attempt: 1
  • Gate result: REQUEST_CHANGES (approval step)

Pull request overview

OpenCode reviewed the current-head bounded evidence and found source-backed failed-check findings that must be addressed before merge.

  • Result: REQUEST_CHANGES
  • Reason: failed current-head checks were mapped to line-specific findings below for a0c82c87dfc01b49698fd84db378a71942714b57.
  • Head SHA: a0c82c87dfc01b49698fd84db378a71942714b57
  • Workflow run: 32655494599
  • Workflow attempt: 1
Failed checks

Findings

1. HIGH .github/workflows/strix.yml:825 - Strix provider failure blocked current-head security evidence

  • Problem: Strix failed before producing vulnerability reports. The failed log reported LLM CONNECTION FAILED, RateLimitError or Too many requests for the primary model, provider/budget output for fallback models, and Configured model and fallback models were unavailable.
  • Root cause: The configured GitHub Models primary/fallback provider capacity or provider route failed for this run; no Strix Vulnerability Report window was produced, so there is no application source line to patch from this evidence.
  • Fix: Do not approve from this failed scan. Re-run Strix after GitHub Models capacity recovers or run an explicitly configured manual provider evidence scan with valid credentials; keep the configured fallback line at .github/workflows/strix.yml:825 aligned with the approved model list.
  • Suggested edit: keep .github/workflows/strix.yml:825 on the approved GitHub Models fallback list and rerun the current-head Strix check; there is no application source patch until Strix emits a vulnerability Code Location.
  • Regression test: Keep the failed-check evidence collector preserving RateLimitError, budget-limit, provider infrastructure, and unavailable-model lines so OpenCode reviews can distinguish external provider blockers from code vulnerabilities.
Failed check evidence for line-specific fixes

Failed GitHub Check Evidence

Line-specific repair contract

  • Treat the check logs and annotations below as diagnostic evidence, not as a complete review.

  • For each actionable failed check, inspect the local source or diff and identify the exact file line that must change.

  • OpenCode REQUEST_CHANGES findings must include path, line, root_cause, fix_direction, regression_test_direction, and suggested_diff.

  • Do not request changes with only a GitHub Actions URL or a generic check name.

  • When Strix logs contain multiple Vulnerability Report or Model ... Vulnerabilities ... sections, include every model-reported vulnerability in the review evidence and findings, including model name, title, severity, endpoint, and Code Locations/path:line evidence when present.

  • Create one OpenCode finding per Strix model vulnerability report; do not satisfy two model reports with one combined finding, even when titles or locations match.

Failed check: Strix Security Scan/strix

Failed job steps

  • step 26: Run Strix (quick) (failure)

Check annotations

  • .github:772-772 [failure] Process completed with exit code 1.
  • .github:771-771 [failure] Strix could not complete authoritative vulnerability analysis because its provider/backend was unavailable (rate limit, token cap, connection, warm-up, or model-behavior failure). See the strix-reports artifact and run log.

Failed log signal summary

strix	Run Strix (quick)	2026-08-23T16:38:22.6842014Z ^[[36;1m# LLM-backend-unavailable outcomes (GitHub Models "Too many requests"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6853454Z ^[[36;1mbackend_unavailable_signal='RateLimitError|Too many requests\. For more on scraping GitHub|exceeded your current quota|insufficient_quota|billing details|"status"[[:space:]]*:[[:space:]]*"RESOURCE_EXHAUSTED"|tokens_limit_reached|Request body too large|Max size:[[:space:]]*[0-9]+[[:space:]]+tokens|Error code:[[:space:]]*413|LLM CONNECTION FAILED|Could not establish connection to the language model|LLM warm-up failed|Configured model and fallback models were unavailable|Configured Vertex model and fallback models were unavailable|emitted provider infrastructure or failure-signal output|before provider infrastructure failure|litellm(\.exceptions)?\.NotFoundError[^[:cntrl:]]*Nvidia_nimException[^[:cntrl:]]*Error code:[[:space:]]*404|Error during penetration test: loginAsGuest failed after [0-9]+ attempts: curl exit 7: curl: \(7\) Failed to connect to 127\.0\.0\.1 port 48080'^[[0m
strix	Run Strix (quick)	2026-08-23T16:39:46.4527751Z │  LLM CONNECTION FAILED                                                       │
strix	Run Strix (quick)	2026-08-23T16:39:46.4532821Z │  Error: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error  │
strix	Run Strix (quick)	2026-08-23T17:12:59.8204729Z     raw_response = await [REDACTED].with_raw_response.create(**data, timeout=timeout)
strix	Run Strix (quick)	2026-08-23T17:12:59.8212981Z openai.RateLimitError: Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix	Run Strix (quick)	2026-08-23T17:12:59.8238365Z     async for event in _with_idle_timeout(stream, self._stream_idle_timeout):
strix	Run Strix (quick)	2026-08-23T17:12:59.8239520Z   File "/opt/hostedtoolcache/Python/3.13.15/x64/lib/python3.13/site-packages/strix/config/models.py", line 378, in _with_idle_timeout
strix	Run Strix (quick)	2026-08-23T17:12:59.8240183Z     event = await asyncio.wait_for(iterator.__anext__(), timeout)
strix	Run Strix (quick)	2026-08-23T17:12:59.8263695Z     raise RateLimitError(
strix	Run Strix (quick)	2026-08-23T17:12:59.8264975Z [REDACTED]: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix	Run Strix (quick)	2026-08-23T17:12:59.8277510Z     raw_response = await [REDACTED].with_raw_response.create(**data, timeout=timeout)
strix	Run Strix (quick)	2026-08-23T17:12:59.8285846Z openai.RateLimitError: Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix	Run Strix (quick)	2026-08-23T17:12:59.8313378Z     async for event in _with_idle_timeout(stream, self._stream_idle_timeout):
strix	Run Strix (quick)	2026-08-23T17:12:59.8314584Z   File "/opt/hostedtoolcache/Python/3.13.15/x64/lib/python3.13/site-packages/strix/config/models.py", line 378, in _with_idle_timeout
strix	Run Strix (quick)	2026-08-23T17:12:59.8315427Z     event = await asyncio.wait_for(iterator.__anext__(), timeout)
strix	Run Strix (quick)	2026-08-23T17:12:59.8335250Z     raise RateLimitError(
strix	Run Strix (quick)	2026-08-23T17:12:59.8336285Z [REDACTED]: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix	Run Strix (quick)	2026-08-23T17:12:59.8727414Z Strix report artifacts emitted warning/fatal/denied/timeout output; failing closed.
strix	Run Strix (quick)	2026-08-23T17:12:59.8730444Z Strix run emitted provider infrastructure or failure-signal output; failing closed.
strix	Run Strix (quick)	2026-08-23T17:14:05.9320798Z │  LLM CONNECTION FAILED                                                       │
strix	Run Strix (quick)	2026-08-23T17:14:05.9325692Z │  Error: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error  │
strix	Run Strix (quick)	2026-08-23T17:14:05.9848737Z Strix report artifacts emitted warning/fatal/denied/timeout output; failing closed.
strix	Run Strix (quick)	2026-08-23T17:33:21.0298496Z Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.
strix	Run Strix (quick)	2026-08-23T17:33:21.0846918Z Strix run emitted provider infrastructure or failure-signal output; failing closed.
strix	Run Strix (quick)	2026-08-23T17:33:21.2990889Z Strix fallback model 'nvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.
strix	Run Strix (quick)	2026-08-23T17:33:25.3586986Z │  LLM CONNECTION FAILED                                                       │
strix	Run Strix (quick)	2026-08-23T17:33:25.6645607Z Strix fallback model 'openai-direct/gpt-5.6-luna' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.
strix	Run Strix (quick)	2026-08-23T17:33:25.6667453Z Strix reported zero vulnerabilities before provider infrastructure failure; failing closed because provider infrastructure failures are not clean scan evidence.
strix	Run Strix (quick)	2026-08-23T17:33:25.6931945Z ##[error]Strix could not complete authoritative vulnerability analysis because its provider/backend was unavailable (rate limit, token cap, connection, warm-up, or model-behavior failure). See the strix-reports artifact and run log.
strix	Run Strix (quick)	2026-08-23T17:33:25.6942301Z ##[error]Process completed with exit code 1.

Strix model attempt and finding summary

strix	Run Strix (quick)	2026-08-23T16:38:22.6842014Z ^[[36;1m# LLM-backend-unavailable outcomes (GitHub Models "Too many requests"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6853454Z ^[[36;1mbackend_unavailable_signal='RateLimitError|Too many requests\. For more on scraping GitHub|exceeded your current quota|insufficient_quota|billing details|"status"[[:space:]]*:[[:space:]]*"RESOURCE_EXHAUSTED"|tokens_limit_reached|Request body too large|Max size:[[:space:]]*[0-9]+[[:space:]]+tokens|Error code:[[:space:]]*413|LLM CONNECTION FAILED|Could not establish connection to the language model|LLM warm-up failed|Configured model and fallback models were unavailable|Configured Vertex model and fallback models were unavailable|emitted provider infrastructure or failure-signal output|before provider infrastructure failure|litellm(\.exceptions)?\.NotFoundError[^[:cntrl:]]*Nvidia_nimException[^[:cntrl:]]*Error code:[[:space:]]*404|Error during penetration test: loginAsGuest failed after [0-9]+ attempts: curl exit 7: curl: \(7\) Failed to connect to 127\.0\.0\.1 port 48080'^[[0m
strix	Run Strix (quick)	2026-08-23T16:39:46.4527751Z │  LLM CONNECTION FAILED                                                       │
strix	Run Strix (quick)	2026-08-23T16:39:46.4532821Z │  Error: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error  │
strix	Run Strix (quick)	2026-08-23T16:39:46.4982134Z Strix run failed for model 'nvidia_nim/nvidia/nemotron-3-super-120b-a12b' after 83s (exit code 1).
strix	Run Strix (quick)	2026-08-23T17:12:59.8212981Z openai.RateLimitError: Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix	Run Strix (quick)	2026-08-23T17:12:59.8263695Z     raise RateLimitError(
strix	Run Strix (quick)	2026-08-23T17:12:59.8264975Z [REDACTED]: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix	Run Strix (quick)	2026-08-23T17:12:59.8285846Z openai.RateLimitError: Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix	Run Strix (quick)	2026-08-23T17:12:59.8335250Z     raise RateLimitError(
strix	Run Strix (quick)	2026-08-23T17:12:59.8336285Z [REDACTED]: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix	Run Strix (quick)	2026-08-23T17:12:59.8339581Z │  Model nvidia_nim/nvidia/nemotron-3-super-120b-a12b                          │
strix	Run Strix (quick)	2026-08-23T17:12:59.8340105Z │  Vulnerabilities 0                                                           │
strix	Run Strix (quick)	2026-08-23T17:12:59.8346521Z │  Vulnerabilities  0 (No exploitable vulnerabilities detected)                │
strix	Run Strix (quick)	2026-08-23T17:14:05.9320798Z │  LLM CONNECTION FAILED                                                       │
strix	Run Strix (quick)	2026-08-23T17:14:05.9325692Z │  Error: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error  │
strix	Run Strix (quick)	2026-08-23T17:14:05.9850557Z Strix run failed for model 'nvidia_nim/nvidia/nemotron-3-super-120b-a12b' after 6s (exit code 1).
strix	Run Strix (quick)	2026-08-23T17:14:06.1448378Z Primary model unavailable; retrying with fallback 'nvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5'.
strix	Run Strix (quick)	2026-08-23T17:33:21.0301286Z │  Model nvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5                   │
strix	Run Strix (quick)	2026-08-23T17:33:21.0302009Z │  Vulnerabilities 0                                                           │
strix	Run Strix (quick)	2026-08-23T17:33:21.0363851Z │  Vulnerabilities  0 (No exploitable vulnerabilities detected)                │
strix	Run Strix (quick)	2026-08-23T17:33:21.2990889Z Strix fallback model 'nvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.
strix	Run Strix (quick)	2026-08-23T17:33:21.3036554Z Primary model unavailable; retrying with fallback 'openai-direct/gpt-5.6-luna'.
strix	Run Strix (quick)	2026-08-23T17:33:25.3586986Z │  LLM CONNECTION FAILED                                                       │
strix	Run Strix (quick)	2026-08-23T17:33:25.4463192Z Strix run failed for model 'openai-direct/gpt-5.6-luna' after 4s (exit code 1).
strix	Run Strix (quick)	2026-08-23T17:33:25.6645607Z Strix fallback model 'openai-direct/gpt-5.6-luna' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.

No Strix vulnerability report windows were detected in the failed log.

Failed log excerpt

strix	Run Strix (quick)	2026-08-23T16:38:22.6837677Z ##[group]Run budget_suffix="TIME""OUT"
strix	Run Strix (quick)	2026-08-23T16:38:22.6838086Z ^[[36;1mbudget_suffix="TIME""OUT"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6838372Z ^[[36;1mprocess_budget_seconds="5400"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6838689Z ^[[36;1mexport "LLM_${budget_suffix}=900"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6839059Z ^[[36;1mexport "STRIX_MEMORY_COMPRESSOR_${budget_suffix}=300"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6839550Z ^[[36;1mexport "STRIX_PROCESS_${budget_suffix}_SECONDS=$process_budget_seconds"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6840057Z ^[[36;1mexport "STRIX_TOTAL_${budget_suffix}_SECONDS=5700"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6840393Z ^[[36;1m^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6840719Z ^[[36;1m# Capture the gate exit code plus its console output. The gate returns^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6841213Z ^[[36;1m# exit 1 both for genuine blocking vulnerabilities AND for^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6842014Z ^[[36;1m# LLM-backend-unavailable outcomes (GitHub Models "Too many requests"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6842533Z ^[[36;1m# rate limits, OpenAI quota starvation, 413 tokens_limit_reached,^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6843054Z ^[[36;1m# connection/warm-up failures, and scanner ModelBehaviorError) that^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6843559Z ^[[36;1m# could not complete a scan. Provider failure is typed infrastructure^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6844080Z ^[[36;1m# evidence, but remains non-passing because no authoritative complete^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6844499Z ^[[36;1m# vulnerability result exists.^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6844856Z ^[[36;1mstrix_run_log="$RUNNER_TEMP/strix_gate_console.log"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6845189Z ^[[36;1mstrix_rc=0^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6845401Z ^[[36;1mset +e^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6845680Z ^[[36;1mbash "$TRUSTED_STRIX_GATE" 2>&1 | tee "$strix_run_log"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6846030Z ^[[36;1mstrix_rc="${PIPESTATUS[0]}"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6846300Z ^[[36;1mset -e^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6846503Z ^[[36;1m^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6846708Z ^[[36;1mif [ "$strix_rc" -eq 0 ]; then^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6846979Z ^[[36;1m  exit 0^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6847184Z ^[[36;1mfi^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6847375Z ^[[36;1m^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6847690Z ^[[36;1m# Preserve configuration failures (exit 2) and any unexpected exit^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6848197Z ^[[36;1m# code as hard failures — only the scan-failure code (1) can be an^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6848662Z ^[[36;1m# infrastructure/backend-unavailability outcome.^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6849013Z ^[[36;1mif [ "$strix_rc" -ne 1 ]; then^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6849285Z ^[[36;1m  exit "$strix_rc"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6849515Z ^[[36;1mfi^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6849704Z ^[[36;1m^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6850010Z ^[[36;1m# Recognized signals that the LLM backend was unavailable / starved.^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6853454Z ^[[36;1mbackend_unavailable_signal='RateLimitError|Too many requests\. For more on scraping GitHub|exceeded your current quota|insufficient_quota|billing details|"status"[[:space:]]*:[[:space:]]*"RESOURCE_EXHAUSTED"|tokens_limit_reached|Request body too large|Max size:[[:space:]]*[0-9]+[[:space:]]+tokens|Error code:[[:space:]]*413|LLM CONNECTION FAILED|Could not establish connection to the language model|LLM warm-up failed|Configured model and fallback models were unavailable|Configured Vertex model and fallback models were unavailable|emitted provider infrastructure or failure-signal output|before provider infrastructure failure|litellm(\.exceptions)?\.NotFoundError[^[:cntrl:]]*Nvidia_nimException[^[:cntrl:]]*Error code:[[:space:]]*404|Error during penetration test: loginAsGuest failed after [0-9]+ attempts: curl exit 7: curl: \(7\) Failed to connect to 127\.0\.0\.1 port 48080'^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6856882Z ^[[36;1mmodel_behavior_error_signal='(^|[^A-Za-z0-9_])(agents|pydantic_ai|strix)(\.[A-Za-z_][A-Za-z0-9_]*)*\.ModelBehaviorError([^A-Za-z0-9_]|$)'^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6857798Z ^[[36;1m# Any evidence that a vulnerability was actually reported. Its presence^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6858321Z ^[[36;1m# forces a hard failure so real findings are NEVER downgraded. Keep the^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6858839Z ^[[36;1m# severity branch anchored away from identifiers so environment lines^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6859495Z ^[[36;1m# such as STRIX_FAIL_ON_MIN_SEVERITY do not look like findings.^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6860089Z ^[[36;1mreported_vulnerability_signal='Vulnerabilities[[:space:]]+[1-9]|(^|[^A-Za-z0-9_])severity[[:space:]]*:'^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6860592Z ^[[36;1m^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6860900Z ^[[36;1m# An earlier out-of-scope/below-threshold finding may already have^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6861385Z ^[[36;1m# been exempted by the trusted gate. Classify a later provider^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6862161Z ^[[36;1m# outage from the tail after the last continuation marker, but keep^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6862588Z ^[[36;1m# that incomplete later scan non-passing.^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6862963Z ^[[36;1mstrix_neutralization_scope_log="$strix_run_log"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6863401Z ^[[36;1mif grep -Fq 'allowing pipeline continuation' "$strix_run_log"; then^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6863926Z ^[[36;1m  strix_neutralization_scope_log="$RUNNER_TEMP/strix_gate_console_tail.log"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6864550Z ^[[36;1m  awk '/allowing pipeline continuation/{buf=""; next} {buf=buf $0 "\n"} END{printf "%s", buf}' \^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6865096Z ^[[36;1m    "$strix_run_log" > "$strix_neutralization_scope_log"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6865431Z ^[[36;1mfi^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6865623Z ^[[36;1m^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6865942Z ^[[36;1m# Classify provider/backend exhaustion only when no vulnerability^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6866436Z ^[[36;1m# finding was emitted. Classification improves diagnosis; it never^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6866911Z ^[[36;1m# converts an incomplete scan into passing security evidence.^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6867437Z ^[[36;1mif ( grep -Eiq "$backend_unavailable_signal" "$strix_neutralization_scope_log" \^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6868062Z ^[[36;1m  || grep -Eq "$model_behavior_error_signal" "$strix_neutralization_scope_log" ) \^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6868676Z ^[[36;1m  && ! grep -Eiq "$reported_vulnerability_signal" "$strix_neutralization_scope_log"; then^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6869945Z ^[[36;1m  echo "::error title=STRIX_PROVIDER_UNAVAILABLE::Strix could not complete authoritative vulnerability analysis because its provider/backend was unavailable (rate limit, token cap, connection, warm-up, or model-behavior failure). See the strix-reports artifact and run log."^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6871049Z ^[[36;1m  exit "$strix_rc"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6871284Z ^[[36;1mfi^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6871715Z ^[[36;1m^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6872261Z ^[[36;1mecho "Strix reported security findings or failed for a non-backend reason; failing the required check (gate exit ${strix_rc})." >&2^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6872867Z ^[[36;1mexit "$strix_rc"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6908333Z shell: /usr/bin/bash -e {0}
strix	Run Strix (quick)	2026-08-23T16:38:22.6908612Z env:
strix	Run Strix (quick)	2026-08-23T16:38:22.6908837Z   FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
strix	Run Strix (quick)	2026-08-23T16:38:22.6909211Z   pythonLocation: /opt/hostedtoolcache/Python/3.13.15/x64
strix	Run Strix (quick)	2026-08-23T16:38:22.6909662Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.13.15/x64/lib/pkgconfig
strix	Run Strix (quick)	2026-08-23T16:38:22.6910109Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.15/x64
strix	Run Strix (quick)	2026-08-23T16:38:22.6910523Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.15/x64
strix	Run Strix (quick)	2026-08-23T16:38:22.6910932Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.15/x64
strix	Run Strix (quick)	2026-08-23T16:38:22.6911352Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.13.15/x64/lib
strix	Run Strix (quick)	2026-08-23T16:38:22.6912135Z   TRUSTED_STRIX_SOURCE: /home/runner/work/.github/.github/trusted-strix-source
strix	Run Strix (quick)	2026-08-23T16:38:22.6912770Z   TRUSTED_STRIX_GATE: /home/runner/work/.github/.github/trusted-strix-source/scripts/ci/strix_quick_gate.sh
strix	Run Strix (quick)	2026-08-23T16:38:22.6913533Z   TRUSTED_STRIX_GATE_TEST: /home/runner/work/.github/.github/trusted-strix-source/scripts/ci/test_strix_quick_gate.sh
strix	Run Strix (quick)	2026-08-23T16:38:22.6914546Z   TRUSTED_STRIX_REQUIRED_SMOKE: /home/runner/work/.github/.github/trusted-strix-source/scripts/ci/strix_required_workflow_smoke.sh
strix	Run Strix (quick)	2026-08-23T16:38:22.6915212Z   TRUSTED_WORKSPACE: /home/runner/work/_temp/trusted-workspace
strix	Run Strix (quick)	2026-08-23T16:38:22.6915806Z   STRIX_EXECUTABLE_PATH: /opt/hostedtoolcache/Python/3.13.15/x64/bin/strix
strix	Run Strix (quick)	2026-08-23T16:38:22.6916274Z   STRIX_EXECUTABLE_ROOT: /opt/hostedtoolcache/Python/3.13.15/x64/bin
strix	Run Strix (quick)	2026-08-23T16:38:22.6916794Z   STRIX_EXECUTABLE_SHA256: d2dd9753453674e0081508a08d869e7b629c15f11b70294b980033272734f073
strix	Run Strix (quick)	2026-08-23T16:38:22.6917295Z   LLM_API_KEY_FILE: [REDACTED]
strix	Run Strix (quick)	2026-08-23T16:38:22.6917687Z   LLM_API_BASE_FILE: /home/runner/work/_temp/llm_api_base.txt
strix	Run Strix (quick)	2026-08-23T16:38:22.6918156Z   STRIX_GITHUB_MODELS_KEY_FILE: /home/runner/work/_temp/github_models_fallback_key.txt
strix	Run Strix (quick)	2026-08-23T16:38:22.6918714Z   STRIX_GITHUB_MODELS_API_BASE_FILE: /home/runner/work/_temp/github_models_api_base.txt
strix	Run Strix (quick)	2026-08-23T16:38:22.6919186Z   STRIX_LLM_FILE: /home/runner/work/_temp/strix_llm.txt
strix	Run Strix (quick)	2026-08-23T16:38:22.6919562Z   STRIX_REPO_ROOT: /home/runner/work/_temp/trusted-workspace
strix	Run Strix (quick)	2026-08-23T16:38:22.6919907Z   STRIX_LLM_DEFAULT_PROVIDER: nvidia_nim

... truncated 592 middle log lines ...

strix	Run Strix (quick)	2026-08-23T17:33:21.0337370Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0337943Z │  ## SSRF Protections                                                         │
strix	Run Strix (quick)	2026-08-23T17:33:21.0338479Z │  The `wait_for_url` function in `sandboxed_web_e2e.py` implements robust     │
strix	Run Strix (quick)	2026-08-23T17:33:21.0339113Z │  validation:                                                                 │
strix	Run Strix (quick)	2026-08-23T17:33:21.0339661Z │  - **Host Check**: Blocks external hosts not in `localhost` or `127.0.0.1`   │
strix	Run Strix (quick)	2026-08-23T17:33:21.0340267Z │  ranges.                                                                     │
strix	Run Strix (quick)	2026-08-23T17:33:21.0340847Z │  - **Allowed Redirects**: Permits loopback addresses but blocks external     │
strix	Run Strix (quick)	2026-08-23T17:33:21.0341590Z │  redirection.                                                                │
strix	Run Strix (quick)	2026-08-23T17:33:21.0342144Z │  - **Test Coverage**: `test_ssrf.py` and `test_ssrf2.py` contain test cases  │
strix	Run Strix (quick)	2026-08-23T17:33:21.0342862Z │  verifying this logic.                                                       │
strix	Run Strix (quick)	2026-08-23T17:33:21.0343306Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0343862Z │  **Gaps Identified:**                                                        │
strix	Run Strix (quick)	2026-08-23T17:33:21.0344407Z │  - `test_ssrf3.py` was not found, leaving potential edge cases (e.g., IPv6   │
strix	Run Strix (quick)	2026-08-23T17:33:21.0345085Z │  representations) unverified.                                                │
strix	Run Strix (quick)	2026-08-23T17:33:21.0345569Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0346063Z │  ## SQL Injection Review                                                     │
strix	Run Strix (quick)	2026-08-23T17:33:21.0346701Z │  No unsafe SQL query construction was observed in the test files. The files  │
strix	Run Strix (quick)	2026-08-23T17:33:21.0347365Z │  focus on network validation (SSRF) rather than data layer security.         │
strix	Run Strix (quick)	2026-08-23T17:33:21.0348002Z │  Recommendations include reviewing production code for ORM usage and         │
strix	Run Strix (quick)	2026-08-23T17:33:21.0348694Z │  parameterized queries.                                                      │
strix	Run Strix (quick)	2026-08-23T17:33:21.0349150Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0349628Z │  # Recommendations                                                           │
strix	Run Strix (quick)	2026-08-23T17:33:21.0350170Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0350595Z │  # Recommendations                                                           │
strix	Run Strix (quick)	2026-08-23T17:33:21.0351391Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0352514Z │  1. **Complete SSRF Test Coverage**                                          │
strix	Run Strix (quick)	2026-08-23T17:33:21.0353555Z │   - Implement `test_ssrf3.py` to address IPv6 representations and other      │
strix	Run Strix (quick)	2026-08-23T17:33:21.0354803Z │  edge cases.                                                                 │
strix	Run Strix (quick)	2026-08-23T17:33:21.0355341Z │  2. **Database Security Review**                                             │
strix	Run Strix (quick)	2026-08-23T17:33:21.0355876Z │   - Conduct a thorough review of production code for:                        │
strix	Run Strix (quick)	2026-08-23T17:33:21.0356432Z │    - ORM usage patterns (e.g., Django ORM, SQLAlchemy)                       │
strix	Run Strix (quick)	2026-08-23T17:33:21.0356975Z │    - Parameterized queries vs. string interpolation                          │
strix	Run Strix (quick)	2026-08-23T17:33:21.0357515Z │    - Input sanitization in data processing layers                            │
strix	Run Strix (quick)	2026-08-23T17:33:21.0358058Z │  3. **Enhanced Input Validation**                                            │
strix	Run Strix (quick)	2026-08-23T17:33:21.0358585Z │   - Ensure all user inputs undergo strict validation and sanitization        │
strix	Run Strix (quick)	2026-08-23T17:33:21.0359137Z │  before use in security-sensitive contexts.                                  │
strix	Run Strix (quick)	2026-08-23T17:33:21.0359813Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0360205Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0360655Z ╰──────────────────────────────────────────────────────────────────────────────╯
strix	Run Strix (quick)	2026-08-23T17:33:21.0360893Z 
strix	Run Strix (quick)	2026-08-23T17:33:21.0360900Z 
strix	Run Strix (quick)	2026-08-23T17:33:21.0360904Z 
strix	Run Strix (quick)	2026-08-23T17:33:21.0361144Z ╭─ STRIX ──────────────────────────────────────────────────────────────────────╮
strix	Run Strix (quick)	2026-08-23T17:33:21.0361847Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0362311Z │  Penetration test completed                                                  │
strix	Run Strix (quick)	2026-08-23T17:33:21.0362774Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0363277Z │  Target  /tmp/strix-runtime.EK3bPv/pr-scopes/strix-pr-scope.fTiVko           │
strix	Run Strix (quick)	2026-08-23T17:33:21.0363851Z │  Vulnerabilities  0 (No exploitable vulnerabilities detected)                │
strix	Run Strix (quick)	2026-08-23T17:33:21.0364342Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0364799Z │  Input Tokens 1.4M  ·  Output Tokens 20.5K                                   │
strix	Run Strix (quick)	2026-08-23T17:33:21.0365244Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0365652Z │  Output                                                                      │
strix	Run Strix (quick)	2026-08-23T17:33:21.0366162Z │  /tmp/strix-runtime.EK3bPv/scan-cwd/strix_runs/strix-pr-scope-ftivko_8dda    │
strix	Run Strix (quick)	2026-08-23T17:33:21.0366642Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0367261Z │  View    strix view strix-pr-scope-ftivko_8dda                               │
strix	Run Strix (quick)	2026-08-23T17:33:21.0368144Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0369004Z ╰──────────────────────────────────────────────────────────────────────────────╯
strix	Run Strix (quick)	2026-08-23T17:33:21.0369462Z 
strix	Run Strix (quick)	2026-08-23T17:33:21.0369738Z strix.ai  ·  docs.strix.ai  ·  discord.gg/strix-ai
strix	Run Strix (quick)	2026-08-23T17:33:21.0370077Z 
strix	Run Strix (quick)	2026-08-23T17:33:21.0846918Z Strix run emitted provider infrastructure or failure-signal output; failing closed.
strix	Run Strix (quick)	2026-08-23T17:33:21.1240863Z No Strix vulnerability report artifact was produced; log-only severity markers are incomplete evidence, so the scan is failing closed.
strix	Run Strix (quick)	2026-08-23T17:33:21.1366011Z INFO: Unable to compute PR merge base; falling back to direct base/head diff for changed file enumeration.
strix	Run Strix (quick)	2026-08-23T17:33:21.2990889Z Strix fallback model 'nvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.
strix	Run Strix (quick)	2026-08-23T17:33:21.3036554Z Primary model unavailable; retrying with fallback 'openai-direct/gpt-5.6-luna'.
strix	Run Strix (quick)	2026-08-23T17:33:25.3584411Z 
strix	Run Strix (quick)	2026-08-23T17:33:25.3584510Z 
strix	Run Strix (quick)	2026-08-23T17:33:25.3585503Z ╭─ STRIX ──────────────────────────────────────────────────────────────────────╮
strix	Run Strix (quick)	2026-08-23T17:33:25.3586396Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:25.3586986Z │  LLM CONNECTION FAILED                                                       │
strix	Run Strix (quick)	2026-08-23T17:33:25.3587541Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:25.3588181Z │  Could not establish connection to the language model.                       │
strix	Run Strix (quick)	2026-08-23T17:33:25.3588929Z │  Please check your configuration and try again.                              │
strix	Run Strix (quick)	2026-08-23T17:33:25.3589561Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:25.3590250Z │  Error: litellm.BadRequestError: LLM Provider NOT provided. Pass in the LLM  │
strix	Run Strix (quick)	2026-08-23T17:33:25.3591015Z │  provider you are trying to call. You passed                                 │
strix	Run Strix (quick)	2026-08-23T17:33:25.3592047Z │  model=openai-direct/gpt-5.6-luna                                            │
strix	Run Strix (quick)	2026-08-23T17:33:25.3592827Z │   Pass model as E.g. For 'Huggingface' inference endpoints pass in           │
strix	Run Strix (quick)	2026-08-23T17:33:25.3593603Z │  `completion(model='huggingface/starcoder',..)` Learn more:                  │
strix	Run Strix (quick)	2026-08-23T17:33:25.3594383Z │  https://docs.litellm.ai/docs/providers                                      │
strix	Run Strix (quick)	2026-08-23T17:33:25.3595018Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:25.3595618Z ╰──────────────────────────────────────────────────────────────────────────────╯
strix	Run Strix (quick)	2026-08-23T17:33:25.3595936Z 
strix	Run Strix (quick)	2026-08-23T17:33:25.4463192Z Strix run failed for model 'openai-direct/gpt-5.6-luna' after 4s (exit code 1).
strix	Run Strix (quick)	2026-08-23T17:33:25.4847342Z No Strix vulnerability report artifact was produced; log-only severity markers are incomplete evidence, so the scan is failing closed.
strix	Run Strix (quick)	2026-08-23T17:33:25.4968874Z INFO: Unable to compute PR merge base; falling back to direct base/head diff for changed file enumeration.
strix	Run Strix (quick)	2026-08-23T17:33:25.6645607Z Strix fallback model 'openai-direct/gpt-5.6-luna' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.
strix	Run Strix (quick)	2026-08-23T17:33:25.6667453Z Strix reported zero vulnerabilities before provider infrastructure failure; failing closed because provider infrastructure failures are not clean scan evidence.
strix	Run Strix (quick)	2026-08-23T17:33:25.6931945Z ##[error]Strix could not complete authoritative vulnerability analysis because its provider/backend was unavailable (rate limit, token cap, connection, warm-up, or model-behavior failure). See the strix-reports artifact and run log.
strix	Run Strix (quick)	2026-08-23T17:33:25.6942301Z ##[error]Process completed with exit code 1.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file: CHANGELOG.md"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file: CHANGELOG.md"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs: sandboxed-web-readiness-loopback-boundary.md"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs: sandboxed-web-readiness-loopback-boundary.md"]
  R2 --> V2["docs review"]
  Evidence --> S3["CI script: sandboxed_web_e2e.py"]
  S3 --> I3["review and security gate shell path"]
  I3 --> R3["Review risk: CI script: sandboxed_web_e2e.py"]
  R3 --> V3["bash -n plus Strix self-test"]
  Evidence --> S4["Test: test_sandboxed_web_e2e.py"]
  S4 --> I4["regression suite"]
  I4 --> R4["Review risk: Test: test_sandboxed_web_e2e.py"]
  R4 --> V4["targeted test run"]
Loading

@opencode-agent opencode-agent 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.

Pull request overview

OpenCode reviewed the current-head bounded evidence and found source-backed failed-check findings that must be addressed before merge.

  • Result: REQUEST_CHANGES
  • Reason: failed current-head checks were mapped to line-specific findings below for a0c82c87dfc01b49698fd84db378a71942714b57.
  • Head SHA: a0c82c87dfc01b49698fd84db378a71942714b57
  • Workflow run: 32655494599
  • Workflow attempt: 1
Failed checks

Findings

1. HIGH .github/workflows/strix.yml:825 - Strix provider failure blocked current-head security evidence

  • Problem: Strix failed before producing vulnerability reports. The failed log reported LLM CONNECTION FAILED, RateLimitError or Too many requests for the primary model, provider/budget output for fallback models, and Configured model and fallback models were unavailable.
  • Root cause: The configured GitHub Models primary/fallback provider capacity or provider route failed for this run; no Strix Vulnerability Report window was produced, so there is no application source line to patch from this evidence.
  • Fix: Do not approve from this failed scan. Re-run Strix after GitHub Models capacity recovers or run an explicitly configured manual provider evidence scan with valid credentials; keep the configured fallback line at .github/workflows/strix.yml:825 aligned with the approved model list.
  • Suggested edit: keep .github/workflows/strix.yml:825 on the approved GitHub Models fallback list and rerun the current-head Strix check; there is no application source patch until Strix emits a vulnerability Code Location.
  • Regression test: Keep the failed-check evidence collector preserving RateLimitError, budget-limit, provider infrastructure, and unavailable-model lines so OpenCode reviews can distinguish external provider blockers from code vulnerabilities.
Failed check evidence for line-specific fixes

Failed GitHub Check Evidence

  • PR: #1244
  • Head SHA: a0c82c87dfc01b49698fd84db378a71942714b57
  • Repository: ContextualWisdomLab/.github

Line-specific repair contract

  • Treat the check logs and annotations below as diagnostic evidence, not as a complete review.

  • For each actionable failed check, inspect the local source or diff and identify the exact file line that must change.

  • OpenCode REQUEST_CHANGES findings must include path, line, root_cause, fix_direction, regression_test_direction, and suggested_diff.

  • Do not request changes with only a GitHub Actions URL or a generic check name.

  • When Strix logs contain multiple Vulnerability Report or Model ... Vulnerabilities ... sections, include every model-reported vulnerability in the review evidence and findings, including model name, title, severity, endpoint, and Code Locations/path:line evidence when present.

  • Create one OpenCode finding per Strix model vulnerability report; do not satisfy two model reports with one combined finding, even when titles or locations match.

Failed check: Strix Security Scan/strix

Failed job steps

  • step 26: Run Strix (quick) (failure)

Check annotations

  • .github:772-772 [failure] Process completed with exit code 1.
  • .github:771-771 [failure] Strix could not complete authoritative vulnerability analysis because its provider/backend was unavailable (rate limit, token cap, connection, warm-up, or model-behavior failure). See the strix-reports artifact and run log.

Failed log signal summary

strix	Run Strix (quick)	2026-08-23T16:38:22.6842014Z ^[[36;1m# LLM-backend-unavailable outcomes (GitHub Models "Too many requests"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6853454Z ^[[36;1mbackend_unavailable_signal='RateLimitError|Too many requests\. For more on scraping GitHub|exceeded your current quota|insufficient_quota|billing details|"status"[[:space:]]*:[[:space:]]*"RESOURCE_EXHAUSTED"|tokens_limit_reached|Request body too large|Max size:[[:space:]]*[0-9]+[[:space:]]+tokens|Error code:[[:space:]]*413|LLM CONNECTION FAILED|Could not establish connection to the language model|LLM warm-up failed|Configured model and fallback models were unavailable|Configured Vertex model and fallback models were unavailable|emitted provider infrastructure or failure-signal output|before provider infrastructure failure|litellm(\.exceptions)?\.NotFoundError[^[:cntrl:]]*Nvidia_nimException[^[:cntrl:]]*Error code:[[:space:]]*404|Error during penetration test: loginAsGuest failed after [0-9]+ attempts: curl exit 7: curl: \(7\) Failed to connect to 127\.0\.0\.1 port 48080'^[[0m
strix	Run Strix (quick)	2026-08-23T16:39:46.4527751Z │  LLM CONNECTION FAILED                                                       │
strix	Run Strix (quick)	2026-08-23T16:39:46.4532821Z │  Error: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error  │
strix	Run Strix (quick)	2026-08-23T17:12:59.8204729Z     raw_response = await [REDACTED].with_raw_response.create(**data, timeout=timeout)
strix	Run Strix (quick)	2026-08-23T17:12:59.8212981Z openai.RateLimitError: Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix	Run Strix (quick)	2026-08-23T17:12:59.8238365Z     async for event in _with_idle_timeout(stream, self._stream_idle_timeout):
strix	Run Strix (quick)	2026-08-23T17:12:59.8239520Z   File "/opt/hostedtoolcache/Python/3.13.15/x64/lib/python3.13/site-packages/strix/config/models.py", line 378, in _with_idle_timeout
strix	Run Strix (quick)	2026-08-23T17:12:59.8240183Z     event = await asyncio.wait_for(iterator.__anext__(), timeout)
strix	Run Strix (quick)	2026-08-23T17:12:59.8263695Z     raise RateLimitError(
strix	Run Strix (quick)	2026-08-23T17:12:59.8264975Z [REDACTED]: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix	Run Strix (quick)	2026-08-23T17:12:59.8277510Z     raw_response = await [REDACTED].with_raw_response.create(**data, timeout=timeout)
strix	Run Strix (quick)	2026-08-23T17:12:59.8285846Z openai.RateLimitError: Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix	Run Strix (quick)	2026-08-23T17:12:59.8313378Z     async for event in _with_idle_timeout(stream, self._stream_idle_timeout):
strix	Run Strix (quick)	2026-08-23T17:12:59.8314584Z   File "/opt/hostedtoolcache/Python/3.13.15/x64/lib/python3.13/site-packages/strix/config/models.py", line 378, in _with_idle_timeout
strix	Run Strix (quick)	2026-08-23T17:12:59.8315427Z     event = await asyncio.wait_for(iterator.__anext__(), timeout)
strix	Run Strix (quick)	2026-08-23T17:12:59.8335250Z     raise RateLimitError(
strix	Run Strix (quick)	2026-08-23T17:12:59.8336285Z [REDACTED]: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix	Run Strix (quick)	2026-08-23T17:12:59.8727414Z Strix report artifacts emitted warning/fatal/denied/timeout output; failing closed.
strix	Run Strix (quick)	2026-08-23T17:12:59.8730444Z Strix run emitted provider infrastructure or failure-signal output; failing closed.
strix	Run Strix (quick)	2026-08-23T17:14:05.9320798Z │  LLM CONNECTION FAILED                                                       │
strix	Run Strix (quick)	2026-08-23T17:14:05.9325692Z │  Error: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error  │
strix	Run Strix (quick)	2026-08-23T17:14:05.9848737Z Strix report artifacts emitted warning/fatal/denied/timeout output; failing closed.
strix	Run Strix (quick)	2026-08-23T17:33:21.0298496Z Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.
strix	Run Strix (quick)	2026-08-23T17:33:21.0846918Z Strix run emitted provider infrastructure or failure-signal output; failing closed.
strix	Run Strix (quick)	2026-08-23T17:33:21.2990889Z Strix fallback model 'nvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.
strix	Run Strix (quick)	2026-08-23T17:33:25.3586986Z │  LLM CONNECTION FAILED                                                       │
strix	Run Strix (quick)	2026-08-23T17:33:25.6645607Z Strix fallback model 'openai-direct/gpt-5.6-luna' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.
strix	Run Strix (quick)	2026-08-23T17:33:25.6667453Z Strix reported zero vulnerabilities before provider infrastructure failure; failing closed because provider infrastructure failures are not clean scan evidence.
strix	Run Strix (quick)	2026-08-23T17:33:25.6931945Z ##[error]Strix could not complete authoritative vulnerability analysis because its provider/backend was unavailable (rate limit, token cap, connection, warm-up, or model-behavior failure). See the strix-reports artifact and run log.
strix	Run Strix (quick)	2026-08-23T17:33:25.6942301Z ##[error]Process completed with exit code 1.

Strix model attempt and finding summary

strix	Run Strix (quick)	2026-08-23T16:38:22.6842014Z ^[[36;1m# LLM-backend-unavailable outcomes (GitHub Models "Too many requests"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6853454Z ^[[36;1mbackend_unavailable_signal='RateLimitError|Too many requests\. For more on scraping GitHub|exceeded your current quota|insufficient_quota|billing details|"status"[[:space:]]*:[[:space:]]*"RESOURCE_EXHAUSTED"|tokens_limit_reached|Request body too large|Max size:[[:space:]]*[0-9]+[[:space:]]+tokens|Error code:[[:space:]]*413|LLM CONNECTION FAILED|Could not establish connection to the language model|LLM warm-up failed|Configured model and fallback models were unavailable|Configured Vertex model and fallback models were unavailable|emitted provider infrastructure or failure-signal output|before provider infrastructure failure|litellm(\.exceptions)?\.NotFoundError[^[:cntrl:]]*Nvidia_nimException[^[:cntrl:]]*Error code:[[:space:]]*404|Error during penetration test: loginAsGuest failed after [0-9]+ attempts: curl exit 7: curl: \(7\) Failed to connect to 127\.0\.0\.1 port 48080'^[[0m
strix	Run Strix (quick)	2026-08-23T16:39:46.4527751Z │  LLM CONNECTION FAILED                                                       │
strix	Run Strix (quick)	2026-08-23T16:39:46.4532821Z │  Error: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error  │
strix	Run Strix (quick)	2026-08-23T16:39:46.4982134Z Strix run failed for model 'nvidia_nim/nvidia/nemotron-3-super-120b-a12b' after 83s (exit code 1).
strix	Run Strix (quick)	2026-08-23T17:12:59.8212981Z openai.RateLimitError: Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix	Run Strix (quick)	2026-08-23T17:12:59.8263695Z     raise RateLimitError(
strix	Run Strix (quick)	2026-08-23T17:12:59.8264975Z [REDACTED]: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix	Run Strix (quick)	2026-08-23T17:12:59.8285846Z openai.RateLimitError: Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix	Run Strix (quick)	2026-08-23T17:12:59.8335250Z     raise RateLimitError(
strix	Run Strix (quick)	2026-08-23T17:12:59.8336285Z [REDACTED]: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix	Run Strix (quick)	2026-08-23T17:12:59.8339581Z │  Model nvidia_nim/nvidia/nemotron-3-super-120b-a12b                          │
strix	Run Strix (quick)	2026-08-23T17:12:59.8340105Z │  Vulnerabilities 0                                                           │
strix	Run Strix (quick)	2026-08-23T17:12:59.8346521Z │  Vulnerabilities  0 (No exploitable vulnerabilities detected)                │
strix	Run Strix (quick)	2026-08-23T17:14:05.9320798Z │  LLM CONNECTION FAILED                                                       │
strix	Run Strix (quick)	2026-08-23T17:14:05.9325692Z │  Error: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error  │
strix	Run Strix (quick)	2026-08-23T17:14:05.9850557Z Strix run failed for model 'nvidia_nim/nvidia/nemotron-3-super-120b-a12b' after 6s (exit code 1).
strix	Run Strix (quick)	2026-08-23T17:14:06.1448378Z Primary model unavailable; retrying with fallback 'nvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5'.
strix	Run Strix (quick)	2026-08-23T17:33:21.0301286Z │  Model nvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5                   │
strix	Run Strix (quick)	2026-08-23T17:33:21.0302009Z │  Vulnerabilities 0                                                           │
strix	Run Strix (quick)	2026-08-23T17:33:21.0363851Z │  Vulnerabilities  0 (No exploitable vulnerabilities detected)                │
strix	Run Strix (quick)	2026-08-23T17:33:21.2990889Z Strix fallback model 'nvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.
strix	Run Strix (quick)	2026-08-23T17:33:21.3036554Z Primary model unavailable; retrying with fallback 'openai-direct/gpt-5.6-luna'.
strix	Run Strix (quick)	2026-08-23T17:33:25.3586986Z │  LLM CONNECTION FAILED                                                       │
strix	Run Strix (quick)	2026-08-23T17:33:25.4463192Z Strix run failed for model 'openai-direct/gpt-5.6-luna' after 4s (exit code 1).
strix	Run Strix (quick)	2026-08-23T17:33:25.6645607Z Strix fallback model 'openai-direct/gpt-5.6-luna' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.

No Strix vulnerability report windows were detected in the failed log.

Failed log excerpt

strix	Run Strix (quick)	2026-08-23T16:38:22.6837677Z ##[group]Run budget_suffix="TIME""OUT"
strix	Run Strix (quick)	2026-08-23T16:38:22.6838086Z ^[[36;1mbudget_suffix="TIME""OUT"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6838372Z ^[[36;1mprocess_budget_seconds="5400"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6838689Z ^[[36;1mexport "LLM_${budget_suffix}=900"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6839059Z ^[[36;1mexport "STRIX_MEMORY_COMPRESSOR_${budget_suffix}=300"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6839550Z ^[[36;1mexport "STRIX_PROCESS_${budget_suffix}_SECONDS=$process_budget_seconds"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6840057Z ^[[36;1mexport "STRIX_TOTAL_${budget_suffix}_SECONDS=5700"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6840393Z ^[[36;1m^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6840719Z ^[[36;1m# Capture the gate exit code plus its console output. The gate returns^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6841213Z ^[[36;1m# exit 1 both for genuine blocking vulnerabilities AND for^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6842014Z ^[[36;1m# LLM-backend-unavailable outcomes (GitHub Models "Too many requests"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6842533Z ^[[36;1m# rate limits, OpenAI quota starvation, 413 tokens_limit_reached,^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6843054Z ^[[36;1m# connection/warm-up failures, and scanner ModelBehaviorError) that^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6843559Z ^[[36;1m# could not complete a scan. Provider failure is typed infrastructure^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6844080Z ^[[36;1m# evidence, but remains non-passing because no authoritative complete^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6844499Z ^[[36;1m# vulnerability result exists.^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6844856Z ^[[36;1mstrix_run_log="$RUNNER_TEMP/strix_gate_console.log"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6845189Z ^[[36;1mstrix_rc=0^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6845401Z ^[[36;1mset +e^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6845680Z ^[[36;1mbash "$TRUSTED_STRIX_GATE" 2>&1 | tee "$strix_run_log"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6846030Z ^[[36;1mstrix_rc="${PIPESTATUS[0]}"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6846300Z ^[[36;1mset -e^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6846503Z ^[[36;1m^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6846708Z ^[[36;1mif [ "$strix_rc" -eq 0 ]; then^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6846979Z ^[[36;1m  exit 0^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6847184Z ^[[36;1mfi^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6847375Z ^[[36;1m^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6847690Z ^[[36;1m# Preserve configuration failures (exit 2) and any unexpected exit^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6848197Z ^[[36;1m# code as hard failures — only the scan-failure code (1) can be an^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6848662Z ^[[36;1m# infrastructure/backend-unavailability outcome.^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6849013Z ^[[36;1mif [ "$strix_rc" -ne 1 ]; then^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6849285Z ^[[36;1m  exit "$strix_rc"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6849515Z ^[[36;1mfi^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6849704Z ^[[36;1m^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6850010Z ^[[36;1m# Recognized signals that the LLM backend was unavailable / starved.^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6853454Z ^[[36;1mbackend_unavailable_signal='RateLimitError|Too many requests\. For more on scraping GitHub|exceeded your current quota|insufficient_quota|billing details|"status"[[:space:]]*:[[:space:]]*"RESOURCE_EXHAUSTED"|tokens_limit_reached|Request body too large|Max size:[[:space:]]*[0-9]+[[:space:]]+tokens|Error code:[[:space:]]*413|LLM CONNECTION FAILED|Could not establish connection to the language model|LLM warm-up failed|Configured model and fallback models were unavailable|Configured Vertex model and fallback models were unavailable|emitted provider infrastructure or failure-signal output|before provider infrastructure failure|litellm(\.exceptions)?\.NotFoundError[^[:cntrl:]]*Nvidia_nimException[^[:cntrl:]]*Error code:[[:space:]]*404|Error during penetration test: loginAsGuest failed after [0-9]+ attempts: curl exit 7: curl: \(7\) Failed to connect to 127\.0\.0\.1 port 48080'^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6856882Z ^[[36;1mmodel_behavior_error_signal='(^|[^A-Za-z0-9_])(agents|pydantic_ai|strix)(\.[A-Za-z_][A-Za-z0-9_]*)*\.ModelBehaviorError([^A-Za-z0-9_]|$)'^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6857798Z ^[[36;1m# Any evidence that a vulnerability was actually reported. Its presence^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6858321Z ^[[36;1m# forces a hard failure so real findings are NEVER downgraded. Keep the^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6858839Z ^[[36;1m# severity branch anchored away from identifiers so environment lines^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6859495Z ^[[36;1m# such as STRIX_FAIL_ON_MIN_SEVERITY do not look like findings.^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6860089Z ^[[36;1mreported_vulnerability_signal='Vulnerabilities[[:space:]]+[1-9]|(^|[^A-Za-z0-9_])severity[[:space:]]*:'^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6860592Z ^[[36;1m^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6860900Z ^[[36;1m# An earlier out-of-scope/below-threshold finding may already have^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6861385Z ^[[36;1m# been exempted by the trusted gate. Classify a later provider^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6862161Z ^[[36;1m# outage from the tail after the last continuation marker, but keep^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6862588Z ^[[36;1m# that incomplete later scan non-passing.^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6862963Z ^[[36;1mstrix_neutralization_scope_log="$strix_run_log"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6863401Z ^[[36;1mif grep -Fq 'allowing pipeline continuation' "$strix_run_log"; then^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6863926Z ^[[36;1m  strix_neutralization_scope_log="$RUNNER_TEMP/strix_gate_console_tail.log"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6864550Z ^[[36;1m  awk '/allowing pipeline continuation/{buf=""; next} {buf=buf $0 "\n"} END{printf "%s", buf}' \^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6865096Z ^[[36;1m    "$strix_run_log" > "$strix_neutralization_scope_log"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6865431Z ^[[36;1mfi^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6865623Z ^[[36;1m^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6865942Z ^[[36;1m# Classify provider/backend exhaustion only when no vulnerability^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6866436Z ^[[36;1m# finding was emitted. Classification improves diagnosis; it never^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6866911Z ^[[36;1m# converts an incomplete scan into passing security evidence.^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6867437Z ^[[36;1mif ( grep -Eiq "$backend_unavailable_signal" "$strix_neutralization_scope_log" \^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6868062Z ^[[36;1m  || grep -Eq "$model_behavior_error_signal" "$strix_neutralization_scope_log" ) \^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6868676Z ^[[36;1m  && ! grep -Eiq "$reported_vulnerability_signal" "$strix_neutralization_scope_log"; then^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6869945Z ^[[36;1m  echo "::error title=STRIX_PROVIDER_UNAVAILABLE::Strix could not complete authoritative vulnerability analysis because its provider/backend was unavailable (rate limit, token cap, connection, warm-up, or model-behavior failure). See the strix-reports artifact and run log."^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6871049Z ^[[36;1m  exit "$strix_rc"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6871284Z ^[[36;1mfi^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6871715Z ^[[36;1m^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6872261Z ^[[36;1mecho "Strix reported security findings or failed for a non-backend reason; failing the required check (gate exit ${strix_rc})." >&2^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6872867Z ^[[36;1mexit "$strix_rc"^[[0m
strix	Run Strix (quick)	2026-08-23T16:38:22.6908333Z shell: /usr/bin/bash -e {0}
strix	Run Strix (quick)	2026-08-23T16:38:22.6908612Z env:
strix	Run Strix (quick)	2026-08-23T16:38:22.6908837Z   FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
strix	Run Strix (quick)	2026-08-23T16:38:22.6909211Z   pythonLocation: /opt/hostedtoolcache/Python/3.13.15/x64
strix	Run Strix (quick)	2026-08-23T16:38:22.6909662Z   PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.13.15/x64/lib/pkgconfig
strix	Run Strix (quick)	2026-08-23T16:38:22.6910109Z   Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.15/x64
strix	Run Strix (quick)	2026-08-23T16:38:22.6910523Z   Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.15/x64
strix	Run Strix (quick)	2026-08-23T16:38:22.6910932Z   Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.15/x64
strix	Run Strix (quick)	2026-08-23T16:38:22.6911352Z   LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.13.15/x64/lib
strix	Run Strix (quick)	2026-08-23T16:38:22.6912135Z   TRUSTED_STRIX_SOURCE: /home/runner/work/.github/.github/trusted-strix-source
strix	Run Strix (quick)	2026-08-23T16:38:22.6912770Z   TRUSTED_STRIX_GATE: /home/runner/work/.github/.github/trusted-strix-source/scripts/ci/strix_quick_gate.sh
strix	Run Strix (quick)	2026-08-23T16:38:22.6913533Z   TRUSTED_STRIX_GATE_TEST: /home/runner/work/.github/.github/trusted-strix-source/scripts/ci/test_strix_quick_gate.sh
strix	Run Strix (quick)	2026-08-23T16:38:22.6914546Z   TRUSTED_STRIX_REQUIRED_SMOKE: /home/runner/work/.github/.github/trusted-strix-source/scripts/ci/strix_required_workflow_smoke.sh
strix	Run Strix (quick)	2026-08-23T16:38:22.6915212Z   TRUSTED_WORKSPACE: /home/runner/work/_temp/trusted-workspace
strix	Run Strix (quick)	2026-08-23T16:38:22.6915806Z   STRIX_EXECUTABLE_PATH: /opt/hostedtoolcache/Python/3.13.15/x64/bin/strix
strix	Run Strix (quick)	2026-08-23T16:38:22.6916274Z   STRIX_EXECUTABLE_ROOT: /opt/hostedtoolcache/Python/3.13.15/x64/bin
strix	Run Strix (quick)	2026-08-23T16:38:22.6916794Z   STRIX_EXECUTABLE_SHA256: d2dd9753453674e0081508a08d869e7b629c15f11b70294b980033272734f073
strix	Run Strix (quick)	2026-08-23T16:38:22.6917295Z   LLM_API_KEY_FILE: [REDACTED]
strix	Run Strix (quick)	2026-08-23T16:38:22.6917687Z   LLM_API_BASE_FILE: /home/runner/work/_temp/llm_api_base.txt
strix	Run Strix (quick)	2026-08-23T16:38:22.6918156Z   STRIX_GITHUB_MODELS_KEY_FILE: /home/runner/work/_temp/github_models_fallback_key.txt
strix	Run Strix (quick)	2026-08-23T16:38:22.6918714Z   STRIX_GITHUB_MODELS_API_BASE_FILE: /home/runner/work/_temp/github_models_api_base.txt
strix	Run Strix (quick)	2026-08-23T16:38:22.6919186Z   STRIX_LLM_FILE: /home/runner/work/_temp/strix_llm.txt
strix	Run Strix (quick)	2026-08-23T16:38:22.6919562Z   STRIX_REPO_ROOT: /home/runner/work/_temp/trusted-workspace
strix	Run Strix (quick)	2026-08-23T16:38:22.6919907Z   STRIX_LLM_DEFAULT_PROVIDER: nvidia_nim

... truncated 592 middle log lines ...

strix	Run Strix (quick)	2026-08-23T17:33:21.0337370Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0337943Z │  ## SSRF Protections                                                         │
strix	Run Strix (quick)	2026-08-23T17:33:21.0338479Z │  The `wait_for_url` function in `sandboxed_web_e2e.py` implements robust     │
strix	Run Strix (quick)	2026-08-23T17:33:21.0339113Z │  validation:                                                                 │
strix	Run Strix (quick)	2026-08-23T17:33:21.0339661Z │  - **Host Check**: Blocks external hosts not in `localhost` or `127.0.0.1`   │
strix	Run Strix (quick)	2026-08-23T17:33:21.0340267Z │  ranges.                                                                     │
strix	Run Strix (quick)	2026-08-23T17:33:21.0340847Z │  - **Allowed Redirects**: Permits loopback addresses but blocks external     │
strix	Run Strix (quick)	2026-08-23T17:33:21.0341590Z │  redirection.                                                                │
strix	Run Strix (quick)	2026-08-23T17:33:21.0342144Z │  - **Test Coverage**: `test_ssrf.py` and `test_ssrf2.py` contain test cases  │
strix	Run Strix (quick)	2026-08-23T17:33:21.0342862Z │  verifying this logic.                                                       │
strix	Run Strix (quick)	2026-08-23T17:33:21.0343306Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0343862Z │  **Gaps Identified:**                                                        │
strix	Run Strix (quick)	2026-08-23T17:33:21.0344407Z │  - `test_ssrf3.py` was not found, leaving potential edge cases (e.g., IPv6   │
strix	Run Strix (quick)	2026-08-23T17:33:21.0345085Z │  representations) unverified.                                                │
strix	Run Strix (quick)	2026-08-23T17:33:21.0345569Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0346063Z │  ## SQL Injection Review                                                     │
strix	Run Strix (quick)	2026-08-23T17:33:21.0346701Z │  No unsafe SQL query construction was observed in the test files. The files  │
strix	Run Strix (quick)	2026-08-23T17:33:21.0347365Z │  focus on network validation (SSRF) rather than data layer security.         │
strix	Run Strix (quick)	2026-08-23T17:33:21.0348002Z │  Recommendations include reviewing production code for ORM usage and         │
strix	Run Strix (quick)	2026-08-23T17:33:21.0348694Z │  parameterized queries.                                                      │
strix	Run Strix (quick)	2026-08-23T17:33:21.0349150Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0349628Z │  # Recommendations                                                           │
strix	Run Strix (quick)	2026-08-23T17:33:21.0350170Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0350595Z │  # Recommendations                                                           │
strix	Run Strix (quick)	2026-08-23T17:33:21.0351391Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0352514Z │  1. **Complete SSRF Test Coverage**                                          │
strix	Run Strix (quick)	2026-08-23T17:33:21.0353555Z │   - Implement `test_ssrf3.py` to address IPv6 representations and other      │
strix	Run Strix (quick)	2026-08-23T17:33:21.0354803Z │  edge cases.                                                                 │
strix	Run Strix (quick)	2026-08-23T17:33:21.0355341Z │  2. **Database Security Review**                                             │
strix	Run Strix (quick)	2026-08-23T17:33:21.0355876Z │   - Conduct a thorough review of production code for:                        │
strix	Run Strix (quick)	2026-08-23T17:33:21.0356432Z │    - ORM usage patterns (e.g., Django ORM, SQLAlchemy)                       │
strix	Run Strix (quick)	2026-08-23T17:33:21.0356975Z │    - Parameterized queries vs. string interpolation                          │
strix	Run Strix (quick)	2026-08-23T17:33:21.0357515Z │    - Input sanitization in data processing layers                            │
strix	Run Strix (quick)	2026-08-23T17:33:21.0358058Z │  3. **Enhanced Input Validation**                                            │
strix	Run Strix (quick)	2026-08-23T17:33:21.0358585Z │   - Ensure all user inputs undergo strict validation and sanitization        │
strix	Run Strix (quick)	2026-08-23T17:33:21.0359137Z │  before use in security-sensitive contexts.                                  │
strix	Run Strix (quick)	2026-08-23T17:33:21.0359813Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0360205Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0360655Z ╰──────────────────────────────────────────────────────────────────────────────╯
strix	Run Strix (quick)	2026-08-23T17:33:21.0360893Z 
strix	Run Strix (quick)	2026-08-23T17:33:21.0360900Z 
strix	Run Strix (quick)	2026-08-23T17:33:21.0360904Z 
strix	Run Strix (quick)	2026-08-23T17:33:21.0361144Z ╭─ STRIX ──────────────────────────────────────────────────────────────────────╮
strix	Run Strix (quick)	2026-08-23T17:33:21.0361847Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0362311Z │  Penetration test completed                                                  │
strix	Run Strix (quick)	2026-08-23T17:33:21.0362774Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0363277Z │  Target  /tmp/strix-runtime.EK3bPv/pr-scopes/strix-pr-scope.fTiVko           │
strix	Run Strix (quick)	2026-08-23T17:33:21.0363851Z │  Vulnerabilities  0 (No exploitable vulnerabilities detected)                │
strix	Run Strix (quick)	2026-08-23T17:33:21.0364342Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0364799Z │  Input Tokens 1.4M  ·  Output Tokens 20.5K                                   │
strix	Run Strix (quick)	2026-08-23T17:33:21.0365244Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0365652Z │  Output                                                                      │
strix	Run Strix (quick)	2026-08-23T17:33:21.0366162Z │  /tmp/strix-runtime.EK3bPv/scan-cwd/strix_runs/strix-pr-scope-ftivko_8dda    │
strix	Run Strix (quick)	2026-08-23T17:33:21.0366642Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0367261Z │  View    strix view strix-pr-scope-ftivko_8dda                               │
strix	Run Strix (quick)	2026-08-23T17:33:21.0368144Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:21.0369004Z ╰──────────────────────────────────────────────────────────────────────────────╯
strix	Run Strix (quick)	2026-08-23T17:33:21.0369462Z 
strix	Run Strix (quick)	2026-08-23T17:33:21.0369738Z strix.ai  ·  docs.strix.ai  ·  discord.gg/strix-ai
strix	Run Strix (quick)	2026-08-23T17:33:21.0370077Z 
strix	Run Strix (quick)	2026-08-23T17:33:21.0846918Z Strix run emitted provider infrastructure or failure-signal output; failing closed.
strix	Run Strix (quick)	2026-08-23T17:33:21.1240863Z No Strix vulnerability report artifact was produced; log-only severity markers are incomplete evidence, so the scan is failing closed.
strix	Run Strix (quick)	2026-08-23T17:33:21.1366011Z INFO: Unable to compute PR merge base; falling back to direct base/head diff for changed file enumeration.
strix	Run Strix (quick)	2026-08-23T17:33:21.2990889Z Strix fallback model 'nvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.
strix	Run Strix (quick)	2026-08-23T17:33:21.3036554Z Primary model unavailable; retrying with fallback 'openai-direct/gpt-5.6-luna'.
strix	Run Strix (quick)	2026-08-23T17:33:25.3584411Z 
strix	Run Strix (quick)	2026-08-23T17:33:25.3584510Z 
strix	Run Strix (quick)	2026-08-23T17:33:25.3585503Z ╭─ STRIX ──────────────────────────────────────────────────────────────────────╮
strix	Run Strix (quick)	2026-08-23T17:33:25.3586396Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:25.3586986Z │  LLM CONNECTION FAILED                                                       │
strix	Run Strix (quick)	2026-08-23T17:33:25.3587541Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:25.3588181Z │  Could not establish connection to the language model.                       │
strix	Run Strix (quick)	2026-08-23T17:33:25.3588929Z │  Please check your configuration and try again.                              │
strix	Run Strix (quick)	2026-08-23T17:33:25.3589561Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:25.3590250Z │  Error: litellm.BadRequestError: LLM Provider NOT provided. Pass in the LLM  │
strix	Run Strix (quick)	2026-08-23T17:33:25.3591015Z │  provider you are trying to call. You passed                                 │
strix	Run Strix (quick)	2026-08-23T17:33:25.3592047Z │  model=openai-direct/gpt-5.6-luna                                            │
strix	Run Strix (quick)	2026-08-23T17:33:25.3592827Z │   Pass model as E.g. For 'Huggingface' inference endpoints pass in           │
strix	Run Strix (quick)	2026-08-23T17:33:25.3593603Z │  `completion(model='huggingface/starcoder',..)` Learn more:                  │
strix	Run Strix (quick)	2026-08-23T17:33:25.3594383Z │  https://docs.litellm.ai/docs/providers                                      │
strix	Run Strix (quick)	2026-08-23T17:33:25.3595018Z │                                                                              │
strix	Run Strix (quick)	2026-08-23T17:33:25.3595618Z ╰──────────────────────────────────────────────────────────────────────────────╯
strix	Run Strix (quick)	2026-08-23T17:33:25.3595936Z 
strix	Run Strix (quick)	2026-08-23T17:33:25.4463192Z Strix run failed for model 'openai-direct/gpt-5.6-luna' after 4s (exit code 1).
strix	Run Strix (quick)	2026-08-23T17:33:25.4847342Z No Strix vulnerability report artifact was produced; log-only severity markers are incomplete evidence, so the scan is failing closed.
strix	Run Strix (quick)	2026-08-23T17:33:25.4968874Z INFO: Unable to compute PR merge base; falling back to direct base/head diff for changed file enumeration.
strix	Run Strix (quick)	2026-08-23T17:33:25.6645607Z Strix fallback model 'openai-direct/gpt-5.6-luna' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.
strix	Run Strix (quick)	2026-08-23T17:33:25.6667453Z Strix reported zero vulnerabilities before provider infrastructure failure; failing closed because provider infrastructure failures are not clean scan evidence.
strix	Run Strix (quick)	2026-08-23T17:33:25.6931945Z ##[error]Strix could not complete authoritative vulnerability analysis because its provider/backend was unavailable (rate limit, token cap, connection, warm-up, or model-behavior failure). See the strix-reports artifact and run log.
strix	Run Strix (quick)	2026-08-23T17:33:25.6942301Z ##[error]Process completed with exit code 1.

Changed-File Evidence Map

flowchart LR
  PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
  Evidence --> S1["Changed file: CHANGELOG.md"]
  S1 --> I1["repository behavior"]
  I1 --> R1["Review risk: Changed file: CHANGELOG.md"]
  R1 --> V1["required checks"]
  Evidence --> S2["Docs: sandboxed-web-readiness-loopback-boundary.md"]
  S2 --> I2["operator or user guidance"]
  I2 --> R2["Review risk: Docs: sandboxed-web-readiness-loopback-boundary.md"]
  R2 --> V2["docs review"]
  Evidence --> S3["CI script: sandboxed_web_e2e.py"]
  S3 --> I3["review and security gate shell path"]
  I3 --> R3["Review risk: CI script: sandboxed_web_e2e.py"]
  R3 --> V3["bash -n plus Strix self-test"]
  Evidence --> S4["Test: test_sandboxed_web_e2e.py"]
  S4 --> I4["regression suite"]
  I4 --> R4["Review risk: Test: test_sandboxed_web_e2e.py"]
  R4 --> V4["targeted test run"]
Loading

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