Skip to main content

CHANGELOG

Releases

Every shipped version with a one-line summary of what changed. Auto-generated from GitHub tags.

v1.0.0b8

Added

  • MCP registry metadata (server.json + README discovery tag) for Anthropic / Smithery / awesome-mcp-servers ingestion. The <!-- mcp-name: io.github.SyncTek-LLC/simdrive --> HTML comment at the top of README.md (root) and simdrive/README.md lets the official MCP registry verify the package; server.json at the repo root declares the canonical metadata (name, version, repo, license, runtime, packages, transport=stdio, runtimeHint=uvx) per the MCP registry schema.
  • simdrive trial start --source <channel> — opt-in marketing-attribution flag. The CLI sends one POST to https://api.simdrive.dev/trial with {hashed_email, source, ts, package_version, os}. Raw email never leaves the machine — only SHA-256(email.lower.strip) is transmitted. Omitting the flag records the trial as "direct".
  • simdrive trial start --no-track — explicit per-invocation opt-out. Skips the network call; trial license still generates locally. Persistent opt-out: create ~/.simdrive/telemetry.toml containing track = false (or set SIMDRIVE_TELEMETRY_OFF=1) to disable source-tracking permanently for that user.

Notes

  • Source-tracking sends only {hashed_email, source, ts, package_version, os}. Raw email never leaves the machine; the OS field is the coarse family (darwin / linux / other), not a fingerprint. Worker /trial endpoint at api.simdrive.dev/trial.
  • Network failure is non-fatal: the trial license still installs locally and the CLI prints a single "telemetry skipped" notice.
  • License-issuance behaviour, JWT shape, and paywall enforcement are unchanged from b7.

v1.0.0b7

Fixed

  • NOTICE file: declare correct Elastic-2.0 license (was incorrectly stating MIT). The wheel and sdist NOTICE previously read “Licensed under the MIT License” — contradicting the root LICENSE (Elastic License 2.0), pyproject.toml (license = "Elastic-2.0"), and all public-facing license messaging. NOTICE now correctly states ELv2 with a link to the canonical license URL. Third-party MIT attribution (Facebook idb / FBSimulatorIndigoHID) is preserved unchanged. No code change, no runtime impact.

v1.0.0b6

Tightens the version-pin diagnostic surface so consumer monorepos can enforce a pinned simdrive release without scraping stderr.

Added — simdrive version / simdrive doctor subcommands

  • simdrive version [--json] [--required-version VERSION] — promoted from the bare --version flag into a proper subcommand. --json emits {"version", "package"} (plus required + satisfies_required when a pin is supplied) for clean parsing in CI gates. --required-version exits 3 on mismatch with a side-by-side installed-vs-required diagnostic and the exact pip install 'simdrive==<version>' command to align. Docs link surfaces in the error too.
  • simdrive doctor [--json] [--required-version VERSION] — direct CLI wrapper around diagnostics.doctor(). Returns the same checks the MCP doctor tool returns; --json emits {ok, version, package, checks[]} for monorepo make ios-smoke-style gates that want one command for “is my env ready AND is the right simdrive installed”. Exit 1 on check failure, exit 3 on version mismatch (mismatch dominates check failures — a wrong simdrive can produce spurious failures).
  • Legacy simdrive --version still works and now transparently delegates to the new handler, so simdrive --version --json and simdrive --version --required-version X work via the short-flag spelling too.

Why

CI gates that pin a specific simdrive version need a parseable signal when the installed version drifts. Before this release the error was opaque enough that operators had to dig through stderr to figure out which version was actually loaded. Now the error tells the operator the exact pip install command to run, and consumer scripts can parse simdrive version --json instead of scraping output.


v1.0.0b5

18-finding fix wave from the b4 dogfood report.

Highlights

  • 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