> ## Documentation Index
> Fetch the complete documentation index at: https://panopticon-cli.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Order Books

> Build and run operator-curated Flywheel campaigns with parallel and serial lanes

export const ThemedImage = ({light, dark, alt = ""}) => {
  const [darkMode, setDarkMode] = useState(null);
  useEffect(() => {
    const root = document.documentElement;
    const syncTheme = () => setDarkMode(root.classList.contains("dark"));
    const observer = new MutationObserver(syncTheme);
    syncTheme();
    observer.observe(root, {
      attributes: true,
      attributeFilter: ["class"]
    });
    return () => observer.disconnect();
  }, []);
  if (darkMode === null) return null;
  return <img src={darkMode ? dark ?? light : light} alt={alt} loading="lazy" />;
};

# Order Books

An order book is an operator-curated Flywheel campaign. It replaces a prose list of “special orders” with a durable queue whose lane capacity, prerequisites, planning checks, pickup posture, and completion rules Overdeck enforces.

Use an order book when the sequence matters: a migration campaign, a refactor that must stay behind a serial gate, or a release-hardening run whose scope must not expand into the normal backlog.

<ThemedImage light="/images/order-books/page-light.png" dark="/images/order-books/page-dark.png" alt="Order Book design mockup showing OPEN and DRAIN posture, parallel Lane A, serial Lane B, and landed campaign history" />

The design mockup shows the core model: Lane A overlaps up to its configured limit, Lane B admits one issue at a time, and DRAIN stops new pickup while in-flight work finishes.

## Order books and the backlog

The backlog sequencer is Overdeck's ranked pool of possible work. An order book is a deliberate subset with explicit execution order.

Membership in the active book counts as operator release, even when:

```text theme={null}
flywheel.auto_pickup_backlog=false
```

That setting still holds every off-book issue. The Flywheel can work through the book without opening the rest of the backlog.

## Build a book

Open **Order Book** in the dashboard, or go directly to `/orders`.

1. Click **+ New book**, enter a name, and create the draft.
2. Add open issues from search or from the ranked backlog-candidates rail. Adding an issue changes the plan only; it does not dispatch work.
3. Put parallel-safe work in **Lane A**. Put work that must serialize against the same subsystem in **Lane B**.
4. Drag rows to change lane order, or use the lane-swap action to move an issue between A and B.
5. Set Lane A concurrency and, when needed, an optional brief-overlay path.
6. Resolve every blocking validation finding, then click **Queue book**. A queued book is `ready`.
7. Click **Start run** when the book should become the active Flywheel campaign.

The book strip keeps drafts, queued books, the active book, and completed history together. The lifecycle strip marks the current state:

```text theme={null}
draft → ready → running → drained → complete
```

### Add from other surfaces

You can promote an issue without leaving its current view:

* **Add to order book** appears in the shared issue action menu used by the board and issue drawer.
* Backlog rows expose **+ Order book** and ask only whether the issue belongs in Lane A or Lane B.

These are narrow add actions. Editing, validation, settings, ordering, and lifecycle controls remain on `/orders`.

## Read the page

### Pickup posture

**OPEN** permits eligible book items to dispatch and renders blue-tinted — dispatch is live, machine working.

**DRAIN** blocks every new book dispatch and renders amber — a human paused pickup. Work already in the pipeline continues toward a terminal state.

Run settings always show posture attribution — who set it, when, and why — beneath the posture control, regardless of which posture is active. If the recorded reason predates the current posture (for example, a leftover "Operator paused new pickup." reason after reopening), an amber stale-reason flag calls that out.

### Lane A

Lane A is parallel. The **Lane A concurrency** setting controls how many Lane A issues may be in flight at once. A new dispatch is refused when that count is full.

### Lane B

Lane B is strictly serial. A second Lane B issue cannot start while another Lane B item is in flight.

Each compact row leads with the lane position, such as `B11 · book`, then the issue id. Rows also show prerequisite, PRD, and re-verification state.

### Start validation

The validation panel separates blockers from warnings. Start is blocked when:

* an issue is closed or cannot be resolved as open;
* an issue belongs to another non-complete book;
* a prerequisite is missing;
* prerequisites form a cycle; or
* a Lane B issue has no draft PRD or canonical spec.

A Lane B issue marked for planning at pickup turns the missing-PRD result into a warning. Warnings stay visible but do not prevent queueing or starting.

Use **Preview brief** to inspect the scope that the Flywheel will receive before the run starts.

### Setup and Progress

**Setup** contains the book editor, run settings, add rails, and validation. Run settings save automatically per field: each field shows its own saved or error state beside its label, and a failed save offers Retry rather than silently discarding the change.

