@@ -15,19 +15,27 @@ independent backup mount/device: hmmm
1515human 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
3341Unix service account: stackorchestrator
@@ -36,9 +44,10 @@ production database: stack_orchestrator
3644restore-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
4352The worker needs only:
4453
@@ -168,8 +177,13 @@ systemctl list-timers stack-orchestrator-backup.timer
168177Deployment 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
191205The 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