Make PR-and-merge URL headers preserve merge-ready gating #1221

Closed
opened 2026-07-14 00:25:13 +00:00 by coilyco-ops · 5 comments
Member

PR 1220 replaced the plain submitted marker with a WARDED_WORKFLOW URL for pull-request runs, but it left the review-gated pull-request-and-merge path on WARDED_WORKFLOW: merge-ready. That keeps today's director merge gate working, but it misses the issue 1194 contract that every PR handoff starts with the canonical PR URL.

Evidence from the merged code:

  • cmd/ward/agent.go:336 only swaps to workflowOutcomeLinkMarker for workflowPullRequest or workflowPullRequestAndMerge && !reviewGate.
  • cmd/ward/agent_workflow.go:281 still returns merge-ready for review-gated pull-request-and-merge.
  • cmd/ward/agent_workflow_test.go:199 asserts WARDED_WORKFLOW: merge-ready for the review-gated PR-and-merge seed, so the current tests lock in the contract miss.
  • cmd/ward/agent_director_merge.go:376 still requires meta.Outcome.Status == "merge-ready", so a plain URL outcome would currently be treated as submitted and denied for director merge.

Required behavior:

  • Review-gated pull-request-and-merge issue comments should expose the canonical PR URL on the first machine-readable line.
  • Director merge authorization still needs a distinct reviewed-and-ready signal. Add that signal in structured details or parser metadata instead of using a non-URL first line.
  • Keep legacy WARDED_WORKFLOW: merge-ready and WARD-OUTCOME: merge-ready parsing for existing issue threads.
  • Update director merge gating, queue/dispatch health, docs, and tests so PR URL headers and merge-ready authorization both survive.

Acceptance:

  • New review-gated pull-request-and-merge seeds instruct the engineer to post WARDED_WORKFLOW: https://forgejo.coilysiren.me/.../pulls/N as the first visible line.
  • A passed review-gated PR-and-merge run remains eligible for director merge after posting a URL header.
  • Skipped-review PR-and-merge runs remain ineligible for director merge.
  • Tests cover URL-headed PR-and-merge comments with passed review, skipped review, and legacy merge-ready comments.
PR 1220 replaced the plain submitted marker with a `WARDED_WORKFLOW` URL for pull-request runs, but it left the review-gated `pull-request-and-merge` path on `WARDED_WORKFLOW: merge-ready`. That keeps today's director merge gate working, but it misses the issue 1194 contract that every PR handoff starts with the canonical PR URL. Evidence from the merged code: - `cmd/ward/agent.go:336` only swaps to `workflowOutcomeLinkMarker` for `workflowPullRequest` or `workflowPullRequestAndMerge && !reviewGate`. - `cmd/ward/agent_workflow.go:281` still returns `merge-ready` for review-gated `pull-request-and-merge`. - `cmd/ward/agent_workflow_test.go:199` asserts `WARDED_WORKFLOW: merge-ready` for the review-gated PR-and-merge seed, so the current tests lock in the contract miss. - `cmd/ward/agent_director_merge.go:376` still requires `meta.Outcome.Status == "merge-ready"`, so a plain URL outcome would currently be treated as submitted and denied for director merge. Required behavior: - Review-gated `pull-request-and-merge` issue comments should expose the canonical PR URL on the first machine-readable line. - Director merge authorization still needs a distinct reviewed-and-ready signal. Add that signal in structured details or parser metadata instead of using a non-URL first line. - Keep legacy `WARDED_WORKFLOW: merge-ready` and `WARD-OUTCOME: merge-ready` parsing for existing issue threads. - Update director merge gating, queue/dispatch health, docs, and tests so PR URL headers and merge-ready authorization both survive. Acceptance: - New review-gated `pull-request-and-merge` seeds instruct the engineer to post `WARDED_WORKFLOW: https://forgejo.coilysiren.me/.../pulls/N` as the first visible line. - A passed review-gated PR-and-merge run remains eligible for director merge after posting a URL header. - Skipped-review PR-and-merge runs remain ineligible for director merge. - Tests cover URL-headed PR-and-merge comments with passed review, skipped review, and legacy merge-ready comments.
Author
Member

WARDED_WORKFLOW: reservation-held

reservation details

Holder: launch intent for container engineer-codex-ward-1221 on host kais-macbook-pro-2.local.

Accepted by ward agent --harness codex (reserved 2026-07-14T09:48:24Z). Concurrent ward agent runs are blocked until this intent becomes visible or the intent is released. The stale-intent fallback is still TTL-bounded (3h TTL). --override-reservation 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#1221 · branch issue-1221 · harness codex · workflow pull-request-and-merge
  • Run: engineer-codex-ward-1221 · ward v0.672.0 · dispatched 2026-07-14T09:48:21Z
  • 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.672.0).

— Codex, via ward agent

