← back to Ticket System
Fail closed on zero-cost DTD drift
44ade0288fd124a1d64edffeefa77b1e63bd6511 · 2026-09-02 23:43:21 -0700 · Steve Abrams
Files touched
M scripts/codex-yoloforever.shA scripts/verify-zero-cost-dtd.shA test/yoloforever-preflight-boundary.sh
Diff
commit 44ade0288fd124a1d64edffeefa77b1e63bd6511
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed Sep 2 23:43:21 2026 -0700
Fail closed on zero-cost DTD drift
---
scripts/codex-yoloforever.sh | 46 +++++++++++++++++----
scripts/verify-zero-cost-dtd.sh | 71 ++++++++++++++++++++++++++++++++
test/yoloforever-preflight-boundary.sh | 75 ++++++++++++++++++++++++++++++++++
3 files changed, 184 insertions(+), 8 deletions(-)
diff --git a/scripts/codex-yoloforever.sh b/scripts/codex-yoloforever.sh
index 8859a2f5..d5fe78d1 100755
--- a/scripts/codex-yoloforever.sh
+++ b/scripts/codex-yoloforever.sh
@@ -11,14 +11,35 @@ LOG_FILE="$ROOT/codex-yoloforever.log"
ERR_FILE="$ROOT/codex-yoloforever.err.log"
LAST_MESSAGE="$STATE_DIR/last-message.md"
CODEX="/Users/macstudio3/.local/bin/codex"
+PREFLIGHT="$ROOT/scripts/verify-zero-cost-dtd.sh"
PLIST="$ROOT/com.steve.codex-yoloforever.plist"
DOMAIN="gui/$(id -u)"
+LAUNCHCTL="launchctl"
+PREFLIGHT_ARGS=()
+
+if [[ "${CYF_TEST_MODE:-0}" == 1 ]]; then
+ ROOT="${CYF_TEST_ROOT:?CYF_TEST_ROOT is required in test mode}"
+ STATE_DIR="$ROOT/data/codex-yoloforever"
+ LOCK_DIR="$STATE_DIR/cycle.lock"
+ STOP_FILE="$STATE_DIR/STOPPED"
+ PROMPT_FILE="$ROOT/scripts/codex-yoloforever-prompt.md"
+ LOG_FILE="$ROOT/codex-yoloforever.log"
+ ERR_FILE="$ROOT/codex-yoloforever.err.log"
+ LAST_MESSAGE="$STATE_DIR/last-message.md"
+ CODEX="${CYF_TEST_CODEX:?CYF_TEST_CODEX is required in test mode}"
+ PREFLIGHT="${CYF_TEST_PREFLIGHT:-/Users/macstudio3/Projects/ticket-system/scripts/verify-zero-cost-dtd.sh}"
+ LAUNCHCTL="${CYF_TEST_LAUNCHCTL:?CYF_TEST_LAUNCHCTL is required in test mode}"
+ PLIST="$ROOT/com.steve.codex-yoloforever.plist"
+ if [[ -n "${CYF_TEST_AGENTS_PANEL:-}" ]]; then
+ PREFLIGHT_ARGS=("$CYF_TEST_AGENTS_PANEL" "$CYF_TEST_AGENTS_POST" "$CYF_TEST_CLAUDE_PANEL")
+ fi
+fi
mkdir -p "$STATE_DIR"
status() {
local loaded="no" running="no" stopped="no" pid=""
- launchctl print "$DOMAIN/$LABEL" >/dev/null 2>&1 && loaded="yes"
+ "$LAUNCHCTL" print "$DOMAIN/$LABEL" >/dev/null 2>&1 && loaded="yes"
if [[ -d "$LOCK_DIR" ]]; then
pid="$(cat "$LOCK_DIR/pid" 2>/dev/null || true)"
running="lock-held"
@@ -48,6 +69,15 @@ run_cycle() {
trap 'rm -f "$LOCK_DIR/pid" "$LOCK_DIR/started-at"; rmdir "$LOCK_DIR" 2>/dev/null || true' EXIT INT TERM HUP
print "$(date -u +%FT%TZ) cycle begin pid=$$ engine=codex" >> "$LOG_FILE"
+ if ! DTD_ZERO_COST=1 "$PREFLIGHT" "${PREFLIGHT_ARGS[@]}" > "$STATE_DIR/zero-cost-preflight.log" 2>&1; then
+ date -u +%FT%TZ > "$STOP_FILE"
+ "$LAUNCHCTL" disable "$DOMAIN/$LABEL" >/dev/null 2>&1 || true
+ print "$(date -u +%FT%TZ) safety tripwire: zero-cost DTD preflight failed; runner disabled" >> "$LOG_FILE"
+ print "78" > "$STATE_DIR/last-exit"
+ date -u +%FT%TZ > "$STATE_DIR/last-finished-at"
+ return 78
+ fi
+ print "$(date -u +%FT%TZ) zero-cost DTD preflight PASS" >> "$LOG_FILE"
DTD_ZERO_COST=1 TK_AGENT=codex-yoloforever "$CODEX" exec \
--dangerously-bypass-approvals-and-sandbox \
--cd /Users/macstudio3 \
@@ -68,27 +98,27 @@ case "${1:-run}" in
status) status ;;
stop)
date -u +%FT%TZ > "$STOP_FILE"
- launchctl disable "$DOMAIN/$LABEL" >/dev/null 2>&1 || true
+ "$LAUNCHCTL" disable "$DOMAIN/$LABEL" >/dev/null 2>&1 || true
print "stopped $LABEL; active cycle, if any, is allowed to finish safely"
status
;;
start)
rm -f "$STOP_FILE"
- launchctl enable "$DOMAIN/$LABEL"
- if ! launchctl print "$DOMAIN/$LABEL" >/dev/null 2>&1; then
- launchctl bootstrap "$DOMAIN" "$PLIST"
+ "$LAUNCHCTL" enable "$DOMAIN/$LABEL"
+ if ! "$LAUNCHCTL" print "$DOMAIN/$LABEL" >/dev/null 2>&1; then
+ "$LAUNCHCTL" bootstrap "$DOMAIN" "$PLIST"
fi
- launchctl kickstart "$DOMAIN/$LABEL"
+ "$LAUNCHCTL" kickstart "$DOMAIN/$LABEL"
print "started $LABEL"
status
;;
uninstall)
date -u +%FT%TZ > "$STOP_FILE"
- launchctl bootout "$DOMAIN/$LABEL" >/dev/null 2>&1 || true
+ "$LAUNCHCTL" bootout "$DOMAIN/$LABEL" >/dev/null 2>&1 || true
print "unloaded $LABEL; project files retained"
;;
unlock)
- if launchctl print "$DOMAIN/$LABEL" 2>/dev/null | grep -q 'state = running'; then
+ if "$LAUNCHCTL" print "$DOMAIN/$LABEL" 2>/dev/null | grep -q 'state = running'; then
print -u2 "refusing unlock while launchd reports the job running"
exit 1
fi
diff --git a/scripts/verify-zero-cost-dtd.sh b/scripts/verify-zero-cost-dtd.sh
new file mode 100755
index 00000000..a903baa1
--- /dev/null
+++ b/scripts/verify-zero-cost-dtd.sh
@@ -0,0 +1,71 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+AGENTS_PANEL="${1:-/Users/macstudio3/.agents/skills/dtd/scripts/panel.sh}"
+AGENTS_POST="${2:-/Users/macstudio3/.agents/skills/dtd/scripts/post-decision-codex.sh}"
+CLAUDE_PANEL="${3:-/Users/macstudio3/.claude/skills/dtd/scripts/panel.sh}"
+TMP=$(mktemp -d /private/tmp/yoloforever-zero-cost-preflight.XXXXXX)
+trap 'rm -rf "$TMP"' EXIT
+
+for script in "$AGENTS_PANEL" "$AGENTS_POST" "$CLAUDE_PANEL"; do
+ [[ -f "$script" ]] || { echo "missing DTD artifact: $script" >&2; exit 1; }
+ bash -n "$script"
+done
+shasum -a 256 "$AGENTS_PANEL" "$AGENTS_POST" "$CLAUDE_PANEL"
+
+mkdir -p "$TMP/bin" "$TMP/home/Projects/secrets-manager" "$TMP/home/.claude/skills/dtd"
+printf '%s\n' \
+ 'OPENAI_API_KEY=poison-openai' \
+ 'XAI_API_KEY=poison-xai' \
+ 'MOONSHOT_API_KEY=poison-moonshot' > "$TMP/home/Projects/secrets-manager/.env"
+cp "$TMP/home/Projects/secrets-manager/.env" "$TMP/home/.claude/skills/dtd/.env"
+
+cat > "$TMP/bin/curl" <<'SHIM'
+#!/usr/bin/env bash
+printf 'CURL %s\n' "$*" >> "$DTD_PREFLIGHT_CALLS"
+case "$*" in
+ *api.openai.com*|*api.x.ai*|*api.moonshot.ai*) printf '{}\n'; exit 0 ;;
+ *) exit 22 ;;
+esac
+SHIM
+cat > "$TMP/bin/claude" <<'SHIM'
+#!/usr/bin/env bash
+printf 'CLAUDE %s\n' "$*" >> "$DTD_PREFLIGHT_CALLS"
+printf 'shim claude\n'
+SHIM
+cat > "$TMP/bin/codex" <<'SHIM'
+#!/usr/bin/env bash
+printf 'CODEX %s\n' "$*" >> "$DTD_PREFLIGHT_CALLS"
+out=""
+while (($#)); do
+ if [[ "$1" == --output-last-message ]]; then out="$2"; shift 2; else shift; fi
+done
+[[ -n "$out" ]] && printf 'shim codex vote\n' > "$out"
+SHIM
+cat > "$TMP/bin/timeout" <<'SHIM'
+#!/usr/bin/env bash
+shift
+exec "$@"
+SHIM
+chmod +x "$TMP/bin/"*
+
+export PATH="$TMP/bin:/usr/bin:/bin:/usr/sbin:/sbin"
+export HOME="$TMP/home"
+export DTD_PREFLIGHT_CALLS="$TMP/calls.log"
+export DTD_ZERO_COST=1
+export OPENAI_API_KEY=poison-env-openai
+export XAI_API_KEY=poison-env-xai
+export MOONSHOT_API_KEY=poison-env-moonshot
+
+DTD_DIR="$TMP/agents" bash "$AGENTS_PANEL" "Choose A or B" >/dev/null
+[[ -s "$TMP/agents/codex.txt" ]]
+bash "$AGENTS_POST" "$TMP/agents" A >/dev/null
+DTD_DIR="$TMP/legacy" bash "$CLAUDE_PANEL" "Choose A or B" >/dev/null
+[[ -s "$TMP/legacy/codex.txt" ]]
+
+if grep -Eq 'CLAUDE|api\.openai\.com|api\.x\.ai|api\.moonshot\.ai' "$TMP/calls.log"; then
+ echo "zero-cost DTD preflight reached a forbidden command or endpoint" >&2
+ exit 1
+fi
+grep -q '^CODEX ' "$TMP/calls.log"
+echo "PASS zero-cost DTD preflight"
diff --git a/test/yoloforever-preflight-boundary.sh b/test/yoloforever-preflight-boundary.sh
new file mode 100755
index 00000000..c1358303
--- /dev/null
+++ b/test/yoloforever-preflight-boundary.sh
@@ -0,0 +1,75 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+ROOT="/Users/macstudio3/Projects/ticket-system"
+RUNNER="$ROOT/scripts/codex-yoloforever.sh"
+PREFLIGHT="$ROOT/scripts/verify-zero-cost-dtd.sh"
+AGENTS_PANEL="/Users/macstudio3/.agents/skills/dtd/scripts/panel.sh"
+AGENTS_POST="/Users/macstudio3/.agents/skills/dtd/scripts/post-decision-codex.sh"
+CLAUDE_PANEL="/Users/macstudio3/.claude/skills/dtd/scripts/panel.sh"
+TMP=$(mktemp -d /private/tmp/yoloforever-preflight-boundary.XXXXXX)
+trap 'rm -rf "$TMP"' EXIT
+
+make_root() {
+ local root="$1"
+ mkdir -p "$root/scripts" "$root/data/codex-yoloforever" "$root/bin"
+ cp "$ROOT/scripts/codex-yoloforever-prompt.md" "$root/scripts/"
+ cat > "$root/bin/codex" <<'SHIM'
+#!/usr/bin/env bash
+printf 'runner codex invoked DTD_ZERO_COST=%s\n' "${DTD_ZERO_COST:-unset}" >> "$CYF_MARKER"
+cat >/dev/null
+SHIM
+ cat > "$root/bin/launchctl" <<'SHIM'
+#!/usr/bin/env bash
+printf '%s\n' "$*" >> "$CYF_LAUNCHCTL_MARKER"
+exit 0
+SHIM
+ chmod +x "$root/bin/"*
+}
+
+run_isolated() {
+ local root="$1" panel="$2"
+ CYF_TEST_MODE=1 \
+ CYF_TEST_ROOT="$root" \
+ CYF_TEST_CODEX="$root/bin/codex" \
+ CYF_TEST_LAUNCHCTL="$root/bin/launchctl" \
+ CYF_TEST_PREFLIGHT="$PREFLIGHT" \
+ CYF_TEST_AGENTS_PANEL="$panel" \
+ CYF_TEST_AGENTS_POST="$AGENTS_POST" \
+ CYF_TEST_CLAUDE_PANEL="$CLAUDE_PANEL" \
+ CYF_MARKER="$root/codex.marker" \
+ CYF_LAUNCHCTL_MARKER="$root/launchctl.marker" \
+ zsh "$RUNNER" run
+}
+
+NEG="$TMP/negative"
+make_root "$NEG"
+cat > "$TMP/unguarded-panel.sh" <<'BAD'
+#!/usr/bin/env bash
+set -u
+DIR="${DTD_DIR:?}"
+mkdir -p "$DIR"
+claude -p "$1" > "$DIR/claude.txt"
+printf 'unguarded\n' > "$DIR/codex.txt"
+BAD
+chmod +x "$TMP/unguarded-panel.sh"
+
+set +e
+run_isolated "$NEG" "$TMP/unguarded-panel.sh"
+negative_rc=$?
+set -e
+[[ "$negative_rc" == 78 ]]
+[[ -f "$NEG/data/codex-yoloforever/STOPPED" ]]
+[[ ! -e "$NEG/codex.marker" ]]
+grep -q '^disable gui/.*/com\.steve\.codex-yoloforever$' "$NEG/launchctl.marker"
+grep -q 'safety tripwire: zero-cost DTD preflight failed' "$NEG/codex-yoloforever.log"
+
+POS="$TMP/positive"
+make_root "$POS"
+run_isolated "$POS" "$AGENTS_PANEL"
+[[ ! -e "$POS/data/codex-yoloforever/STOPPED" ]]
+grep -q 'runner codex invoked DTD_ZERO_COST=1' "$POS/codex.marker"
+grep -q '^PASS zero-cost DTD preflight$' "$POS/data/codex-yoloforever/zero-cost-preflight.log"
+grep -q 'zero-cost DTD preflight PASS' "$POS/codex-yoloforever.log"
+
+echo "PASS yoloforever preflight launch boundary"
← 2dd811a2 Enforce zero-cost DTD in overnight runner
·
back to Ticket System
·
Pin overnight DTD artifacts by hash 3a963587 →