Fix draft release creation and alias coverage after release retag move #1393

Closed
opened 2026-07-15 10:53:50 +00:00 by coilyco-ops · 5 comments
Member

QA follow-up from #1288 / PR #1390. The merged draft-artifact release flow is on main, but the first post-merge promote run that included it failed: run 8479 / actions run #2217, commit 695543d203.

Evidence:

  • #1390 changed .forgejo/workflows/promote.yml so Build and publish draft release artifacts first runs rel_id=$(curl -fsSL ... /releases/tags/${DRAFT_TAG} | node ...) under set -euo pipefail.
  • On a new draft-${sha}, Forgejo returns 404. With curl -f and pipefail, the shell exits before the fallback POST /releases block can create the draft release. This matches the failed promote.yml run 8479 after #1391, which is now blocking the release path for merged PRs #1389, #1390, and #1391.
  • The original #1288 required shape also said release should promote draft artifacts to the public version, release alias, and latest alias. The merged Ward workflow publishes only the versioned Forgejo/GitHub release assets and did not state in the PR body that moving aliases are non-applicable for Ward's binary-only release artifacts.

Acceptance:

  • First-time draft release creation succeeds when draft-${sha} does not already exist.
  • Re-runs remain idempotent when the draft release already exists and when same-named assets already exist.
  • The release alias/latest alias requirement from #1288 is either implemented for any Ward artifact that has such consumers, or explicitly documented as non-applicable with a contract test so future QA does not have to infer it.
  • promote.yml succeeds on the current main SHA and enqueues/satisfies the downstream release path.
  • Add or update release contract tests so the missing-draft 404 path is covered, not only string presence.
QA follow-up from #1288 / PR #1390. The merged draft-artifact release flow is on main, but the first post-merge promote run that included it failed: run 8479 / actions run #2217, commit 695543d2038046334d4bbafb26eecbefe656835c. Evidence: - #1390 changed `.forgejo/workflows/promote.yml` so `Build and publish draft release artifacts` first runs `rel_id=$(curl -fsSL ... /releases/tags/${DRAFT_TAG} | node ...)` under `set -euo pipefail`. - On a new `draft-${sha}`, Forgejo returns 404. With `curl -f` and `pipefail`, the shell exits before the fallback `POST /releases` block can create the draft release. This matches the failed `promote.yml` run 8479 after #1391, which is now blocking the release path for merged PRs #1389, #1390, and #1391. - The original #1288 required shape also said release should promote draft artifacts to the public version, `release` alias, and `latest` alias. The merged Ward workflow publishes only the versioned Forgejo/GitHub release assets and did not state in the PR body that moving aliases are non-applicable for Ward's binary-only release artifacts. Acceptance: - First-time draft release creation succeeds when `draft-${sha}` does not already exist. - Re-runs remain idempotent when the draft release already exists and when same-named assets already exist. - The release alias/latest alias requirement from #1288 is either implemented for any Ward artifact that has such consumers, or explicitly documented as non-applicable with a contract test so future QA does not have to infer it. - `promote.yml` succeeds on the current `main` SHA and enqueues/satisfies the downstream release path. - Add or update release contract tests so the missing-draft 404 path is covered, not only string presence.
Author
Member

DISPATCH-DEFERRED: capacity blocked.

Attempted warded engineer coilyco-flight-deck/ward#1393 --harness codex at 2026-07-15T10:53:59Z. The dispatch broker rejected it because coilyco-flight-deck/ward already has 3 active engineers, which is the repo limit.

Broker evidence: repo engineer limit is reached for coilyco-flight-deck/ward: 3 active engineer(s) (limit 3).

Dispatch log: /Users/kai/.ward/agent-logs/dispatch/20260715T105359Z-director-codex-jp85-coilyco-flight-deck-ward-1393.log.

Retry this dispatch when an engineer slot opens.

DISPATCH-DEFERRED: capacity blocked. Attempted `warded engineer coilyco-flight-deck/ward#1393 --harness codex` at 2026-07-15T10:53:59Z. The dispatch broker rejected it because coilyco-flight-deck/ward already has 3 active engineers, which is the repo limit. Broker evidence: `repo engineer limit is reached for coilyco-flight-deck/ward: 3 active engineer(s) (limit 3)`. Dispatch log: `/Users/kai/.ward/agent-logs/dispatch/20260715T105359Z-director-codex-jp85-coilyco-flight-deck-ward-1393.log`. Retry this dispatch when an engineer slot opens.
Author
Member

