The finding
The control gate's design is correct and must not be weakened: wallets, view keys, auth,
onion exposure, tokens, per-rig descriptors and the security perimeter are deliberately
host-CLI-only — the dashboard container must never be able to commit them, because a
compromised container could then swap a payout wallet or exfiltrate a view key.
But the design's escape hatch is "edit config.json on the host and run ./pithead apply" —
and the appliance HAS no host access: no shell, SSH disabled. Every host-only item is
therefore not "inconvenient" on the appliance, it is impossible after first boot. The
wizard covers most of them at setup; changing them later means a reinstall.
What an appliance operator cannot do today
| Lost capability |
DIY path |
Severity |
| Change the payout wallet |
edit + apply |
The most important operator action over a machine's life |
| Enable/change payout confirmation (view keys, scan heights) |
edit + apply |
Flagship feature, post-setup |
| Add/edit a rig in workers.list (per-rig control/upgrade) |
edit + apply |
Fleet management |
| Change the dashboard password, enable the onion |
edit + apply |
Security lifecycle |
| Add/change Telegram or Healthchecks after setup |
edit + apply |
Alerting lifecycle |
| Switch node mode local↔remote, change remote hosts |
edit + apply |
Topology changes |
| Encrypted backup / restore (wallet settings, Tor keys, config) |
pithead backup/restore |
Disaster recovery — currently NOTHING exports state off an appliance |
| Support bundle, doctor detail, secrets rotation |
CLI |
Supportability |
The designed answer, and the appliance-native one
The gate's own comments name the plan: #338 out-of-band approval (Telegram approve/deny
with deny-on-timeout) drops in where the refusal happens today, turning perimeter changes
into dashboard-initiated + second-factor-approved. That is the right general mechanism.
An appliance-native complement worth designing alongside it: physical presence as the
second factor — the machine already reads pithead-config.json from a FAT partition at
first boot; extending that to "a config on inserted removable media, confirmed on the
console, applies on any boot" gives holders-of-the-hardware a host-equivalent channel with
no network trust at all. That is what host-CLI-only actually means operationally: someone
with hands on the machine.
Backup/restore needs its own dashboard surface regardless (download an encrypted
backup.tar.zst; restore at wizard time from an uploaded one — the restore half naturally
belongs to the wizard's pre-seed path).
Sequencing
Pre-GA blockers, in order of user pain: (1) backup export, (2) #338 or the physical-presence
channel for wallet/keys/workers changes, (3) restore-at-setup. The dashboard OS-update
action is tracked separately and compounds with (2).
The finding
The control gate's design is correct and must not be weakened: wallets, view keys, auth,
onion exposure, tokens, per-rig descriptors and the security perimeter are deliberately
host-CLI-only — the dashboard container must never be able to commit them, because a
compromised container could then swap a payout wallet or exfiltrate a view key.
But the design's escape hatch is "edit config.json on the host and run ./pithead apply" —
and the appliance HAS no host access: no shell, SSH disabled. Every host-only item is
therefore not "inconvenient" on the appliance, it is impossible after first boot. The
wizard covers most of them at setup; changing them later means a reinstall.
What an appliance operator cannot do today
The designed answer, and the appliance-native one
The gate's own comments name the plan: #338 out-of-band approval (Telegram approve/deny
with deny-on-timeout) drops in where the refusal happens today, turning perimeter changes
into dashboard-initiated + second-factor-approved. That is the right general mechanism.
An appliance-native complement worth designing alongside it: physical presence as the
second factor — the machine already reads
pithead-config.jsonfrom a FAT partition atfirst boot; extending that to "a config on inserted removable media, confirmed on the
console, applies on any boot" gives holders-of-the-hardware a host-equivalent channel with
no network trust at all. That is what host-CLI-only actually means operationally: someone
with hands on the machine.
Backup/restore needs its own dashboard surface regardless (download an encrypted
backup.tar.zst; restore at wizard time from an uploaded one — the restore half naturally
belongs to the wizard's pre-seed path).
Sequencing
Pre-GA blockers, in order of user pain: (1) backup export, (2) #338 or the physical-presence
channel for wallet/keys/workers changes, (3) restore-at-setup. The dashboard OS-update
action is tracked separately and compounds with (2).