Companion to the exec-backend isolation issue (same finding, teamtito/titogo#2527 / #2529). This one is smaller and would close the worst part on its own.
The gap
carlos env exec-delivery file exists for TCP-addr routes CARLOS proxies to but never spawns ("titogo's router fleet", per its help text). For those routes the app's own supervisor reads the delivered file — in our case systemd, as root, via an EnvironmentFile= drop-in. Nothing running as carlos ever needs to read it.
Yet it is written by the agent (internal/appconfig/syncexec.go:656, os.WriteFile(tmp, rendered, 0o600) + rename) into the exec backend's flat DataDir, as carlos:carlos. Every exec child on the box runs as carlos, so every tenant instance — of any app — can read every TCP-addr route's config. For our relay route that file carries every platform credential we have.
Meanwhile unit-backed routes already get their config the right way: carlos-config-sync.service runs as root and writes /etc/carlos/apps/<host>.env root-0600 (internal/appconfig/sync.go:28; backend_unit.go:176: "unreadable to the agent by design").
What we are asking for
Let a TCP-addr route opt into that path: config rendered by the root sync unit into /etc/carlos/apps/<host>.env (or another root-owned location), never into the agent's DataDir. Something like carlos env exec-delivery … root or a per-route flag; we would then point titogo-relay.service's drop-in at it and turn the flat-file delivery off.
What we want to avoid is the workaround: moving the relay's secrets back to a hand-written env file on the box and switching delivery off. That loses carlos secrets provenance — the exact thing we were told not to do on 2026-08-13 — and we would rather ask for the platform shape than absorb it.
Today: sudo -u carlos test -r /data/connect.go.tito.io.config.env → yes, on carlos-tito-ie, 2026-09-10.