2026-07-05 17:21:59 +02:00
|
|
|
# Production Readiness Roadmap
|
|
|
|
|
|
|
|
|
|
This roadmap tracks the work required before `geth` becomes a dependable base
|
|
|
|
|
layer for personal scripts, infrastructure automation, and other projects.
|
|
|
|
|
Deployment has not started, so large refactors are in scope when they reduce
|
|
|
|
|
long-term risk.
|
|
|
|
|
|
|
|
|
|
Status markers:
|
|
|
|
|
|
|
|
|
|
- `[ ]` Not started
|
|
|
|
|
- `[~]` In progress
|
|
|
|
|
- `[x]` Done
|
|
|
|
|
|
|
|
|
|
## Release Principle
|
|
|
|
|
|
|
|
|
|
Do not widen the feature surface until the existing daemon, storage, protocol,
|
|
|
|
|
authorization, and operational contracts are boring to test, upgrade, and
|
|
|
|
|
debug. The project already has enough prototype capability to validate the
|
|
|
|
|
architecture; the next milestone is making those capabilities stable.
|
|
|
|
|
|
|
|
|
|
## Phase 0: Current Quality Gate
|
|
|
|
|
|
|
|
|
|
Goal: make the documented local quality gate pass before deeper refactors.
|
|
|
|
|
|
2026-07-05 18:11:35 +02:00
|
|
|
- `[x]` Restore the full workspace quality gate.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
|
|
|
|
- `[x]` `cargo fmt --all -- --check` passes.
|
|
|
|
|
- `[x]` `cargo check --workspace --all-targets` passes.
|
|
|
|
|
- `[x]` `cargo test --workspace` passes.
|
2026-07-05 17:24:03 +02:00
|
|
|
- `[x]` `cargo clippy --workspace --all-targets -- -D warnings` passes.
|
2026-07-05 18:11:35 +02:00
|
|
|
- `[x]` CI enforces the same required checks.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
|
|
|
|
## Phase 1: Daemon Subsystem Refactor
|
|
|
|
|
|
|
|
|
|
Goal: split `geth-node` into reviewable daemon subsystems without changing
|
|
|
|
|
behavior.
|
|
|
|
|
|
2026-07-05 23:22:53 +02:00
|
|
|
- `[x]` Extract daemon startup and runtime ownership.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 23:22:53 +02:00
|
|
|
- `[x]` Daemon startup, shutdown, signal handling, socket setup, and Iroh
|
2026-07-05 17:37:12 +02:00
|
|
|
endpoint ownership live outside the main feature handler module.
|
|
|
|
|
- `[x]` Iroh accept-loop and background live-sync task spawning live outside
|
|
|
|
|
the main feature handler module.
|
2026-07-05 17:27:42 +02:00
|
|
|
- `[x]` Runtime state is represented by narrow structs with documented
|
2026-07-05 17:21:59 +02:00
|
|
|
ownership and locking rules.
|
2026-07-05 23:22:53 +02:00
|
|
|
- `[x]` Existing daemon startup and status tests pass unchanged.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
2026-07-05 23:28:46 +02:00
|
|
|
- `[~]` Extract local control routing.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 23:28:46 +02:00
|
|
|
- `[x]` Local `ControlRequest` dispatch is a routing layer, not the home of
|
2026-07-05 17:21:59 +02:00
|
|
|
every feature implementation.
|
|
|
|
|
- `[ ]` Each command family has a small handler module or function group.
|
2026-07-05 23:28:46 +02:00
|
|
|
- `[x]` Local-only behavior remains covered by existing integration tests.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
2026-07-05 23:38:19 +02:00
|
|
|
- `[~]` Extract protected peer-control routing.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 17:35:40 +02:00
|
|
|
- `[x]` Shared bounded Iroh line-read and send-finish helpers live outside
|
|
|
|
|
the main feature handler module.
|
2026-07-05 17:43:24 +02:00
|
|
|
- `[x]` Outbound peer-control, pipe-wire, and overlay-wire request helpers
|
|
|
|
|
live outside the main feature handler module.
|
2026-07-05 23:38:19 +02:00
|
|
|
- `[~]` Iroh control ALPN handling, nonce checks, peer-card validation, and
|
2026-07-05 17:21:59 +02:00
|
|
|
endpoint-binding validation are centralized.
|
2026-07-05 23:38:19 +02:00
|
|
|
- `[x]` Feature handlers receive authenticated caller context rather than
|
2026-07-05 17:21:59 +02:00
|
|
|
repeating peer-card boilerplate.
|
2026-07-05 23:38:19 +02:00
|
|
|
- `[x]` Remote request tests still prove discovery alone grants no access.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
|
|
|
|
- `[ ]` Extract resource module handlers.
|
|
|
|
|
Acceptance criteria:
|
|
|
|
|
- `[ ]` CAS/file-root, KV, DB, document, pubsub, pipe, SSH, and overlay
|
|
|
|
|
handlers are separated enough that each can be reviewed independently.
|
|
|
|
|
- `[ ]` Each module documents its resource IDs, capabilities, and mutation
|
|
|
|
|
points.
|
|
|
|
|
- `[ ]` No generic `geth-common` crate is introduced.
|
|
|
|
|
|
2026-07-05 23:19:05 +02:00
|
|
|
- `[x]` Extract live-sync engine.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 17:33:40 +02:00
|
|
|
- `[x]` Sync cursor keys, cursor persistence, stream health recording, and
|
|
|
|
|
local sync-status reduction live in a sync-focused module.
|
2026-07-05 17:49:09 +02:00
|
|
|
- `[x]` Sync stream selection, watermarks, and run result helpers live in a
|
2026-07-05 17:33:40 +02:00
|
|
|
sync-focused module.
|
2026-07-05 17:49:09 +02:00
|
|
|
- `[x]` Per-module sync handlers have consistent interfaces.
|
2026-07-05 18:04:25 +02:00
|
|
|
- `[x]` `geth sync status --json` output remains stable.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
|
|
|
|
## Phase 2: Stable Automation Contracts
|
|
|
|
|
|
|
|
|
|
Goal: make command, JSON, and protocol contracts explicit enough for scripts
|
|
|
|
|
and downstream projects.
|
|
|
|
|
|
2026-07-05 17:51:06 +02:00
|
|
|
- `[x]` Define compatibility policy.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 17:51:06 +02:00
|
|
|
- `[x]` CLI command compatibility is documented.
|
|
|
|
|
- `[x]` `--json` output compatibility is documented.
|
|
|
|
|
- `[x]` Local control JSONL compatibility is documented.
|
|
|
|
|
- `[x]` Peer wire protocol compatibility is documented.
|
|
|
|
|
- `[x]` SQLite and signed-operation compatibility are documented.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
2026-07-05 18:31:20 +02:00
|
|
|
- `[x]` Add golden JSON tests.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 18:04:25 +02:00
|
|
|
- `[x]` Important script-facing commands have stable JSON fixture tests.
|
2026-07-05 18:31:20 +02:00
|
|
|
- `[x]` Error JSON includes stable codes for common operator and automation
|
2026-07-05 17:21:59 +02:00
|
|
|
failures.
|
2026-07-05 18:04:25 +02:00
|
|
|
- `[x]` Fixture updates require intentional review.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
2026-07-05 22:30:15 +02:00
|
|
|
- `[x]` Expand protocol roundtrip tests.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 22:30:15 +02:00
|
|
|
- `[x]` Every `ControlRequest` and `ControlResponse` variant roundtrips.
|
|
|
|
|
- `[x]` Every `PeerControlRequest` and `PeerControlResponse` variant
|
2026-07-05 17:21:59 +02:00
|
|
|
roundtrips.
|
2026-07-05 18:17:16 +02:00
|
|
|
- `[x]` Pipe and overlay wire protocol variants roundtrip.
|
2026-07-05 17:51:06 +02:00
|
|
|
- `[x]` Unknown or malformed protocol inputs fail safely.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
2026-07-05 17:58:49 +02:00
|
|
|
- `[x]` Classify command stability.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 17:58:49 +02:00
|
|
|
- `[x]` Commands are marked stable, experimental, or prototype in docs.
|
|
|
|
|
- `[x]` Help text avoids production claims for experimental paths.
|
|
|
|
|
- `[x]` Prototype paths have explicit migration or removal expectations.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
|
|
|
|
## Phase 3: Storage And Migration Hardening
|
|
|
|
|
|
|
|
|
|
Goal: treat local SQLite state as durable product data before users depend on
|
|
|
|
|
it.
|
|
|
|
|
|
2026-07-05 17:54:02 +02:00
|
|
|
- `[x]` Replace opportunistic schema setup with ordered migrations.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 17:54:02 +02:00
|
|
|
- `[x]` The store tracks numeric schema versions.
|
|
|
|
|
- `[x]` Each migration is transactional where SQLite supports it.
|
|
|
|
|
- `[x]` Fresh database creation and repeated opens are idempotent.
|
|
|
|
|
- `[x]` Old schema fixtures migrate to the current schema in tests.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
2026-07-05 23:19:05 +02:00
|
|
|
- `[x]` Make multi-table writes transactional.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 17:57:09 +02:00
|
|
|
- `[x]` Signed operation and signature imports commit atomically.
|
2026-07-05 22:47:42 +02:00
|
|
|
- `[x]` Keychain/auth sync imports stage accepted records and commit accepted
|
|
|
|
|
op/signature groups through store batch transactions.
|
2026-07-05 23:19:05 +02:00
|
|
|
- `[x]` SSH distribution sync imports stage accepted records and commit
|
|
|
|
|
requests, certificates, and revocations through one store transaction.
|
|
|
|
|
- `[x]` Multi-record sync imports cannot leave partial state after a local
|
2026-07-05 17:21:59 +02:00
|
|
|
error.
|
2026-07-05 17:57:09 +02:00
|
|
|
- `[x]` Tests cover failure injection for at least one multi-table path.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
2026-07-05 22:35:18 +02:00
|
|
|
- `[x]` Add backup and restore workflow.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 22:35:18 +02:00
|
|
|
- `[x]` `geth backup create` or an equivalent documented command captures
|
2026-07-05 17:21:59 +02:00
|
|
|
metadata, identity public material, config, and CAS metadata expectations.
|
2026-07-05 22:35:18 +02:00
|
|
|
- `[x]` Restore can write to a separate target home for validation.
|
|
|
|
|
- `[x]` Backup output avoids copying private SSH admin keys.
|
|
|
|
|
- `[x]` Docs explain what is and is not included.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
2026-07-05 18:10:41 +02:00
|
|
|
- `[x]` Document database durability settings.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 18:10:41 +02:00
|
|
|
- `[x]` WAL and synchronous settings are chosen deliberately.
|
|
|
|
|
- `[x]` Crash-recovery expectations are documented.
|
|
|
|
|
- `[x]` `geth doctor` or status output reports obvious store issues.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
|
|
|
|
## Phase 4: Security Boundary Closure
|
|
|
|
|
|
|
|
|
|
Goal: finish the authorization and remote-input audit before deployment.
|
|
|
|
|
|
2026-07-05 23:12:01 +02:00
|
|
|
- `[x]` Complete remote authorization matrix coverage.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 23:12:01 +02:00
|
|
|
- `[x]` Denied and allowed paths are tested for CAS, KV, DB, document,
|
2026-07-05 17:21:59 +02:00
|
|
|
pubsub, pipe, SSH proxy/admin shell, SSH cert metadata, and revocations.
|
2026-07-05 17:59:47 +02:00
|
|
|
- `[x]` Every remote mutating or service-opening operation has an explicit
|
2026-07-05 17:21:59 +02:00
|
|
|
resource capability check before mutation or host access.
|
2026-07-05 17:59:47 +02:00
|
|
|
- `[x]` The matrix fails tests when a new remote operation lacks a guard.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
2026-07-05 23:12:01 +02:00
|
|
|
- `[x]` Add adversarial identity and bearer tests.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 23:12:01 +02:00
|
|
|
- `[x]` Tests cover discovered-only peers.
|
|
|
|
|
- `[x]` Tests cover wrong endpoint bindings.
|
|
|
|
|
- `[x]` Tests cover revoked nodes.
|
|
|
|
|
- `[x]` Tests cover stale or mismatched peer cards.
|
|
|
|
|
- `[x]` Tests cover bearer secrets with wrong capabilities.
|
|
|
|
|
- `[x]` Tests cover bearer attempts to mutate trust graph state.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
2026-07-05 18:22:07 +02:00
|
|
|
- `[x]` Bound all remote input paths.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 18:22:07 +02:00
|
|
|
- `[x]` Remote request payloads have documented size limits.
|
|
|
|
|
- `[x]` Remote stream reads have timeouts or bounded behavior.
|
|
|
|
|
- `[x]` Oversized messages are rejected without state mutation.
|
|
|
|
|
- `[x]` Tests cover oversized payload denial for representative protocols.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
2026-07-05 18:23:12 +02:00
|
|
|
- `[x]` Audit host-opening paths.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 18:23:12 +02:00
|
|
|
- `[x]` TCP forwarding remains loopback-only unless a later ADR expands it.
|
|
|
|
|
- `[x]` Unix forwarding rejects unsafe paths.
|
|
|
|
|
- `[x]` SSH proxy connects only to the intended local SSH endpoint.
|
|
|
|
|
- `[x]` Overlay TUN setup remains explicit opt-in.
|
|
|
|
|
- `[x]` Docs state host access risks and recovery commands.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
|
|
|
|
## Phase 5: Production Cryptography Boundary
|
|
|
|
|
|
|
|
|
|
Goal: remove prototype cryptography from paths users may treat as real
|
|
|
|
|
confidential storage.
|
|
|
|
|
|
2026-07-05 23:02:59 +02:00
|
|
|
- `[x]` Replace prototype private CAS envelope.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 23:02:59 +02:00
|
|
|
- `[x]` The BLAKE3-XOR prototype envelope is not used for new private CAS
|
2026-07-05 17:21:59 +02:00
|
|
|
writes.
|
2026-07-05 23:02:59 +02:00
|
|
|
- `[x]` New private CAS writes use a reviewed AEAD construction or an
|
2026-07-05 17:21:59 +02:00
|
|
|
established envelope format such as age.
|
2026-07-05 23:02:59 +02:00
|
|
|
- `[x]` Key derivation, nonce generation, and envelope versioning are
|
2026-07-05 17:21:59 +02:00
|
|
|
documented.
|
2026-07-05 23:02:59 +02:00
|
|
|
- `[x]` Tests cover tamper detection, wrong resource, wrong key, and nonce
|
2026-07-05 17:21:59 +02:00
|
|
|
uniqueness behavior.
|
|
|
|
|
|
2026-07-05 23:02:59 +02:00
|
|
|
- `[x]` Define pre-release encrypted blob migration behavior.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 23:02:59 +02:00
|
|
|
- `[x]` Existing prototype envelopes are either rejected with a clear error
|
2026-07-05 17:21:59 +02:00
|
|
|
or migrated through an explicit command.
|
2026-07-05 23:02:59 +02:00
|
|
|
- `[x]` Docs state that prototype envelopes made before deployment are not a
|
2026-07-05 17:21:59 +02:00
|
|
|
durable security format.
|
|
|
|
|
|
|
|
|
|
## Phase 6: Sync Correctness And Fault Testing
|
|
|
|
|
|
|
|
|
|
Goal: make convergence and failure behavior predictable enough for automation.
|
|
|
|
|
|
|
|
|
|
- `[ ]` Build deterministic multi-daemon fault tests.
|
|
|
|
|
Acceptance criteria:
|
|
|
|
|
- `[ ]` Tests cover peer restart.
|
|
|
|
|
- `[ ]` Tests cover endpoint rotation.
|
|
|
|
|
- `[ ]` Tests cover temporary peer unavailability.
|
|
|
|
|
- `[ ]` Tests cover partial stream failure.
|
|
|
|
|
- `[ ]` Tests cover duplicate records and stale cursors.
|
|
|
|
|
|
2026-07-05 22:51:47 +02:00
|
|
|
- `[x]` Define per-resource conflict semantics.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 22:51:47 +02:00
|
|
|
- `[x]` CAS/file-root conflict semantics are documented and tested.
|
|
|
|
|
- `[x]` KV conflict semantics are documented and tested.
|
|
|
|
|
- `[x]` Document merge semantics are documented and tested.
|
|
|
|
|
- `[x]` DB change application limits are documented and tested.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
2026-07-05 22:57:52 +02:00
|
|
|
- `[x]` Add live-sync retry and backoff policy.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 22:57:52 +02:00
|
|
|
- `[x]` Failed peer streams back off without starving healthy streams.
|
|
|
|
|
- `[x]` Retry state appears in `geth sync status --json`.
|
|
|
|
|
- `[x]` Operators can trigger immediate retry with `geth sync now`.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
|
|
|
|
## Phase 7: Script And Automation UX
|
|
|
|
|
|
|
|
|
|
Goal: make `geth` ergonomic and stable as a base layer for custom automation.
|
|
|
|
|
|
2026-07-05 18:30:44 +02:00
|
|
|
- `[x]` Stabilize JSON errors.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 18:30:44 +02:00
|
|
|
- `[x]` Common failures include stable machine-readable error codes.
|
|
|
|
|
- `[x]` Human errors still include next-step recovery hints.
|
|
|
|
|
- `[x]` Tests assert both code and operator-facing hint for representative
|
2026-07-05 17:21:59 +02:00
|
|
|
failures.
|
|
|
|
|
|
2026-07-05 22:24:08 +02:00
|
|
|
- `[x]` Add wait commands for automation.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 22:24:08 +02:00
|
|
|
- `[x]` `geth wait daemon` can block until local control is ready.
|
|
|
|
|
- `[x]` `geth wait peer <node>` can block until peer control succeeds or
|
2026-07-05 17:21:59 +02:00
|
|
|
times out.
|
2026-07-05 22:24:08 +02:00
|
|
|
- `[x]` `geth wait sync <node>` can block until required streams are healthy
|
2026-07-05 17:21:59 +02:00
|
|
|
or stale.
|
2026-07-05 22:24:08 +02:00
|
|
|
- `[x]` Wait commands support JSON output and timeout flags.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
2026-07-05 22:43:02 +02:00
|
|
|
- `[x]` Make common commands idempotent.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 22:43:02 +02:00
|
|
|
- `[x]` Resource creation commands can be safely repeated where practical.
|
|
|
|
|
- `[x]` Grant creation supports deterministic caller-provided IDs.
|
|
|
|
|
- `[x]` Repeated sync and import commands report no-op state clearly.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
2026-07-05 22:40:27 +02:00
|
|
|
- `[x]` Publish automation examples.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 22:40:27 +02:00
|
|
|
- `[x]` Docs include shell examples.
|
|
|
|
|
- `[x]` Docs include Python examples using CLI JSON.
|
|
|
|
|
- `[x]` Docs include user-service automation examples.
|
|
|
|
|
- `[x]` Examples avoid private-key copying and privileged service mutation.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
|
|
|
|
## Phase 8: Observability And Operations
|
|
|
|
|
|
|
|
|
|
Goal: make production failures diagnosable from the CLI and logs.
|
|
|
|
|
|
2026-07-05 23:09:12 +02:00
|
|
|
- `[x]` Improve structured tracing.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 23:09:12 +02:00
|
|
|
- `[x]` Logs include fields for command, peer node, resource, capability,
|
2026-07-05 17:21:59 +02:00
|
|
|
stream, cursor, and stable error code where applicable.
|
2026-07-05 23:09:12 +02:00
|
|
|
- `[x]` Sensitive bearer tokens and private material are not logged.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
2026-07-05 18:14:52 +02:00
|
|
|
- `[x]` Expand health status.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 18:14:52 +02:00
|
|
|
- `[x]` `geth status --json` reports daemon uptime.
|
|
|
|
|
- `[x]` Store schema version is visible.
|
|
|
|
|
- `[x]` Native backend health is visible.
|
|
|
|
|
- `[x]` Iroh relay/local-discovery state is visible without exposing
|
2026-07-05 17:21:59 +02:00
|
|
|
unrelated config secrets.
|
|
|
|
|
|
2026-07-05 22:39:15 +02:00
|
|
|
- `[x]` Add `geth doctor`.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 22:39:15 +02:00
|
|
|
- `[x]` Doctor detects daemon not running.
|
|
|
|
|
- `[x]` Doctor detects stale local socket.
|
|
|
|
|
- `[x]` Doctor detects bad config.
|
|
|
|
|
- `[x]` Doctor detects missing `ssh-keygen`.
|
|
|
|
|
- `[x]` Doctor explains missing grants and endpoint mismatches when enough
|
2026-07-05 17:21:59 +02:00
|
|
|
local metadata exists.
|
2026-07-05 22:39:15 +02:00
|
|
|
- `[x]` Doctor has JSON output for scripts.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
|
|
|
|
## Phase 9: Packaging, Upgrade, And Release Discipline
|
|
|
|
|
|
|
|
|
|
Goal: make first deployment the start of a controlled compatibility story.
|
|
|
|
|
|
2026-07-05 18:25:44 +02:00
|
|
|
- `[x]` Harden release artifacts.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 18:25:44 +02:00
|
|
|
- `[x]` Linux, macOS, and Windows archives are built from tags.
|
|
|
|
|
- `[x]` Release archives are smoke-tested directly, not only through
|
2026-07-05 17:21:59 +02:00
|
|
|
`cargo run`.
|
2026-07-05 18:25:44 +02:00
|
|
|
- `[x]` Archives include relevant docs and license files.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
2026-07-05 23:40:39 +02:00
|
|
|
- `[x]` Add upgrade tests.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 23:40:39 +02:00
|
|
|
- `[x]` Fixture homes from previous tagged pre-releases migrate forward.
|
|
|
|
|
There are no tagged pre-releases yet, so the current test uses a synthetic
|
|
|
|
|
pre-release home and the release policy requires retaining real tagged
|
|
|
|
|
fixture homes once tags exist.
|
|
|
|
|
- `[x]` Upgrade tests include store schema, config, keychain/auth logs, CAS
|
2026-07-05 17:21:59 +02:00
|
|
|
metadata, and peer cards.
|
2026-07-05 23:40:39 +02:00
|
|
|
- `[x]` Rollback expectations are documented.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
2026-07-05 18:26:39 +02:00
|
|
|
- `[x]` Publish release and support policy.
|
2026-07-05 17:21:59 +02:00
|
|
|
Acceptance criteria:
|
2026-07-05 18:26:39 +02:00
|
|
|
- `[x]` Supported platforms are listed.
|
|
|
|
|
- `[x]` Breaking-change policy is documented.
|
|
|
|
|
- `[x]` Security update expectations are documented.
|
|
|
|
|
- `[x]` User-service installation remains user-level only.
|
2026-07-05 17:21:59 +02:00
|
|
|
|
|
|
|
|
## Phase 10: Pre-Deployment Dogfood Gate
|
|
|
|
|
|
|
|
|
|
Goal: prove the system works as an actual base layer before broader use.
|
|
|
|
|
|
|
|
|
|
- `[ ]` Complete two-machine dogfood checklist.
|
|
|
|
|
Acceptance criteria:
|
|
|
|
|
- `[ ]` Fresh install works on at least two real machines.
|
|
|
|
|
- `[ ]` Owner init, enrollment, peer exchange, grant, sync status, CAS, KV,
|
|
|
|
|
document, pipe, SSH proxy, and service restart work end to end.
|
|
|
|
|
- `[ ]` Denied remote operations do not mutate serving node state.
|
|
|
|
|
- `[ ]` Backup and restore work.
|
|
|
|
|
- `[ ]` Upgrade from one tagged pre-release to the next works.
|
|
|
|
|
- `[ ]` `geth doctor` gives actionable output for intentionally broken
|
|
|
|
|
setups.
|
|
|
|
|
- `[ ]` Docs match actual commands.
|
|
|
|
|
|
|
|
|
|
## Working Order
|
|
|
|
|
|
2026-07-05 18:11:35 +02:00
|
|
|
1. `[x]` Finish Phase 0.
|
2026-07-05 17:27:42 +02:00
|
|
|
2. `[~]` Refactor `geth-node` into daemon subsystems.
|
2026-07-05 22:30:15 +02:00
|
|
|
3. `[x]` Add stable contract and golden JSON tests.
|
2026-07-05 22:35:18 +02:00
|
|
|
4. `[x]` Harden store migrations and backup.
|
2026-07-05 23:12:01 +02:00
|
|
|
5. `[x]` Complete security-boundary test coverage.
|
2026-07-05 23:02:59 +02:00
|
|
|
6. `[x]` Replace prototype private CAS cryptography.
|
2026-07-05 17:21:59 +02:00
|
|
|
7. `[ ]` Add fault-injection sync tests.
|
|
|
|
|
8. `[ ]` Improve automation commands and JSON errors.
|
|
|
|
|
9. `[ ]` Add operational health, doctor, and release gates.
|