Live Deployment Preflight
August 29, 2026 ยท View on GitHub
This guide covers bringing up a live NoKV deployment and qualifying it before a production handoff. Downstream systems provide skills over the native full CLI; embedded callers use the Python SDK. Every surface uses the same workspace format and grants no additional authority or compatibility route.
Required Inputs
Before registration, obtain:
- one 16-byte
RootId; - one persisted 16-byte
AgentIdand its immutable control-plane binding to that RootId; - its persisted 16-byte
LogicalShardIdaffinity; - the current non-zero placement generation and owner epoch;
- the reachable workspace RPC owner address;
- an S3-compatible bucket, region, endpoint policy, and credentials;
- an absolute path to the exact
nokvbinary being registered.
The metadata owner must have opened a store containing only the exact
nokv_workspace schema and installed the matching active root fence. The
artifact backend must provide immutable create-if-absent, head, range read, and
delete semantics.
Offline Gates
Run:
cargo fmt --all -- --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
python3 scripts/workbench/workbench_contract_test.py
git diff --check
The contract check proves only the exact 18 names and normalized input schemas. It does not qualify persistence, object I/O, failover, restore, or latency.
Default Deployment Shape
A serving shard is one nokv serve process over one exclusive Holt store. That
process is the metadata authority: it holds the owner lease, applies every
metadata command to its local Holt WAL, and acknowledges once that WAL is
durable. Nothing else has to be running for reads and writes to work.
Control (etcd) is required, but for two narrow jobs: resolving which process owns a root, and fencing that ownership with an epoch. It is not on the write path and it does not hold metadata.
Publishing the recovery log to Control (--recovery-publication shared) is
an option, and an immature one: without checkpoint compaction the shared log
chain grows without bound and the shard stops serving after roughly a hundred
acknowledged publications. Leave it off unless you are qualifying the shared
recovery path itself. It is switched on implicitly by
--metadata-recover-log, which resumes a shard from a shared frontier.
The corresponding invariant for operators: back up the Holt directory. In the default shape it is the only copy of the metadata.
Live Contract Check
For the complete live Workbench path, run
scripts/workbench/live_workbench.py. It calls nokv provision,
starts nokv serve with explicit metadata create/reopen intent, exercises all
18 tools, and
retains exact requests/responses plus materialize/collect evidence. Run
--dry-run first to inspect the redacted command and normalized-input plan.
In the local-WAL profile, reopen qualifies only a restart of the same
exclusive Holt namespace. Admission validates Holt WAL recovery, the exact
workspace schema and shard identity, the complete recovery-outbox chain, and
the local/control owner-epoch relation before consuming a new epoch. An
unfinished Recovering epoch is rebound rather than skipped. This remains
restart evidence, not copied-directory, cross-host, shared-log, or rolling
upgrade failover evidence.
The release-level epoch proof is the real-etcd fence-before/fence-after
SIGKILL runner in
scripts/workbench/local_wal_recovery_gate.py;
a normal reopen alone does not cover interrupted Recovering retries.
live_workbench.py currently drives the 18 tools through a nokv mcp child
process. That sidecar is deprecated and is not a supported NoKV integration
surface; it remains only as this harness's transport, and evidence produced
over it qualifies neither the CLI nor the Python SDK path.
The selected --workbench-root is durable presentation configuration because
canonical v1 manifests contain its projected paths. Keep it identical across
restart/replay; it never replaces RootId as the storage or routing identity.
Agent-facing commands require etcd control routing and verify the immutable
RootId-to-AgentId binding before RPC preflight, object binding, stdin reads, or
tool advertisement. This is a fail-closed deployment identity check, not
authentication. A legacy root without a binding requires a one-time,
operator-verified provision with --adopt-legacy-agent-binding; NoKV never
infers identity from the presentation path.
Before serving any Agent-facing command, the CLI performs the typed workspace
RPC preflight for every capability required by the 18-tool profile; a missing
capability or route mismatch stops startup.
Bring-up must stop if:
- the tool set is not exactly 18 tools;
- any normalized input schema differs;
- the root route is stale or belongs to another logical shard;
- the root has no durable Agent binding or is bound to another AgentId;
- the metadata schema marker differs from
nokv_workspace; - the object backend cannot guarantee immutable creation;
- a write/read/snapshot/restore probe returns a placeholder or unsupported success.
Qualification
Report each applicable gate in
Workspace Acceptance as PASS, FAIL,
or NOT QUALIFIED. In particular, a production handoff needs independent
evidence for:
- metadata reopen and exact request replay;
- stale-owner rejection and owner failover;
- immutable object upload, range verification, and ambiguous-provider errors;
- hidden-then-atomic restore;
- revision retention and GC fencing;
- golden Workbench results and errors, not only input schemas.
Keep raw commands, environment profile, logs, and result artifacts with the qualification report.
Current source-level/unit evidence does not qualify a production handoff. In addition to the unavailable shared recovery path, live qualification must still prove or implement all of the following:
- provider-attested upload completion across the direct SDK data path, not a forgeable client assertion alone;
- production adoption or bounded abort/cleanup for interrupted commit and restore operations, including release of their history/revision holds;
- a tracked resolution for late direct PUT completion after publication abort;
- reconciliation that drives ambiguous object deletion out of quarantine;
- destructive provider operations fenced against control-plane lease transfer, not only a preceding shard-local owner check.
Until those rows have executable fault-injection evidence they are NOT QUALIFIED, even when the exact 18-tool contract and local happy path pass.