Roadmap
The roadmap is anchored to a concrete acceptance matrix, not vibes. Every row below is a scenario a harness app must pass on a real device — and every row passes today, validated on both Android (Kotlin) and iOS (Swift).
Acceptance matrix — passed
Section titled “Acceptance matrix — passed”| # | Scenario | Status |
|---|---|---|
| 1 | Native→RN typed query and RN→native typed query (bidirectional round trip). | Passed |
| 2 | Stream native→JS (lossless under JS-thread saturation) and JS→native (collection + cancellation reaching the JS producer’s teardown). | Passed |
| 3 | State: first-render sync read of a global value; observe on both sides; Unprovided on close; re-provide reset. | Passed |
| 4 | Runtime reload mid-stream — provider stream cancelled, no dead-callback pumping, new epoch rewires parked subscriptions, mirrors re-hydrate. | Passed |
| 5 | Two simultaneous instances of one feature — instance-scoped providers isolated; host recreation re-keys cleanly. | Passed |
| 6 | ServiceLoader discovery in a minified release build (R8 consumer rules proven, Android). | Passed |
| 7 | Prod-mode payload with { a: undefined } crosses safely (always-on encoding proven). | Passed |
| 8 | Skew simulation — extra member vs older descriptor → single structured warning + METHOD_NOT_FOUND with diff context; feature-detection path. | Passed |
| 9 | Kotlin consume from the main thread → fast loud failure, not an ANR. | Passed |
| 10 | dump() debug screen shows live bindings / streams / state / epoch — on Android and iOS. | Passed |
Connect / Lidl Plus pilot — shipped
Section titled “Connect / Lidl Plus pilot — shipped”The first real-world adoption is done, not planned:
- Adoption & freeze.
feature-actions/connectGet*/NativeEventEmitterModuleare frozen — no new actions or modules. - First pilot. Connect’s OTP polling moved to an
otpCodesstream (highest value, smallest surface). - Feature-owned contract. Connect owns
connect.host(17 actions), provided natively atScope.Feature("Lidl.Plus.Connect");getLiteral/trackEventconsume the sharedaxion.host; five host actions stay onFeatureActions. Runtime-proven (isLoggedInJS→native returnedtrue;trackEventfired end-to-end). - SPM end-state. The Lidl Plus iOS integration is pure SPM — no CocoaPods, no C++
interop in the app target (
@_implementationOnly import BridgeKit). This is the target end-state for all Lidl Plus feature integrations.
The full before/after is in Migrating Connect to BridgeKit.
Platform expansion
Section titled “Platform expansion”| Target | Status |
|---|---|
| Android | Done. Kotlin runtime + codegen, validated on-device. |
| iOS | Done, at parity with Android. Swift runtime + codegen, runtime-validated with UI parity; the Lidl Plus end-state is pure SPM. |
| Web | The open frontier. LoopbackTransport already runs pure-JS providers in-process; a formal web transport is the remaining work. |