**Progress** turns the book into a live checklist. For held issues it shows the same mechanical conditions used by the server dispatch gate:

* book membership;
* OPEN or DRAIN pickup posture;
* a free lane slot;
* terminal prerequisites; and
* completed PRD re-verification.

The Flywheel page and issue tree also show read-only order-book projections. Those projections link to `/orders?project=<key>` for the project the book actually lives in, so the link lands on the right books.

### Pick the project

Order books are per-project state, and the page header carries a **Project** picker listing every project Overdeck has registered. It opens on the project the server resolved for you, and choosing another one reloads the page against that project's books — every read and write the page makes is scoped to the selection, so you cannot edit one project's book while looking at another's.

The selection is mirrored into the URL as `/orders?project=mind-your-now`, which makes it a shareable deep link: opening that URL selects the project before the first load. Without the parameter the page shows the project containing the dashboard server's own working directory, exactly as it did before.

## Use the CLI

The dashboard is the complete editor, but the CLI covers common create, inspect, lane, and start operations:

```bash theme={null}
pan orders create "Refactor P3 remainder"
pan orders list
pan orders show 2026-07-18-refactor-p3-remainder

pan orders add 2026-07-18-refactor-p3-remainder PAN-2445
pan orders add 2026-07-18-refactor-p3-remainder PAN-2233 --lane B --reverify
pan orders move 2026-07-18-refactor-p3-remainder PAN-2445 --lane A --order 1
pan orders remove 2026-07-18-refactor-p3-remainder PAN-2445
```

`add` defaults to Lane A. `--after <issue>` inserts after an existing item in the target lane. `--reverify` keeps the issue held until its PRD has been checked against current `main`.

Queue the validated draft from `/orders` or from the terminal, then start it with either command:

```bash theme={null}
pan orders queue 2026-07-18-refactor-p3-remainder
pan orders start 2026-07-18-refactor-p3-remainder
pan flywheel start --orders 2026-07-18-refactor-p3-remainder
```

`queue` is the CLI form of the dashboard's **Queue book** action — it moves a draft to `ready` so the Flywheel can pick the book up from the ready queue. It refuses a book that is not a draft rather than re-queueing a running or completed campaign.

`pan orders start <id>` and `pan flywheel start --orders <id>` both open the one `conv-flywheel` conversation with the book named in its `/pan-flywheel` prompt. They differ when a flywheel is already running: `pan orders start` leaves it running and returns without naming the new book to it, while `pan flywheel start --orders` refuses with "already running" (`pan flywheel stop` first). A paused flywheel makes both refuse; resume it (`pan flywheel resume`) or replace it (`pan flywheel start --fresh --orders <id>`).

### Work on another project's books

Every `pan orders` verb takes `--project <key>`, naming a project from your registry, so you do not have to `cd` into a project to manage its campaign:

```bash theme={null}
pan orders list --project mind-your-now
pan orders queue 2026-08-01-frontend-sweep --project mind-your-now
```

Without the flag, the command resolves the project that contains your current directory, as before. An unregistered key fails with `Unknown project: <key>` instead of reporting the book as missing.

## What drained means

A book is drained only when every item is terminal. For order-book progress, terminal means either:

* the issue is closed; or
* the issue is parked with a recorded reason.

The server derives this result from canonical issue state. The orchestrator cannot declare a book drained through prose or a status message.

A book completes when its items are terminal — there is no completion verb. Check it with:

```bash theme={null}
pan orders show 2026-07-18-refactor-p3-remainder
```

## Reports and what comes next

The flywheel loop writes its run report to `.pan/flywheel/report.md` when it stops (`pan flywheel stop`) or when asked (`pan flywheel report`), and records substrate fixes and learnings in `.pan/flywheel/state.md`. Both are committed; git history is the archive. See [docs/FLYWHEEL.md](https://github.com/eltmon/overdeck/blob/main/docs/FLYWHEEL.md).

After a book drains, the loop's Orient step reads the next `running` or ready book on its next tick. Marking a book ready is your explicit release of that work; if you do not want a queued book picked up, leave it as a draft.

## Intentional off-book work

During an orders-bound run, Overdeck rejects work-agent dispatch for issues outside the book. If the exception is deliberate, the operator can use:

```bash theme={null}
pan start PAN-1234 --off-book
```

Overdeck records every accepted exception in the run's `orders-overrides.jsonl`. The override applies to that dispatch only; it does not release the backlog.

## Related

* [Auto-Merge](/configuration/auto-merge) controls how eligible PRs ship after review and tests.
* [The State Branch](/configuration/state-branch) explains where order-book files persist.
* [`pan orders`](/cli/overview) provides the terminal management surface.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.