Advance workflow stages from the state-driven coordinator

This commit is contained in:
Ian Gulliver
2026-10-21 13:11:03 -07:00
parent c77a5ba02b
commit be777e469c
6 changed files with 49 additions and 40 deletions
+17 -12
View File
@@ -367,11 +367,6 @@ func (m *Manager) Recover(ctx context.Context) error {
return err
}
staged, err := m.recoverStages(ctx)
if err != nil {
return err
}
err = m.recoverPreviews(ctx)
if err != nil {
return err
@@ -399,9 +394,6 @@ func (m *Manager) Recover(ctx context.Context) error {
}
for _, sess := range sessions {
if staged[sess.Id] {
continue
}
task, err := m.taskFor(ctx, sess)
if err != nil {
slog.Error("resume session: load task", "session", sess.Id, "task", sess.TaskId, "err", err)
@@ -412,6 +404,23 @@ func (m *Manager) Recover(ctx context.Context) error {
if err != nil {
return err
}
started, err := m.store.SessionStarted(ctx, sess.Id)
if err != nil {
return err
}
finished, err := m.store.StageFinished(ctx, sess.Id)
if err != nil {
return err
}
if finished || !pending && !started {
m.endMergeTurn(sess.Id, true)
err = m.store.SetSessionState(ctx, sess.Id, api.AgentSessionStateIdle, "byre", nil)
if err != nil {
return err
}
slog.Info("session left idle at startup: its stage finished or it never got its first message", "session", sess.Id, "task", task.Id)
continue
}
if pending {
found, err := m.deliverRecorded(ctx, sess, task)
if err != nil {
@@ -1307,9 +1316,6 @@ func (m *Manager) turnEnded(ctx context.Context, l *live, res endResult) error {
if end.Discard != store.DiscardNone {
m.logUndelivered(ctx, l.id, "turn ended in discard")
if end.Discard == store.DiscardHeld && stageFinished {
go m.advanceStage(l)
}
return nil
}
if handoff {
@@ -1322,7 +1328,6 @@ func (m *Manager) turnEnded(ctx context.Context, l *live, res endResult) error {
return nil
}
if stageFinished {
go m.advanceStage(l)
return nil
}
go m.afterTurn(context.WithoutCancel(ctx), l)