Autopilot

Autopilot hands the manager chat the queue for a while. The five power stops, max_parallel and failures_in_row, park, skip and retry, the no-autopilot and operator labels, and the report.

01what it is#

Autopilot lets the operator hand a project's manager chat the go and approve presses for a while. Only the operator switches it on, from the window or with a Discord press. The conductor's autopilot tools work only while it is on, for that project and that conversation, and they press through the same functions the window does, marked as autopilot's.

The conductor can propose it with propose_autopilot_on and propose_autopilot_off, which are cards the operator presses. The on card takes the project, the conversation, a queue, an until time, max runs, max parallel, max failures in a row and a power.

When it is switched on the desk checks the settings:

The desk then registers a wake for the chat, says so in the thread, and tells the conductor with the autopilot brief for that power. The state is kept in autopilot.json. A saved state with no valid power reads as 3, or as 4 when it carries the old sync switch.

02power stops#

The power slider has five stops. A new session starts at stop 3. The names are in the code twice, as autopilotStops in the conductor package and as powerName in the desk package, and tests check this page against both. What the conductor may do alone at each stop is the line autopilotStopLine puts in its brief. Each stop includes everything the stops before it allow.

03limits#

04park, skip and retry#

The loop the conductor works is autopilotBriefHead and autopilotBriefTail around the stop line.

  1. autopilot_next picks the ticket. If it returns none, the conductor says why in a line and stops.
  2. The conductor drafts a launch card from the ticket's title, summary, comments and template, then presses go with autopilot_go on its own fresh card.
  3. On run news:
    • A rejected gate (needs_human, or out of revise loops) gets autopilot_park, with the unmet items as the why.
    • A failure of infrastructure (tracker 5xx, a runtime or protocol failure, a model runtime down) gets one retry.
    • A close miss, with only a few named tests red, gets one retry on its own leftovers. The conductor adds a ticket comment naming the failing tests, drafts a fresh card for the same ticket and presses autopilot_go. The new run records the failed run it started from.
    • Anything else, or a second failure of the same ticket, gets autopilot_park with the unmet items as the why, then autopilot_next.
  4. A completed run has landed.

Park. autopilot_park stops a run autopilot started, or takes one that has finished, failed or stopped, and saves its unfinished work on a side branch autopilot/<ticket>-<run> in the project's workspace, leaving the workspace clean. A clean workspace saves nothing.

Skip. The conductor skips only a ticket that can't be a run, such as a deploy, a hand config change or work on another machine. It labels the ticket no-autopilot, calls autopilot_skip with a why, and calls autopilot_next again. A skip lasts one autopilot session.

05labels#

06the tools#

The conductor never runs git itself, and never sends a run back, stops other runs, edits config or hands off while autopilot is on. The desk keeps its place in every wake turn, so register_wake is only for a note or a time of its own. See conductor.

07report and summary#

When autopilot stops, the desk writes one report card. It is built from autopilot's state and the runs' journals, never from what the conductor said. It holds the reason, the start and stop times, the counters, the power and max parallel, and four lists:

Discord gets one line: "autopilot stopped: ", then the counts landed, parked, failed and not reached, the number that need the operator, max parallel and the power.

The summary is a short markdown text the conductor writes once, after autopilot stops. The desk gives it the facts (the landed, parked, failed and needs-you lists and the number not reached) and the record number of the report. autopilot_summary takes that report number and a text of at most 1500 characters. It should cover what landed and what it means, what failed or was parked and why, anything half-done, and the one or two things to look at first. It is refused for a second write, or when a newer report exists.