pub enum RunStatus {
Show 14 variants
Prep,
Implementing,
Judging,
Deliberating,
Voting,
Reviewing,
Gating,
Landing,
Merged,
Ready,
Stalled,
Blocked,
Failed,
VerifiedNoop,
}Expand description
Where a run got to.
Variants§
Prep
Worktrees being prepared.
Implementing
Candidates being implemented.
Judging
Judges ranking blind.
Deliberating
Judges deliberating after a split.
Voting
Final votes being collected privately.
Reviewing
Winner in the review + verification loop.
Gating
Gate commands running. Transient: graph::Runner::gate and
graph::Runner::merge always move a run on from here, whether or not
any gate commands are configured — see RunState::gate_status and
SCHEMA’s doc for schema 7, which fixed a repo with an empty
verify.gate stranding a review-only run in Gating forever.
Landing
Inside crate::land’s post-merge loop: watching CI, running a fix
round, rebasing onto a moved base, or waiting on the owner’s merge
approval. A run parked here while an approval is outstanding has
handed its daemon slot back — see crate::daemon — and resumes
through exactly this status, not a fresh competition.
Merged
Winner merged.
Ready
Winner passed the gate; merge was not requested.
Stalled
The judgement did not gather enough judges (e.g. rate limiting took out
seats), so the verdict is not trustworthy. The run stopped and kept its
work so it can be resumed or folded — it must never be confused with a
healthy Ready.
Blocked
Review rounds exhausted with findings still open, or the gate failed.
Failed
The graph could not complete.
VerifiedNoop
Every candidate wrote nothing, and every one of them said why in a way
that survived crate::graph::Runner’s adoption guard: a clean CLI
exit, an actually-empty tree, no command left with an unconfirmed
exit status, and non-empty evidence. Distinct from Failed on
purpose — see SCHEMA’s doc for schema 10 — because the two read
identically to an operator glancing at a card (“nothing happened”)
while meaning opposite things: one is an agent that could not do the
work, the other is an agent that checked and the work was already
done. Settles the task through crate::queue::Task::handed_off, not
crate::queue::Task::fail: a human still has to look — the claim is
unverified by magi itself — and Held (not Failed-and-requeued)
means nothing retries the task unattended on the same unconfirmed
claim while that look is pending.
Implementations§
Source§impl RunStatus
impl RunStatus
Sourcepub fn as_str(self) -> &'static str
pub fn as_str(self) -> &'static str
The name this status is written and shown under, matching the
snake_case serde spelling so a log line, an error message and the
JSON a phone reads all say the same word.
Sourcepub fn display_label(self) -> &'static str
pub fn display_label(self) -> &'static str
Label for a human-facing listing or report — the same word as
Self::as_str except where the machine spelling would read harsher
than the state actually is. VerifiedNoop is the one case: its own
as_str exists for logs, JSON and event messages, none of which
should quietly grow a second vocabulary, but a bare “verified_noop” in
a report reads like an error code, not the qualified, evidence-backed
claim it actually is.
Sourcepub fn resumable(self) -> bool
pub fn resumable(self) -> bool
Can this run be carried on from where it stopped?
Everything except a finished run and a failed one. execute skips
nodes already recorded, so re-entering is cheap wherever the run
stopped, and the alternative is always a fresh competition against
work that already exists.
Stalledre-asks only the seats whose absence collapsed the panel, keeping the candidates that were already paid for.Blockedre-enters the review loop against a branch that is built.- A non-terminal status means the run was interrupted: a parked
run waiting for its upgrade, or one whose daemon was killed. This
used to be excluded, which left run 4043 stuck at
reviewingwith the deck telling the operator it could not be resumed - the one state where resuming is the only sensible answer.
Failed does not qualify: the graph could not complete and there is
no established point to continue from. Nor does a finished run, whose
answer is a new competition. Nor does VerifiedNoop: every candidate
already agreed nothing belongs in this worktree, and resuming would
only re-ask the same question — the answer is for a human to check
the evidence, not for the graph to run again.
Whether anything is already driving the run is a separate question,
answered by daemon::is_working_on at the callers that need it.
Trait Implementations§
impl Copy for RunStatus
Source§impl<'de> Deserialize<'de> for RunStatus
impl<'de> Deserialize<'de> for RunStatus
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for RunStatus
impl StructuralPartialEq for RunStatus
Auto Trait Implementations§
impl Freeze for RunStatus
impl RefUnwindSafe for RunStatus
impl Send for RunStatus
impl Sync for RunStatus
impl Unpin for RunStatus
impl UnsafeUnpin for RunStatus
impl UnwindSafe for RunStatus
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more