WEB-300
AI pipeline schema: jobs awaiting approval, routing Mac/cloud by heartbeat, kill switch, worker claim/steps/finish, PR linked to bug
Evidence
From logs/evidence/WEB-300/. Click a thumbnail for the full image.
Tests
$ pnpm -s db:test$ cd apps/admin && node --test worker/tests/prompt.test.ts worker/tests/pipeline.int.test.ts$ node apps/admin/worker/smoke.ts$ cd apps/admin && pnpm build >/dev/null 2>&1 && ZOEN_EVIDENCE_TASK=WEB-300 pnpm exec playwright test tests/e2e/ai.spec.ts --workers=1 --reporter=line$ cd apps/admin && pnpm build >/dev/null 2>&1 && ZOEN_EVIDENCE_TASK=WEB-300 pnpm exec playwright test tests/e2e/ai.spec.ts --workers=1 --reporter=lineNotes
2026-10-04 19:33 UTC · AI pipeline built (W5 core): schema (jobs/steps/workers/settings, bug snapshot in job context), Mac worker `pnpm admin:worker` (heartbeat 30 s, claim with skip-locked, clean git worktree per job, Claude Agent SDK runner with tool allowlist + Bash command allowlist, protected-path guard, targeted tests in the worktree, commit/push ai/* branch, PR via GitHub REST; also delivers site refreshes, phone alerts, expires approvals), cloud route (.github/workflows/ai-fix.yml pinned to claude-code-action v1.0.241 SHA; dispatch from console on approval when Mac offline; issue mirror + ai-fix label / owner @claude comment from the GitHub app when Mac is off; console reconciles PRs), UI (Fix with AI on bugs, AI jobs list/detail with live steps, settings/kill switch, AI runs in Approvals). Tests: pgTAP 140_ai, worker unit + fake end-to-end (local origin + fake GitHub API: PR linked to bug), admin e2e request→approve→queued. BLOCKED until owner keys: ai:smoke (needs CLAUDE_CODE_OAUTH_TOKEN or ANTHROPIC_API_KEY) and the SDK install (@anthropic-ai/claude-agent-sdk, waits for the other session to be idle — lockfile).


