Skip to content

Changelog

The canonical changelog lives in the simdrive repo: simdrive/CHANGELOG.md. This page mirrors the most recent entries; sync is currently manual.

18-finding fix wave from b4 dogfood report. See CompanyState/research/simdrive-dogfood/b4/REPORT.md.

  • MCP server now self-restarts on disk-version drift (F#1)
  • session_start detects launch-crash and returns crash report path (F#2)
  • Ambiguous text-targets and stale text refs now surface alternates + fuzzy suggestions (F#5, F#6)
  • SSIM compute auto-masks iOS status bar; recordings auto-include device-class masks (F#14, F#15)
  • verify_change: true on tap returns screen_changed + ssim_delta (F#8)
  • apps() populates version from CFBundleShortVersionString (F#3)
  • migrate-recording gains —all and —missing-contract flags (F#17)
  • Plus 10 polish items: logs() raw mode, perf windowed sampling, list_replays filter, lint categorization, OCR alternates, confidence-band relabel, recording text dedup, type_text tap_first persistence, observe(annotate=False) marks

Full upstream entry: https://github.com/SyncTek-LLC/simdrive/releases/tag/simdrive-v1.0.0b5

First beta release. Trial+paywall model live; bug-reproduction positioning. Six months of alpha development consolidated into a publishable, monetizable beta.

  • 14-day free trialsimdrive trial start --email you@example.com issues an Ed25519-signed local license valid for 14 days, full Pro feature access. Email+machine SHA-256 de-dupe prevents infinite re-trials.
  • License authenticationsimdrive auth <license-key> redeems a Polar-issued production license. Writes to ~/.simdrive/license.json, validates against the embedded public key.
  • Paywall enforcement on every MCP tool — all 32 MCP tools now gate on check_entitlement(). After trial expiry, LicenseError is raised with a structured license_required envelope (pricing_url, auth_command_hint, trial_command_hint) so the MCP client surfaces a copy-pasteable recovery path.
  • README, PyPI description, and llms.txt rewritten around the bug-reproduction use case: “Reproduce and validate iOS bugs in 60 seconds with Claude.” Supporting capabilities (record/replay, journey runner, real device, perf baselines) get co-equal real estate.
  • New publish workflow: triggers on simdrive-v* tag pattern, gates on version-match + CHANGELOG-head + non-live pytest + fresh-venv install smoke, publishes via PyPI Trusted Publisher (OIDC, no static token).
  • Production license-signing keypair rotated; private key bound to the simdrive-license-api Cloudflare Worker for license issuance on Polar webhook events.
  • Test suite: autouse dev-trial fixture in CI; 949 tests passing, 74.77% coverage on hot-path modules.
  • Security baseline: pinned requirements.lock, pip-audit --strict, CodeQL Python, gitleaks all on every PR.
  • “no API key required” framing (contradicted the trial+paywall model).

Record/replay parity on real device. The deferred a12 item ships: full record/replay parity on target=device, plus a per-target state contract that refuses to replay against the wrong device or OS major.

  • record_start / record_stop / replay / validate_replay / list_replays flipped from (sim only)(sim + device).
  • Device SSIM threshold: 0.80 (sim stays at 0.85). Halts loudly on drift — the dogfood “23 blind taps at SSIM 0.014” failure mode fails by 57× margin.
  • State contract enforcement: requires.target, requires.device.udid, requires.device.os_major, requires.app.bundle_id halt on mismatch; os_version minor diff and device_name rename warn only.
  • New error codes: replay_drift_detected, replay_state_contract_failed, marks_count_drift.
  • 20 new regression tests; 851 pass on merged suite.

See simdrive/CHANGELOG.md for full history (1.0.0a1 through current).