Skip to content

Commit 6979453

Browse files
docs(vm): align deployment checklist with personal console
1 parent a0571d3 commit 6979453

1 file changed

Lines changed: 34 additions & 19 deletions

File tree

backend/deploy/VM_SETUP.md

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,27 @@ independent backup mount/device: hmmm
1515
human SSH/OS Login recovery path: hmmm
1616
```
1717

18-
## Bounded agent contact
18+
## Personal agent contact
1919

20-
Before replacing repeated human SSH with model-side operations, establish the separate
21-
read-only `vm-mcp` contact described in [`VM_CONTACT.md`](VM_CONTACT.md). The runtime
22-
comes from an exact canonical `The-Interdependency/skill-lib` commit and must not take
23-
ownership of `/srv/stack`, expose a public listener, inherit SSH keys, or start with a
24-
writable shell.
20+
Before replacing repeated human SSH with model-side operations, establish the private
21+
single-owner `vm-mcp` personal console described in [`VM_CONTACT.md`](VM_CONTACT.md).
22+
The runtime comes from an exact canonical `The-Interdependency/skill-lib` commit and
23+
keeps credentials outside model context.
2524

26-
Initial contact is observation-only. Keep human SSH/OS Login/IAP as bootstrap and
27-
break-glass access. A later write surface must be a named, reviewed stack operation,
28-
not a generic privileged shell.
25+
The authority split is deliberate:
2926

30-
## Intended privilege boundary
27+
```text
28+
shell_exec -> confined non-root vmmcp
29+
user_exec -> explicit requested non-root account
30+
admin_exec -> explicit root through separate AF_UNIX broker
31+
```
32+
33+
The MCP HTTP service remains loopback-only and non-root even when the personal-console
34+
root broker is enabled. Keep human SSH/OS Login/IAP as independent bootstrap and
35+
break-glass access. Do not publish port `8765` or hide root execution behind an
36+
apparently non-privileged tool.
37+
38+
## Intended stack-orchestrator privilege boundary
3139

3240
```text
3341
Unix service account: stackorchestrator
@@ -36,9 +44,10 @@ production database: stack_orchestrator
3644
restore-test database: stack_orchestrator_restore_test
3745
```
3846

39-
Prefer local PostgreSQL Unix-socket/peer authentication. The worker does not need a
40-
database password, root privileges, Docker socket access, cloud metadata credentials,
41-
or a generic administrative shell.
47+
Prefer local PostgreSQL Unix-socket/peer authentication. The worker itself does not need
48+
a database password, root privileges, Docker socket access, or cloud metadata
49+
credentials. Host administration remains a separate personal-console operation rather
50+
than being granted to the worker service.
4251

4352
The worker needs only:
4453

@@ -168,8 +177,13 @@ systemctl list-timers stack-orchestrator-backup.timer
168177
Deployment is not complete until all of these are observed on the VM:
169178

170179
```text
171-
[ ] human bootstrap/recovery path remains available
172-
[ ] read-only vm-mcp contact is loopback/private-tunnel only, non-root, shell disabled
180+
[ ] human bootstrap/recovery path remains independently available
181+
[ ] vm-mcp service is non-root and listens only on 127.0.0.1:8765
182+
[ ] vm-mcp personal-console profile is active
183+
[ ] root broker is AF_UNIX-only with root:vmmcp 0660 socket
184+
[ ] shell_exec proves non-root vmmcp identity
185+
[ ] user_exec proves requested non-root identity (including stackorchestrator)
186+
[ ] admin_exec proves uid 0 and journald audit evidence
173187
[ ] PostgreSQL version/state and local auth boundary observed
174188
[ ] stackctl db migrate succeeds
175189
[ ] worker runs as non-root stackorchestrator
@@ -189,7 +203,8 @@ Deployment is not complete until all of these are observed on the VM:
189203
## hmmm
190204

191205
The concrete VM distribution, PostgreSQL installation/auth state, storage mount, service
192-
account state, and end-to-end deployment results remain unobserved here. PostgreSQL
193-
integration tests and backup/restore acceptance therefore remain live VM gates rather
194-
than being represented as passed. `VM_CONTACT.md` defines the bounded path for turning
195-
those unknowns into observable evidence without exporting SSH credentials to the model.
206+
account state, MCP private transport, and end-to-end deployment results remain
207+
unobserved here. PostgreSQL integration tests, personal-console host acceptance, and
208+
backup/restore acceptance therefore remain live VM gates rather than being represented
209+
as passed. `VM_CONTACT.md` defines the path for turning those unknowns into observable
210+
evidence without exporting SSH credentials to the model.

0 commit comments

Comments
 (0)