Other

/fleet-wrap-gate

Mechanical kill-gate: at a fleet-wrap / stand-down state, assert cron-count==0 — no health-watch / `/loop` / sleep-poll cron left armed. Triggers: fleet wrap, stand down, sprint close, going silent.

$ golems-cli skills install fleet-wrap-gate

Updated 6 days ago

When the fleet wraps: ZERO polling crons. A "harmless" 5-minute health-watch left running all night IS the failure. Etan at dawn (verbatim, red-team verified): "Why were you just listing my messages in WhatsApp the whole night? Why didn't you stop?" — 2× imp-10.

What It Is

A deterministic detector over an agent transcript plus durable cron/loop state: once a turn reaches a terminal / stand-down state (fleet wrap, sprint close, "back to silent", "only an Etan decision pending", "all work merged", DONE), cron-count MUST == 0. If a durable registry/state file still contains a live cron or /loop, the turn is blocked with a typed cleanup reason: FLEETWRAP_CRON_ALIVE or FLEETWRAP_LOOP_ALIVE. This is the MECHANICAL gate that /fleet-wrap describes in prose — "manual gates drift, automated gates don't." The pinned RED/GREEN transcript and state fixtures ARE the replayable gate (R-003/R-014 pattern).

The Rule

Two independent violation routes — a banned poller is never excused; a generic cron is excused only by the monitor-law:

At a terminal state, this...Verdict
banned poller armed: /loop timer, while true/for…seq/nohup … sleep poll loop, or a durable live loop state entryFLEETWRAP_LOOP_ALIVE — block with TaskStop <id>
generic / periodic cron live in durable state, or a same-turn CronCreate / schedule_task not cleared and not the inbound monitorFLEETWRAP_CRON_ALIVE — block with delete cron <id>
crons cleared — durable cron/loop state has zero live periodic entriesPASS
ONE inbound standby monitor (even via a CronCreate framed as inbound), no health-watch/poll/loopPASS
not a terminal turn (mid-sprint, still driving, more work queued)PASS (N/A)
discussion about the fleet-wrap rule/gate, or a worker-seat scoped DONE that explicitly is not fleet wrapPASS (N/A)

Wrap-state doctrine line: inbound collab monitor STAYS, everything periodic DIES, the decision is left in front of Etan, then silence.

Terminal-state markers: "fleet wrap", "stand down", "back to silent", "going silent", "sprint close(d)", "all work merged", "only an Etan decision pending", "nothing queued", plus inbound/standby posture ("standing by for Etan", "awaiting an Etan decision"). A bare clearing phrase ("cleared all crons") on its own is NOT a stand-down — it is blanked before the terminal test so a mid-sprint "cleared old crons … more work queued" stays N/A.

The ONE allowed exception (monitor-law): a single persistent INBOUND collab/standby monitor (waiting for Etan / an inbound reply) is allowed — including a real CronCreate the narrative frames as that inbound monitor. What's banned is health-watch / status-poll crons, /loop poll timers, and fleet-monitor loops. Calling a health-watch an "inbound monitor" does NOT excuse it; a same-turn CronDelete of some other cron does NOT excuse a freshly-armed poller; and a prose "no crons" disclaimer does NOT clear a cron actually invoked this turn (all pinned as evasion REDs).

"Same turn" = the events since the last human message. Terminal-state markers come from the turn's text; live cron/loop truth comes from durable state (state, state_path, cron_state_path, loop_state_path, or bounded Claude task-state discovery in the Stop hook). A prose claim such as "all crons deleted" or "cron-count=0" is NEVER trusted over durable live state. DETERMINISTIC: same transcript/state in → same verdict out.

How /fleet-wrap Consumes It

/fleet-wrap step 2 already states "KILL ALL POLLING — CronListCronDelete every monitor/heartbeat/status cron, zero exceptions." This gate makes it mechanical: before the outgoing agent goes silent, run the gate on the wrap turn — bun skills/golem-powers/fleet-wrap-gate/scripts/fleet-wrap-gate-cli.mjs <transcript|-> (exit 3 = FLAG). A FLAG means a cron or loop is still armed at stand-down: run the exact cleanup action in the reason (delete cron <id> / TaskStop <id>), then go silent.

Hook wiring uses scripts/fleet-wrap-gate-hook.mjs as a Claude Code Stop hook. The hook is local-only: no network, no BrainLayer, no subprocesses, bounded stdin/path/task-state reads, and fail-open on malformed input or internal errors. It emits the Claude Code stdout schema:

  • allow: {}
  • block: {"decision":"block","reason":"..."}
  • advisory: {"systemMessage":"..."}

install-snippet.json pins the absolute Node path: $HOME/.nvm/versions/node/v22.22.0/bin/node.