Context
PR #139 made the zowietek workmode-convergence path fail-safe: converge_mode now requires an explicit DecodeIndex and refuses (ConvergenceUngrounded) rather than ever emitting a global, un-indexed streamplay/stop (the prior behavior — confirmed dangerous by the readiness audit wc3tvqa4w, since a global stop would halt the operator's production decode).
The index-scoped convergence wire path is implemented and unit-tested, but convergence_index() returns None everywhere, so convergence is currently refused until grounded. This is a deliberate safety posture, not a silent partial-ship — the blocker is real and external: there is no ZowieTek SDK on the build box to ground the invented streamplay opts.
The open work (requires the vendor SDK + a spare ZowieBox)
Per docs/research/managed-devices.md §3.3, the workmode-switch protocol is currently modeled on un-probed, invented opts (streamplay/opt=stop with data=Null, streamplay/opt=start with a fabricated {"mode":...} body). To enable live convergence:
- Ground the protocol against the operator's ZowieTek SDK: capture the real workmode-switch / decode-control calls — confirm or replace the
streamplay stop/start opts and bodies.
- Determine stop scope: confirm whether
streamplay/stop is global or per-decode-index, and wire convergence_index() to return a real spare decode-table index (never the production index).
- Validate on a spare unit / spare decode index ONLY (never the production ZowieBox) per the hardware-validation runbook — confirm the
00004 wrong-workmode rejection behavior live, and that stop/start are scoped.
- Once grounded + validated, enable
convergence_index() so set-mode actually converges.
Safety gate
Until this lands, the driver cannot issue a workmode mutating call (it refuses). Do NOT remove the ConvergenceUngrounded guard or hardcode an index without SDK grounding + spare-unit validation. See the hardware-validation runbook + the zowietek production-safety posture.
Blocks: DEV-A4 live workmode set/convergence on hardware (the read-only status path is unaffected and works today).
Context
PR #139 made the zowietek workmode-convergence path fail-safe:
converge_modenow requires an explicitDecodeIndexand refuses (ConvergenceUngrounded) rather than ever emitting a global, un-indexedstreamplay/stop (the prior behavior — confirmed dangerous by the readiness audit wc3tvqa4w, since a global stop would halt the operator's production decode).The index-scoped convergence wire path is implemented and unit-tested, but
convergence_index()returnsNoneeverywhere, so convergence is currently refused until grounded. This is a deliberate safety posture, not a silent partial-ship — the blocker is real and external: there is no ZowieTek SDK on the build box to ground the inventedstreamplayopts.The open work (requires the vendor SDK + a spare ZowieBox)
Per
docs/research/managed-devices.md§3.3, the workmode-switch protocol is currently modeled on un-probed, invented opts (streamplay/opt=stopwithdata=Null,streamplay/opt=startwith a fabricated{"mode":...}body). To enable live convergence:streamplaystop/start opts and bodies.streamplay/stop is global or per-decode-index, and wireconvergence_index()to return a real spare decode-table index (never the production index).00004wrong-workmode rejection behavior live, and that stop/start are scoped.convergence_index()so set-mode actually converges.Safety gate
Until this lands, the driver cannot issue a workmode mutating call (it refuses). Do NOT remove the
ConvergenceUngroundedguard or hardcode an index without SDK grounding + spare-unit validation. See the hardware-validation runbook + the zowietek production-safety posture.Blocks: DEV-A4 live workmode set/convergence on hardware (the read-only status path is unaffected and works today).