Optionalconfig: PersistentOutcomeStoreConfigOptionallogger: ILoggerOverride append to persist each entry to disk.
OptionalqualitySignals?: string[]OptionalfailureCategory?: OptionalerrorMessage?: stringOptionalwasRetried?: booleanWhether this outcome came from a triage-initiated retry (#1506).
OptionaltriageAction?: stringTriage action taken on the failure (#1506).
OptionalroutingStage?: stringRouting stage that selected this CLI (#1785).
OptionalretryCount?: numberNumber of retry attempts before this outcome (#1785).
Optionalvendor?: stringVendor resolved from model via ModelRegistry at write time (#2548).
Optionalfamily?: stringFamily resolved from model via ModelRegistry at write time (#2548).
OptionalvoterRole?: stringVoter role for source: 'consensus' outcomes (#2662) — architect,
security, etc. Absent on non-consensus outcomes. Lets the
stratified outcome report break results down by voter role.
OptionalbaselineId?: stringBaseline this outcome forked from (#2697 / Epic F follow-up to #2665).
Set on outcomes recorded inside a fork-then-merge graph branch so
query({ baselineId: 'B' }) returns every branch outcome forked
from baseline B — letting later analysis compare branches as a
cohort. Free-form string (caller-assigned); typically the parent
node's executionId or taskId.
Query outcomes with optional filters.
Optionalfilter: {Optionalcli?: "claude" | "gemini" | "codex" | "opencode"Optionalcategory?: Optionalsource?: "delegate" | "consensus" | "manual"Optionalsuccess?: booleanOptionalfailureCategory?: Optionalsince?: stringOptionallimit?: numberOptionalexcludeQualitySignals?: string[]Exclude outcomes with any of these quality signals (#1680).
OptionalbaselineId?: stringRestrict to outcomes recorded against a specific baseline (#2697).
Query outcomes for a specific model with a family-level warm-start
fallback (#2548). When the literal modelId has fewer than
threshold samples in the store, broaden the result to the model's
{vendor, family} siblings — siblings within a family share enough
behavior profile that their outcomes are useful priors for cold
starts after a retirement.
Returns the outcomes and a scope flag so callers know whether
they're consuming literal-id data or family-broadened data.
Optionaloptions: {Aggregate outcomes into a performance summary.
Optionalfilter: {Optionalcli?: "claude" | "gemini" | "codex" | "opencode"Optionalcategory?: Optionalsource?: "delegate" | "consensus" | "manual"Optionalsuccess?: booleanOptionalfailureCategory?: Optionalsince?: stringOptionallimit?: numberOptionalexcludeQualitySignals?: string[]Exclude outcomes with any of these quality signals (#1680).
OptionalbaselineId?: stringRestrict to outcomes recorded against a specific baseline (#2697).
Remove all stored outcomes.
Backfill: reclassify all entries missing failureCategory (#1444). Also reclassifies 'unknown' entries with no error message as 'execution' (#1511) since 'unknown' with no diagnostic info is less useful than the default 'execution' category. Returns count of reclassified entries.
Purge false failures with zero execution time (#1528). Removes non-success entries with durationMs=0 — these are either:
OutcomeStore that persists entries to a JSONL file on disk.