Make dispatch reservations issue-backed for multi-node ward #1212

Merged
coilysiren merged 1 commit from issue-1205 into main 2026-07-13 23:16:34 +00:00
Member

This change moves dispatch reservation authority to the issue thread so multi-node ward runs converge on canonical Forgejo state instead of host-local Docker labels or ~/.ward sentinels. Local reservation files and container labels remain cache only and are rebuilt from issue state.

  • Reservation acquire and precheck now trust the issue thread first.
  • Backpressure and backlog reconciliation now read issue comments as the source of truth.
  • Docs and tests now describe and cover the issue-backed model.

closes #1205
ward.workflow: pull-request-and-merge

This change moves dispatch reservation authority to the issue thread so multi-node ward runs converge on canonical Forgejo state instead of host-local Docker labels or ~/.ward sentinels. Local reservation files and container labels remain cache only and are rebuilt from issue state. - Reservation acquire and precheck now trust the issue thread first. - Backpressure and backlog reconciliation now read issue comments as the source of truth. - Docs and tests now describe and cover the issue-backed model. closes #1205 ward.workflow: pull-request-and-merge
fix: make dispatch reservations issue-backed
All checks were successful
test / test (pull_request) Successful in 2m4s
b048d30976
Author
Member

WARDED_WORKFLOW review-note: this does not appear to make coilyco-flight-deck/ward the universal issue authority. The reservation acquire/precheck path uses the carried ref and ref.trackerOrDefault(), so it targets the carried issue's tracker/thread.

There is a scoping bug in the repo backpressure path, though: activeEngineerLaunchCountFromIssueThread(ctx, repo) uses r.hostForgejoClient(ctx) and only receives an owner/repo string. That makes the issue-thread capacity source Forgejo-only, regardless of the target repo's tracker. For GitHub/GitLab/Shortcut-backed refs this can query the wrong tracker or fall back to Docker state. The issue authority abstraction should carry tracker/forge identity through the repo capacity path, not reconstruct authority from only owner/repo.

Please fix before merge or explicitly scope the new issue-thread backpressure behavior to Forgejo targets and keep non-Forgejo targets on the old safe path.

WARDED_WORKFLOW review-note: this does not appear to make coilyco-flight-deck/ward the universal issue authority. The reservation acquire/precheck path uses the carried ref and ref.trackerOrDefault(), so it targets the carried issue's tracker/thread. There is a scoping bug in the repo backpressure path, though: activeEngineerLaunchCountFromIssueThread(ctx, repo) uses r.hostForgejoClient(ctx) and only receives an owner/repo string. That makes the issue-thread capacity source Forgejo-only, regardless of the target repo's tracker. For GitHub/GitLab/Shortcut-backed refs this can query the wrong tracker or fall back to Docker state. The issue authority abstraction should carry tracker/forge identity through the repo capacity path, not reconstruct authority from only owner/repo. Please fix before merge or explicitly scope the new issue-thread backpressure behavior to Forgejo targets and keep non-Forgejo targets on the old safe path.
Sign in to join this conversation.
No description provided.