Download this file
| 1 | # Fast release convergence — carlos-adopt.path's twin for the OTHER half the |
| 2 | # sandboxed agent cannot do itself. The agent's adoptLoop/fastConvergeLoop see a |
| 3 | # promotion within seconds but run inside carlos-edge.service |
| 4 | # (ProtectSystem=strict, no /opt write), so they can resolve the new pointer |
| 5 | # and stage nothing; release.OnStageBlocked touches this file when that |
| 6 | # happens. Without it a promote is invisible for up to an hour on a box that |
| 7 | # noticed it immediately — the canary loop's 2-second cadence buys nothing, |
| 8 | # because the step it is racing to perform is the one it is forbidden. |
| 9 | # |
| 10 | # It starts carlos-stage.service — `carlos adopt --stage-only` — deliberately |
| 11 | # NOT carlos-adopt.service: that unit also prints the canary-TTL nag, an |
| 12 | # HOURLY visibility feature, and this trigger fires per agent request. Same |
| 13 | # split, and the same reason, as carlos-adopt.path pointing at |
| 14 | # carlos-config-sync.service rather than the full pass. |
| 15 | # |
| 16 | # /data is hardcoded like every path in these unit files — a box with a |
| 17 | # nonstandard data dir simply never fast-triggers and keeps the hourly floor. |
| 18 | [Unit] |
| 19 | Description=CARLOS release staging on agent request (fast release convergence) |
| 20 | |
| 21 | [Path] |
| 22 | PathChanged=/data/stage-requested |
| 23 | Unit=carlos-stage.service |
| 24 | |
| 25 | [Install] |
| 26 | WantedBy=multi-user.target |
| 27 | |