Skip to content

Result status

Every FrameworkAttempt terminates with a typed result status. Status is not a score — errors never become implicit zero.

Status values

StatusMeaning
succeededRunner finished; zero or more projected measurements may follow
invalid_inputDefinition, result bundle, or capability input rejected
missing_evidenceRequired artifact absent — explicit, not silent skip
unsupportedCapability not recognized at plan time or runtime
timed_outAttempt exceeded budget
cancelledWorkflowRun cancelled
resource_exhaustedQuota, memory, or cost cap hit
runner_errorFramework runner runtime failure
subject_errorSubject failed before the runner could complete

Rules

  1. succeeded with no measurements is valid (projection optional; native bundle may still be rich).
  2. Never map errors to score 0 — gate policies must treat missing/failed attempts explicitly.
  3. Outer retries create immutable FrameworkAttempt records linked to the same WorkflowRun slot; deterministic result keys prevent duplicate projected measurements.
  4. Framework-internal retries/trials stay inside the native result bundle — Softprobe does not invent CaseRun IDs for them.

Gate interaction

Gate policies reference outer status and explicitly selected runner-reported or projected fields. A common pattern:

text
framework_attempt.status = succeeded
AND native.summary.failedCount = 0

Diagnostics

invalid_input, missing_evidence, and unsupported include structured diagnostics in the event ledger (and --json validate output for pack-time failures).

Zero code changes · Full-context visibility · Cost optimization