---
id: 20260601-031252-builtin-work-item-intake-routing
slug: builtin-work-item-intake-routing
title: Built-in Ticket intake and orchestration routing
status: closed
kind: task
priority: P1
labels: [ticket, intake, orchestration]
created_at: 2026-06-01T03:12:52Z
updated_at: 2026-06-05T06:42:40Z
assignee: null
legacy_ticket: null
---

## Background

Yoi needs a durable project-level coordination record that Intake, Orchestrator, coder Pods, reviewer Pods, and humans can share. The accepted concept name is **Ticket**.

A Ticket is not the same thing as the session-local Task tool. A Task tracks short-lived user-visible progress inside a Pod/session. A Ticket is a durable orchestration contract with requirements, decisions, plans, implementation reports, reviews, artifacts, and resolution history.

The current repository already stores this information under `work-items/` and manages it through `tickets.sh`. For now, that storage format remains the local backend. The new code-facing concept should be `Ticket`, not `WorkItem`; `work-items/` is a current local storage path, not the product concept name.

The original version of this ticket mixed several layers: local ticket backend, built-in Pod tools, Intake behavior, Orchestrator routing, action-required state, and scheduler-like automation. That is too broad for a single implementation ticket, so this ticket now acts as the umbrella tracking ticket for the split.

## Terminology

- `Ticket`: durable orchestration record shared by Intake, Orchestrator, implementation Pods, reviewer Pods, and humans.
- `Task`: session-local progress tracking tool; intentionally separate from Ticket.
- `Assignment`: a concrete delegation from Orchestrator to a coder/reviewer/investigator Pod.
- `IntentPacket`: short implementation/review contract derived from a Ticket and passed to an Assignment.
- `TicketBackend`: backend abstraction for reading and mutating Tickets.
- `LocalTicketBackend`: backend implementation for the current `work-items/` directory format.

## Scope of the umbrella

This umbrella covers the following sequence:

1. `ticket-local-files-backend`
   - Add a code-facing Ticket domain model and local backend for current `work-items/` files.
   - Keep `tickets.sh` and existing file format compatible.

2. `ticket-built-in-feature-tools`
   - Expose Ticket operations as a built-in Pod feature/tool surface.
   - Treat Ticket operations as typed backend authority, not arbitrary filesystem writes.

3. `ticket-intake-workflow`
   - Define and install an Intake workflow/profile that clarifies user requests and creates Tickets after user agreement.

4. `ticket-orchestrator-routing`
   - Let Orchestrator classify Tickets and route them into preflight, implementation, review, spike, blocked/action-required, or close paths.

Later scheduler/lease/automatic maintainer behavior is out of scope for this umbrella until the above pieces are usable.

## Requirements

- Use `Ticket` as the product/code concept name.
- Keep existing `work-items/` storage as the LocalTicketBackend path for now.
- Do not rename the storage directory in this umbrella.
- Keep git history + ticket files authoritative.
- Preserve compatibility with `tickets.sh` until a replacement is explicitly accepted.
- Keep Ticket authority separate from delegated filesystem write scope.
- Avoid exposing arbitrary file writes through Ticket tools.
- Keep Intake focused on clarification and Ticket creation/update; it must not schedule implementation itself.
- Keep Orchestrator responsible for routing/scheduling decisions, not Intake.
- Do not introduce an unattended scheduler in the MVP.

## Acceptance criteria

- This umbrella records the Ticket terminology decision and split plan.
- Child tickets exist for:
  - local files backend;
  - built-in feature tools;
  - intake workflow;
  - orchestrator routing.
- Child tickets state their dependencies, scope, non-goals, and acceptance criteria clearly enough for preflight/implementation sequencing.
- Historical `WorkItem` wording in this ticket is either removed or explicitly described as old terminology.
- `tickets.sh doctor` passes after the split.

## Non-goals

- Renaming `work-items/` to `tickets/`.
- Replacing `tickets.sh` immediately.
- Building a scheduler/lease system.
- Building a TUI spawned-Pod panel.
- Changing the session-local Task tool.
- Integrating with GitHub Issues, Linear, MCP, or external trackers in this umbrella.
