Files
NODEDC_MISSION_CORE/docs/audits/2026-09-07-k1-wireless-flow-r5.md

5.0 KiB

Wireless enrollment sequence R5

The owner confirmed onboard Bluetooth discovery and requested visible device rows, no redundant bottom Close button, and no Connect footer before a successful connection check. The board is connected to its router by Ethernet; only K1 needs that router's Wi-Fi. LinuxWifiAssociationProbe already represents Ethernet as a valid not-wifi path with continuity evidence. No host Wi-Fi association or network switching is added.

Observed R4 connection result

The operation completed at 09:44:26 UTC with action=connect, status=failed, error_code=network-provision-candidate-not-fresh, phase=network_not_applied and side_effect_status=none. The selected native BLE handle was no longer usable; this attempt did not transmit the network settings. The exact preceding event that invalidated that handle is not established by the available projection. Do not describe this as a wrong Wi-Fi password, an Ethernet failure or a K1 station refusal. Private journal inspection without interactive sudo was unavailable; no authentication bypass was used.

Interface sequence

WirelessEnrollmentWindow keeps the top close action and omits the footer when there are no contributed actions. The supported-model selector remains first. The K1 contribution renders discovered devices as canonical ResourceList / ResourceRow entries with explicit Select actions. Wi-Fi appears after selection.

Check connection explicitly says it sends the entered Wi-Fi settings to K1 and checks communication with the board. It uses the existing single provision intent and observes its owned bootstrap; it does not issue a second command. The separate read-only state check is reserved for an unconfirmed network outcome, preserving recovery without another provisioning write.

Connect appears only after the dialog obtains a successful current connection proof, including the exact runtime, discovery generation, mode revision, selected device and device session. Closing with this button finishes the dialog and refreshes inventory; it does not provision again or create another backend enrollment phase. A restart, outage, new scan, changed mode/device or changed session invalidates the displayed completion action. The ordinary backend session is established by the verified connection itself.

A candidate-not-fresh result explicitly asks for a new Bluetooth scan and says that Wi-Fi settings were not sent. The failed selection is cleared and cannot be reselected from that same invalid generation in the open dialog. No runtime fence or BLE safety rule was relaxed. The device protocol, optional K1 backend, Rerun profiles and recovery supervisors are unchanged.

Standalone Node upgrade

Inspection found that Node preinst stopped K1, while Node postinst left it stopped during a Node-only update. Preinst now records a previously active K1 worker in a root-owned /run marker; postinst restores it if its optional package is already configured. A jointly upgraded plugin starts itself after its own configuration. An inactive plugin is not started by this path.

The real shell scripts were executed against isolated OS paths and fake OS commands for active/configured, inactive/configured and active/unpacked cases. The focused Python suite has 21 passing tests, including Ethernet without a host Wi-Fi request and retention of a usable native BLE capture after scanning. The Core frontend suite has 791 passing tests; Core TypeScript and production build passed. Ruff, shell syntax and diff checks passed.

Node 0.8.3 is the replacement UI/host package. Installed optional K1 0.1.2+private.1 is retained. Exact artifact and installation acceptance follows; a new fresh-cache UI connection, live streams and recovery remain pending.

Prepared release

Source 5c4546a2a68052a7f871ecf6111728e0560d74e4 was built into mission-core-node_0.8.3_amd64.deb: 109814334 bytes, SHA256 fa8ce997aad75be29d03b1db78e1e4efe068cef6eed546f46fca9f6f027cc142. Its package provenance matches that source. Node TypeScript/production/Go build and UI boundary validation passed. Transferred package and installer checksums match; APT simulation selected one Node upgrade and zero removals.

The canonical Core serves the exact new frontend index, SHA256 02cb6f8c3ffee93dd97130c551b2fbfb3dab144cec6e44efb29e8a9ef4ceb6b9. The release is retained in private/releases/mission-core-node-20260907-r5. Owner screenshots, redacted UTC/monotonic manifest and validation logs are hashed under private/acceptance/k1-node083-20260907-core-ui.

The owner completed Ubuntu authentication; the installer exited with code 0. Readback confirmed Node 0.8.3 and K1 0.1.2+private.1, both active with zero restarts, started at 13:08:15 MSK. This confirms the Node-only upgrade restored the existing plugin. The next owner UI attempt found K1 but failed at Bluetooth connect before Wi-Fi dispatch; see the R6 report. Fresh-cache Bridge/live acceptance remains open. Git publication remains pending the explicit owner reply to the prior automatic approval rejection of deployment reports; no push workaround was used.