[object Object]

← back to Ticket System

preserve TK-11153 bounded cycle evidence

bce3f487e7c1fb25e1d770ad743b6c48419ced17 · 2026-09-02 21:59:34 -0700 · Steve Abrams

Files touched

Diff

commit bce3f487e7c1fb25e1d770ad743b6c48419ced17
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed Sep 2 21:59:34 2026 -0700

    preserve TK-11153 bounded cycle evidence
---
 .../evidence/20260903-0449/README.md               |  17 ++++
 .../evidence/20260903-0449/e2e-proof.json          |  36 +++++++
 .../evidence/20260903-0449/inbox.txt               |   1 +
 .../evidence/20260903-0449/launchd-status.txt      |  78 +++++++++++++++
 .../evidence/20260903-0449/ledger-parse.json       |   1 +
 .../evidence/20260903-0449/owner-audit.md          |  79 +++++++++++++++
 .../evidence/20260903-0449/replay-output.json      |  65 +++++++++++++
 .../evidence/20260903-0449/replay.mjs              | 106 +++++++++++++++++++++
 .../evidence/20260903-0449/stopped-marker.txt      |   1 +
 .../evidence/20260903-0449/ticket-system-tests.txt |  41 ++++++++
 .../evidence/20260903-0449/urgency-tests.txt       |  16 ++++
 11 files changed, 441 insertions(+)

