v0.3.0
Developer-experience release. Everything is additive except the BLE type rename, which ships with deprecated aliases so existing code keeps compiling.
Added
- A shipped test client: an in-process Conversation and a TCP Client (Swift ElmulatorTestSupport; Python Conversation, Client, serve_in_background).
- Bundled scenarios by name: Scenario.bundled("p0420_basic") and elmulator.load_bundled(...). Embedded in the package, so no files on disk are needed.
- An opt-in served-conversation transcript for debugging, with a byte-level debugDump().
- In-code scenario builders (public initializers in Swift, build_scenario in Python).
- A helper to use expected_scan_summary: mismatches(observed:) / summary_mismatches(...).
- A reusable GitHub Action (action.yml) that serves a scenario over TCP and exposes the port.
Changed
- BLE types dropped the BLE prefix (CentralStack, ConnectionStateMachine, AdapterProfile, DiscoveredPeripheral, FakeCentral, and so on) so they no longer collide with a consuming app's own BLE layer. Deprecated typealiases keep the old names working for now.
Fixed
- The CoreBluetooth-Mock bridge can honor per-piece reply delays (opt in with applyDelays: true).
- elmulator validate works from a pip-installed wheel.