Broker should comment failed forwarded dispatches back to the issue #689

Closed
opened 2026-07-08 19:28:41 +00:00 by coilyco-ops · 4 comments
Member

Bug

A director-surface dispatch can fail after the broker reports that it forwarded the run, but the broker does not comment the failure back to the issue. The issue is left looking reserved even though no useful engineer is carrying it.

Reproduction observed on 2026-07-08

From a read-only director surface, the director ran:

warded coilyco-bridge/agentic-os-kai#720

The local output was only:

ward dispatch broker: forwarded `ward agent engineer coilyco-bridge/agentic-os-kai#720 --harness claude` to host ward (run output on the host at /Users/kai/.ward/agent-logs/dispatch/20260708T192521Z-session-codex-12afd722-coilyco-bridge-agentic-os-kai-720.log)

But Claude engineers were down. The issue thread at coilyco-bridge/agentic-os-kai#720 still gained a Claude reservation comment and no failure comment. A later ward agent stop coilyco-bridge/agentic-os-kai#720 found no running engineer by issue labels; ward agent stop engineer-claude-agentic-os-kai-720 also found no running container. The director had to force a Codex rerun manually:

warded coilyco-bridge/agentic-os-kai#720 --harness codex --force

That produced a second reservation comment, this time for engineer-codex-agentic-os-kai-720.

Expected behavior

If the host-side broker or launched harness detects that a dispatch failed after reservation, ward should write a failure comment to the issue and clear or supersede the stale reservation signal. The director surface should not have to infer failure from out-of-band host logs.

At minimum, the issue thread should show:

  • the attempted harness and run/container name
  • that the dispatch failed
  • whether a container was ever created
  • the host log path if available
  • the recommended retry shape, such as choosing another harness or using --force when the reservation is stale

Acceptance

  • Reproduce a host-side harness startup failure after reservation.
  • Add broker/reaper/error-path handling so the issue gets a visible failure comment when dispatch does not produce a running engineer.
  • Avoid leaving a reservation comment as the last visible state for a failed launch.
  • Add regression coverage for the director-surface forwarded-dispatch path.
  • Validate with ward exec test.

Filed from the read-only director surface after coilyco-bridge/agentic-os-kai#720 exposed the missing failure comment.

## Bug A director-surface dispatch can fail after the broker reports that it forwarded the run, but the broker does not comment the failure back to the issue. The issue is left looking reserved even though no useful engineer is carrying it. ## Reproduction observed on 2026-07-08 From a read-only director surface, the director ran: ```text warded coilyco-bridge/agentic-os-kai#720 ``` The local output was only: ```text ward dispatch broker: forwarded `ward agent engineer coilyco-bridge/agentic-os-kai#720 --harness claude` to host ward (run output on the host at /Users/kai/.ward/agent-logs/dispatch/20260708T192521Z-session-codex-12afd722-coilyco-bridge-agentic-os-kai-720.log) ``` But Claude engineers were down. The issue thread at coilyco-bridge/agentic-os-kai#720 still gained a Claude reservation comment and no failure comment. A later `ward agent stop coilyco-bridge/agentic-os-kai#720` found no running engineer by issue labels; `ward agent stop engineer-claude-agentic-os-kai-720` also found no running container. The director had to force a Codex rerun manually: ```text warded coilyco-bridge/agentic-os-kai#720 --harness codex --force ``` That produced a second reservation comment, this time for `engineer-codex-agentic-os-kai-720`. ## Expected behavior If the host-side broker or launched harness detects that a dispatch failed after reservation, ward should write a failure comment to the issue and clear or supersede the stale reservation signal. The director surface should not have to infer failure from out-of-band host logs. At minimum, the issue thread should show: * the attempted harness and run/container name * that the dispatch failed * whether a container was ever created * the host log path if available * the recommended retry shape, such as choosing another harness or using `--force` when the reservation is stale ## Acceptance * Reproduce a host-side harness startup failure after reservation. * Add broker/reaper/error-path handling so the issue gets a visible failure comment when dispatch does not produce a running engineer. * Avoid leaving a reservation comment as the last visible state for a failed launch. * Add regression coverage for the director-surface forwarded-dispatch path. * Validate with `ward exec test`. Filed from the read-only director surface after coilyco-bridge/agentic-os-kai#720 exposed the missing failure comment.
Author
Member

