[object Object]

← back to Ticket System

Fail closed on zero-cost DTD drift

44ade0288fd124a1d64edffeefa77b1e63bd6511 · 2026-09-02 23:43:21 -0700 · Steve Abrams

Files touched

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 →