Release history for techtide-swarm. See also release process.
# Changelog
All notable changes to TechTide Swarm 357 are documented here.
[0.2.2]: 2026-07-26
Correction (v0.2.1 gaps)
v0.2.1 labeled HITL as Beta while approve/reject APIs never produced waiting Bash approvals; SSE was unauthenticated and never closed; cancel was process-local only; docs/metrics and `CLAUDE.md` still drifted from baselines and banned paths.
Added
Real Bash HITL gate (`SWARM_HITL_BASH`, default on in server/production) with durable `ApprovalRecord`, timeout reject, `swarm approve` / `swarm reject`, and HTTP resolve wired to waiters.
SSE write-key auth + `stream.end` when the event bus closes on terminal run status.
Durable `cancel_requested` on `RunState` / checkpoint (survives new `Swarm` instance).
Explicit `model_downgrade` telemetry when CostController forces Haiku.
Default Read/Write confinement to CWD (`SWARM_UNSAFE_FS=1` escape).
CI: `pip-audit` fails the job; `dtolnay/rust-toolchain` SHA-pinned; coverage floor **40**.
Changed
Package version **0.2.1 → 0.2.2**.
Site demo writes move to same-origin BFF (server-only `SWARM_API_KEY`); no client write key.
[0.2.1]: 2026-07-25
Correction (v0.2.0)
v0.2.0 public docs/CI badges still referenced scrubbed paths (`.github` workflows, landing tree, vendored Memvid). Fresh installs could not `swarm boot` from the wheel; Support souls were missing; OpenRouter silently mapped opus/sonnet → Haiku; HTTP errors returned 200; layer fan-out could dispatch entire layers.
Wheel bundles `config/swarm-compact.yaml` + `templates/soul/` for self-contained `pip install techtide-swarm`.
`__version__` on package; `/api/health` reports dynamic version.
Community docs: [`SECURITY.md`](/docs/security/security-model), [`CODE_OF_CONDUCT.md`](https://github.com/TechTideOhio/swarm-357), [`RELEASE.md`](/docs/resources/release).
`scripts/generate_roster.py --compact` to validate `config/swarm-compact.yaml` expansion to 357 agents.
HTTP API protections: optional `SWARM_API_KEY` / `X-SWARM-API-KEY` on POST routes; per-IP rate limiting (`SWARM_RATE_LIMIT_PER_MINUTE`); hard cap on `budget_usd` via `SWARM_MAX_RUN_BUDGET_USD`.
Docker-friendly config resolution: `SWARM_CONFIG_PATH` or `/app/config/swarm-compact.yaml`.
Landing: `NEXT_PUBLIC_SWARM_WRITE_KEY` documented for protected POST demos; Live Numbers links to `/api/health`. **Superseded in 0.2.1**: demo writes go through a same-origin BFF with a server-only `SWARM_API_KEY`. Do not use a `NEXT_PUBLIC_` write key.