Move release publishing to draft artifacts plus release retag #1288

Closed
opened 2026-07-14 15:56:08 +00:00 by coilyco-ops · 3 comments
Member

Context:
agentic-os moved its release publish shape to a draft publish plus release retag model.

Target shape:

  • main runs the repo gate and publishes commit-scoped draft artifacts, such as draft-${sha}.
  • release is fast-forwarded only after the draft publish succeeds.
  • the release workflow computes semver, promotes the draft artifact to vX.Y.Z, release, and latest, then creates the public tag or release.
  • draft tags are disposable and should be covered by Forgejo package cleanup rules.
  • latest is a compatibility alias for release, not a revival of retired package names.

Scope:

  • Audit ward release, package, image, and binary publishing workflows for publish work currently happening on release.
  • Move expensive build or publish work to main as draft artifacts.
  • Keep release branch work to promotion, retagging, final verification, release asset publication, and public release creation.
  • Preserve ward-specific release contracts, including any brew, binary, spec-bundle, or container consumers.
  • Add tests and docs that pin the new contract.

Non-goals:

  • Do not implement in the issue filing pass.
  • Do not resurrect retired package names.
  • Do not let release branch heavy publish decide whether main was good enough to promote.

References:

  • agentic-os commit 4d13736, Stage dev-base draft publishes before release.
  • agentic-os#534 tracks package cleanup coverage for draft tags.

Decision for headless carry

Use the agentic-os draft-publish then release-retag shape as the target. This issue is implementation-shaped now.

Required shape:

  • Main runs the repo gate and creates commit-scoped draft artifacts.
  • Release fast-forwards only after draft artifacts exist.
  • Release promotes draft artifacts to the public version, release alias, and latest alias.
  • Heavy build or publish work should not be repeated on the release branch.
  • Keep ward-specific consumers working, including brew, binary assets, spec bundles, and container image consumers.
  • Add docs or workflow comments that describe the new contract.

If a ward artifact cannot be converted in the first pass, the engineer should leave it explicit in the PR body and file a follow-up rather than blocking the entire issue.

Context: agentic-os moved its release publish shape to a draft publish plus release retag model. Target shape: - main runs the repo gate and publishes commit-scoped draft artifacts, such as draft-${sha}. - release is fast-forwarded only after the draft publish succeeds. - the release workflow computes semver, promotes the draft artifact to vX.Y.Z, release, and latest, then creates the public tag or release. - draft tags are disposable and should be covered by Forgejo package cleanup rules. - latest is a compatibility alias for release, not a revival of retired package names. Scope: - Audit ward release, package, image, and binary publishing workflows for publish work currently happening on release. - Move expensive build or publish work to main as draft artifacts. - Keep release branch work to promotion, retagging, final verification, release asset publication, and public release creation. - Preserve ward-specific release contracts, including any brew, binary, spec-bundle, or container consumers. - Add tests and docs that pin the new contract. Non-goals: - Do not implement in the issue filing pass. - Do not resurrect retired package names. - Do not let release branch heavy publish decide whether main was good enough to promote. References: - agentic-os commit 4d13736, Stage dev-base draft publishes before release. - agentic-os#534 tracks package cleanup coverage for draft tags. --- ## Decision for headless carry Use the agentic-os draft-publish then release-retag shape as the target. This issue is implementation-shaped now. Required shape: * Main runs the repo gate and creates commit-scoped draft artifacts. * Release fast-forwards only after draft artifacts exist. * Release promotes draft artifacts to the public version, release alias, and latest alias. * Heavy build or publish work should not be repeated on the release branch. * Keep ward-specific consumers working, including brew, binary assets, spec bundles, and container image consumers. * Add docs or workflow comments that describe the new contract. If a ward artifact cannot be converted in the first pass, the engineer should leave it explicit in the PR body and file a follow-up rather than blocking the entire issue.
Author
Member

WARD-TRIAGE: warded control plane coherence milestone

This issue is part of the warded control plane coherence sprint. The release thesis is to make warded feel like one dependable control plane for agent work: higher safe parallelism, coherent config defaults, reliable broker/container behavior, human-feedback gates, and enough structured evidence for the next actor after a paused or failed run.

For this sprint, headless means an engineer should be able to carry the issue from current issue context to a merged change without new human decisions. If the issue discovers a missing decision, split or demote the unclear part instead of guessing.

