Skip to content

fix(strix): distinguish recovered provider faults from inconsistent terminal scan evidence #2026

Description

@seonghobae

Fresh exact canary

ContextualWisdomLab/Orgmetra#64@818950960c4fe0a4e7b026bd5499fe9cca1002be produced a new required Strix terminal failure in run 34131638369, job 101787200568.

The job is not a startup/queue/sandbox failure. Exact-head admission, trusted source materialization, contextual-orchestrator sidecar provisioning, Strix installation, and model/base preparation all succeeded. Run Strix (quick) ran from 2026-09-07T15:52:49Z to 18:52:48Z, then the artifact was uploaded.

Artifact strix-reports id 10030120846 is exact-head bound and has GitHub digest sha256:e61c95771ab6c37f7a60431f01eff4ada91adbcfbd2f6eaf79a803aacd7f9d5c. Independent local hashing of the downloaded ZIP matched that digest.

Inside that immutable artifact:

  • run.json (sha256:3fab449a5fcc1d4507c163d58109c6d414b786dddc92f950e9f00beea73e6166) records status="completed", scan_results.scan_completed=true, scan_results.success=true, and 191 LLM requests.
  • findings.sarif (sha256:32434df418c1d319e32cb5c174697ccd70bff77b93b74459fec9632c762225ab) contains an empty results array.
  • penetration_test_report.md (sha256:037d479f18d3b8cbdaeed06eb95e8814536eff98333681be8ee6d5c41fed1566) says the penetration test completed with no high-impact vulnerabilities, but its Technical Analysis also says it identified "several low-impact issues", including potential SQL injection and employment-version-validation issues. Those claims are not represented as SARIF findings.
  • gate-console.log (sha256:97b3bcb9752ce00efab0ae4d76d2c03d1952d3d152ad22faf8fb2a66a6206a2d) contains a real recovered openai.InternalServerError/HTTP 500 during the scan, then later prints Penetration test completed and Vulnerabilities 0, followed by Strix report artifacts emitted warning/fatal/denied/timeout output; failing closed., Strix run emitted provider infrastructure or failure-signal output; failing closed., and finally STRIX_PROVIDER_UNAVAILABLE: contextual-orchestrator/orchestrator/free exhausted.

No rerun, elapsed-time cap, external provider fallback, manual success status, or bypass was used.

Source contradiction on protected main

Protected .github main@78a4937c684a54ca8e415822c913742f41c6efc4 currently documents in scripts/ci/strix_quick_gate.sh that the sticky infrastructure flag prevents incomplete-evidence bypass, but that a successful Strix exit ignores the flag because the scanner produced a complete result set. The same script then makes strict mode (STRIX_FAIL_ON_PROVIDER_SIGNAL=1) return failure for rc=0 whenever the newest report contains a warning/fatal/denied/timeout or provider failure signal. The required workflow explicitly sets STRIX_FAIL_ON_PROVIDER_SIGNAL: "1" and forbids external fallback because orchestrator/free owns discovery/failover.

The fresh Orgmetra canary therefore exposes two different questions that the current verdict collapses into STRIX_PROVIDER_UNAVAILABLE:

  1. Recovered provider transport faults: a model request failed during a long scan, but Strix later emitted status=completed, scan_completed=true, and success=true.
  2. Terminal evidence consistency: the terminal narrative itself names low-impact potential issues while SARIF contains no findings. That is an evidence-integrity concern independent of provider availability.

The current gate cannot tell the operator which of these actually invalidated the scan. In this canary it also says the gateway was exhausted even though the same artifact contains a terminal completed scan after the recovered fault. Do not treat that diagnostic as proof that the gateway had no usable route at termination.

Safety boundary

This issue does not propose converting recovered provider errors into automatic success. The Orgmetra artifact is not acceptable GREEN evidence as-is because the terminal narrative/SARIF representation is internally inconsistent. It also does not propose an elapsed-time timeout, direct provider/model fallback, orchestrator/auto, paid fallback, or weakening #891 fail-closed behavior.

The owner repair should preserve orchestrator/free and fail closed, but classify the failure causally.

RED acceptance

A deterministic fixture reproduces all of the following at once:

  • Strix process exits 0 and terminal structured metadata says completed/success;
  • a bounded/recovered provider exception exists earlier in the same run;
  • terminal report/SARIF disagree about whether findings exist;
  • current strict gate emits the generic provider-unavailable/exhausted verdict without distinguishing recovered transport telemetry from terminal evidence inconsistency.

Also retain fixtures where provider failure actually prevents terminal scan evidence; those must remain STRIX_PROVIDER_UNAVAILABLE/non-passing.

GREEN acceptance

  1. Define a typed terminal-evidence state machine for at least: complete-consistent scan, incomplete/provider-unavailable scan, and complete-but-internally-inconsistent scan.
  2. Recovered provider faults remain observable and auditable, but do not by themselves prove gateway exhaustion after a later terminal scan receipt exists.
  3. A completed scan whose narrative/run metadata/SARIF disagree about findings fails closed as an evidence-integrity verdict, not a fabricated provider-exhaustion diagnosis.
  4. Missing/partial/skipped/cancelled/neutral/provider-exhausted evidence remains non-passing per [Security] Fail closed when Strix produces no authoritative scan evidence #891.
  5. Preserve orchestrator/free + gateway token only; no provider/model/group hard-code or external/paid fallback.
  6. Preserve model timeout default-null semantics. Do not classify a healthy reasoning/stream/tool-call solely by elapsed time; Strix run ended "cancelled" at 6h with no verdict: 909 provider attempts, 92% on one route, 0 exhaustion events, request identity absent from evidence #2000's attempt/identity investigation stays separate.
  7. Add exact artifact fixtures for recovered provider fault + complete consistent evidence, recovered provider fault + inconsistent terminal evidence, and genuine incomplete/provider-unavailable evidence.
  8. After protected merge, rerun unchanged Orgmetra#64@818950960c4fe0a4e7b026bd5499fe9cca1002be and require a typed terminal verdict whose diagnosis matches the emitted artifact. Do not reuse predecessor evidence.

Related owner work

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingpriority: highHigh-priority or P1 work

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions