diff --git a/CHANGELOG.md b/CHANGELOG.md index 247a36c..00c7af5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ Every entry reports millisecond measurement error and a confusion matrix. See `d ## [Unreleased] +## [1.16.0] - 2026-07-24 + ### Added - **`hotato vapi|retell|bland|synthflow|millis health` -- one command from API key to the fleet health report.** Thin entries over ONE diff --git a/CITATION.cff b/CITATION.cff index 23e0b0e..8ef0397 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -16,8 +16,8 @@ type: software authors: - name: "Attention Labs, Inc." license: MIT -version: 1.15.1 -date-released: "2026-07-21" +version: 1.16.0 +date-released: "2026-07-24" repository-code: "https://github.com/attenlabs/hotato" url: "https://hotato.dev" keywords: diff --git a/README.md b/README.md index 7188ce9..cd63038 100644 --- a/README.md +++ b/README.md @@ -94,10 +94,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: attenlabs/hotato@v1.15.1 + - uses: attenlabs/hotato@v1.16.0 with: contracts: contracts/ - hotato-version: 1.15.1 + hotato-version: 1.16.0 ``` Copy-paste workflow with a commit-SHA pin: [`docs/CI.md`](docs/CI.md). diff --git a/README.pypi.md b/README.pypi.md index 869691c..1b330cd 100644 --- a/README.pypi.md +++ b/README.pypi.md @@ -94,10 +94,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: attenlabs/hotato@v1.15.1 + - uses: attenlabs/hotato@v1.16.0 with: contracts: contracts/ - hotato-version: 1.15.1 + hotato-version: 1.16.0 ``` Copy-paste workflow with a commit-SHA pin: [`docs/CI.md`](https://github.com/attenlabs/hotato/blob/main/docs/CI.md). diff --git a/atlas/records/addressed-backchannel-yielded.json b/atlas/records/addressed-backchannel-yielded.json index de3084e..e19eaa6 100644 --- a/atlas/records/addressed-backchannel-yielded.json +++ b/atlas/records/addressed-backchannel-yielded.json @@ -164,7 +164,7 @@ "provenance": { "hotato": { "name": "hotato", - "version": "1.15.1" + "version": "1.16.0" }, "inputs": [ { @@ -196,7 +196,7 @@ ], "source_result_digest": "sha256:7a691d5993389b47f2b43b7afbe7316bbb0d662e703fa0f8a82e39b93b052c08" }, - "record_id": "sha256:70f0fc141627f293d1ca134f307a0560f41103f43d5ef967b7d27f40c060cb4f", + "record_id": "sha256:4787ed97922e611ce807281df1f69bfcdb55d76459338802c103d9248f8f1b1d", "reproduction": { "argv": [ "hotato", @@ -222,7 +222,7 @@ "version": "1.0" }, "reproduction_metadata": { - "hotato_version": "1.15.1", + "hotato_version": "1.16.0", "reviewer_principal": "hotato-examples", "working_directory": ".", "bundle": { @@ -240,7 +240,7 @@ "verify_output": "verify.json", "selector": "fd-02-backchannel-yielded", "record_out": "record", - "expected_record_id": "sha256:70f0fc141627f293d1ca134f307a0560f41103f43d5ef967b7d27f40c060cb4f" + "expected_record_id": "sha256:4787ed97922e611ce807281df1f69bfcdb55d76459338802c103d9248f8f1b1d" }, "supersedes": { "record_id": "sha256:6c5e0e6de73004d8683c0987812d849c46fa9f9f8f204eb4da71e600b636e3a0", @@ -268,8 +268,8 @@ }, { "command": "hotato record render verify.json#fd-02-backchannel-yielded --out record", - "output": "wrote failure record (FAIL, fd-02-backchannel-yielded) to record/: failure-record.html, failure-record.json, failure-record.md, failure-record.svg\nrecord_id: sha256:70f0fc141627f293d1ca134f307a0560f41103f43d5ef967b7d27f40c060cb4f\n" + "output": "wrote failure record (FAIL, fd-02-backchannel-yielded) to record/: failure-record.html, failure-record.json, failure-record.md, failure-record.svg\nrecord_id: sha256:4787ed97922e611ce807281df1f69bfcdb55d76459338802c103d9248f8f1b1d\n" } ], - "content_digest": "sha256:6efe74abf4d49ceb0d51f8673e174510eff437a89958cbdf90901049e3b36980" + "content_digest": "sha256:fb83dafb6481c1ba84c7c856afd4cb1f547db272a8a2291e43b6cc1813fc0725" } diff --git a/atlas/records/addressed-interruption-missed.json b/atlas/records/addressed-interruption-missed.json index 9f96964..92d8db0 100644 --- a/atlas/records/addressed-interruption-missed.json +++ b/atlas/records/addressed-interruption-missed.json @@ -164,7 +164,7 @@ "provenance": { "hotato": { "name": "hotato", - "version": "1.15.1" + "version": "1.16.0" }, "inputs": [ { @@ -196,7 +196,7 @@ ], "source_result_digest": "sha256:d3ec5aa5bbbdac05ef1ee7ad6d2612afd3916504e313e16df56ea3c334cb1346" }, - "record_id": "sha256:25f01ea209620cbd36b6ec662dfce124eb989f53f303be808c65f2f6d90ed674", + "record_id": "sha256:9dd904467fc84fa46d32def69d073da9110528a055ea094397d60be34120309a", "reproduction": { "argv": [ "hotato", @@ -222,7 +222,7 @@ "version": "1.0" }, "reproduction_metadata": { - "hotato_version": "1.15.1", + "hotato_version": "1.16.0", "reviewer_principal": "hotato-examples", "working_directory": ".", "bundle": { @@ -242,7 +242,7 @@ "verify_output": "verify.json", "selector": "fd-01-missed-interruption", "record_out": "record", - "expected_record_id": "sha256:25f01ea209620cbd36b6ec662dfce124eb989f53f303be808c65f2f6d90ed674" + "expected_record_id": "sha256:9dd904467fc84fa46d32def69d073da9110528a055ea094397d60be34120309a" }, "supersedes": { "record_id": "sha256:772fbb2a13addeb5cfbfb82d3c1652b15cb547d004e2db3db4341779c99c4336", @@ -270,8 +270,8 @@ }, { "command": "hotato record render verify.json#fd-01-missed-interruption --out record", - "output": "wrote failure record (FAIL, fd-01-missed-interruption) to record/: failure-record.html, failure-record.json, failure-record.md, failure-record.svg\nrecord_id: sha256:25f01ea209620cbd36b6ec662dfce124eb989f53f303be808c65f2f6d90ed674\n" + "output": "wrote failure record (FAIL, fd-01-missed-interruption) to record/: failure-record.html, failure-record.json, failure-record.md, failure-record.svg\nrecord_id: sha256:9dd904467fc84fa46d32def69d073da9110528a055ea094397d60be34120309a\n" } ], - "content_digest": "sha256:d38d9900d7e3265b62b96fb05bdcb8189717b239ce5796d35a1cd06bee246967" + "content_digest": "sha256:8e573dac31160650b48580acc78608a61c911dbefb9068f0f9080b5277badfd9" } diff --git a/docs/CI.md b/docs/CI.md index 5bfe2c8..e40d162 100644 --- a/docs/CI.md +++ b/docs/CI.md @@ -19,7 +19,7 @@ Conversation failed: Agent did not yield; measured talk-over was 2.66 s. Share in a PR: hotato-failure-record/failure-record.md Share as an image: hotato-failure-record/failure-record.svg - Verify the record: uvx --from hotato==1.15.1 hotato record verify hotato-failure-record/failure-record.json + Verify the record: uvx --from hotato==1.16.0 hotato record verify hotato-failure-record/failure-record.json ``` Preview it locally, then scaffold the durable gate into your own repository @@ -43,11 +43,11 @@ offline -- it runs the pinned Action revision itself off PYTHONPATH (no pip, no package index), installs no model, no ASR, no Node tool, calls no external judge, and reads no secret. -Composite Action since v1.4.0. Adopt the current release (v1.15.1), pinned +Composite Action since v1.4.0. Adopt the current release (v1.16.0), pinned by its full commit SHA; resolve the tag to its SHA first: ```bash -git ls-remote https://github.com/attenlabs/hotato refs/tags/v1.15.1 +git ls-remote https://github.com/attenlabs/hotato refs/tags/v1.16.0 ``` Then commit this workflow (replace the `attenlabs/hotato` pin with the SHA @@ -69,7 +69,7 @@ jobs: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - id: hotato # Pin by full commit SHA (immutable); the comment names the release. - uses: attenlabs/hotato@ # v1.15.1 + uses: attenlabs/hotato@ # v1.16.0 with: suite: tests/voice/qa.suite.json agent: support-agent @@ -107,7 +107,7 @@ Everything else is optional: | Value | Effect | |---|---| | `action` (default) | Installs the pinned Action revision itself, `--no-deps`, no package-index egress -- exactly the revision your workflow pinned | -| an exact version, e.g. `1.15.1` | `pip install --no-deps hotato==1.15.1` | +| an exact version, e.g. `1.16.0` | `pip install --no-deps hotato==1.16.0` | | `preinstalled` | Skips installation (hotato is already on the runner) | A range or `latest` is refused, so the pin always names one exact diff --git a/docs/TRUST-GALLERY.md b/docs/TRUST-GALLERY.md index 8c6c6d5..98e6271 100644 --- a/docs/TRUST-GALLERY.md +++ b/docs/TRUST-GALLERY.md @@ -1,7 +1,7 @@ # Trust gallery: eight recordings, eight verdicts Eight named input conditions, each with the `hotato` output it produces. -Every block below is verbatim CLI output from hotato 1.15.1, offline. The rows +Every block below is verbatim CLI output from hotato 1.16.0, offline. The rows correspond to the [trust matrix](TRUST-MATRIX.md). The clean and echo cases use the bundled examples diff --git a/llms-full.txt b/llms-full.txt index 32df476..39917fd 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -98,10 +98,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: attenlabs/hotato@v1.15.1 + - uses: attenlabs/hotato@v1.16.0 with: contracts: contracts/ - hotato-version: 1.15.1 + hotato-version: 1.16.0 ``` Copy-paste workflow with a commit-SHA pin: [`docs/CI.md`](docs/CI.md). @@ -6777,7 +6777,7 @@ Conversation failed: Agent did not yield; measured talk-over was 2.66 s. Share in a PR: hotato-failure-record/failure-record.md Share as an image: hotato-failure-record/failure-record.svg - Verify the record: uvx --from hotato==1.15.1 hotato record verify hotato-failure-record/failure-record.json + Verify the record: uvx --from hotato==1.16.0 hotato record verify hotato-failure-record/failure-record.json ``` Preview it locally, then scaffold the durable gate into your own repository @@ -6801,11 +6801,11 @@ offline -- it runs the pinned Action revision itself off PYTHONPATH (no pip, no package index), installs no model, no ASR, no Node tool, calls no external judge, and reads no secret. -Composite Action since v1.4.0. Adopt the current release (v1.15.1), pinned +Composite Action since v1.4.0. Adopt the current release (v1.16.0), pinned by its full commit SHA; resolve the tag to its SHA first: ```bash -git ls-remote https://github.com/attenlabs/hotato refs/tags/v1.15.1 +git ls-remote https://github.com/attenlabs/hotato refs/tags/v1.16.0 ``` Then commit this workflow (replace the `attenlabs/hotato` pin with the SHA @@ -6827,7 +6827,7 @@ jobs: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - id: hotato # Pin by full commit SHA (immutable); the comment names the release. - uses: attenlabs/hotato@ # v1.15.1 + uses: attenlabs/hotato@ # v1.16.0 with: suite: tests/voice/qa.suite.json agent: support-agent @@ -6865,7 +6865,7 @@ Everything else is optional: | Value | Effect | |---|---| | `action` (default) | Installs the pinned Action revision itself, `--no-deps`, no package-index egress -- exactly the revision your workflow pinned | -| an exact version, e.g. `1.15.1` | `pip install --no-deps hotato==1.15.1` | +| an exact version, e.g. `1.16.0` | `pip install --no-deps hotato==1.16.0` | | `preinstalled` | Skips installation (hotato is already on the runner) | A range or `latest` is refused, so the pin always names one exact @@ -13697,7 +13697,7 @@ FILE: docs/TRUST-GALLERY.md # Trust gallery: eight recordings, eight verdicts Eight named input conditions, each with the `hotato` output it produces. -Every block below is verbatim CLI output from hotato 1.15.1, offline. The rows +Every block below is verbatim CLI output from hotato 1.16.0, offline. The rows correspond to the [trust matrix](TRUST-MATRIX.md). The clean and echo cases use the bundled examples diff --git a/llms.txt b/llms.txt index 97f1589..ff708af 100644 --- a/llms.txt +++ b/llms.txt @@ -38,7 +38,7 @@ > --format json` regenerates the same command data straight from the CLI's > argparse, so it never drifts from the real flags. > -> Version 1.15.1 +> Version 1.16.0 ## Start here diff --git a/pyproject.toml b/pyproject.toml index 544588b..fe8454a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta" [project] name = "hotato" -version = "1.15.1" +version = "1.16.0" description = "Find what broke in your agent calls. Pin it so it never ships again. Local call forensics and regression guards for AI agents: deterministic, byte-reproducible, free, MIT, CI-native. Nothing leaves your machine." readme = "README.pypi.md" # Support policy: requires-python is lower-bounded only. There is no upper cap diff --git a/server.json b/server.json index 6369428..feb9331 100644 --- a/server.json +++ b/server.json @@ -2,7 +2,7 @@ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json", "name": "io.github.attenlabs/hotato", "description": "Find what broke in your agent calls. Pin it so it never ships again. Local call forensics. MIT.", - "version": "1.15.1", + "version": "1.16.0", "repository": { "url": "https://github.com/attenlabs/hotato", "source": "github", @@ -14,7 +14,7 @@ "registryType": "pypi", "registryBaseUrl": "https://pypi.org", "identifier": "hotato", - "version": "1.15.1", + "version": "1.16.0", "runtimeHint": "uvx", "transport": { "type": "stdio" diff --git a/src/hotato/__init__.py b/src/hotato/__init__.py index 2fbd281..c97d80b 100644 --- a/src/hotato/__init__.py +++ b/src/hotato/__init__.py @@ -65,6 +65,6 @@ # absent or can describe a DIFFERENT installed copy than the code executing. # tests/test_version_lockstep.py enforces the match; 0.4.0 shipped # self-reporting 0.3.1 because nothing did. -__version__ = "1.15.1" +__version__ = "1.16.0" __all__ = ["run_single", "run_suite", "LIMITS", "SUITE_ID", "__version__"]