Make dev-base image publishing resumable and retryable #565

Closed
opened 2026-07-15 07:14:52 +00:00 by coilyco-ops · 7 comments
Member

The current dev-base publish path is too brittle for the size and cost of the image family. A transient failure in one tier can force a full retrigger path, and Forgejo cannot reliably rerun failed jobs from this surface.\n\nImprove the image publish workflow without changing the requested release-ref decoupling from issue 564:\n\n* make each dev-base tier independently dispatchable with inputs for sha, tier, tag, mode, and source tag where relevant.\n* before building or retagging a tier, verify whether the exact target manifest already exists and skip it when it is already correct.\n* add a durable per-tier checkpoint signal through package tags, artifacts, or another repo-native marker so a resumed run can continue from completed tiers.\n* add bounded retries around transient operations: registry login, manifest inspect, buildx push, buildcache probe, and promote or retag operations.\n* preserve the tier DAG, but make a rerun cost the failed tier and its dependents, not a full from-scratch release train.\n* make Telegram alerts non-blocking so an alert transport failure cannot mask or create a release failure.\n\nOut of scope: do not add a summarize-publish job, and do not create broad ::error:: diagnostic-message churn as part of this issue.

The current dev-base publish path is too brittle for the size and cost of the image family. A transient failure in one tier can force a full retrigger path, and Forgejo cannot reliably rerun failed jobs from this surface.\n\nImprove the image publish workflow without changing the requested release-ref decoupling from issue 564:\n\n* make each dev-base tier independently dispatchable with inputs for sha, tier, tag, mode, and source tag where relevant.\n* before building or retagging a tier, verify whether the exact target manifest already exists and skip it when it is already correct.\n* add a durable per-tier checkpoint signal through package tags, artifacts, or another repo-native marker so a resumed run can continue from completed tiers.\n* add bounded retries around transient operations: registry login, manifest inspect, buildx push, buildcache probe, and promote or retag operations.\n* preserve the tier DAG, but make a rerun cost the failed tier and its dependents, not a full from-scratch release train.\n* make Telegram alerts non-blocking so an alert transport failure cannot mask or create a release failure.\n\nOut of scope: do not add a summarize-publish job, and do not create broad ::error:: diagnostic-message churn as part of this issue.
Author
Member

WARDED_WORKFLOW: reservation-held

reservation details

Holder: launch intent for container engineer-codex-agentic-os-565 on host kais-macbook-pro-2.local.

Accepted by ward agent --harness codex (reserved 2026-07-15T07:16:13Z). 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/agentic-os#565 · branch issue-565 · harness codex · workflow pull-request-and-merge
  • Run: engineer-codex-agentic-os-565 · ward v0.697.0 · dispatched 2026-07-15T07:16:00Z
  • 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.697.0).

— Codex, via ward agent

<!-- ward-agent-reservation --> WARDED_WORKFLOW: reservation-held <details><summary>reservation details</summary> Holder: launch intent for container `engineer-codex-agentic-os-565` on host `kais-macbook-pro-2.local`. Accepted by `ward agent --harness codex` (reserved 2026-07-15T07:16:13Z). 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/agentic-os#565` · branch `issue-565` · harness `codex` · workflow `pull-request-and-merge` - **Run:** `engineer-codex-agentic-os-565` · ward `v0.697.0` · dispatched `2026-07-15T07:16:00Z` - **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.697.0). </details> </details> <!-- ward-agent-signature --> — Codex, via `ward agent`
Author
Member

WARDED_WORKFLOW: #567

details

workflow: pull-request-and-merge; review summary: skipped (in-container review gate intentionally skipped because temporary ward default pending brokered QA)
felt: steady, mostly workflow hardening and doc shaping
confidence: high
surprises: the doc size cap forced a second pass
follow-ups: director merge and final done outcome

WARDED_WORKFLOW: https://forgejo.coilysiren.me/coilyco-flight-deck/agentic-os/pulls/567 <details><summary>details</summary> workflow: pull-request-and-merge; review summary: skipped (in-container review gate intentionally skipped because temporary ward default pending brokered QA) felt: steady, mostly workflow hardening and doc shaping confidence: high surprises: the doc size cap forced a second pass follow-ups: director merge and final done outcome </details>
Author
Member

WARDED_WORKFLOW: blocked 🛑

details

workflow: pull-request-and-merge; review summary: skipped (in-container review gate intentionally skipped because temporary ward default pending brokered QA)
blocker: Forgejo merge stayed on 405 after repeated retries while the PR stayed green
reservation-lock: released and handed back
felt: the implementation landed cleanly, the merge surface did not
confidence: medium
surprises: the only failure left was the Forgejo merge endpoint
follow-ups: retry the merge from a surface with queue access or after the Forgejo merge queue clears

