hotato 1.17.0
[1.17.0] - 2026-07-28
Fixed
pip install 'hotato[mcp]'works again. The MCP extra was pinned
mcp>=1.2.0with no ceiling, so a fresh install resolved mcp 2.0.0, which
removedmcp.server.fastmcp--hotato-mcpthen exited reporting the SDK
was not installed while it was. The extra now readsmcp>=1.2.0,<2, the
range whose API the server consumes, in both[mcp]and[all]. The
parity tests skip onmcp.server.fastmcprather than onimport mcp, so
an SDK shape change reads as a skip with a reason instead of a SystemExit.hotato describestarts an agent where the docs start a human. Its
core_looprendered the five deep-toolkit commands, not the funnel the
README,--helpandllms.txtall document.core_loopis now the
first-run funnel (autopsy -> scan -><stack>health -> pin -> prove) and
the longer first-touch-to-CI-gate path is published beside it as
deep_loop, each under its own heading in the text render.- A stalled
ffmpegcan no longer hang an autopsy. Converting a
non-WAV input now runs under a size-scaled ceiling (60s floor, 900s cap),
and a timeout raises the same refusal an undecodable file does (exit 2)
instead of blocking forever. - Report byte-stability documented as it behaves. The autopsy page
carries the source file's name, so the same recording under two names
renders two pages at one content-addressed path; the docstring said the
bytes were stable across runs without that qualification.
Added
hotato lab-- the deep toolkit gets its own front door. The
top-level--helpnow shows only the public surface (autopsy,scan,
pin,prove,connect, the five<stack> healthcommands,start,
demo,doctor,console,production,serve,contract,
describe); every other command lives underhotato lab <cmd>, and
hotato lab --helplists each one with its one-line description. One
registration layer (_SurfaceRouter) decides visibility: a lab command
registers exactly as before -- same name, same parser, same behavior --
but without a parent help line, so every pre-1.17 top-level spelling
keeps working unchanged as a compat alias, and thelabprefix is pure
argv dispatch onto the same parser. The stability statement (public
commands durable; lab evolves faster; old spellings keep working)
renders in the--helpepilog tail,hotato lab --help, README,
CONTRIBUTING (with the monthly-stable release cadence), and the
describemanifest.hotato describerecords both spellings per command. Every
top-level manifest entry now carriessurface(publicorlab), its
canonicalspelling, andcompat_alias(the still-working pre-1.17
top-level name;nullfor public commands), plus a top-level
stabilityfield. The text rendering shows lab commands under
hotato lab ...with the alias beside them. Exit codes, args, and the
command set itself are unchanged.docs/EVIDENCE-CONTRACT.md-- the four-tier evidence policy, stated
once. Tier 1 dual-channel audio (deterministic, the only
verdict-eligible tier), tier 2 mono plus provider metadata (attributable
findings, each carrying its source's declared authority), tier 3 raw
mixed mono (symptom detection with a measured confidence), tier 4
insufficient evidence (refused, exit 2, with the remediation). README,
AUTOPSY.md, the trust docs, and the docs index link to it instead of
restating it;tests/test_evidence_contract.pyholds the page and its
referencing surfaces in lockstep.
Changed
- docs index restructured to the loop.
docs/README.mdnow leads with
the loop (autopsy -> scan -> pin -> prove -><stack> health), then
continuous use, then a Lab section grouping the moved commands' docs.
Every doc stays listed. - Superlative sweep. Unsupported superlatives replaced with measured
framing: the README say-do bullet now reads "a bug that fires actions
the caller canceled", anddocs/STARTER.mdopens with what the one
command does.
Full entry: https://github.com/attenlabs/hotato/blob/v1.17.0/CHANGELOG.md