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

90 lines
5.0 KiB
Markdown

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