DISPATCH-DEFERRED: capacity blocked again on retry.

Retried warded engineer coilyco-flight-deck/ward#1393 --harness codex at 2026-07-15T10:58:56Z after dispatch health briefly showed 2 running engineers. The broker rejected the launch because the repo was back at 3 active engineers by admission time.

Broker evidence: repo engineer limit is reached for coilyco-flight-deck/ward: 3 active engineer(s) (limit 3).

Dispatch log: /Users/kai/.ward/agent-logs/dispatch/20260715T105856Z-director-codex-jp85-coilyco-flight-deck-ward-1393.log.

DISPATCH-DEFERRED: capacity blocked again on retry. Retried `warded engineer coilyco-flight-deck/ward#1393 --harness codex` at 2026-07-15T10:58:56Z after dispatch health briefly showed 2 running engineers. The broker rejected the launch because the repo was back at 3 active engineers by admission time. Broker evidence: `repo engineer limit is reached for coilyco-flight-deck/ward: 3 active engineer(s) (limit 3)`. Dispatch log: `/Users/kai/.ward/agent-logs/dispatch/20260715T105856Z-director-codex-jp85-coilyco-flight-deck-ward-1393.log`.
Author
Member

WARDED_WORKFLOW: reservation-held

reservation details

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

Accepted by ward agent --harness codex (reserved 2026-07-15T11:03:09Z). 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#1393 · branch issue-1393 · harness codex · workflow pull-request-and-merge
  • Run: engineer-codex-ward-1393 · ward v0.710.0 · dispatched 2026-07-15T11:03:02Z
  • Comment thread: 2 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-1393` on host `kais-macbook-pro-2.local`. Accepted by `ward agent --harness codex` (reserved 2026-07-15T11:03:09Z). 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#1393` · branch `issue-1393` · harness `codex` · workflow `pull-request-and-merge` - **Run:** `engineer-codex-ward-1393` · ward `v0.710.0` · dispatched `2026-07-15T11:03:02Z` - **Comment thread:** 2 included in the pre-flight read, 0 stripped (ward's own automated comments). - included: @coilyco-ops (2026-07-15T10:54:41Z), @coilyco-ops (2026-07-15T10:59:52Z) 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: #1401

details

workflow: pull-request-and-merge; review summary: skipped (in-container review gate intentionally skipped because the temporary ward default pending brokered QA)

The fix was surgical: the draft-release lookup now tolerates the missing-release 404 and the release helper is executable in tests.
Confidence is high; the only surprise was the helper initially dying in a subshell cleanup edge.
Follow-up: none unless Forgejo changes its draft-release API shape again.

WARDED_WORKFLOW: https://forgejo.coilysiren.me/coilyco-flight-deck/ward/pulls/1401 <details><summary>details</summary> workflow: pull-request-and-merge; review summary: skipped (in-container review gate intentionally skipped because the temporary ward default pending brokered QA) The fix was surgical: the draft-release lookup now tolerates the missing-release 404 and the release helper is executable in tests. Confidence is high; the only surprise was the helper initially dying in a subshell cleanup edge. Follow-up: none unless Forgejo changes its draft-release API shape again. </details>
Author
Member

QA FAIL after PR #1401 for the full release-path acceptance. Promote recovered: promote.yml run 8495 succeeded for main commit bb4613f2d8, and release.yml started. Release still failed: run 8499 / actions run #2231 failed in job bump-scoop-manifest, step Write ward.json to the scoop bucket and push. The job log reports the sidecar digest for ward-windows-amd64.exe.sha256 was release asset metadata JSON, not a 64-hex sha256 digest. I filed follow-up #1403 with the same labels and attempted dispatch; dispatch is currently capacity-blocked and recorded on #1403.

QA FAIL after PR #1401 for the full release-path acceptance. Promote recovered: promote.yml run 8495 succeeded for main commit bb4613f2d82d72e1701213d22fefdf3451b94083, and release.yml started. Release still failed: run 8499 / actions run #2231 failed in job bump-scoop-manifest, step Write ward.json to the scoop bucket and push. The job log reports the sidecar digest for ward-windows-amd64.exe.sha256 was release asset metadata JSON, not a 64-hex sha256 digest. I filed follow-up #1403 with the same labels and attempted dispatch; dispatch is currently capacity-blocked and recorded on #1403.
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#1393
No description provided.