# Live E2E Dogfood Checklist — `Task-worker-live-e2e-dogfood.md` (A1 verify) This is the **operator** checklist for `plans/Plan-automation-foundation/Epic-apps-worker-v1/Task-worker-live-e2e-dogfood.md`. Mark the Task `done` only when every box below is true on your deploy (Coolify or local Redis). ## Env (document names only, no secrets) - `ORCHESTRATOR_DRY_RUN=0` on orchestrator service - `WORKER_DRY_RUN=0` on worker service - `REDIS_URL` set on both (same `echodo:orchestrator:jobs` queue) - `DATABASE_URL` `echodo` on both + web (migrations 0015+ applied) - Workspace has `model_providers` alias + `role_model_routes role-implementer → qwen-coder` and `harness_providers alias: minimal` (or `doc-writer` for doc) ## Steps 1. Connected repo reachable from worker: `apps/worker` can `git clone`/`git push` the `repo_links` URL (or monorepo root when `WORKER_REPO_ROOT` unset). 2. Create or reconcile convoy with implementer brief: either `Plans → Start → Convoy` on a `ready` Task or `create_convoy` + `create_brief` via MCP `reconcile_from_files`. 3. Advance to `ready` (Gate 1 `human-gate-1` approve if `convoy_review`). 4. Worker logs show `dequeuing job` → `claimed backlog=... run=...` → `tools=...` → `complete_task` → `role_complete` `convoy_events.metadata.harnessAlias` present. 5. Settings → Runs (`/[workspaceSlug]/settings/runs`) shows row with `model_alias` + `tokensTotal` for that `runId`. 6. Mission Control detail `apps/web/app/(app)/[workspaceSlug]/mission-control/page.tsx:12` shows `role_complete` event within 5s (SSE `/api/fleet/events` or poll fallback). 7. (Preferred, after `Task-worker-draft-pr`) Draft PR exists with marker `echodo-convoy: ` consumable by Epic 8 webhook; for doc tasks `doc_review → published` without PR but `published` visible. 8. (Epic 8 — forge webhook) Merge PR triggers `POST /api/webhooks/forge` with `X-Hub-Signature-256`/`X-Forgejo-Signature` HMAC `FORGE_WEBHOOK_SECRET` → convoy `pr_review→merged` (`automation`, `convoy_events` `status_change`) and Mission Control shows `merged` within 5s; invalid signature returns 401, missing marker returns 200 no-op. ## Record - Convoy slug: - Run id (`agent_runs.id`): - `harnessAlias` / `modelAlias`: - PR url (if code): ## Dry-run fallback still works - With `DATABASE_URL` missing or `REDIS_URL` unset, `pnpm --filter @tasks/worker dev` logs `DRY-RUN mode — dequeue loop idle` and exits 0; `ORCHESTRATOR_DRY_RUN=1` logs dispatch without enqueue. ## Not this task - Forge webhooks (Epic 8) — verified separately - New worker features — use sibling tasks ## Docs - Webhook rotation: [`docs/operations/webhook-secret-rotation.md`](./webhook-secret-rotation.md) - Copilot prompts (gate + ops): [`docs/copilot-prompt.md`](../copilot-prompt.md) - SOP published flow: [`docs/examples/sop-published-flow.md`](../examples/sop-published-flow.md) ## Links - Task: `plans/Plan-automation-foundation/Epic-apps-worker-v1/Task-worker-live-e2e-dogfood.md` - Convoy: `.convoys/worker-closeout-docwriter.md` - Worker closeout context: `.convoys/worker-closeout-docwriter/brief-1-draft-pr-forge.md` Fill convoy slug + run id above, then flip Task status `ready → done` and `exportBacklogItemToMarkdown` will persist it.