Skip director startup prompt when triage has no candidates #687

Closed
opened 2026-07-08 18:22:49 +00:00 by coilyco-ops · 3 comments
Member

Observed from a warded director surface: startup triage can report that there is nothing to triage, but the director still prompts the operator to continue. That prompt is noise when the triage pass had no actionable candidates and there is no choice for the operator to make.

Context read before filing:

  • docs/agent-director.md says startup triage runs before the init gate and warms the headless lane.
  • docs/director-startup-triage.md says fully labeled issues are skipped and a no-candidate steady state should be cheap.
  • cmd/ward/agent_director.go currently calls backlogTriage, then always refreshes/statuses and enters runDirectorLoop. The init gate in cmd/ward/agent_director_heartbeat.go still asks whether to drain.
  • cmd/ward/agent_director_triage.go has the no-candidate behavior inside triageRepo, but it does not appear to feed a result back to driveBacklog or the kickoff gate.

Request:

  • Reproduce the director startup path where the triage pass has zero candidates to label.
  • Change director startup so a no-op startup triage does not create a pointless continue/drain prompt solely because triage ran and found nothing. The director should either proceed according to the existing autonomous default or stop/surface according to the normal lane state, but it should not ask the operator to confirm an empty triage step.
  • Preserve the existing init gate when there is a real drain/surface decision to make.
  • Add regression coverage around the zero-candidate startup triage path and the existing promptful path.
  • Update docs if the user-visible startup behavior changes.

Validate with ward exec test.

Filed from the read-only director surface after Kai reported the prompt.

Observed from a warded director surface: startup triage can report that there is nothing to triage, but the director still prompts the operator to continue. That prompt is noise when the triage pass had no actionable candidates and there is no choice for the operator to make. Context read before filing: * docs/agent-director.md says startup triage runs before the init gate and warms the headless lane. * docs/director-startup-triage.md says fully labeled issues are skipped and a no-candidate steady state should be cheap. * cmd/ward/agent_director.go currently calls backlogTriage, then always refreshes/statuses and enters runDirectorLoop. The init gate in cmd/ward/agent_director_heartbeat.go still asks whether to drain. * cmd/ward/agent_director_triage.go has the no-candidate behavior inside triageRepo, but it does not appear to feed a result back to driveBacklog or the kickoff gate. Request: * Reproduce the director startup path where the triage pass has zero candidates to label. * Change director startup so a no-op startup triage does not create a pointless continue/drain prompt solely because triage ran and found nothing. The director should either proceed according to the existing autonomous default or stop/surface according to the normal lane state, but it should not ask the operator to confirm an empty triage step. * Preserve the existing init gate when there is a real drain/surface decision to make. * Add regression coverage around the zero-candidate startup triage path and the existing promptful path. * Update docs if the user-visible startup behavior changes. Validate with ward exec test. Filed from the read-only director surface after Kai reported the prompt.
Author
Member

🔒 Reserved by ward agent --harness claude — container engineer-claude-ward-687 on host kais-macbook-pro-2.local is carrying this issue (reserved 2026-07-08T18:22:55Z). Concurrent ward agent runs are blocked until it finishes or the reservation goes stale (1h TTL); --force overrides.

Do not comment on or edit this issue to steer the run while it is reserved. The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a new issue, dispatched fresh — that is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494).

run seed context — what this run is carrying (ward#609)
  • Resolved: coilyco-flight-deck/ward#687 · branch issue-687 · harness claude · workflow direct-main
  • Run: engineer-claude-ward-687 · ward v0.463.0 · dispatched 2026-07-08T18:22:55Z
  • Comment thread: 0 included in the pre-flight read, 0 stripped (ward's own automated comments).

Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.463.0).

— Claude (she/her), via ward agent

<!-- ward-agent-reservation --> 🔒 Reserved by `ward agent --harness claude` — container `engineer-claude-ward-687` on host `kais-macbook-pro-2.local` is carrying this issue (reserved 2026-07-08T18:22:55Z). Concurrent `ward agent` runs are blocked until it finishes or the reservation goes stale (1h TTL); `--force` overrides. **Do not comment on or edit this issue to steer the run while it is reserved.** The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a **new issue, dispatched fresh** — that is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494). <details><summary>run seed context — what this run is carrying (ward#609)</summary> - **Resolved:** `coilyco-flight-deck/ward#687` · branch `issue-687` · harness `claude` · workflow `direct-main` - **Run:** `engineer-claude-ward-687` · ward `v0.463.0` · dispatched `2026-07-08T18:22:55Z` - **Comment thread:** 0 included in the pre-flight read, 0 stripped (ward's own automated comments). Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.463.0). </details> <!-- ward-agent-signature --> — Claude (she/her), via `ward agent`
Author
Member

🔒 Reserved by ward agent --harness codex — container engineer-codex-ward-687 on host kais-macbook-pro-2.local is carrying this issue (reserved 2026-07-08T21:54:55Z). Concurrent ward agent runs are blocked until it finishes or the reservation goes stale (1h TTL); --force overrides.

Do not comment on or edit this issue to steer the run while it is reserved. The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a new issue, dispatched fresh — that is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494).

run seed context — what this run is carrying (ward#609)
  • Resolved: coilyco-flight-deck/ward#687 · branch issue-687 · harness codex · workflow direct-main
  • Run: engineer-codex-ward-687 · ward v0.466.0 · dispatched 2026-07-08T21:54:55Z
  • Comment thread: 0 included in the pre-flight read, 1 stripped (ward's own automated comments).

Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.466.0).

— Codex, via ward agent

<!-- ward-agent-reservation --> 🔒 Reserved by `ward agent --harness codex` — container `engineer-codex-ward-687` on host `kais-macbook-pro-2.local` is carrying this issue (reserved 2026-07-08T21:54:55Z). Concurrent `ward agent` runs are blocked until it finishes or the reservation goes stale (1h TTL); `--force` overrides. **Do not comment on or edit this issue to steer the run while it is reserved.** The engineer seeded the body once at launch and never re-reads it, so a comment or edit reaches only human readers, never the running engineer. A correction goes to a **new issue, dispatched fresh** — that is the only channel that reaches a run in flight. Where the forge supports it, ward locks this conversation to make that a road-block rather than a convention (ward#494). <details><summary>run seed context — what this run is carrying (ward#609)</summary> - **Resolved:** `coilyco-flight-deck/ward#687` · branch `issue-687` · harness `codex` · workflow `direct-main` - **Run:** `engineer-codex-ward-687` · ward `v0.466.0` · dispatched `2026-07-08T21:54:55Z` - **Comment thread:** 0 included in the pre-flight read, 1 stripped (ward's own automated comments). - stripped: @coilyco-ops (2026-07-08T18:22:57Z) Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.466.0). </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
Author
Member

Validation pass: this is superseded by #803, which captured the same startup empty-lane prompt in the current director flow and has a WARD-OUTCOME done comment. Closing this older duplicate so the headless lane does not keep redispatching it.

Validation pass: this is superseded by #803, which captured the same startup empty-lane prompt in the current director flow and has a WARD-OUTCOME done comment. Closing this older duplicate so the headless lane does not keep redispatching it.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
coilyco-flight-deck/ward#687
No description provided.