Recover PR #1432 empty-diff merge refusal #1435

Closed
opened 2026-07-15 12:39:36 +00:00 by coilyco-ops · 1 comment
Owner

Problem

PR #1432 is green and has a real fetched git diff, but ward agent pr merge coilyco-flight-deck/ward#1432 refuses to call the Forgejo merge endpoint because it concludes the PR already matches main.

Evidence from the director surface on 2026-07-15:

ward agent pr status coilyco-flight-deck/ward#1432
combined status: success

git diff origin/main...pr-1432 --stat
cmd/ward/agent_pr_ci_status.go     | 164 ++++++++++++++++++++++++-------------
cmd/ward/agent_pr_workflow_test.go |  63 ++++++++++++++
docs/agent-pr-status-object.md     |   4 +-
docs/agent-pr-workflow.md          |   2 +-
4 files changed, 172 insertions(+), 61 deletions(-)

ward ops forgejo pr files coilyco-flight-deck ward 1432
# returns the same four changed files

ward ops forgejo pr view coilyco-flight-deck ward 1432
changed_files: 0
head.ref: refs/pull/1432/head
head.sha: 4f682a6f1d53e99249996388d753736d4fb32196
base.sha: 7c7a1ce1728a693e7502dbeefbaa89b51847e638

ward agent pr merge coilyco-flight-deck/ward#1432
pr merge: coilyco-flight-deck/ward#1432 already matches main (empty diff); no Forgejo merge endpoint call needed

The lower-level PR update endpoint is not available from this surface:

ward ops forgejo pr update coilyco-flight-deck ward 1432
POST /pulls/1432/update -> 403 Forbidden

This blocks #1388 even though its PR check is green and local targeted tests passed.

Acceptance

  • Recover #1432 so the #1388 fix either lands on main or is clearly replaced by an equivalent PR with the same code and closing reference.
  • Fix or work around the ward-native merge false positive where changed_files: 0 in the PR summary overrides evidence from pr files / git diff.
  • Preserve head-pinned safety: do not merge a different head than 4f682a6f1d53e99249996388d753736d4fb32196 unless the replacement PR is explicitly created from an updated branch and rechecked.
  • Add regression coverage or exact evidence for PRs whose summary reports changed_files: 0 while the file list and git diff are non-empty.
  • Confirm #1388 is closed only after the PR contents are on main.

Related: #1388, #1432.

## Problem PR #1432 is green and has a real fetched git diff, but `ward agent pr merge coilyco-flight-deck/ward#1432` refuses to call the Forgejo merge endpoint because it concludes the PR already matches main. Evidence from the director surface on 2026-07-15: ```text ward agent pr status coilyco-flight-deck/ward#1432 combined status: success git diff origin/main...pr-1432 --stat cmd/ward/agent_pr_ci_status.go | 164 ++++++++++++++++++++++++------------- cmd/ward/agent_pr_workflow_test.go | 63 ++++++++++++++ docs/agent-pr-status-object.md | 4 +- docs/agent-pr-workflow.md | 2 +- 4 files changed, 172 insertions(+), 61 deletions(-) ward ops forgejo pr files coilyco-flight-deck ward 1432 # returns the same four changed files ward ops forgejo pr view coilyco-flight-deck ward 1432 changed_files: 0 head.ref: refs/pull/1432/head head.sha: 4f682a6f1d53e99249996388d753736d4fb32196 base.sha: 7c7a1ce1728a693e7502dbeefbaa89b51847e638 ward agent pr merge coilyco-flight-deck/ward#1432 pr merge: coilyco-flight-deck/ward#1432 already matches main (empty diff); no Forgejo merge endpoint call needed ``` The lower-level PR update endpoint is not available from this surface: ```text ward ops forgejo pr update coilyco-flight-deck ward 1432 POST /pulls/1432/update -> 403 Forbidden ``` This blocks #1388 even though its PR check is green and local targeted tests passed. ## Acceptance - Recover #1432 so the #1388 fix either lands on main or is clearly replaced by an equivalent PR with the same code and closing reference. - Fix or work around the ward-native merge false positive where `changed_files: 0` in the PR summary overrides evidence from `pr files` / git diff. - Preserve head-pinned safety: do not merge a different head than `4f682a6f1d53e99249996388d753736d4fb32196` unless the replacement PR is explicitly created from an updated branch and rechecked. - Add regression coverage or exact evidence for PRs whose summary reports `changed_files: 0` while the file list and git diff are non-empty. - Confirm #1388 is closed only after the PR contents are on `main`. Related: #1388, #1432.
Author
Owner

WARDED_WORKFLOW: reservation-held

reservation details

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

Accepted by ward agent --harness codex (reserved 2026-07-15T12:40:22Z). 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#1435 · branch issue-1435 · harness codex · workflow pull-request-and-merge
  • Run: engineer-codex-ward-1435 · ward v0.710.0 · dispatched 2026-07-15T12:40:05Z
  • 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-1435` on host `kais-macbook-pro-2.local`. Accepted by `ward agent --harness codex` (reserved 2026-07-15T12:40:22Z). 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#1435` · branch `issue-1435` · harness `codex` · workflow `pull-request-and-merge` - **Run:** `engineer-codex-ward-1435` · ward `v0.710.0` · dispatched `2026-07-15T12:40:05Z` - **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`
Commenting is not possible because the repository is archived.
No project
No assignees
1 participant
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#1435
No description provided.