WARDED_WORKFLOW: blocked 🛑 <details><summary>details</summary> workflow: pull-request-and-merge; review summary: skipped (in-container review gate intentionally skipped because temporary ward default pending brokered QA) blocker: Forgejo merge stayed on 405 after repeated retries while the PR stayed green reservation-lock: released and handed back felt: the implementation landed cleanly, the merge surface did not confidence: medium surprises: the only failure left was the Forgejo merge endpoint follow-ups: retry the merge from a surface with queue access or after the Forgejo merge queue clears </details>
Author
Member

WARDED_WORKFLOW: reservation-held

reservation details

Holder: launch intent for container engineer-codex-agentic-os-565 on host 74a70515a491.

Accepted by ward agent --harness codex (reserved 2026-07-15T09:00:56Z). 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/agentic-os#565 · branch issue-565 · harness codex · workflow pull-request-and-merge
  • Run: engineer-codex-agentic-os-565 · ward v0.710.0 · dispatched 2026-07-15T09:00:53Z
  • 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.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-agentic-os-565` on host `74a70515a491`. Accepted by `ward agent --harness codex` (reserved 2026-07-15T09:00:56Z). 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/agentic-os#565` · branch `issue-565` · harness `codex` · workflow `pull-request-and-merge` - **Run:** `engineer-codex-agentic-os-565` · ward `v0.710.0` · dispatched `2026-07-15T09:00:53Z` - **Comment thread:** 2 included in the pre-flight read, 1 stripped (ward's own automated comments). - included: @coilyco-ops (2026-07-15T07:42:39Z), @coilyco-ops (2026-07-15T07:46:39Z) - stripped: @coilyco-ops (2026-07-15T07:16:14Z) 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: dispatch-deferred

launch failure details

The PR repair run never started. warded engineer coilyco-flight-deck/agentic-os#565 --harness codex --branch issue-565 --workflow pull-request-and-merge failed before container creation because forgejo.coilysiren.me/coilyco-flight-deck/agentic-os-full:latest was unavailable remotely and no local image existed. Docker has no engineer-codex-agentic-os-565 container. No repository work was performed.

The reservation is released for redispatch from a fresh director. The repair target remains existing green-but-unmergeable PR #567: update issue-565 onto current main, preserve the resumable publishing changes, rerun checks, and land it.

  • Codex, via ward agent
WARDED_WORKFLOW: dispatch-deferred <details><summary>launch failure details</summary> The PR repair run never started. `warded engineer coilyco-flight-deck/agentic-os#565 --harness codex --branch issue-565 --workflow pull-request-and-merge` failed before container creation because `forgejo.coilysiren.me/coilyco-flight-deck/agentic-os-full:latest` was unavailable remotely and no local image existed. Docker has no `engineer-codex-agentic-os-565` container. No repository work was performed. The reservation is released for redispatch from a fresh director. The repair target remains existing green-but-unmergeable PR #567: update `issue-565` onto current `main`, preserve the resumable publishing changes, rerun checks, and land it. </details> <!-- ward-agent-signature --> - Codex, via `ward agent`
Author
Member

Current release recovery hit this blocker directly. On release head d1ca18e7e53ed1918f0f0571f374a53985a21ed9:

  • dev-base-publish.yml run 1401 failed.
  • plan-draft succeeded.
  • publish-core failed after 17m17s.
  • The failing step was ./actions/publish-dev-base-tier, duration 16m17s.
  • publish-lang-node, publish-lang-go, publish-lang-dotnet, publish-ops, publish-agent, and publish-full stayed blocked.

PR #567 is green but the brokered merge attempt hit Forgejo 405 "Please try again later". This issue remains on the active release path.

Current release recovery hit this blocker directly. On release head `d1ca18e7e53ed1918f0f0571f374a53985a21ed9`: * `dev-base-publish.yml` run `1401` failed. * `plan-draft` succeeded. * `publish-core` failed after 17m17s. * The failing step was `./actions/publish-dev-base-tier`, duration 16m17s. * `publish-lang-node`, `publish-lang-go`, `publish-lang-dotnet`, `publish-ops`, `publish-agent`, and `publish-full` stayed blocked. PR #567 is green but the brokered merge attempt hit Forgejo 405 "Please try again later". This issue remains on the active release path.
Author
Member

Completed by merged replacement PR #579. It lands the resumable/retryable dev-base publication behavior on current main together with the release-retag wait from #574. Stale PRs #567 and #577 are closed as superseded. Closing this source issue; post-merge main CI run 8428 is tracked separately.

Completed by merged replacement PR #579. It lands the resumable/retryable dev-base publication behavior on current main together with the release-retag wait from #574. Stale PRs #567 and #577 are closed as superseded. Closing this source issue; post-merge main CI run 8428 is tracked separately.
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/agentic-os#565
No description provided.