3.7 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.