109 lines
6.2 KiB
Markdown
109 lines
6.2 KiB
Markdown
# Node discovery admission and wireless enrollment R3
|
|
|
|
The owner tested the newly installed private K1 package through the Core Fleet
|
|
UI after clearing Chrome cache. At 11:55 MSK, choosing Find K1 produced an
|
|
unconfirmed-action notification. The board continued reporting idle with no
|
|
discovery generation change. Installation and worker readiness from R2 remain
|
|
valid observations; physical discovery was not accepted by that readiness check.
|
|
|
|
## Proven defect
|
|
|
|
NodeBridge passed `duration_seconds` and `operation_id` to `discovery.scan`,
|
|
but omitted `expected_snapshot_runtime_id`. The real XgridsK1PluginFacade
|
|
requires that field before invoking its BLE service. It raised
|
|
SnapshotRuntimeConflict before discovery, and the worker's generic HTTP 409
|
|
became the broker's unconfirmed-action result. Journald had no diagnostic entry
|
|
because that exception was deliberately swallowed without logging.
|
|
|
|
The earlier Node test replaced the facade, so it did not exercise this real
|
|
admission boundary. A regression test now replaces only the physical service:
|
|
the original code reproduces SnapshotRuntimeConflict; the fixed code admits
|
|
one scan with the exact requested runtime ID and rejects an old runtime without
|
|
another service call. No BLE I/O occurs in this test.
|
|
|
|
The adapter now forwards the admitted command's runtime ID. The runtime fence
|
|
itself is unchanged. Worker failures also emit only the admitted action and
|
|
exception class to the service journal; exception text, request bodies,
|
|
credentials and device data are never logged there.
|
|
|
|
## Owner-approved UI composition
|
|
|
|
The operator job is adding a supported wireless sensor to the chosen onboard
|
|
computer through its device-list plus action, in Core or the Node application.
|
|
The owner requested the same bounded modal with the title
|
|
«Подключение беспроводных устройств к БК» and a supported-device selector first.
|
|
The selector comes from installed sensor UI contributions. No hardware form or
|
|
request is mounted before choosing the model. Only XGRIDS LixelKity K1 is
|
|
currently contributed; a second model is not claimed to have a backend.
|
|
|
|
The host owns WirelessEnrollmentWindow and the selector; the selected plugin
|
|
owns its device workflow and actions through a typed render contract. This
|
|
replaces the single EnrollmentView slot that disappeared whenever more than one
|
|
plugin supplied a view. Ambiguous contribution IDs remain unavailable. The
|
|
alternative of putting a hard-coded model dropdown inside the K1 plugin was
|
|
rejected because it would leave the shared plus action owned by one vendor.
|
|
|
|
After choosing the K1 model, the operator can search Bluetooth and choose a
|
|
found scanner. Wi-Fi selection, credentials and Connect appear only for that
|
|
selected current candidate. Search, network lookup, verification and Connect
|
|
show their pending indicator and text inside their own button; the detached
|
|
bottom indicator is removed. Repeated actions/model changes are disabled during
|
|
an operation; closing stops observation without replaying or cancelling the
|
|
physical intent. Runtime/discovery changes retire selected-device credentials.
|
|
|
|
This is domain content in the existing modal. It reuses the pinned Design
|
|
Guideline Button, ActivityIndicator compact icon slot, Select, Window,
|
|
WindowFooterActions, ResourceRow, SettingsCard, TextField, StatusBadge and
|
|
ToastStack. No design-system geometry, CSS, icon or new product root was added.
|
|
Core Fleet and Node share the same component. LAB, recorded and live Rerun
|
|
settings and the K1 network/acquisition recovery state machine were not edited.
|
|
|
|
## Software acceptance
|
|
|
|
- Core architecture: 4 checks passed; TypeScript passed.
|
|
- Core full frontend suite: 787 passed, no failures or skips.
|
|
- Core production build passed; canonical port 8000 serves the exact new index
|
|
with Cache-Control no-store and operational readiness true.
|
|
- Node UI boundary check, TypeScript and production build passed; Go build and
|
|
Go package tests passed.
|
|
- 25 Python Node bridge, installer/import-boundary and Fleet enrollment checks
|
|
passed, including the real-facade regression and retained secret/idempotency
|
|
checks. Ruff and whitespace checks passed.
|
|
|
|
Node 0.8.1 and private K1 0.1.1+private.1 identify the replacement release;
|
|
previous R2 artifact bytes are retained. Exact source/release hashes and board
|
|
installation results belong in the following acceptance addendum. Hardware UI
|
|
discovery, provisioning, camera/LiDAR and recovery remain pending until a new
|
|
owner run with cache cleared before the test.
|
|
|
|
## Installed release
|
|
|
|
The exact source commit is `77acb377e2a996f70eb6e24f38e9a924da8be023`.
|
|
The private directory `private/releases/mission-core-node-k1-20260907-r3`
|
|
contains both packages, `install` and `SHA256SUMS`.
|
|
|
|
| Package | Bytes | SHA-256 |
|
|
| --- | ---: | --- |
|
|
| `mission-core-node_0.8.1_amd64.deb` | 109813420 | `13c96905d32fb665c5fee4b76d1704a24507c5c62afc68186561bae83cd678f2` |
|
|
| `mission-core-xgrids-k1_0.1.1+private.1_amd64.deb` | 318106574 | `03b34b11f0608608dad2b366f86903afef39b5c85d042b3ec37f819ab322a95a` |
|
|
|
|
Both archive provenances, the packaged runtime-fence fix and private member
|
|
permissions were checked. Transferred hashes matched; APT simulation selected
|
|
two upgrades and zero removals. The owner completed Ubuntu authentication and
|
|
the installer exited successfully. At 09:17 UTC on 07.09.2026, the Mini started
|
|
Node 0.8.1 and K1 0.1.1+private.1. Both services are active/running with
|
|
NRestarts=0. Installed provenance and the runtime-fence source match this
|
|
commit. Reinstall preparation accepted the existing application profile.
|
|
Fleet receives the new runtime through the preserved original binding.
|
|
|
|
The owner was instructed to clear Chrome cache again for the next UI test.
|
|
Read-only observations with UTC/monotonic timestamps are kept under
|
|
`private/acceptance/k1-node081-20260907-core-ui`. Successful hardware discovery,
|
|
Bridge and live output are not inferred from service readiness.
|
|
|
|
Git publication of the preceding installation report `2fdf1d3` was rejected
|
|
before execution by automatic approval review, citing internal deployment
|
|
metadata and requiring explicit authorization for that payload/destination.
|
|
The owner has been asked; no alternative push was used to bypass the decision.
|
|
The R3 source and report are currently committed locally on top of that report.
|