Changelog
What's changed in Anvil
Releases in reverse chronological order. Breaking changes are called out inline.
v3.4.2Latest
- Added Sign in with Apple and Sign in with Google via Supabase Auth; magic-link fallback with rate-limited OTP
- Light theme is now the default; three-option toggle (Light · Dark · System) lands in the site header
- New Koydo-standard site footer across marketing and dashboard surfaces
- Rejection regression suite ships a 3-pack of new starter specs for the Google Play Target-API policy (2026-Q3)
- Perf gate: improved baseline derivation (last 3 prod tags instead of last 5) to cut noise
- Fixed a race in the device-JWT revocation list poll that could keep revoked tokens live for up to 90s
- KID driver: increased XCTest main-thread watchdog from 90s to 110s to match Apple's cap
- Android KAD: resolved intermittent 'Accessibility Service not installed' false-positive on Samsung One UI 6.1
- Dashboard: new run-grouping pill on the runs index, filters by branch + device class together
- New adversarial matrix regenerator — 9 axes, 359 pairwise specs, ~4x faster to regenerate
- MCP server stable — drive Anvil from Claude Code, Cursor, Windsurf; full verb surface exposed as tools
- visionOS driver (KVD) hits parity with KID on the 82-verb surface; watchOS driver (KWD) at 62/82
- Added `anvil spec propose --intent` — the agent writes the spec for you from a one-line intent
- Perfetto trace ingestion replaces the legacy proprietary trace format — 3x faster to diff, 5x smaller on disk
- Cortex telemetry fan-out added: device events propagate to the shared Koydo nervous system
- New per-org audit log — every orchestrator API call recorded with actor, device, verb
- Rejection suite: added 12 new common rejection categories informed by 2025 App Review trends
- Screen recording added to every run (off by default; flip with --record)
- KAD: UiAutomator2 upgrade fixes a class of intermittent gesture-not-received failures on Pixel 8
- New 'Ask Anvil' natural-language query surface across runs, devices, rules
- Dashboard: sub-second log tail via WebSocket replaces the 2-second polling loop
- Added screen recording as an opt-in output alongside perfetto and signpost traces
- Fixed a race in the revocation-list poll that could leave a revoked API key active for ~45s after rotation
- Improved cold-launch budget on iPadOS 17 to ~1.8s P95 (previously 2.2s) via faster trace aggregator
- CLI: `anvil devices list` now groups by org + location, readable at 100+ devices
- Brand refresh — Anvil separates into its own product surface (anvil.koydo.app)
- New pricing tiers — Starter free, Team $299/mo, Enterprise on contract
- Device JWT handshake replaces bearer-token model — every run cryptographically pinned to device identity
- Drizzle schema cleanup — anvil_* tables consolidated into a canonical 22-table surface
- Ground-up rewrite of the orchestrator onto Next.js 16, Hono, Drizzle, Supabase
- First public AI agent runtime — drives the app from intent, emits specs and replays
- New native drivers: KID (iOS), KAD (Android) replacing the legacy WebDriver-bridge clients
- Breaking: v2 YAML spec format deprecated; one-shot migration tool ships with the CLI
- First public beta of the adversarial matrix (7 axes, 220 specs)
- Slack + Linear + GitHub integrations GA
- Per-spec severity overrides — lets specs veto a release even when the aggregate gate passes
- Cross-platform driver abstraction — iOS and Android under one verb surface
- Replay + snapshot diffs arrive — every run reconstructible as a step-through
- Breaking: CLI flag parser swapped from commander@8 to native argv parsing
- Real-device fleet management arrives — BYOD + rental in one dashboard
- WCAG-AA accessibility gating becomes a first-class check type
- Perfetto trace capture (Android) ships in beta
- First stable release — Anvil takes over the `koydo-testing` project surface
- YAML spec format v1 shipped, the first public drivers (iOS-only at launch)
- Initial dashboard at app.koydo.app/testing — runs, specs, rules