🔒 Reserved by ward agent --harness codex — container engineer-codex-ward-689 on host kais-macbook-pro-2.local is carrying this issue (reserved 2026-07-08T19:28:46Z). 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#689 · branch issue-689 · harness codex · workflow direct-main
  • Run: engineer-codex-ward-689 · ward v0.463.0 · dispatched 2026-07-08T19:28:46Z
  • 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).

— Codex, via ward agent

<!-- ward-agent-reservation --> 🔒 Reserved by `ward agent --harness codex` — container `engineer-codex-ward-689` on host `kais-macbook-pro-2.local` is carrying this issue (reserved 2026-07-08T19:28:46Z). 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#689` · branch `issue-689` · harness `codex` · workflow `direct-main` - **Run:** `engineer-codex-ward-689` · ward `v0.463.0` · dispatched `2026-07-08T19:28:46Z` - **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 --> — Codex, via `ward agent`
Author
Member

🔒 Reserved by ward agent --harness codex — container engineer-codex-ward-689 on host kais-macbook-pro-2.local is carrying this issue (reserved 2026-07-08T21:56:06Z). 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#689 · branch issue-689 · harness codex · workflow direct-main
  • Run: engineer-codex-ward-689 · ward v0.466.0 · dispatched 2026-07-08T21:56:06Z
  • 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-689` on host `kais-macbook-pro-2.local` is carrying this issue (reserved 2026-07-08T21:56:06Z). 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#689` · branch `issue-689` · harness `codex` · workflow `direct-main` - **Run:** `engineer-codex-ward-689` · ward `v0.466.0` · dispatched `2026-07-08T21:56:06Z` - **Comment thread:** 0 included in the pre-flight read, 1 stripped (ward's own automated comments). - stripped: @coilyco-ops (2026-07-08T19:28:48Z) 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

WARD-RESERVATION: held 🔒

reservation details

Holder: container engineer-codex-ward-689 on host kais-macbook-pro-2.local.

Reserved by ward agent --harness codex (reserved 2026-07-09T21:52:25Z). 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#689 · branch issue-689 · harness codex · workflow direct-to-main
  • Run: engineer-codex-ward-689 · ward v0.522.0 · dispatched 2026-07-09T21:52:25Z
  • Comment thread: 0 included in the pre-flight read, 2 stripped (ward's own automated comments).

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

— Codex, via ward agent

<!-- ward-agent-reservation --> WARD-RESERVATION: held 🔒 <details><summary>reservation details</summary> Holder: container `engineer-codex-ward-689` on host `kais-macbook-pro-2.local`. Reserved by `ward agent --harness codex` (reserved 2026-07-09T21:52:25Z). 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#689` · branch `issue-689` · harness `codex` · workflow `direct-to-main` - **Run:** `engineer-codex-ward-689` · ward `v0.522.0` · dispatched `2026-07-09T21:52:25Z` - **Comment thread:** 0 included in the pre-flight read, 2 stripped (ward's own automated comments). - stripped: @coilyco-ops (2026-07-08T19:28:48Z), @coilyco-ops (2026-07-08T21:56:07Z) Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.522.0). </details> </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
Author
Member

WARD-OUTCOME: done

details workflow: direct-to-main; review summary: skipped because review gate skipped by ~/.ward/config.yaml default retrospective: the fix was narrow, but the commit hook exposed repo-local comment-width rules and temp-space pressure before it landed cleanly. confidence: high surprises: the hook wanted a shorter code comment, and the container had a shared cache that needed cleanup before commit. follow-ups: watch the pushed Forgejo CI run and confirm the broker failure comment shows on a real forwarded-dispatch failure.
WARD-OUTCOME: done <details><summary>details</summary> workflow: direct-to-main; review summary: skipped because review gate skipped by ~/.ward/config.yaml default retrospective: the fix was narrow, but the commit hook exposed repo-local comment-width rules and temp-space pressure before it landed cleanly. confidence: high surprises: the hook wanted a shorter code comment, and the container had a shared cache that needed cleanup before commit. follow-ups: watch the pushed Forgejo CI run and confirm the broker failure comment shows on a real forwarded-dispatch failure. </details>
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#689
No description provided.