Skip to main content

Changelog

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).
  • `.github/CODEOWNERS` + CodeQL workflow (python + actions).
  • Gold `CLAUDE.md` aligned to STATUS/SECURITY/VERIFY (no scrubbed path refs).
  • Fixed

  • Docs/metrics honesty: single-agent 142/142 via render script; Bash scenario count; Dream **Experimental** everywhere.
  • 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.

    Added

  • Restored `.github/workflows/ci.yml` + `publish.yml` (SHA-pinned actions, attestations, no core-repo frontend job).
  • Durable runtime: typed `RunState`/`StepState`, SQLite checkpoints, inspect/resume/cancel/replay/fork, SSE events, HITL approval stubs.
  • Atomic `BudgetLedger`, structured routing JSON, resilience helpers, workspace-confined Read/Write, argv Bash policy.
  • `resolve_config_path()` + `swarm init` installs bundled compact config and all Support souls.
  • Structured traces (`.swarm/traces.jsonl`) with optional OTel export (`SWARM_OTEL_EXPORT=1`).
  • Split landing to [TechTideOhio/swarm-357-site](https://github.com/TechTideOhio/swarm-357-site).
  • Memvid bridge depends on crates.io `memvid-core` 2.x; `Cargo.lock` committed.
  • Fixed

  • HTTP `ensure_booted()`; meaningful 4xx/5xx; production auth fail-closed without `SWARM_API_KEY`.
  • OpenRouter model defaults no longer silently substitute Haiku (opt-in `SWARM_OPENROUTER_CHEAP=1`).
  • Layer runs default to one agent per role with a hard cap.
  • Telemetry redacts secrets before JSONL write.
  • Explicit `--simulate` / `SWARM_SIMULATE` instead of successful stubs without credentials.
  • Changed

  • Package version **0.2.0 → 0.2.1**.
  • Docs/STATUS/VERIFY rewritten as executable acceptance criteria (no “10/10” marketing).
  • [0.2.0]: 2026-07-24

    Added

  • OpenRouter provider support via [`llm.py`](https://github.com/TechTideOhio/swarm-357) (`OPENROUTER_API_KEY`, `ANTHROPIC_BASE_URL`).
  • Tool input normalization ([`tools/input_normalize.py`](https://github.com/TechTideOhio/swarm-357)) - alias coercion (`file_path` → `path`), JSON string inputs, unknown-kwarg filtering.
  • Eval harness v2: LLM judge, `$5` hard budget, checkpoint/resume, burn passes, baseline compare ([`evals/run_evals.py`](https://github.com/TechTideOhio/swarm-357)).
  • Generated eval reporting: [`scripts/render_eval_assets.py`](https://github.com/TechTideOhio/swarm-357), [`docs/EVALS.md`](/docs/evals/methodology), [`docs/assets/eval-results.svg`](https://github.com/TechTideOhio/swarm-357).
  • Brand + architecture assets under [`docs/assets/`](https://github.com/TechTideOhio/swarm-357) (logo, banner, architecture, request lifecycle).
  • Landing `/about` route; OG image + PWA icons; TLDR template chrome removed.
  • 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).
  • CI: Docker `/api/health` agents==357 smoke; Next.js typecheck + build; GitHub Release on `v*` tags.
  • Fixed

  • `write_file` / Write tool arity and clearer schema when models omit `content`.
  • Conductor routing runs text-only (`tools=[]`, `max_turns=2`) to avoid tool-call stalls.
  • Agent multi-turn serialization skips thinking blocks; preserves cost on error.
  • Eval keyword scoring coerces non-string YAML keywords (e.g. bare `401`).
  • Resume re-runs prior `error` checkpoint tasks after harness fixes.
  • Landing metadata/sitemap no longer point at `example.com` / TLDR branding.
  • Changed

  • Package version **0.1.0 → 0.2.0**.
  • Root README rewritten with badges, diagrams, and generated eval numbers (25-task catalog; not “5 tasks”).
  • Package README expanded for PyPI (API, CLI, HTTP routes, env vars).
  • [0.1.0]: 2026-07-24

    Added

  • `CostController.record_spend()` - layer spend now accumulates from `Swarm.execute` and `execute_layer`, enabling the 80% model-downgrade path.
  • Structured HTTP request logging (JSON) and `X-Correlation-ID` via ASGI middleware ([`structured_logging`](https://github.com/TechTideOhio/swarm-357)).
  • Optional eval LLM judge (`SWARM_EVAL_LLM_JUDGE`) and optional dream-cycle Haiku notes (`SWARM_DREAM_USE_LLM`) in eval harness and `MemoryManager.run_dream_cycle`.
  • Docs: [docs/BASELINE_MATRIX.md](https://github.com/TechTideOhio/swarm-357), [docs/DATA_PLANE.md](/docs/deployment/supabase), [docs/COMPARISON.md](/docs/resources/comparison); extended [docs/DEPLOY_RAILWAY.md](/docs/deployment/railway) checklist and troubleshooting.
  • [CONTRIBUTING.md](/docs/resources/contributing) for contributors.
  • Objective verification scorecard: [docs/VERIFY.md](/docs/resources/verification).
  • `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`.
  • Railway deployment notes: [docs/DEPLOY_RAILWAY.md](/docs/deployment/railway).
  • Fixed

  • Conductor fallback roles now validated against the roster (`market_analyst` etc.); no longer silently skips specialists on stub/unparseable routing.
  • `swarm boot` and `swarm agent --list` use expanded compact roster (was showing 0 agents for `swarm-compact.yaml`).
  • `swarm dream` prints actual `run_dream_cycle` fields (`contradictions_found`, `duplicates_found`, …).
  • Memvid bridge failures log warnings instead of silent `pass`; one-time warning when bridge binary is missing.
  • Landing: hero reads `heroConfig`; footer contact points at GitHub issues; fabricated testimonials gated off.
  • Changed

  • Landing: `NEXT_PUBLIC_SWARM_WRITE_KEY` documented for protected POST demos; Live Numbers links to `/api/health`.
  • GitHub links updated to `TechTideOhio/swarm-357`.