Skip to content

[coordination] Ticket 3 — deferred: pipeline cards, live progress line, loop-run orphan sweeper #207

Description

@serge-ivo

Filed, deliberately not built. Follow-ons to #205 / #206.

A. Pipeline runs on the board

A pipeline run writes pipeline_runs but no board card, so a pipeline subordinate is invisible to a supervisor. Fix: mirrorRuntimeTask a pipeline.run card in lib/pipeline-run-start.ts and flip its status in workflows/pipeline-run.ts.

Deferred because it has no Coder-Lead relevance and would add a card to every pipeline agent's board — a wider blast radius than #206 for zero benefit to the stated goal.

Worth noting as the architectural test: when this lands, subordinate_status picks it up with no supervision-side change at all. That is the evidence the boundary drawn in #205 is right.

B. A plain-language progress line — the honest equivalent of the terminal tail

Even with #205 and #206, the Lead sees card titles, outcomes and step counts — not the terminal text the hardcoded Overseer reads. There is no clean way for supervision to reach that, and it must not try (see the reverted 3f14bd3).

The architecturally correct close is another domain write: have the Pilot upsert a short human summary into its own delegation card'sdescription, from the "thought" branch of the same onEvent hook #206 uses, throttled (e.g. every 5th action). The Lead then reads live progress through a generic record and still knows nothing about tmux.

This is the deliberate finish line for Overseer parity, not an oversight. Deferred pending a decision that outcomes + progress is insufficient in practice.

C. Orphan sweeper for agent_loop_runs

expireOrphanedRuntimeTasks reaps stranded instance_runtime_tasks. Nothing does the equivalent for agent_loop_runs or pipeline_runs, so a run whose Workflow died mid-step sits running forever with a stale iteration.

Both workflows have code defenses (agent-loop.ts force-closes in a catch, coding-session.ts closes on the no-runner path — "a running row nobody will ever close is worse than a failed one, because the supervisor keeps waiting"), but neither is a queryable staleness signal and neither survives an isolate death.

#205 mitigates the symptom by deriving "stalled" from last_progress_at. The structural fix is a sweeper. Note this also weakens the case for ever unifying the run tables: more write paths into one table means more ways to strand a row, and a stranded row is permanent data.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions