carlos / platform Public

Isolated exec brief: round 2 instructions

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YZ1ZvWj7naf73GjTX8MBv5
Paul Campbell pushed by paul@keymail.dev d70f11090edb40e83fb07d27c0669658ed305c51 parent 622bcdb
1 file changed, +41 −17
  • docs/superpowers/specs/CODEX-REVIEW-BRIEF-ISOLATED-EXEC.md +41 −17
diff --git a/docs/superpowers/specs/CODEX-REVIEW-BRIEF-ISOLATED-EXEC.md b/docs/superpowers/specs/CODEX-REVIEW-BRIEF-ISOLATED-EXEC.md
index 78d245b88..3211c58c6 100644
--- a/docs/superpowers/specs/CODEX-REVIEW-BRIEF-ISOLATED-EXEC.md
+++ b/docs/superpowers/specs/CODEX-REVIEW-BRIEF-ISOLATED-EXEC.md
@@ -60,31 +60,55 @@ output is a findings report, not an edit. Do not modify any file.
instance, and which `systemctl` verbs an unprivileged caller may run
without polkit.
+## Rounds after the first
+
+From round 2 on, the prior rounds' findings files
+(`CODEX-FINDINGS-ISOLATED-EXEC.md`, then `-R2.md`, ...) are committed
+beside the spec, and the spec's §13 records how each finding was
+taken. **Start your report with a disposition table**: one row per
+prior finding, stating whether the revision resolves it, resolves it
+partially (say what is missing), or does not resolve it. Then report
+only findings that are new in this revision, numbered `R<n>-1` onward
+for the current round. Do not repeat a resolved finding; do not
+re-argue a ruling.
+
## Decisions already taken (report a mechanism that fails one; do not re-argue one)
- Paul approved approach 3 on 2026-09-11: the activator keeps ownership;
the process becomes a systemd template unit; still uid `carlos`;
namespace isolation; no console change; migration by rename.
- Approaches 1 and 2 (spec §12) are rejected.
+- Ruled with codex R1-1 (2026-09-11): the root channel is the
+ `carlos-instance-control` service with a bearer token; polkit is not
+ installed and not relied on. Report a way the token or the channel
+ fails; do not re-open the polkit comparison.
-## The one decision that is open, and yours to advise on
-
-§5.4: the root channel is either the `carlos-instance-control` service
-(a root, socket-activated HTTP-over-unix server with four verbs) or a
-polkit rules grant that lets uid `carlos` run the `systemctl` verbs it
-already issues. The spec's author advises the control service and gives
-four reasons. **Advise for or against, with reasons, as a numbered
-finding.** In particular:
+## Things to check hard in revision 2
-- find any way an instance inside the §4.1 namespace can reach
- `/run/carlos/instance-control.sock`, or make the agent send a request
- it did not intend (the agent composes requests from registry rows and
- manifests; consider what a tenant controls in those);
-- say whether a polkit rules file can express "start, stop, reset-failed
- and set-property on `carlos-instance*@*.service` only", and what
- installing polkit on the box image would cost;
-- say whether `systemctl set-property --runtime` on a template instance
- that has never been started behaves as §5.3 assumes.
+- **`nosymfollow` (§3.2).** Does a bind mount of a directory onto itself
+ with `nosymfollow` hold for lookups through the covering mount from
+ the agent's namespace, and through systemd's `BindPaths=` bind inside
+ the instance's namespace? Is there any path the agent, the edge, PID 1
+ (`StandardOutput=file:`) or litestream resolves under the instance
+ trees that is not on that mount? Is the `openat2` helper redundant,
+ insufficient, or wrong in any flag?
+- **The token (§5.4).** Where does it live, who writes it, who reads it,
+ and can an instance obtain it or cause the agent to present it on the
+ instance's behalf?
+- **Exit observation (§6.5).** `cgroup.events` inotify semantics for
+ `populated`; the invocation id match; the fallback poll; what happens
+ to a proc whose unit is restarted by something other than the agent.
+- **Slices (§4.3).** `Slice=carlos-instances-%i.slice` from a template
+ with an escaped instance name; on-demand slice creation;
+ `set-property --runtime` on a slice that does not exist yet; whether
+ moving the edge into `carlos.slice` keeps the 2026-08-28 wall's
+ semantics.
+- **The fence (§8.1) and the reverse migration (§8.3).** Every consumer
+ that must honour the marker; the recovery table; the "two databases"
+ refusal; what `carlos system rollback` does today and whether a leg
+ can be added before the binary swap.
+- **The probe and the gate (§8.4).** Can the probe pass while an instance
+ would not be isolated? Can it fail while instances would be?
## What matters most