Canonical inventory of features that are declared in the public surface or referenced in code/docs but are not yet wired. Everything here is intentional: the surface exists so consumers can pin against the shape, while the implementation lands in a later phase.
Long-form forward-looking design lives in
./future/(e.g. the wasm/RPC roadmap). This file tracks short, code-anchored deferrals.
- Stub — the symbol exists in the public API; calling it throws
NotImplementedError(TODO(...)). - No-op — the symbol exists, accepts input, but the input has no observable effect yet.
- Missing — referenced in docs/code comments only; not in the API surface.
Tooling deferral: migrate public event/result
data classes to Poko@Pokoclasses (dropscopy/componentNABI lock-in, keepsequals/hashCode/toString) once Poko supports Kotlin 2.3.21+ — 0.23.1 fails withNoClassDefFoundError: org/jetbrains/kotlin/extensions/ExtensionPointDescriptoragainst the 2.3.x compiler. Until then the data-class policy inapi-reference.mdapplies.
| ID | Item | Surface | Status | Phase | Source |
|---|---|---|---|---|---|
| R-1 | RadioClient.admin (admin RPC) |
Done — Sprint 5 (AdminApiImpl, AdminApi). 16 methods + editSettings transactional builder; SessionKeyExpired triggers single-shot retry. |
— | — | |
| R-2 | RadioClient.telemetry |
Done — Sprint 5 (TelemetryApi). 5 request methods + observe(node) cold flow. |
— | — | |
| R-3 | RadioClient.routing |
Done — Sprint 5 (RoutingApi). traceRoute(dest, hopLimit) + requestNeighborInfo(node). |
— | — | |
| R-4 | Builder.clock(Clock) injection |
Done — Sprint 5. Clock is now a fun interface returning Instant; wired into AdminApi.setTime(at = null) and the post-handshake auto-sync trigger. |
— | — | |
| R-5 | Builder.protocolLogging(level, redactor) |
public | No-op (stored, unused) | 2 | RadioClient.kt — engine frame-handling instrumentation |
| R-6 | Builder.autoSyncTimeOnConnect(...) |
public | Partial — Sprint 5 fires a single fire-and-forget AdminApi.setTime() after handshake. Future iteration will gate on observed device skew (currently unconditional). |
2 | RadioClient.connect |
| R-7 | TransportSpec-driven transport factory lookup |
public | Stub (Builder errors at build() if no concrete transport supplied) |
2 | RadioClient.Builder.build() |
| R-8 | TransportError |
Done — Builder.autoReconnect(AutoReconnectConfig()) ships opt-in exponential backoff with jitter + ConnectionState.Reconnecting. |
— | — | |
| R-9 | MeshEvent.ProtocolWarning |
Done — engine emits MeshEvent.IdentityRebound before clearing storage; see architecture/storage.md |
— | — | |
| R-10 | Message history persistence in storage | none | Missing — messages table dropped in schema v2 (consumer concern) |
— (consumer-owned) | architecture/storage.md, migration_1__2.sqm |
| R-11 | MQTT proxy transport (transport-mqtt-proxy) |
none | Missing — referenced in README + future/wasm-rpc-roadmap.md; ships post-1.0 additively |
post-1.0 | future/wasm-rpc-roadmap.md, README.md |
| R-12 | Wasm/RPC additive artifacts | none | Missing | post-1.0 | future/wasm-rpc-roadmap.md |
| R-13 | Done — Sprint 5. AdminApi.getChannel / setChannel / listChannels ship via the same CommandDispatcher path. PSK derivation stays in firmware; SDK ferries Channel proto messages. |
— | — | ||
| R-14 | Done — client.storeForward ships requestHistory, requestStats, servers StateFlow, events cold Flow. |
— | — | ||
| R-15 | Done — Builder.presenceTimeout(Duration) enables per-node heartbeat-based presence; NodeChange.WentOffline / CameOnline emitted. |
— | — |
When you introduce a new public symbol that is intentionally a stub or
no-op, add a row here in the same PR. Reviewers should reject any
"deferred" public surface that is not represented here. When the work
lands, delete the row and reference the implementing PR in the relevant
CHANGELOG.md entry.
We do not mirror this list to GitHub Issues. The roadmap entries above are the source of truth; if a maintainer wants to claim an item they open an issue at that point and link back here. Phase-2/3 epics may group multiple R-IDs.
SPEC.md§6 — phase plan with milestonesfuture/— long-form forward-looking design (wasm/RPC)versioning.md— how additive surface changes interact with SemVer