WARD-TRIAGE: warded control plane coherence milestone This issue is part of the `warded control plane coherence` sprint. The release thesis is to make `warded` feel like one dependable control plane for agent work: higher safe parallelism, coherent config defaults, reliable broker/container behavior, human-feedback gates, and enough structured evidence for the next actor after a paused or failed run. For this sprint, `headless` means an engineer should be able to carry the issue from current issue context to a merged change without new human decisions. If the issue discovers a missing decision, split or demote the unclear part instead of guessing.
Author
Member

WARDED_WORKFLOW: reservation-held

reservation details

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

Accepted by ward agent --harness codex (reserved 2026-07-15T10:35:06Z). 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#1288 · branch issue-1288 · harness codex · workflow pull-request-and-merge
  • Run: engineer-codex-ward-1288 · ward v0.710.0 · dispatched 2026-07-15T10:35:01Z
  • Comment thread: 1 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-1288` on host `kais-macbook-pro-2.local`. Accepted by `ward agent --harness codex` (reserved 2026-07-15T10:35:06Z). 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#1288` · branch `issue-1288` · harness `codex` · workflow `pull-request-and-merge` - **Run:** `engineer-codex-ward-1288` · ward `v0.710.0` · dispatched `2026-07-15T10:35:01Z` - **Comment thread:** 1 included in the pre-flight read, 0 stripped (ward's own automated comments). - included: @coilyco-ops (2026-07-15T07:16:38Z) 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

QA review after PR #1390 (705205ddebc7d5ec16850e327190d93255fda5ff): FAIL, follow-up filed as #1393.

What passed:

  • promote.yml now builds the binary matrix once on main as draft-${sha} artifacts.
  • release.yml fetches staged draft assets and no longer repeats go build, go mod download, or make sync-defaults-assets on the release branch.
  • Brew and scoop update jobs still consume the tagged release assets.
  • Focused local test on origin/main: go test ./scripts -run TestReleasePipelineUsesDraftArtifacts -count=1 passed.

Failure found:

  • The first post-merge promote run including this flow failed: run 8479 / actions run #2217 on commit 695543d2038046334d4bbafb26eecbefe656835c.
  • In .forgejo/workflows/promote.yml, the draft-release lookup uses curl -fsSL ... /releases/tags/${DRAFT_TAG} inside rel_id=$(...) under set -euo pipefail. A first-time draft-${sha} returns 404, so the step exits before the fallback POST /releases block can create the draft release.
  • The original issue also required release and latest alias handling; the merged workflow publishes only versioned release assets and did not explicitly document that aliases are non-applicable for Ward's binary-only artifacts.

Captured and attempted dispatch:

  • Filed #1393 with the same labels and milestone.
  • Attempted warded engineer coilyco-flight-deck/ward#1393 --harness codex; dispatch was capacity-blocked at 3 active engineers and a DISPATCH-DEFERRED comment was posted on #1393 with the broker log path.
QA review after PR #1390 (`705205ddebc7d5ec16850e327190d93255fda5ff`): FAIL, follow-up filed as #1393. What passed: - `promote.yml` now builds the binary matrix once on `main` as `draft-${sha}` artifacts. - `release.yml` fetches staged draft assets and no longer repeats `go build`, `go mod download`, or `make sync-defaults-assets` on the release branch. - Brew and scoop update jobs still consume the tagged release assets. - Focused local test on `origin/main`: `go test ./scripts -run TestReleasePipelineUsesDraftArtifacts -count=1` passed. Failure found: - The first post-merge promote run including this flow failed: run 8479 / actions run #2217 on commit `695543d2038046334d4bbafb26eecbefe656835c`. - In `.forgejo/workflows/promote.yml`, the draft-release lookup uses `curl -fsSL ... /releases/tags/${DRAFT_TAG}` inside `rel_id=$(...)` under `set -euo pipefail`. A first-time `draft-${sha}` returns 404, so the step exits before the fallback `POST /releases` block can create the draft release. - The original issue also required `release` and `latest` alias handling; the merged workflow publishes only versioned release assets and did not explicitly document that aliases are non-applicable for Ward's binary-only artifacts. Captured and attempted dispatch: - Filed #1393 with the same labels and milestone. - Attempted `warded engineer coilyco-flight-deck/ward#1393 --harness codex`; dispatch was capacity-blocked at 3 active engineers and a `DISPATCH-DEFERRED` comment was posted on #1393 with the broker log path.
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#1288
No description provided.