---
title: Plan intake-filed league Drafts without the operator
type: task
status: completed
description: >-
  Mechanical hourly dispatcher plus an unattended planning workflow that takes each
  Discord-intake-filed league Draft to a reviewed plan and Planned status, one session at a time,
  leaving implementation gated.
base_uri: user:task/league/plan-intake-filed-league-drafts.md
created_at: '2026-10-18T02:49:09.701Z'
entity_id: 49531c9a-c21c-4123-8245-896cf986a7b8
finished_at: '2026-10-18T12:37:17.827Z'
observations:
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
  - ████████████████████████████████████████████████
owner_identity_uri: █████████████████████████
priority: High
public_read: true
tags:
  - user:tag/league-xo-football.md
  - user:tag/base-project.md
updated_at: '2026-10-18T12:37:17.827Z'
visibility_analyzed_at: '2026-11-05T23:49:48.766Z'
---

# Plan intake-filed league Drafts without the operator

Discord contributor intake files Draft league tasks four times a day, but nothing plans them: the league orchestrator loop has sat at its prompt since 2026-10-16 and has no respawn schedule. This lane gets every Draft that intake files to a written plan, and to `Planned` once the plan is sound, with no operator step. Implementation stays gated as today: nothing here builds, deploys, or posts to a contributor.

Operator approval, 2026-10-18: "should intake Drafts get planned without you? — yes, start a lane for it."

## Why the existing flywheel does not reach them

- The Draft-task flywheel (manage-task-drafts → triage-draft-task) is listed as paused in the hygiene orchestrator's detector roster, and nothing schedules it.
- The `draft-readiness` and `task-planning` queue lanes in `config/config.json` have no producer: manage-task-drafts queues under `draft-triage`, and triage dispatches planning with a bare `base thread create`, not the queue.
- The planning workflow holds three operator confirmation gates per plan, regardless of how the session was spawned.

## Design

- **Scope.** A Draft under `task/league/` or the GitHub mirror whose `## Source` section links a Discord message (the intake test `extension/contribution/lib/find-due-notices.mjs` uses), with no `[draft-triaged]` or `[plan-completed]` observation yet.
- **Dispatcher.** `base contribution ██████████████████`, hourly on ████████████. It is mechanical and spawns at most one planning session per run, and never more than one live at a time. It runs on Opus 5.5 on the subscription with `--lifecycle one-shot`, oldest Draft first. `--task-uri` refuses a Draft that a live thread already owns.
- **Oracle.** One JSON outcome line per run. It exits nonzero when a spawn fails, or when the backlog is not draining: a Draft is eligible but no planner is live, or a planner has been live past six hours.
- **Planning session.** It runs [[█████████████████████████-██████-████████]]. The session reads the problem only from the task body. It triages for duplicates and staleness, then plans unattended. A fresh-eyes review child checks the plan before it is marked `Planned`. An open product question becomes a named decision step inside the plan, not a stall. A Draft that cannot be planned stays Draft with a `[draft-triaged]` observation, and the league orchestrator owns it from there.
- **Other contributor pathways.** Only operator-owned Drafts are planned. Web-form submissions (owned by `█████████████`) and contributor-session tasks (owned by the contributor) keep their own review gates in league. A plan written here would be agent-authored and would skip those gates.
- **Ownership.** The lane owns the Draft-to-Planned step for intake Drafts only. The league orchestrator keeps prioritization, implementation dispatch, and every Draft the lane hands back.

## Plan

- [x] Extend `load_intake_tasks` to report Source-section intake, created_at and observations, and add the dispatcher with tests. Verify: `yarn test:extensions` passes the contribution suite.
- [x] Write the planning workflow `████████████████████████████████████`. Verify: `base entity validate` passes on it.
- [x] Create the scheduled command `██████████████████████████████████████████████`, disabled. Verify: `base contribution ██████████████████ --dry-run` reports the eligible set.
- [x] Operator rules on ownership (ruled 2026-10-18: the lane owns intake Draft-to-Planned); enable the schedule and record the split in the league orchestrator's Suspensions.
- [x] Watch the first three planned Drafts and check each plan against the planning guideline. Verify: each reaches `Planned` or a `[draft-triaged]` handback, with no stuck planner.
- [x] Operator rules on the non-intake league Draft backlog of about 140 (ruled 2026-10-18: stays in the league orchestrator's pool; the 33 GitHub-mirror Drafts from 2024–2025 get a one-off staleness check in session `████████████████████████████████████`).
