Prevent replacement PR bodies from closing their own PR number instead of the carried issue #1344

Closed
opened 2026-07-15 07:51:29 +00:00 by coilyco-ops · 2 comments
Member

QA/operations finding from the warded control plane coherence burndown on 2026-07-15.

PR #1293 landed the implementation for issue #1224, but its body said closes #1293 instead of closes #1224. Forgejo merged the PR successfully, but issue #1224 stayed open and was later eligible for another headless reservation even though current main already satisfied the acceptance criteria.

Why this matters:

  • The burndown heartbeat depends on close trailers to prevent already-landed work from being redispatched.
  • Replacement/rebased PRs can have a PR number that differs from the issue number carried by the branch name and issue thread.
  • A self-referential closes #<pr> trailer is operationally wrong and easy to miss during merge pressure.

Acceptance:

  • The agent PR/body generation path uses the carried issue ref, not the PR number, when it emits close trailers.
  • A PR body or merge precheck catches self-referential close trailers like closes #1293 on PR #1293 when the branch/ref carries a different issue.
  • Add focused coverage for a replacement PR carrying issue #1224 but creating PR #1293, or the equivalent modeled case.
  • Document or surface a clear repair path for already-merged PRs whose wrong trailer left the carried issue open.

Observed evidence:

  • ward ops forgejo pr view coilyco-flight-deck ward 1293 shows merged=true and body closes #1293.
  • ward ops forgejo issue view coilyco-flight-deck ward 1224 still showed state=open after the merge.
  • The same issue received a later ward-needs-redispatch reservation-release comment at 2026-07-15T07:48:11Z.

Related:

  • ward#1224
  • ward#1293
QA/operations finding from the warded control plane coherence burndown on 2026-07-15. PR #1293 landed the implementation for issue #1224, but its body said `closes #1293` instead of `closes #1224`. Forgejo merged the PR successfully, but issue #1224 stayed open and was later eligible for another headless reservation even though current `main` already satisfied the acceptance criteria. Why this matters: - The burndown heartbeat depends on close trailers to prevent already-landed work from being redispatched. - Replacement/rebased PRs can have a PR number that differs from the issue number carried by the branch name and issue thread. - A self-referential `closes #<pr>` trailer is operationally wrong and easy to miss during merge pressure. Acceptance: - The agent PR/body generation path uses the carried issue ref, not the PR number, when it emits close trailers. - A PR body or merge precheck catches self-referential close trailers like `closes #1293` on PR #1293 when the branch/ref carries a different issue. - Add focused coverage for a replacement PR carrying issue #1224 but creating PR #1293, or the equivalent modeled case. - Document or surface a clear repair path for already-merged PRs whose wrong trailer left the carried issue open. Observed evidence: - `ward ops forgejo pr view coilyco-flight-deck ward 1293` shows merged=true and body `closes #1293`. - `ward ops forgejo issue view coilyco-flight-deck ward 1224` still showed state=open after the merge. - The same issue received a later `ward-needs-redispatch` reservation-release comment at 2026-07-15T07:48:11Z. Related: - ward#1224 - ward#1293
Author
Member

WARDED_WORKFLOW: reservation-held

reservation details

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

Accepted by ward agent --harness codex (reserved 2026-07-15T07:51:51Z). 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#1344 · branch issue-1344 · harness codex · workflow pull-request-and-merge
  • Run: engineer-codex-ward-1344 · ward v0.710.0 · dispatched 2026-07-15T07:51:45Z
  • 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.710.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-1344` on host `kais-macbook-pro-2.local`. Accepted by `ward agent --harness codex` (reserved 2026-07-15T07:51:51Z). 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#1344` · branch `issue-1344` · harness `codex` · workflow `pull-request-and-merge` - **Run:** `engineer-codex-ward-1344` · ward `v0.710.0` · dispatched `2026-07-15T07:51:45Z` - **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.710.0). </details> </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
Author
Member

WARDED_WORKFLOW: #1348

details

workflow: pull-request-and-merge; review summary: review gate intentionally skipped because the temporary ward default pending brokered QA
felt: the prompt/body split was straightforward once the carried-issue seam was isolated
confidence: high
surprises: the PR display ref and carried issue ref needed to diverge cleanly for continuations
follow-ups: none

WARDED_WORKFLOW: https://forgejo.coilysiren.me/coilyco-flight-deck/ward/pulls/1348 <details><summary>details</summary> workflow: pull-request-and-merge; review summary: review gate intentionally skipped because the temporary ward default pending brokered QA felt: the prompt/body split was straightforward once the carried-issue seam was isolated confidence: high surprises: the PR display ref and carried issue ref needed to diverge cleanly for continuations follow-ups: none </details>
Sign in to join this conversation.
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#1344
No description provided.