140 lines
8.0 KiB
Markdown
140 lines
8.0 KiB
Markdown
# Node home and local K1 interface — R17
|
|
|
|
## Approved product surface
|
|
|
|
The owner requests the existing Mission Core home and avatar → Settings →
|
|
Environment composition on the onboard application, with the same reusable
|
|
components. They explicitly approve moving any missing reusable settings and
|
|
background components into the Design Guideline. Only Home has configurable
|
|
landing content on Node; System and Devices keep their existing workspaces.
|
|
Logo navigation returns to Home. Text, uploaded/URL image/video playlist, order
|
|
and image duration are editable. Remove the decorative fallback radial gradient.
|
|
|
|
Operator job: personalize the onboard home, then enter existing system/device
|
|
workflows. Home owns presentation, never acquisition or physical authority.
|
|
The existing ApplicationShell stage is the selected placement. A separate
|
|
dashboard/root or reimplemented Node settings form would duplicate the approved
|
|
job and composition, so neither is selected. Avatar UserProfileMenu already
|
|
exists in DG; the reusable EnvironmentSettingsWindow, playlist, background and
|
|
LandingStage are extracted there from the existing implementation. Core and
|
|
Node supply product pages/actions, storage and permissions through adapters.
|
|
|
|
Initial state: Home without media. States: loading, ready, local draft, saving,
|
|
uploading, saved, validation/storage conflict/error, media unavailable and
|
|
unauthorized Node. Settings use FeatureSettingsWindow, SettingsCard, Field,
|
|
Select, Switch, SortableList, MediaSourceField, RangeControl and canonical
|
|
Button/WindowFooterActions. No new product root or device command is introduced.
|
|
|
|
## Local K1 findings
|
|
|
|
Both hosts already consume SensorWorkspace and xgridsK1SensorUi. NodeSensors
|
|
adapts authenticated local enrollment/inventory/operation routes; remote Fleet
|
|
adapts the same broker/plugin operations. Shared K1 fields, validation, connection
|
|
proof and physical command guards remain the same. Local UI reuse alone is not
|
|
physical acceptance on the onboard webview.
|
|
|
|
The primary button inherited the DG theme's default pink accent on Node, whereas
|
|
Core overrode primary tokens locally. Shared Button now admits a neutral primary
|
|
tone, with white enabled and gray disabled states independent of accent/theme;
|
|
the shared K1 start/configuration actions select it.
|
|
|
|
The local server's CSP also denied frame ancestry for its own Rerun runtime,
|
|
WebAssembly compilation and blob video. These are presentation transport gaps,
|
|
not a missing second K1 controller. Fixes and tests must preserve same-origin
|
|
authentication/control and allow only the existing viewer/runtime capabilities.
|
|
|
|
## Acceptance
|
|
|
|
Required: same settings component rendered for Core and Node, only home in Node
|
|
page selector, text/media persist across reopening, playlist order/timing,
|
|
invalid/stale saves rejected, logo returns home, neutral start states across
|
|
themes, local/remote K1 broker parity and unchanged one-shot guards. Synthetic,
|
|
browser and owner physical outcomes are recorded separately when obtained.
|
|
|
|
No physical fault injection, automatic provisioning or START/STOP is authorized
|
|
by the visual refactor. The R16 Bridge laboratory checkpoint remains bounded as
|
|
recorded in the previous audit.
|
|
|
|
## Source and validation — 2026-09-07
|
|
|
|
Design Guideline: `b10fd5d645ddfb8c373ae6105efa0850aef2509c`. Node candidate: 0.8.14;
|
|
K1 plugin remains 0.1.13. Builder provenance now includes ui-core source and
|
|
compiled shared environment model as well as ui-react and styles.
|
|
|
|
- Shared DG packages compiled; catalog production build and registry validation
|
|
passed (34 components, 48 icons). Three shared media/model/DOM tests passed.
|
|
- Core architecture: 4 tests; complete frontend: 809/809; TypeScript and production
|
|
build passed. Existing operator-environment v3 API/storage is unchanged.
|
|
- Node TypeScript and UI boundary check passed; all Go packages passed. Five new
|
|
Go test functions cover persistent trimmed home copy, simultaneous revision
|
|
conflict, rejection without overwriting, corrupt-state preservation, validated
|
|
PNG upload/hash/reopen/HTTP Range, session/Origin restrictions and scoped CSP.
|
|
- Package lifecycle/installer regressions: 14 passed. No physical BLE, network
|
|
provisioning, START or STOP was dispatched during this task.
|
|
- In-app browser at the canonical 8000 confirms shared Home renders without the
|
|
fallback radial gradient. Detailed settings interactions and the Ubuntu
|
|
webview require acceptance after installation; do not infer them from builds.
|
|
- Core 8000 remains the original durable PID 88424; no 8765 listener and no
|
|
temporary test/build/server processes. Only the Docker networking helper is
|
|
present; Docker Desktop was not started.
|
|
|
|
Local and Bridge commands enter the same DeviceEnrollment.Submit and
|
|
Sensors.Submit; the boolean distinguishes local vs signed remote authority.
|
|
Both use the same SensorWorkspace and xgridsK1SensorUi, including project name,
|
|
mount/GNSS settings, one-shot controls and shared scene. The existing SSE path
|
|
refreshes its write deadline per delivery. The R17 change admits same-origin
|
|
Rerun iframe/WASM/blob media in the local server CSP; it does not change K1
|
|
protocol state or the R16 laboratory acceptance boundary.
|
|
|
|
Local presentation is authenticated, CAS-versioned and atomically persisted
|
|
beside Node product state. Uploaded media is content-checked, hashed, private,
|
|
limited to 256 MiB/file and 8 GiB total. External images/video are browser-loaded
|
|
HTTP(S) URLs. Media cleanup beyond rejected-upload temporary files is not added;
|
|
recordings, identity, pairing and the installed credential are not part of this
|
|
store. No marketing-image fallback is supplied.
|
|
|
|
## Candidate and handoff
|
|
|
|
Source: a23c5b2005f7e27382ea21131f5a42a61cfec82e.
|
|
Canonical Node builder completed after the source commit. The UI production
|
|
build passed. `mission-core-node_0.8.14_amd64.deb` is 109863396 bytes;
|
|
SHA-256 `9bf4188cd51628144a9126ccfd33afce1503870c13548e31336b9484dce052aa`.
|
|
Archive inspection verified 71 regular files, source/DG provenance, no secret or
|
|
runtime-state payload. Local release: `private/releases/mission-core-node-20260907-r17`.
|
|
The reviewed Ubuntu installer uses the existing preinst safety guards and
|
|
preserves installed K1 0.1.13 and private state. No Synology deploy is involved.
|
|
|
|
Read-only Ubuntu check confirmed installed Node 0.8.13 and K1 0.1.13, both active.
|
|
The immutable candidate directory was created, but automatic approval review
|
|
rejected scp before execution: destination ownership for private code egress
|
|
requires explicit owner confirmation. The owner was asked to confirm the
|
|
Ubuntu address. No candidate transfer/installation is claimed. Do not retry
|
|
transfer until that confirmation is supplied.
|
|
|
|
Ops MISSIONCOR-76 baseline and state are preserved. Comment
|
|
`d16d36ed-f746-4fb9-8a63-f8d1a72f7e2d` records implementation, tests, candidate,
|
|
remaining UI/physical acceptance and transfer block; readback confirmed it.
|
|
|
|
## Installed after owner confirmation — 2026-09-07
|
|
|
|
The owner explicitly confirmed the Ubuntu destination and permitted transfer.
|
|
The previous automatic-review transfer block is resolved. The immutable package
|
|
and installer were copied; destination SHA-256 matched the values above.
|
|
The active graphical session opened the standard installer, which completed
|
|
with `install-result = 0`.
|
|
|
|
Post-install read-only acceptance:
|
|
- dpkg: Node 0.8.14, K1 0.1.13; both services active.
|
|
- Installed Node binary matches the built binary, SHA-256
|
|
`a7fca3ca950c983267f8547ea5ce1c50739d52753ca5546ef9b76bf049e058bc`.
|
|
- Installed provenance matches source a23c5b2 and DG b10fd5d.
|
|
- Home and isolated Rerun runtime return HTTP 200; unauthenticated presentation
|
|
API returns 401. Runtime response carries the scoped iframe/WASM CSP.
|
|
- No system tooling was installed for checks; Python's standard library was
|
|
used because curl is absent on this Ubuntu profile.
|
|
|
|
Detailed Home/settings interactions and local physical K1 acceptance remain
|
|
owner checks after reopening the desktop application. Successful installation
|
|
and service health do not replace those checks. No physical scanner command
|
|
was issued by the agent. The R16 laboratory evidence boundary remains unchanged.
|