Skip to content

Autonomy canary SLOs

Koryph does not treat a green repository gate as proof that autonomous operation is safe. A bounded canary must also prove completion quality, retry economy, latency, resource behavior, and safety. The canary report is the durable release decision.

Publish a report

The bounded native-loop supervisor derives evidence from its durable state, engine ledgers, authenticated review and gate artifacts, terminal manifests, and command events. It publishes the release report directly to .plan-logs/koryph/canary/autonomous-loop-reliability.json; there is no operator-authored intermediate input in the release path.

For offline fixture evaluation and recovery diagnostics only, the same report evaluator is available as:

koryph metrics autonomy \
  --input .plan-logs/koryph/canary/evidence.json \
  --out .plan-logs/koryph/canary/offline-autonomy-diagnostic.json

--json also prints the report. A report created by this command cannot satisfy release doctor by itself: doctor also requires the exact matching identity and publication checkpoint from durable native-supervisor state. Koryph writes the report atomically and create-once: an existing report is never replaced, even by identical bytes. When an account or other canary-bound registry setting changes, the next fixed-canary invocation moves the prior report and checkpoint into generation-keyed history before freeing the fixed path for the new generation. Historical evidence is retained; it cannot promote the new registry identity or satisfy doctor --autonomy-canary. Publication and loading walk every path component relative to an open directory descriptor with no-follow semantics. A symlinked parent, final symlink, FIFO, device, socket, or other non-regular report target is rejected.

The command publishes failure evidence before returning a nonzero exit status. The report includes the installed source commit, binary version, fixed cohort and its digest, contract digest, non-repeating registry validation identity, every implementation attempt and typed outcome, stage timings, process events, pressure samples, normalized tokens, artifact bytes, and the final decision. Its evidence digest authenticates all identity, evidence, derived metrics, and checks.

Initial thresholds

The evidence input carries the thresholds applied to that canary. The approved defaults are:

Measure Default
Eligible small/medium Beads at least 10
Autonomous correct completion at least 90%
First semantic-review pass at least 75%
Retry attempts / implementation dispatches at most 20%
Frontier implementation dispatches at most 5%
Median dispatch to terminal at most 15 minutes
p95 dispatch to terminal at most 30 minutes
Active artifacts, excluding retained failure evidence at most 2 GiB
Hard active-artifact tripwire 5 GiB

Gate, semantic-review, and merge queue time and service time are separate distributions. They are not folded into one opaque “finalization” duration. Each stage carries an explicit reached bit. A reached stage contributes both queue and service samples even when either duration is zero; an unreached stage must carry zero durations. Even-sized medians round upward so integer truncation cannot turn a threshold miss into a pass. Dispatch-to-terminal begins at the first attempt and ends at the final typed terminal outcome, so retries remain visible in bead latency.

Normalized token total is exactly:

fresh input + output + cache read + cache creation

A provider's inclusive input counter is retained for audit but is never added to that total.

Denominators and exclusions

Only a predeclared external-capability hold may leave the eligible cohort. The report retains excluded Beads and their evidence, but removes them from velocity denominators. An unplanned capability block stays eligible and adds the misclassified-capability-block safety violation; it cannot improve a rate by shrinking the denominator.

Autonomous completion uses all eligible cohort Beads as its denominator. A completion counts only when the final outcome is both terminal and correct and no attempt records operator intervention. First-review pass uses candidates that reached semantic review. Retry rate is retry implementation dispatches divided by all eligible implementation dispatches. Attempts must be numbered contiguously per Bead, and every retry must carry a typed reason plus prior and current evidence digests.

Model tiers are the closed vocabulary light, standard, and frontier. Outcomes are also closed and their truth fields are canonical: successful terminal outcomes are correct, failure outcomes are not, and intermediate outcomes are neither terminal nor correct. An external capability exclusion must end in the final canonical capability-hold outcome with block_kind: external-capability; free-form or intermediate capability states cannot remove a Bead from a denominator.

All attempt dispatches, terminal times, process events, and pressure samples must be ordered and fall inside the declared canary interval. Authenticated candidate completion must follow dispatch; gate completion must follow the candidate; general review must follow the gate; required security review must follow general review; and the typed terminal outcome must follow the completed review lanes and precede the canary end. Review completion timestamps and queue/service reach evidence must agree. generated_at is publication time and must not precede the interval end. Token counters use checked arithmetic: negative provider totals and any per-attempt or aggregate overflow reject the report rather than wrapping.

Fail-closed posture

The canary fails on any configured threshold miss. It also fails immediately for missing or failed required safety evidence, an unchanged retry, an idle ledger creation, a duplicate broad command, inconsistent token semantics, unjustified frontier implementation, a misclassified capability hold, persistent critical pressure, or the artifact hard limit.

Admission durably fixes a 30-minute inactivity limit, aligned with the approved p95 dispatch-to-terminal ceiling. The progress timestamp starts at admission and advances only when the supervisor records new terminal evidence for a cohort member. Observation, dispatch, duplicate terminal events, process restart, and idle polling cannot refresh or loosen it. Expiry drains the engine, opens the circuit, and publishes the available cohort evidence as a failed partial report. The same failed-publication path is used when observation, engine, or non-progress restart budgets are exhausted.

The project doctor consumes the same immutable report and independently recomputes its metrics and decision. It also requires a complete live release expectation supplied from trusted supervisor/release state. The expectation pins the exact project, full installed commit, binary version, contract digest, cohort and cohort digest, thresholds, canary start, evidence digest, generation time, and publication checkpoint. A maximum publication delay and explicit future clock-skew bound prevent a replayed, stale, or future-dated report from passing. Calling the doctor check without that expectation fails closed; generic strict loading is only for internal inspection and recovery comparison.

A missing, malformed, duplicate-keyed, tampered, foreign, stale, unsafe, or below-threshold report is an error posture, not a warning. The native loop must remain drained until the report is valid and every check passes.