You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
A Pickup run reads "starting" and "(title unavailable)" for its whole life #889
A live Pickup run reads starting in thirdshift status for its whole life, and its row says (title unavailable). On stephens on 2026-10-20, the Pickup run for #776 had been live for 19 hr 46 min and still read:
Pickup run JacobStephens2/thirdshift#776 (title unavailable) · codex · gpt-6.1-sol · high · starting
Spec run JacobStephens2/thirdshift#776 Spec: the Console, a web page for each machine's Commands · codex · gpt-6.1-sol · high · Tickets · 19 hr 46 min
Every Pickup row on the machine, ended ones included (#812, #806, #804), says (title unavailable).
Both come from the Command record, which thirdshift status --json shows as "stages": [] and "issue": {"title": null}:
Stage. A Pickup run never records a stage: its Work has no initial stage, and it writes none when it dispatches. Status falls back to starting for any live Command with no stage. A Security run has the same gap.
Title. The Pickup run already knows the title from the Ready issue listing, since it prints it in its "taking Ready issue" step, but it starts its Command record with only the Issue URL.
This matters more once the Console (#776) ships. Its Inbox shows each Run's stage and age (#776 story 10) from the same records, so a Pickup run reading starting above a Spec run 20 hours into Tickets looks like a stuck parent.
The fix wording was agreed in triage: once it has dispatched, a Pickup run reads dispatched <kind> · <age>, for example dispatched Spec run · 19 hr 46 min, timed from the dispatch.
Category: bug Summary: A Pickup run's Command record should name what it dispatched, and when, and carry its issue's title
Current behavior:
A Pickup run's Command record has no stages and a null issue title for its whole life. thirdshift status, thirdshift show and the Console render its stage as starting, even hours after it dispatched a Spec run or a Run, and render its subject as #<n> (title unavailable). A Security run that has dispatched a fix also has no stage, so it reads starting too.
Desired behavior:
From the moment a Pickup run dispatches, its live row reads dispatched <kind> · <age>, where <kind> is the dispatched Command's kind as status already names it (Spec run or Run), and <age> is the time since the dispatch, in the same format as other stage ages (19 hr 46 min).
While a Security run's fix is dispatched, it reads the same way: dispatched Run · <age> or dispatched Spec run · <age>. Between fixes it reads as it does today.
Before dispatch, starting stays as it is.
A Pickup run's Command record carries its issue's title, the one from the Ready issue listing, so its row shows #776 Spec: the Console, a web page for each machine's Commands and not (title unavailable).
The record keeps the dispatch time and kind, so status --json exposes them and the Console can render the same words without parsing CLI text.
An ended Pickup run still shows its outcome, and a Pickup run that died after dispatching reads died at dispatched <kind>, or similar wording consistent with the existing died at <stage>.
Key interfaces:
Work::PickupRun - carries only an IssueUrl today; the title has to reach the record it starts.
Work::initial_stage and the Command record's stages / current_stage() - the dispatch must be visible as a stage or an equivalent recorded fact.
stage_text in status - the fallback that produces starting and died before first stage.
The Stage enum and its persisted names, which are tolerant of new stages: any new stage name must be readable by older records' readers as well as newer ones.
Acceptance criteria:
A Pickup run that has dispatched a Spec run renders dispatched Spec run · <age since dispatch> in thirdshift status, and dispatched Run · <age> when it dispatched a Run.
A Security run with a fix in flight renders dispatched <kind> · <age>.
A Pickup run that has not dispatched yet still renders starting.
A Pickup run's row and its thirdshift show output carry the issue's title from the Ready issue listing.
thirdshift status --json includes the dispatch stage (name and began-at) for a dispatched Pickup run.
Records written before this change (no stages, null title) still load and render as they do today.
Silent and Slow apply to the dispatched Command, not to the Pickup run's dispatch stage: a long Spec run never marks its parent Pickup run Slow, since a dispatch has no Usual range.
Tests cover the Pickup and Security dispatch cases and a pre-change record.
Out of scope:
Stages for a Security run's own audit, reproduce and score steps before any fix is dispatched.
Any change to how the dispatched Spec run or Run records its own stages.
Activity
JacobStephens2 commentedon Oct 20, 2026
Agent Brief
Category: bug
Summary: A Pickup run's Command record should name what it dispatched, and when, and carry its issue's title
Current behavior:
A Pickup run's Command record has no stages and a null issue title for its whole life.
thirdshift status,thirdshift showand the Console render its stage asstarting, even hours after it dispatched a Spec run or a Run, and render its subject as#<n> (title unavailable). A Security run that has dispatched a fix also has no stage, so it readsstartingtoo.Desired behavior:
dispatched <kind> · <age>, where<kind>is the dispatched Command's kind as status already names it (Spec runorRun), and<age>is the time since the dispatch, in the same format as other stage ages (19 hr 46 min).dispatched Run · <age>ordispatched Spec run · <age>. Between fixes it reads as it does today.startingstays as it is.#776 Spec: the Console, a web page for each machine's Commandsand not(title unavailable).status --jsonexposes them and the Console can render the same words without parsing CLI text.died at dispatched <kind>, or similar wording consistent with the existingdied at <stage>.Key interfaces:
Work::PickupRun- carries only anIssueUrltoday; the title has to reach the record it starts.Work::initial_stageand the Command record'sstages/current_stage()- the dispatch must be visible as a stage or an equivalent recorded fact.stage_textin status - the fallback that producesstartinganddied before first stage.Stageenum and its persisted names, which are tolerant of new stages: any new stage name must be readable by older records' readers as well as newer ones.Acceptance criteria:
dispatched Spec run · <age since dispatch>inthirdshift status, anddispatched Run · <age>when it dispatched a Run.dispatched <kind> · <age>.starting.thirdshift showoutput carry the issue's title from the Ready issue listing.thirdshift status --jsonincludes the dispatch stage (name and began-at) for a dispatched Pickup run.Out of scope: