# 16. The shape of a run is asked, not typed into its name

**Status:** Accepted · 2026-09-21 · extends [ADR-0015](./0015-one-pipeline-no-depth-answer.md)

## Context

ADR-0015 removed the depth answer, leaving one pipeline. Three command names
still encoded a decision the run was able to ask about:

- `/multi-agent:local` and `/multi-agent:local-autopilot` answered "where does
  the branch live" before the run started. Phase 0 Step 5b asks the same
  question, so the same answer had two entry points and the command names were
  the one that never appeared in the run's own record: `workspaceSource` could
  say `command`, and nothing downstream could tell which command.
- `/multi-agent:resume-local` named the *kind* of unfinished work rather than
  the work. A user who had stopped a run and a user who had hand-written a
  change both wanted to continue; they had to know which of two commands
  described their situation before they could ask for help with it.

Each name also multiplied surface: two more command directories, two more
Copilot mirrors, two more rows in seven gated inventories, and a preference
block (`global.resumeLocal`) named after a command.

## Decision

The workspace question is asked at Phase 0 Step 5b and nowhere else. The
`:local` and `:local-autopilot` commands are removed along with the `--local`
flag. `autopilot` resolves the workspace to a worktree without asking, because
an unattended run commits and pushes from wherever it stands.

`:resume-local` folds into `/multi-agent:resume`, which now builds a list from
both sources - tracked runs that stopped, and the current branch when it
carries work no run produced - and asks which one to pick up. The tail path
(Review → Commit → Report, no Plan and no Dev) is unchanged; only its entry
point moved. `global.resumeLocal` becomes `global.resume` under preferences
schema 2.8.0, carrying the `autoFix` value across.

Command inventory: 60 → 57.

## Consequences

- A run's shape is visible in the run. `workspaceSource` and the Step 5b
  answer are the record, and there is no second way to set them.
- One fewer thing to know before asking. `/multi-agent:resume` with no argument
  is a complete request; the list answers the question the command names used
  to ask of the user.
- The manual-test offer at the end of Review follows the workspace answer
  rather than a command name: a worktree run is asked whether to check the
  branch out and test it, a local run already is that checkout.
- `phases.json` modes lose their `local` flag, since no mode sets it. The
  generated dispatch blocks are byte-identical, so the drift gate holds.
- Old names stay in `COMMAND_RENAMES`, so a snapshot naming them still
  resolves and the removal cannot happen silently in a later release.

## Alternatives

**Keep the commands as aliases.** An alias that answers a question the run also
asks is the exact shape this ADR removes; two paths to one answer is what made
`workspaceSource: "command"` unreadable.

**Keep `:resume-local` and have `:resume` delegate.** The user still has to
know which situation they are in to pick a verb, which is the cost being paid.

**Rename `:resume-local` to something clearer.** Any name still forces the
distinction at typing time, and the run can see the difference by looking.

**Leave `global.resumeLocal` alone.** A preference named after a command that
no longer exists is a name nobody can resolve from the code; the migration is
one hop and carries the value.
