5.6 KiB
5.6 KiB
Two-Machine Dogfood Checklist
This checklist is the pre-deployment evidence gate for using geth as a base
layer for scripts, infrastructure automation, and other projects. Complete it
on two real machines before the first broader deployment. Do not mark the Phase
10 roadmap item complete until every checkbox here has a date, platform, geth
version or commit, and evidence note.
Test Matrix
[ ]Machine A platform, architecture, geth version/commit, and install method recorded.[ ]Machine B platform, architecture, geth version/commit, and install method recorded.[ ]Both machines use freshGETH_HOMEdirectories.[ ]Any skipped item has an explicit reason and follow-up issue.
Fresh Install And Owner Init
On Machine A:
geth init --admin-key ~/.ssh/id_ed25519.pub --signing-key ~/.ssh/id_ed25519 --node-name owner
geth daemon service install --start
geth wait daemon --timeout-ms 30000
geth status --json
geth doctor --json
geth peer export --out /tmp/owner.peer.json
Acceptance:
[ ]User-level service starts without privileged service-manager mutation.[ ]geth wait daemonsucceeds.[ ]geth status --jsonreports a node ID, agent ID, store statusok, and Iroh endpoint status.[ ]geth doctor --jsonis actionable and has no unexplained failures.[ ]The exported peer card contains the current owner node ID and endpoint.
Enrollment And Peer Exchange
Move /tmp/owner.peer.json to Machine B.
On Machine B:
geth init
geth peer import /tmp/owner.peer.json
geth node enroll request --node-name worker --out /tmp/worker-enrollment.json
geth node enroll submit owner --path /tmp/worker-enrollment.json
On Machine A:
geth node enroll list --status pending
geth node enroll approve <request-id> --signing-key ~/.ssh/id_ed25519
geth peer export --out /tmp/owner-approved.peer.json
On Machine B:
geth node enroll sync owner
geth keychain status --json
geth wait peer owner --timeout-ms 30000
Acceptance:
[ ]Machine B imports Machine A as an untrusted peer candidate.[ ]Enrollment request submission reaches Machine A over Iroh.[ ]Machine A approval records signed keychain/auth operations.[ ]Machine B sync imports only valid signed operations.[ ]geth wait peer ownersucceeds after enrollment.
Grants And Positive Sync Paths
On Machine A:
geth kv create prefs
geth document create notes
geth cas add README.md
geth pipe listen ops
geth auth grant <worker-node-id> resource:kv:prefs kv.read --signing-key ~/.ssh/id_ed25519 --grant-id dogfood-kv-read
geth auth grant <worker-node-id> resource:document:notes document.read --signing-key ~/.ssh/id_ed25519 --grant-id dogfood-document-read
geth auth grant <worker-node-id> resource:cas:local cas.fetch --signing-key ~/.ssh/id_ed25519 --grant-id dogfood-cas-fetch
geth auth grant <worker-node-id> resource:pipe:ops pipe.connect --signing-key ~/.ssh/id_ed25519 --grant-id dogfood-pipe-connect
geth auth grant <worker-node-id> resource:ssh-proxy:local ssh_proxy.connect --signing-key ~/.ssh/id_ed25519 --grant-id dogfood-ssh-proxy
On Machine B:
geth auth sync owner
geth kv sync owner prefs
geth document sync owner notes
geth cas fetch owner <hash>
geth pipe send ops "dogfood" --node owner
geth ssh proxy owner
geth sync now owner
geth sync status --json
Acceptance:
[ ]Auth sync imports the expected grants.[ ]KV sync importsprefs.[ ]Document sync importsnotes.[ ]CAS fetch retrieves the expected blob.[ ]Pipe send reaches the Machine A daemon-lifetime listener.[ ]SSH proxy opens only afterssh_proxy.connectis granted.[ ]geth sync status --jsonreports healthy or intentionally skipped streams with actionablenext_actionvalues.
Denied Remote Operations
On Machine B, attempt at least one operation without a matching grant:
geth kv sync owner missing-or-denied
geth pipe listen denied --node owner
geth ssh admin-shell owner status
Acceptance:
[ ]Denied operations return stable JSON or text errors with recovery hints.[ ]Machine A state does not mutate after denied operations.[ ]Machine A logs include command/resource/capability fields without bearer tokens or private material.
Backup, Restore, Restart, And Doctor
On Machine A:
geth backup create --out /tmp/geth-backup
geth daemon service stop
geth daemon service start
geth wait daemon --timeout-ms 30000
geth doctor --json
On a separate validation home:
geth backup restore /tmp/geth-backup --target-home /tmp/geth-restore
GETH_HOME=/tmp/geth-restore geth doctor --json
Acceptance:
[ ]Backup excludes private SSH admin keys.[ ]Restore writes to the validation home without mutating the original home.[ ]Service restart preserves identity, peer cards, resources, and sync cursors.[ ]Intentionally broken setups produce actionablegeth doctor --jsonoutput.
Upgrade Evidence
For every tagged pre-release after the first:
geth --version
geth status --json
geth doctor --json
Acceptance:
[ ]Previous tagged pre-release homes migrate forward.[ ]Store schema, config, keychain/auth logs, CAS metadata, and peer cards survive upgrade.[ ]Rollback expectations indocs/release-support-policy.mdmatch the observed behavior.
Sign-Off
[ ]All commands above match the current README and CLI help.[ ]Evidence is attached for Machine A.[ ]Evidence is attached for Machine B.[ ]Phase 10 indocs/production-readiness-roadmap.mdis marked complete only after the real-machine evidence is reviewed.