diff --git a/data/codex-yoloforever/evidence/20260903-0449/README.md b/data/codex-yoloforever/evidence/20260903-0449/README.md
new file mode 100644
index 00000000..a42bd544
--- /dev/null
+++ b/data/codex-yoloforever/evidence/20260903-0449/README.md
@@ -0,0 +1,17 @@
+# TK-11153 bounded cycle evidence
+
+Correlation: `CYF-20260903T0449Z-GATEDONLY`
+
+Run the canonical replay with:
+
+```sh
+node replay.mjs > replay-output.json
+```
+
+The replay uses the production ticket materializer and Ticketmaster urgency scorer. At the empirical gate it found 73 active task tickets, zero actionable pickups, and zero strict safe/non-colliding/unowned candidates. The one-ticket snapshot delta is this cycle's own assigned ticket.
+
+`launchd-status.txt` is the actual `com.steve.codex-yoloforever` job, not the separate two-hour Ticketmaster poller. It records a running 600-second scheduler, exit code 0, and no STOPPED marker.
+
+The JSONL proof follows the canonical parser contract in `lib.js`: blank separator lines are ignored and every nonblank record must parse. The first strict physical-line probe incorrectly treated one intentional blank line as corruption; byte-level reproduction disproved that claim and no ledger mutation was made.
+
+No web or UI surface changed, so CTA and screenrecord are not applicable. The empirical substitute is the canonical replay, full ticket-system suite, urgency suite, launchd boundary assertion, JSONL parse, and clean-worktree check.
diff --git a/data/codex-yoloforever/evidence/20260903-0449/e2e-proof.json b/data/codex-yoloforever/evidence/20260903-0449/e2e-proof.json
new file mode 100644
index 00000000..49a630e8
--- /dev/null
+++ b/data/codex-yoloforever/evidence/20260903-0449/e2e-proof.json
@@ -0,0 +1,36 @@
+{
+  "intent": "Prove that bounded cycle TK-11153 has no eligible safe ticket pickup and can exit to the existing scheduler without widening authority.",
+  "risk_tier": "R0 read-only operations evidence",
+  "environment": "Mac Studio 3 local; canonical ticket ledger and launchd",
+  "baseline_commit": "47f6a01accaba299b0c84cdd94f0c2274e4b4b4a",
+  "timestamp": "2026-09-03T04:58:23.495Z",
+  "precondition": "Fresh Ticketmaster snapshot reported 72 active tasks and zero actionable pickups; this cycle then created assigned ticket TK-11153.",
+  "journey": {
+    "entry": "Read canonical events and current process/agent/PM2 facts.",
+    "action": "Replay production urgency ranking, run test suites, inspect the actual yoloforever launchd job, parse all nonblank JSONL records, and inspect the worktree.",
+    "outcome": "73 active tasks, zero actionable pickups, zero strict safe/non-colliding/unowned candidates; scheduler healthy; all checks pass.",
+    "cleanup": "No external or project state created beyond this durable local evidence package."
+  },
+  "assertions": [
+    {"boundary": "ticket eligibility", "verdict": "PASS", "evidence": "replay-output.json", "detail": "actionable_pickups=0 and strict_safe_noncolliding_unowned=[]"},
+    {"boundary": "ticket core and A2A", "verdict": "PASS", "evidence": "ticket-system-tests.txt", "detail": "29/29 tests passed"},
+    {"boundary": "urgency policy", "verdict": "PASS", "evidence": "urgency-tests.txt", "detail": "14/14 assertions passed"},
+    {"boundary": "scheduler", "verdict": "PASS", "evidence": "launchd-status.txt and stopped-marker.txt", "detail": "running, interval=600, last exit=0, STOPPED absent"},
+    {"boundary": "canonical JSONL", "verdict": "PASS", "evidence": "ledger-parse.json", "detail": "all 109951 nonblank records parse; one allowed blank separator"},
+    {"boundary": "worktree", "verdict": "PASS", "evidence": "git status inspection", "detail": "clean before this evidence package; only scoped evidence files added"},
+    {"boundary": "web UI", "verdict": "SKIP", "evidence": "README.md", "detail": "No web or UI surface changed; CTA and screenrecord are not applicable."}
+  ],
+  "negative_checks": [
+    "Stopped ticket TK-10045 was rejected because its remaining work is Steve-gated and explicitly deferred.",
+    "Active monitor/nudge tickets were not taken over.",
+    "A strict physical-line JSONL failure was reproduced as an allowed blank line and discarded as a phantom defect."
+  ],
+  "a2a": {
+    "correlation_id": "CYF-20260903T0449Z-GATEDONLY-owner-01",
+    "producer": "vp-cncp",
+    "consumer": "/root",
+    "receipt": "Canonical ticket TK-11153 contains claim, handoff, and parent acceptance.",
+    "parent_acceptance": "Accepted after independent hash, replay, tests, scheduler, and worktree verification; runner-label discrepancy corrected."
+  },
+  "overall_verdict": "PASS"
+}
diff --git a/data/codex-yoloforever/evidence/20260903-0449/inbox.txt b/data/codex-yoloforever/evidence/20260903-0449/inbox.txt
new file mode 100644
index 00000000..2b25fd6b
--- /dev/null
+++ b/data/codex-yoloforever/evidence/20260903-0449/inbox.txt
@@ -0,0 +1 @@
+(inbox empty for codex-yoloforever)
diff --git a/data/codex-yoloforever/evidence/20260903-0449/launchd-status.txt b/data/codex-yoloforever/evidence/20260903-0449/launchd-status.txt
new file mode 100644
index 00000000..3f2b4ba0
--- /dev/null
+++ b/data/codex-yoloforever/evidence/20260903-0449/launchd-status.txt
@@ -0,0 +1,78 @@
+gui/501/com.steve.codex-yoloforever = {
+	active count = 1
+	path = /Users/macstudio3/Library/LaunchAgents/com.steve.codex-yoloforever.plist
+	type = LaunchAgent
+	state = running
+
+	program = /bin/zsh
+	arguments = {
+		/bin/zsh
+		/Users/macstudio3/Projects/ticket-system/scripts/codex-yoloforever.sh
+		run
+	}
+
+	working directory = /Users/macstudio3/Projects/ticket-system
+
+	stdout path = /Users/macstudio3/Projects/ticket-system/codex-yoloforever.launchd.out.log
+	stderr path = /Users/macstudio3/Projects/ticket-system/codex-yoloforever.launchd.err.log
+	inherited environment = {
+		SSH_AUTH_SOCK => /var/run/com.apple.launchd.lUTxYPijmw/Listeners
+	}
+
+	default environment = {
+		PATH => /usr/bin:/bin:/usr/sbin:/sbin
+	}
+
+	environment = {
+		OSLogRateLimit => 64
+		TK_AGENT => codex-yoloforever
+		PATH => /Users/macstudio3/.local/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
+		HOME => /Users/macstudio3
+		XPC_SERVICE_NAME => com.steve.codex-yoloforever
+	}
+
+	domain = gui/501 [100026]
+	asid = 100026
+	minimum runtime = 10
+	exit timeout = 5
+	runs = 380
+	pid = 45820
+	immediate reason = interval
+	forks = 7
+	execs = 1
+	initialized = 1
+	trampolined = 1
+	started suspended = 0
+	proxy started suspended = 0
+	checked allocations = 0 (queried = 1)
+	checked allocations reason = no host
+	checked allocations flags = 0x0
+	last exit code = 0
+
+	resource coalition = {
+		ID = 145774
+		type = resource
+		state = active
+		active count = 1
+		name = com.steve.codex-yoloforever
+	}
+
+	jetsam coalition = {
+		ID = 145775
+		type = jetsam
+		state = active
+		active count = 1
+		name = com.steve.codex-yoloforever
+	}
+
+	spawn type = background (5)
+	jetsam priority = 40
+	jetsam memory limit (active) = (unlimited)
+	jetsam memory limit (inactive) = (unlimited)
+	jetsamproperties category = daemon
+	jetsam thread limit = 32
+	cpumon = default
+	run interval = 600 seconds
+
+	properties = runatload | inferred program
+}
diff --git a/data/codex-yoloforever/evidence/20260903-0449/ledger-parse.json b/data/codex-yoloforever/evidence/20260903-0449/ledger-parse.json
new file mode 100644
index 00000000..56015067
--- /dev/null
+++ b/data/codex-yoloforever/evidence/20260903-0449/ledger-parse.json
@@ -0,0 +1 @@
+{"path":"/Users/macstudio3/.claude/tickets/events.jsonl","physical_lines":109952,"blank_lines":1,"nonblank_records":109951,"valid_records":109951,"invalid_records":0,"contract":"ticket-system/lib.js readEvents filters blank lines"}
diff --git a/data/codex-yoloforever/evidence/20260903-0449/owner-audit.md b/data/codex-yoloforever/evidence/20260903-0449/owner-audit.md
new file mode 100644
index 00000000..427dc705
--- /dev/null
+++ b/data/codex-yoloforever/evidence/20260903-0449/owner-audit.md
@@ -0,0 +1,79 @@
+# TK-11153 read-only owner audit evidence
+
+- Correlation: `CYF-20260903T0449Z-GATEDONLY-owner-01`
+- Accountable finalizer: `/root`
+- Owner: `vp-cncp`
+- Replay timestamp: `2026-09-03T04:53:17.188Z`
+- Cost: `$0 (local)`
+- Scope: canonical event replay, safe/unowned eligibility trace, Ticketmaster runner health, inboxes, tests, and collision check only.
+- Mutations: this evidence file, replay script, and TK-11153 claim/handoff logs only. No source/project edits and no other ticket mutation.
+
+## Exact replay
+
+```sh
+node /private/tmp/tk11153-canonical-replay-20260903T0453Z.mjs
+```
+
+The complete replay implementation is `/private/tmp/tk11153-canonical-replay-20260903T0453Z.mjs`. It loads canonical state through `/Users/macstudio3/Projects/ticket-system/lib.js`, uses the production `/Users/macstudio3/.claude/skills/ticketmaster/lib/urgency.js` scorer, and recreates poller facts from `ps -Ao command`, per-agent latest canonical event timestamps, and PM2's persisted `~/.pm2/dump.pm2` (read-only; no PM2 RPC).
+
+Filter definitions:
+
+```text
+ranked = status != done AND kind == task, as returned by urgency.rank(...)
+actionable = disposition in [execute, fast-track-local] AND tier != P3
+strict safe/noncolliding/unowned = actionable AND collide=false AND steveGated=false AND assignee empty
+ticketmaster directed unread inbox = lib.inbox('ticketmaster').filter(m => m.to === 'ticketmaster')
+```
+
+## Canonical replay versus snapshot
+
+Canonical source `/Users/macstudio3/.claude/tickets/events.jsonl` at replay contained 109,947 non-empty lines: 109,947 valid JSON events and 0 invalid lines. It materialized 1,292 tickets: 1,216 done, 47 blocked, 10 stopped, and 19 doing; 1,267 task, 18 continuous_loop, and 7 scheduled_job.
+
+| Metric | Canonical 04:53:17Z | Snapshot 04:49:05Z | Delta |
+|---|---:|---:|---:|
+| Ranked open/active tasks | 73 | 72 | +1 (TK-11153 became active after snapshot) |
+| P0 / P1 / P2 / P3 | 2 / 13 / 8 / 50 | 2 / 13 / 8 / 49 | P3 +1 |
+| Stale builds | 2 | 2 | 0 |
+| Actionable pickups | 0 | 0 | 0 |
+| Strict safe/noncolliding/unowned | 0 | not stored separately | n/a |
+
+Every eligible strict candidate: `[]` (empty). The production-actionable set was also `[]`. No takeover seed exists under the requested constraints.
+
+Snapshot says `needs_orchestration=true` because `p0_p1=3`; it reports `stale_dead=0`, `actionable_pickups=0`, and `inbox_dms=0`. Thus the orchestration flag does not imply an eligible pickup.
+
+## Inboxes
+
+- `TK_AGENT=vp-cncp tk inbox --peek`: empty.
+- `TK_AGENT=ticketmaster tk inbox --peek`: no directed unread messages. Three unread broadcasts were displayed; they are intentionally excluded by the poller's directed-only rule (`m.to === 'ticketmaster'`).
+
+## Runner health
+
+Commands:
+
+```sh
+plutil -p ~/Library/LaunchAgents/com.steve.ticketmaster-poll.plist
+launchctl print gui/$(id -u)/com.steve.ticketmaster-poll
+tail -100 ~/.claude/skills/ticketmaster/state/poll.log
+find ~/.claude/skills/ticketmaster -maxdepth 3 -type f | rg '/STOPPED($|\.)|STOPPED'
+```
+
+Results: launchd job is loaded and healthy-idle (`state=not running` between ticks), `runs=199`, `last exit code=0`, `StartInterval/run interval=7200` seconds, `RunAtLoad=true`. Latest state/poll heartbeat is `2026-09-03T04:49:05Z`; final poll line is `ok — 72 active, 2 stale, orch=true, nudged=0`. Launchd stdout/stderr files exist and are empty. No STOPPED marker exists under the Ticketmaster skill tree.
+
+## Tests and worktree
+
+```sh
+node ~/Projects/ticket-system/lib.test.js
+node --test ~/Projects/ticket-system/test/*.test.js
+node ~/.claude/skills/ticketmaster/test/urgency.test.js
+git -C ~/Projects/ticket-system status --short
+```
+
+Results: core library 22/22 passed; ticket-system integration/MCP/launcher tests 7/7 passed; Ticketmaster urgency assertions 14/14 passed. Git short status was empty both before ownership claim and after tests; no shared worktree collision was found.
+
+## Risks, skips, and safest next seed
+
+- Snapshot staleness was explicitly neutralized by replaying canonical events. The +1 is the current bounded-cycle ticket, not hidden actionable work.
+- The poller was not manually invoked because it writes snapshot/nudge state and can send DMs; this audit remained read-only aside from required TK-11153 logs and evidence.
+- No process restart/kill, prod check, project edit, ticket takeover, external action, spend, Claude invocation, approval, or gated action was performed.
+- Approval required: none for this completed audit. Existing gated tickets remain untouched.
+- Safest next seed: remain monitor-only until the next scheduled Ticketmaster tick; if canonical `actionable_pickups` becomes nonzero, open a new bounded ticket and independently re-run strict eligibility before assigning anything.
diff --git a/data/codex-yoloforever/evidence/20260903-0449/replay-output.json b/data/codex-yoloforever/evidence/20260903-0449/replay-output.json
new file mode 100644
index 00000000..70fa1735
--- /dev/null
+++ b/data/codex-yoloforever/evidence/20260903-0449/replay-output.json
@@ -0,0 +1,65 @@
+{
+  "replayed_at": "2026-09-03T04:58:23.495Z",
+  "definitions": {
+    "scorer": "/Users/macstudio3/.claude/skills/ticketmaster/lib/urgency.js",
+    "source": "/Users/macstudio3/.claude/tickets/events.jsonl",
+    "ranked": "status != done AND kind == task; urgency.rank(ticketMap, current process/agent/PM2 facts)",
+    "actionable": "disposition in ['execute','fast-track-local'] AND tier != P3",
+    "strict_safe_noncolliding_unowned": "actionable AND collide == false AND steveGated == false AND assignee is empty",
+    "ticketmaster_inbox": "lib.inbox('ticketmaster').filter(message => message.to === 'ticketmaster')"
+  },
+  "canonical": {
+    "event_lines": 109951,
+    "valid_events": 109951,
+    "invalid_event_lines": 0,
+    "materialized_tickets": 1292,
+    "status_counts": {
+      "done": 1216,
+      "blocked": 47,
+      "stopped": 10,
+      "doing": 19
+    },
+    "kind_counts": {
+      "task": 1267,
+      "continuous_loop": 18,
+      "scheduled_job": 7
+    },
+    "ranked_open_or_active_tasks": 73,
+    "tier_counts": {
+      "P0": 2,
+      "P1": 13,
+      "P2": 8,
+      "P3": 50
+    },
+    "stale_builds": 2,
+    "actionable_pickups": 0,
+    "actionable": [],
+    "strict_safe_noncolliding_unowned_count": 0,
+    "strict_safe_noncolliding_unowned": [],
+    "ticketmaster_directed_unread_inbox": []
+  },
+  "snapshot": {
+    "path": "/Users/macstudio3/.claude/skills/ticketmaster/state/latest.json",
+    "ts": "2026-09-03T04:49:05.043Z",
+    "totals": {
+      "open_or_active": 72,
+      "P0": 2,
+      "P1": 13,
+      "P2": 8,
+      "P3": 49,
+      "stale_builds": 2
+    },
+    "needs_orchestration": true,
+    "orchestration_reasons": {
+      "p0_p1": 3,
+      "stale_dead": 0,
+      "actionable_pickups": 0,
+      "inbox_dms": 0
+    }
+  },
+  "delta": {
+    "open_or_active_tasks": 1,
+    "stale_builds": 0,
+    "actionable_pickups": 0
+  }
+}
diff --git a/data/codex-yoloforever/evidence/20260903-0449/replay.mjs b/data/codex-yoloforever/evidence/20260903-0449/replay.mjs
new file mode 100644
index 00000000..976aa552
--- /dev/null
+++ b/data/codex-yoloforever/evidence/20260903-0449/replay.mjs
@@ -0,0 +1,106 @@
+#!/usr/bin/env node
+// Read-only canonical Ticketmaster replay for TK-11153.
+// Sources: canonical events through ticket-system/lib.js, production urgency scorer,
+// current process table, PM2 persisted dump, and Ticketmaster latest snapshot.
+import fs from 'node:fs';
+import os from 'node:os';
+import { execFileSync } from 'node:child_process';
+import { createRequire } from 'node:module';
+
+const require = createRequire(import.meta.url);
+const HOME = os.homedir();
+const lib = require(`${HOME}/Projects/ticket-system/lib.js`);
+const urgency = require(`${HOME}/.claude/skills/ticketmaster/lib/urgency.js`);
+const snapshotPath = `${HOME}/.claude/skills/ticketmaster/state/latest.json`;
+const snapshot = JSON.parse(fs.readFileSync(snapshotPath, 'utf8'));
+const now = Date.now();
+
+const liveIds = new Set();
+const ps = execFileSync('/bin/ps', ['-Ao', 'command'], { encoding: 'utf8' });
+for (const line of ps.split('\n')) {
+  const match = line.match(/Work(?:ing)? (?:under |ticket )?(TK-\d+)/i);
+  if (match) liveIds.add(match[1].toUpperCase());
+}
+
+const agentLastTs = new Map();
+let eventLines = 0;
+let validEvents = 0;
+let invalidEventLines = 0;
+for (const line of fs.readFileSync(lib.EVENTS, 'utf8').split('\n')) {
+  if (!line) continue;
+  eventLines++;
+  let event;
+  try { event = JSON.parse(line); validEvents++; }
+  catch { invalidEventLines++; continue; }
+  const ms = +new Date(event.ts);
+  for (const key of ['agent', 'from']) {
+    const agent = event[key];
+    if (agent && agent !== 'all' && (agentLastTs.get(agent) || 0) < ms) agentLastTs.set(agent, ms);
+  }
+}
+
+let pm2Names = [];
+try {
+  pm2Names = JSON.parse(fs.readFileSync(`${process.env.PM2_HOME || `${HOME}/.pm2`}/dump.pm2`, 'utf8'))
+    .filter(process => process?.name)
+    .map(process => String(process.name).toLowerCase());
+} catch {}
+const pm2Hit = ticket => {
+  const tokens = new Set(`${ticket.title} ${ticket.project}`.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean));
+  return pm2Names.some(name => name.length >= 4 && tokens.has(name));
+};
+
+const ticketMap = lib.tickets();
+const ranked = urgency.rank(ticketMap, { now, liveIds, agentLastTs, pm2Hit });
+const statusCounts = {};
+const kindCounts = {};
+for (const ticket of ticketMap.values()) {
+  statusCounts[ticket.status] = (statusCounts[ticket.status] || 0) + 1;
+  kindCounts[ticket.kind || 'task'] = (kindCounts[ticket.kind || 'task'] || 0) + 1;
+}
+const tierCounts = ranked.reduce((out, row) => ((out[row.tier] = (out[row.tier] || 0) + 1), out), {});
+const actionable = ranked.filter(row => ['execute', 'fast-track-local'].includes(row.disposition) && row.tier !== 'P3');
+// Requested strict eligibility: actionable under Ticketmaster's production definition,
+// plus explicitly non-colliding, non-Steve-gated, and unassigned (no existing owner).
+const safeNoncollidingUnowned = actionable.filter(row => !row.collide && !row.steveGated && !row.assignee);
+const compact = row => ({ id: row.id, status: row.status, assignee: row.assignee, tier: row.tier, disposition: row.disposition, collide: row.collide, steveGated: row.steveGated, approvalLane: row.approvalLane, why: row.why });
+
+console.log(JSON.stringify({
+  replayed_at: new Date(now).toISOString(),
+  definitions: {
+    scorer: `${HOME}/.claude/skills/ticketmaster/lib/urgency.js`,
+    source: lib.EVENTS,
+    ranked: 'status != done AND kind == task; urgency.rank(ticketMap, current process/agent/PM2 facts)',
+    actionable: "disposition in ['execute','fast-track-local'] AND tier != P3",
+    strict_safe_noncolliding_unowned: 'actionable AND collide == false AND steveGated == false AND assignee is empty',
+    ticketmaster_inbox: "lib.inbox('ticketmaster').filter(message => message.to === 'ticketmaster')",
+  },
+  canonical: {
+    event_lines: eventLines,
+    valid_events: validEvents,
+    invalid_event_lines: invalidEventLines,
+    materialized_tickets: ticketMap.size,
+    status_counts: statusCounts,
+    kind_counts: kindCounts,
+    ranked_open_or_active_tasks: ranked.length,
+    tier_counts: tierCounts,
+    stale_builds: ranked.filter(row => row.stale).length,
+    actionable_pickups: actionable.length,
+    actionable: actionable.map(compact),
+    strict_safe_noncolliding_unowned_count: safeNoncollidingUnowned.length,
+    strict_safe_noncolliding_unowned: safeNoncollidingUnowned.map(compact),
+    ticketmaster_directed_unread_inbox: lib.inbox('ticketmaster').filter(message => message.to === 'ticketmaster').map(message => ({ mid: message.mid, ticket: message.ticket, from: message.from, ts: message.ts })),
+  },
+  snapshot: {
+    path: snapshotPath,
+    ts: snapshot.ts,
+    totals: snapshot.totals,
+    needs_orchestration: snapshot.needs_orchestration,
+    orchestration_reasons: snapshot.orchestration_reasons,
+  },
+  delta: {
+    open_or_active_tasks: ranked.length - snapshot.totals.open_or_active,
+    stale_builds: ranked.filter(row => row.stale).length - snapshot.totals.stale_builds,
+    actionable_pickups: actionable.length - snapshot.orchestration_reasons.actionable_pickups,
+  },
+}, null, 2));
diff --git a/data/codex-yoloforever/evidence/20260903-0449/stopped-marker.txt b/data/codex-yoloforever/evidence/20260903-0449/stopped-marker.txt
new file mode 100644
index 00000000..969a67b9
--- /dev/null
+++ b/data/codex-yoloforever/evidence/20260903-0449/stopped-marker.txt
@@ -0,0 +1 @@
+ABSENT
diff --git a/data/codex-yoloforever/evidence/20260903-0449/ticket-system-tests.txt b/data/codex-yoloforever/evidence/20260903-0449/ticket-system-tests.txt
new file mode 100644
index 00000000..b2c8a47b
--- /dev/null
+++ b/data/codex-yoloforever/evidence/20260903-0449/ticket-system-tests.txt
@@ -0,0 +1,41 @@
+
+> ticket-system@1.0.0 test
+> node --test
+
+✔ append + read round-trip and create folds to {open,title,project,agent} (11.2765ms)
+✔ status transitions open→doing→blocked→done→stopped, then reopen (5.558709ms)
+✔ an unknown status event is ignored (status stays valid) (0.866542ms)
+✔ STATUSES contents and order are exactly as legacy consumers expect (0.323042ms)
+✔ designation is orthogonal to status and defaults legacy tickets to task (1.1605ms)
+✔ scheduled designation requires cadence and folds scheduler metadata (1.837834ms)
+✔ structured blocker metadata folds and validates required fields (1.699542ms)
+✔ done status clears the materialized blocker without rewriting history (3.606416ms)
+✔ done status keeps terminal precedence when a blocker event arrives later (1.570792ms)
+✔ comment, action, and assign events fold into the right places (1.21575ms)
+✔ a body on create seeds a comment (0.840917ms)
+✔ resolveId resolves numeric, TK-prefixed, and full-slug refs; null on miss (1.077708ms)
+✔ resolveList REJECTS the shell-injection class (with an idNum===1 ticket present) (1.809333ms)
+✔ resolveId ALONE is foolable — the injection numeric-resolves to a real ticket (0.741625ms)
+✔ REFRE pre-gate blocks the injection BEFORE resolveId can resolve it (0.790125ms)
+✔ mixed array — the clean ref survives, the injection is dropped (1.822708ms)
+✔ resolveList rejects a non-array input and returns [] (0.938791ms)
+✔ resolveList RESOLVES clean refs to canonical ids, deduped (1.847834ms)
+✔ nextMid is monotonic across appended dm events (1.663666ms)
+✔ messages() folds a dm and a read (reads[] includes the reader) (0.884583ms)
+✔ isBroadcast is true for all/*/everyone only (0.154916ms)
+✔ two sequential withLock calls succeed and the lock is cleaned up (0.617ms)
+✔ advertises native ticket and A2A tools (2.2125ms)
+✔ Codex ticket lifecycle persists to one canonical event ledger (16.992917ms)
+✔ A2A DM receipt, reply, correlation, and read transition work end to end (5.612ms)
+✔ invalid ticket mutation fails without appending (1.211208ms)
+✔ stdio MCP transport initializes, lists tools, and executes a correlated write (105.757625ms)
+✔ allowlisted launcher profiles map to fixed commands (173.238875ms)
+✔ unknown launcher profile is rejected before AppleScript (16.120666ms)
+ℹ tests 29
+ℹ suites 0
+ℹ pass 29
+ℹ fail 0
+ℹ cancelled 0
+ℹ skipped 0
+ℹ todo 0
+ℹ duration_ms 432.278125
diff --git a/data/codex-yoloforever/evidence/20260903-0449/urgency-tests.txt b/data/codex-yoloforever/evidence/20260903-0449/urgency-tests.txt
new file mode 100644
index 00000000..8a49d6e6
--- /dev/null
+++ b/data/codex-yoloforever/evidence/20260903-0449/urgency-tests.txt
@@ -0,0 +1,16 @@
+  ✓ P0 keyword outranks a mundane open ticket
+  ✓ local reversible approval is fast-tracked
+  ✓ explicitly exhausted local prep is surfaced, never fast-tracked
+  ✓ email action is policy-held
+  ✓ incidental email mention does not create a false policy hold
+  ✓ spend over $5 is held without misreading ordinary prices
+  ✓ dead >24h build ⇒ stale-dispose with a restart/kill verdict
+  ✓ stale-but-alive build ⇒ nudge, not kill
+  ✓ <24h doing is not stale
+  ✓ live-owner ticket ⇒ monitor-only
+  ✓ external steve-gated action ⇒ policy hold
+  ✓ done tickets excluded from rank
+  ✓ continuous loops and scheduled jobs are excluded from task urgency
+  ✓ tier thresholds
+
+✅ 14 assertions passed

← 47f6a01a record TK-11152 gated-only cycle evidence  ·  back to Ticket System  ·  log TK-11153 bounded cycle e5e97e8e →