Operator Walkthrough — Is This Edge AI Node Safe to Change?
A team wants to update a vision model or restart an AI service on an edge node. The node appears healthy, but “the dashboard is green” is not enough. Before approving the change, the operator needs to establish:
- the exact seL4 Queen and policy being consulted;
- whether control, scheduling, and lease state are healthy;
- whether the real CUDA host is the expected machine;
- whether several tools are seeing the same session; and
- whether the decision can be reconstructed after the live system is gone.
This walkthrough produces that go/no-go case. It uses a live QEMU Queen as the control plane and can include a Jetson or another compatible Linux AArch64 NVIDIA CUDA host as the external AI machine. The same sequence applies to a Pi Queen only after its independent physical acceptance gates pass.
The walkthrough stops before changing a model or service. Target control state, host GPU discovery, host-side AI execution, and physical target evidence remain separate proof classes. The admitted CUDA/LoRA executor must prove the external change and return its independently verified result.
Complete the Quickstart first if the host tools are not built or the current QEMU profile has not booted. See the Glossary for Cohesix-specific terms.
Follow the same decision in SwarmUI
Open the installed desktop application and choose Connect a hive. Select Hive Gateway, enter its base URL and session credentials or secret references, and connect. A direct Queen connection is also available when no gateway or other tool owns its console. Saved profiles retain no credentials.
- In Namespaces, browse
/shard, then read/proc/bootand/proc/root/reachable. Compare the exact target identity with the change record. - In Overview, inspect scheduling, leases and pressure. A visible session does not by itself establish an executable Worker or a completed GPU operation.
- In Operations, choose Explore registered providers, Check your environment, or the admitted CUDA/adapter workflow. Named fields and native file pickers build the existing host command; review it before running.
- In Tickets & policy, inspect the ticket status, approval queue and audit decisions. Policy restrictions produce explicit refusals with their source.
- In Evidence, verify the canonical evidence pack or causal graph. In Run story, select a native phase or evidence-ribbon segment to inspect its exact source. The GPU flight deck identifies missing measurements explicitly.
- To understand the accepted journey before using hardware, open Replay and select the CUDA, private-adapter or failed-canary reference. These signed historical records disconnect the live session. A recovered failure remains failed, and replay cannot submit a target control action.
The SwarmUI guide explains connection recovery, operation gates and installed tools. The native screenshot gallery shows the same packaged interface, with its original mode and proof labels. The command-line walkthrough below remains useful when comparing transcripts or automating a check.
The operational picture you are building
QEMU serial --------------------------> independent boot/MCS truth
QEMU TCP console <---- hive-gateway <---- operator shell
one owner | <---- automation / Python
| <---- evidence exporter / SwarmUI
`-------<---- bounded Jetson GPU publication
Jetson or CUDA host -----------------> model runtime remains host-side
The target exposes one authenticated TCP console. hive-gateway owns that
connection and multiplexes bounded REST requests. It does not create another
in-target listener or expand the role and ticket used for its upstream
attachment.
The examples assume:
- the repository root is the current directory;
- QEMU is running the selected TCP-console profile on
127.0.0.1:31337; - the Queen console secret is available without being committed or printed;
- the gateway will bind only to
127.0.0.1:8080; and - no other direct TCP client is attached when the gateway starts.
Release-bundle users should use the matching executable under bin/ and the
paths in that bundle’s QUICKSTART.md.
1. Identify the control plane before trusting it
Keep the QEMU terminal open. At cohesix>, run:
ping
bi
caps mcs
smp mcs
mem
netstats
Look for these outcomes:
pingresponds and the console remains interactive;biidentifies the selected kernel and generated profile;caps mcsreports bounded MCS authority and object counts;smp mcskeeps generated admission, kernel state, and live registry state source-labelled; andnetstatsreports either a ready TCP path or a specific blocker.
Do not collapse an unavailable live field into a generated value. If the image identity is unexpected or a required live field is unavailable, the rollout is already a no-go. This separation keeps configuration, kernel truth, and runtime observation distinguishable during diagnosis.
2. Save the before-change baseline
Before starting the gateway, use the direct console for one foreground script. In terminal 2:
: "${COHSH_AUTH_TOKEN:?set the Queen console authentication token}"
mkdir -p out/operator
out/cohesix/host-tools/cohsh \
--transport tcp \
--tcp-host 127.0.0.1 \
--tcp-port 31337 \
--script scripts/cohsh/smp_parity.coh \
> out/operator/qemu-smp-parity.txt
The script attaches, pings, reads /proc/boot, schedule and lease summaries,
lists /proc, then performs a clean quit. A zero exit means its exact
assertions passed; it does not qualify a different image or physical target.
This transcript is the before-state for the proposed change. Retain it with the change or incident identifier, then repeat the same script after the operation. The value is not the text file by itself; it is the ability to compare the same bounded assertions against the same identified target. More useful custom scripts are in Operator Recipes.
3. Give the review team one safe session owner
The direct script has exited, so the TCP console is free. In terminal 2, load the console secret, the separate REST request credential and the enrolled delegated-ticket issuer reference, then start the gateway:
: "${COH_AUTH_TOKEN:?set the Queen console authentication token}"
: "${HIVE_GATEWAY_REQUEST_AUTH_TOKEN:?set gateway request authentication}"
: "${HIVE_GATEWAY_DELEGATION_KEY_REF:?set the enrolled issuer key reference}"
export COH_REST_URL="http://127.0.0.1:8080"
out/cohesix/host-tools/hive-gateway \
--bind 127.0.0.1:8080 \
--tcp-host 127.0.0.1 \
--tcp-port 31337
In terminal 3, obtain a scoped delegated read ticket from the deployment’s
issuer. Non-public REST reads need both that ticket and gateway request
authentication. The private header file must carry
Authorization: Bearer <request token> and
x-cohesix-ticket: <read ticket>; see the Host API
for its file format. Keep it outside the repository. Confirm host policy and
live target state:
export COH_REST_URL="http://127.0.0.1:8080"
: "${COH_REST_AUTH_TOKEN:?set gateway request authentication for host clients}"
: "${COH_REST_TICKET:?set a scoped delegated read ticket}"
: "${COH_READ_HEADERS:?set the private read-credential header file}"
curl --header "@$COH_READ_HEADERS" --fail-with-body --silent --show-error \
"$COH_REST_URL/v1/meta/status"
curl --header "@$COH_READ_HEADERS" --fail-with-body --silent --show-error \
"$COH_REST_URL/v1/meta/bounds"
curl --header "@$COH_READ_HEADERS" --fail-with-body --silent --show-error --get \
--data-urlencode 'path=/proc/boot' \
--data-urlencode 'max_bytes=1024' \
"$COH_REST_URL/v1/fs/cat"
Continue only when:
- status reports
connected: true; - bounds reports the expected gateway generated-policy fingerprint;
/proc/bootidentifies the intended target profile and manifest; and- the gateway and target fingerprints have been compared as separate facts.
/v1/meta/bounds is compiled host policy. /proc/boot is target-reported
state. A match supports parity for this session; either value alone does not.
4. Answer the control-plane go/no-go questions
Open a REST-backed shell in terminal 3:
out/cohesix/host-tools/cohsh \
--transport rest \
--rest-url "$COH_REST_URL" \
--role queen
At coh>, run the read-only tour:
ping
ls /
ls /proc
ls /shard
cat /proc/boot
cat /proc/root/reachable
cat /proc/schedule/summary
cat /proc/lease/summary
tail /log/queen.log 32
test --mode quick --no-mutate
These surfaces answer the questions that matter before an edge change:
| Decision question | Surface | Stop condition |
|---|---|---|
| Is this the intended target? | /proc/boot |
Image, profile, or manifest differs from the change record. |
| Is bounded root control reachable? | /proc/root/reachable |
A required root or service is unreachable. |
| Is scheduler ingress progressing? | /proc/schedule/summary |
Required progress is absent or a typed overload persists. |
| Will this collide with current work? | /proc/lease/summary |
An unexplained active lease owns the resource. |
| Are the expected Worker roles exposed? | /shard |
The selected manifest and visible role layout disagree. |
| Is there a recent warning relevant to the change? | /log/queen.log |
A retained fault or refusal has not been routed. |
The selected QEMU and Pi profiles declare 256 passive Worker instances: one Heartbeat, 127 GPU and 128 LoRA, served by two bounded executor lanes. A namespace entry or admitted control write is not by itself a READY or execution result. Keep configured, admitted, READY, provider completion, target execution, and release acceptance as separate states.
Use quit to close cohsh. The gateway remains available to other clients.
5. Give deployment automation the same bounded facts
Install the target-neutral Python package into the repository virtual environment:
python3 -m pip install -e tools/cohesix-py
Then perform two bounded read-only operations through the same gateway:
python3 - <<'PY'
import os
from cohesix import RestBackend
backend = RestBackend(os.environ["COH_REST_URL"])
print("root entries:", backend.list_dir("/"))
print(backend.read_file("/proc/root/reachable", 64).decode("utf-8"))
PY
This is deliberately small. The Python package mirrors existing namespace and control semantics; it is not a second authority path. A deployment gate can now refuse a rollout on the same target facts the operator reviewed, without scraping terminal output or acquiring a shell. The supported backends and typed APIs are in Python Support.
6. Verify the actual accelerator as a separate boundary
The Queen can be healthy while the external AI host is wrong, missing its driver, or exposing a different accelerator. On any compatible Linux AArch64 NVIDIA CUDA host—including Jetson Orin, AWS G5g, NVIDIA DGX Spark, and similar systems—inspect local GPU discovery without changing the target:
cargo run -p coh -- doctor
cargo run -p gpu-bridge-host -- --list
NVML is preferred where complete; feature-limited NVML implementations such as
some Jetson profiles fall back to CUDA discovery. --list is local inventory
only. To publish one production-mode snapshot through the running gateway:
Publication is a separate write. The read ticket used in this walkthrough
cannot authorize it. If your deployment has an enrolled GPU publisher, give
that process a narrow /gpu/bridge/ctl write ticket and follow the
Host tools GPU publication guide.
Without a real model registry, publication reports empty model state rather
than inventing an active model.
If publication ran, verify its projection with REST-backed cohsh:
ls /gpu
cat /gpu/bridge/status
GPU discovery and publication do not execute a workload, isolate a CUDA context, prove a model runtime, or prove PEFT training. CUDA/NVML and AI execution remain host-side; Cohesix projects bounded inventory and control state. A rollout that requires CUDA is a no-go until its separate runtime probe and deployment-specific executor also succeed.
7. Freeze the decision record before retained windows wrap
While the gateway is still connected:
run_id="operator-$(date -u +%Y%m%dT%H%M%SZ)"
pack="out/evidence/$run_id"
cargo run -p coh -- evidence pack \
--rest-url "$COH_REST_URL" \
--out "$pack"
cargo run -p coh -- evidence timeline \
--input "$pack" --scenario change
Review these first:
summary.json— every requested path is classified as captured, missing, or errored;meta.jsonandbounds.json— host-tool and generated-policy provenance;proc/boot— target-reported identity;log/queen.log— the retained log snapshot; andtimeline.mdandcase.md— the offline sequence and source-linked review. Followcase.jsonhashes to the original retained records;incident,maintenanceandrolloutchange the review framing only.
An optional path can be absent by design. A non-zero exporter exit, missing top-level metadata, or unexplained error is not a publishable pack. The full redaction and validation recipe is in Operator Recipes.
8. Review the case with another human in SwarmUI
With the gateway still running:
export SWARMUI_TRANSPORT="rest"
export SWARMUI_REST_URL="$COH_REST_URL"
cargo run -p swarmui
Use SwarmUI to browse status, telemetry, retained replay state, and the Live
Hive projection. This is the useful handoff point for a second operator: they
can see the same target and GPU projections, then inspect the evidence timeline
without inheriting an unrestricted host shell. SwarmUI’s embedded console can
mutate the target and is subject to the same gateway role, ticket, policy, and
request authentication as cohsh. Visual state remains a presentation of
target or host records; it is not stronger proof than the records behind it.
Make the go/no-go decision
The node is ready to enter a deployment-specific change procedure only when:
- serial and
/proc/bootidentify the intended target and profile; - the checked baseline passes and required control/scheduler state is healthy;
- every existing lease is expected and compatible with the operation;
- the gateway is the sole shared console owner and reports the same session;
- a CUDA-dependent change has separate real-host inventory and runtime proof; and
- the evidence pack is complete enough to compare with the after-state.
Stop and route the first failed boundary when any item is false. Do not turn an unknown GPU runtime into a target fault, a target refusal into a retry loop, or a successful model-registry write into proof that an inference runtime reloaded.
For a private adapter, continue with Stage and reverse a private adapter rollout. For a constrained service, GPU, or model action proposed by automation, use Let automation request one bounded action.
Move the decision workflow to Pi 4 or another CUDA host
For a Pi 4 Queen, keep the sequence but change the proof source:
- build, flash, read back, and boot the exact image through Hardware Bring-up;
- retain serial as the recovery and independent evidence surface;
- prove the selected GENET or Wi-Fi path for that same boot;
- point the sole gateway at the proven target address; and
- rerun the read-only tour and evidence export.
QEMU success is not Pi success. GENET and CYW43/Wi-Fi are also separate physical evidence lanes.
A Linux AArch64 NVIDIA CUDA system—such as Jetson Orin, AWS G5g, NVIDIA DGX Spark, or a compatible partner system—is a host for Cohesix tools, GPU workloads, and model runtimes; it is not the seL4 target in this topology. Use fast SSD/NVMe or equivalent high-performance storage for build outputs, model registries, caches, containers, and evidence by supplying those locations through the tools’ normal arguments or environment. Do not infer target Worker or AI-runtime acceptance from a successful host GPU inventory.
Finish cleanly
- Export any final evidence before stopping the gateway.
- Exit
cohshand SwarmUI. - Stop one-shot or continuous host publishers.
- Stop
hive-gatewayso it releases the target console. - Stop QEMU from its own terminal.
- Unset session credentials and apply the deployment retention policy.
unset COH_AUTH_TOKEN COHSH_AUTH_TOKEN HIVE_GATEWAY_REQUEST_AUTH_TOKEN
You have completed the walkthrough when you can make a defensible go/no-go decision from one exact target identity, one shared session, separate target and GPU-host observations, and an offline-reviewable evidence pack. That is the practical value of Cohesix before it performs any external action: it makes the authority, preconditions, unknowns, and eventual result difficult to confuse.