<!-- ward-agent-reservation --> WARDED_WORKFLOW: reservation-held <details><summary>reservation details</summary> Holder: launch intent for container `engineer-codex-ward-1221` on host `kais-macbook-pro-2.local`. Accepted by `ward agent --harness codex` (reserved 2026-07-14T09:48:24Z). Concurrent `ward agent` runs are blocked until this intent becomes visible or the intent is released. The stale-intent fallback is still TTL-bounded (3h TTL). `--override-reservation` 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#1221` · branch `issue-1221` · harness `codex` · workflow `pull-request-and-merge` - **Run:** `engineer-codex-ward-1221` · ward `v0.672.0` · dispatched `2026-07-14T09:48:21Z` - **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.672.0). </details> </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
Author
Member

WARDED_WORKFLOW: #1267

details

workflow: pull-request-and-merge; review summary: review gate was intentionally skipped because review gate skipped by ~/.ward/config.yaml default

felt: the parser and queue changes were local, but the docs caps forced a couple of size trims.
confidence: high
surprises: the Forgejo PR URL tests needed the exact canonical host shape.
follow-ups: none.

WARDED_WORKFLOW: https://forgejo.coilysiren.me/coilyco-flight-deck/ward/pulls/1267 <details><summary>details</summary> workflow: pull-request-and-merge; review summary: review gate was intentionally skipped because review gate skipped by ~/.ward/config.yaml default felt: the parser and queue changes were local, but the docs caps forced a couple of size trims. confidence: high surprises: the Forgejo PR URL tests needed the exact canonical host shape. follow-ups: none. </details>
Author
Member

Director burn-down update from 2026-07-14: PR #1267 is open but Forgejo reports mergeable: false. ward ops forgejo pr update coilyco-flight-deck ward 1267 returned 409 Conflict with merge failed because of conflict, so this branch needs repair once the dispatch broker is reachable again.

Director burn-down update from 2026-07-14: PR #1267 is open but Forgejo reports `mergeable: false`. `ward ops forgejo pr update coilyco-flight-deck ward 1267` returned 409 Conflict with `merge failed because of conflict`, so this branch needs repair once the dispatch broker is reachable again.
Author
Member

WARDED_WORKFLOW: reservation-held

reservation details

Holder: launch intent for container engineer-codex-ward-1221 on host kais-macbook-pro-2.local.

Accepted by ward agent --harness codex (reserved 2026-07-14T11:51:49Z). Concurrent ward agent runs are blocked until this intent becomes visible or the intent is released. The stale-intent fallback is still TTL-bounded (3h TTL). --override-reservation 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#1221 · branch issue-1221 · harness codex · workflow pull-request-and-merge
  • Run: engineer-codex-ward-1221 · ward v0.679.0 · dispatched 2026-07-14T11:51:42Z
  • Comment thread: 2 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.679.0).

— Codex, via ward agent

<!-- ward-agent-reservation --> WARDED_WORKFLOW: reservation-held <details><summary>reservation details</summary> Holder: launch intent for container `engineer-codex-ward-1221` on host `kais-macbook-pro-2.local`. Accepted by `ward agent --harness codex` (reserved 2026-07-14T11:51:49Z). Concurrent `ward agent` runs are blocked until this intent becomes visible or the intent is released. The stale-intent fallback is still TTL-bounded (3h TTL). `--override-reservation` 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#1221` · branch `issue-1221` · harness `codex` · workflow `pull-request-and-merge` - **Run:** `engineer-codex-ward-1221` · ward `v0.679.0` · dispatched `2026-07-14T11:51:42Z` - **Comment thread:** 2 included in the pre-flight read, 1 stripped (ward's own automated comments). - included: @coilyco-ops (2026-07-14T10:06:48Z), @coilyco-ops (2026-07-14T10:07:57Z) - stripped: @coilyco-ops (2026-07-14T09:48:25Z) Static container doctrine and seed boilerplate are identical every run and omitted here (they ride ward v0.679.0). </details> </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
Author
Member

WARDED_WORKFLOW: #1267

details

workflow: pull-request-and-merge; review summary: review gate was intentionally skipped because review gate skipped by ~/.ward/config.yaml default
felt: the branch repair was mostly mechanical after the main merge, with the docs cap being the only surprise.
confidence: high
surprises: the PR-workflow page needed a size split after the main integration.
follow-ups: none.

WARDED_WORKFLOW: https://forgejo.coilysiren.me/coilyco-flight-deck/ward/pulls/1267 <details><summary>details</summary> workflow: pull-request-and-merge; review summary: review gate was intentionally skipped because review gate skipped by ~/.ward/config.yaml default felt: the branch repair was mostly mechanical after the main merge, with the docs cap being the only surprise. confidence: high surprises: the PR-workflow page needed a size split after the main integration. follow-ups: none. </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#1221
No description provided.