Skip to content

hotato 0.7.0

Choose a tag to compare

@quantumCF quantumCF released this 10 Jul 01:58

Added

  • hotato explain, root cause by layer without guessing: reads the
    evidence a run already produced (score results, fix plans, trust reports,
    contract bundles, attached voice traces) and emits an attribution per
    failure: the likely layer (turn-taking taxonomy: failure layer, type,
    confidence, fixability, opposite risk), the evidence for and against it,
    the explicit unknowns (for example, no client-side playout trace attached),
    and one safe next action. When the evidence cannot support an attribution
    (an unlabeled candidate, a not-scorable input, conflicting signals) it
    REFUSES with the reason instead of guessing. Text, --format json
    (schema hotato.explain.v1), and HTML report output. Explain reports
    timing evidence; it does not prove root cause and does not infer intent.
  • hotato fix trial, one command from candidate fix to before/after
    proof
    : composes the shipped primitives (apply --clone, the verify
    battery, contract verification, and the opposite-risk guardrails) into a
    single fail-closed trial: baseline on the recorded failure, apply the
    candidate change in a clone (production config is never touched), re-run,
    and check neighbouring and opposite-risk cases. Verdicts: improved
    (exit 0), regressed (exit 1, forced by ANY fixture or opposite-risk
    regression even when everything else improved), inconclusive (exit 3,
    refused rather than softened). The report embeds the explain attribution
    for the failure under trial.
  • Operator-grade capture depth for LiveKit and Pipecat in the starter
    templates and docs: where turn-taking configuration lives in each stack
    and how to capture per-party audio for scoring.

Fixed

  • hotato contract unpack now treats every archive as hostile input:
    rejects path traversal (including backslash and drive-letter forms),
    symlinked and encrypted members, duplicate member names, members not
    declared in the manifest, oversized decompression (512 MiB default,
    --max-bytes / HOTATO_CONTRACT_MAX_UNPACK_BYTES override, enforced
    against actual streamed bytes, not just declared metadata), and
    compression-ratio bombs. Extraction stays atomic: a refused archive
    leaves nothing behind. pack cross-platform byte determinism is now
    explicit rather than incidental.