fix(package): stable tracks SemVer releases, latest tracks main #85

Merged
David merged 1 commit from fix/VA-78-agent-channels-stable-latest into main 2026-06-29 04:17:44 +02:00
Member

The agent generic-package publish workflow chose its moving coordinate from the trigger (GOV-14): a push to main published the moving stable tag and a v* tag published the immutable pinned X.Y.Z. That made stable advance on every main push, so a server pinning stable (the fetcher default) was fed whatever last landed on main, including non-release builds like 0.1.0-44-g4a87812. That inverts the conventional meaning of stable.

Split the moving channels so the names match operator intent. .forgejo/workflows/build-package.yml now resolves the channel from the trigger this way: a v* tag push publishes the immutable pinned X.Y.Z AND moves stable to that release (DELETE-then-PUT the same bytes under .../stable), so stable always points at the most recent SemVer release; a push to main publishes ONLY the moving latest coordinate and never touches stable, so latest tracks the head of main. Operators pin stable for released agents or latest to auto-track main (staging/dev).

The moving-upload closure is now channel-generic: it derives the channel label from the last path segment of the base URL for its log/error lines, so the same DELETE 204|404 then PUT 201 path serves both latest and stable. The immutable pinned path (201 fresh / 409 already-published) is unchanged, and every package file (the descriptive artifact, its .sha256 and .sig, plus the vervainagent-6 + .sig fetcher pair) is published to whichever coordinate the trigger selects.

Update the VA-60 default-pin comment and docs/agent-package-distribution.md to reflect that stable now means latest release and latest means latest main, and add the VERVAIN_AGENT_FETCHER_VERSION guidance for choosing between them.

#VA-78

The agent generic-package publish workflow chose its moving coordinate from the trigger (GOV-14): a push to main published the moving `stable` tag and a `v*` tag published the immutable pinned `X.Y.Z`. That made `stable` advance on every main push, so a server pinning `stable` (the fetcher default) was fed whatever last landed on main, including non-release builds like `0.1.0-44-g4a87812`. That inverts the conventional meaning of `stable`. Split the moving channels so the names match operator intent. `.forgejo/workflows/build-package.yml` now resolves the channel from the trigger this way: a `v*` tag push publishes the immutable pinned `X.Y.Z` AND moves `stable` to that release (DELETE-then-PUT the same bytes under `.../stable`), so `stable` always points at the most recent SemVer release; a push to main publishes ONLY the moving `latest` coordinate and never touches `stable`, so `latest` tracks the head of main. Operators pin `stable` for released agents or `latest` to auto-track main (staging/dev). The moving-upload closure is now channel-generic: it derives the channel label from the last path segment of the base URL for its log/error lines, so the same DELETE 204|404 then PUT 201 path serves both `latest` and `stable`. The immutable pinned path (201 fresh / 409 already-published) is unchanged, and every package file (the descriptive artifact, its `.sha256` and `.sig`, plus the `vervainagent-6` + `.sig` fetcher pair) is published to whichever coordinate the trigger selects. Update the VA-60 default-pin comment and docs/agent-package-distribution.md to reflect that `stable` now means latest release and `latest` means latest main, and add the VERVAIN_AGENT_FETCHER_VERSION guidance for choosing between them. #VA-78
fix(package): stable tracks SemVer releases, latest tracks main
All checks were successful
Check / fmt + clippy + tests (pull_request) Successful in 5m15s
Create release / Create release from merged PR (pull_request) Has been skipped
e4648a066f
The agent generic-package publish workflow chose its moving coordinate from the trigger (GOV-14): a push to main published the moving `stable` tag and a `v*` tag published the immutable pinned `X.Y.Z`. That made `stable` advance on every main push, so a server pinning `stable` (the fetcher default) was fed whatever last landed on main, including non-release builds like `0.1.0-44-g4a87812`. That inverts the conventional meaning of `stable`.

Split the moving channels so the names match operator intent. `.forgejo/workflows/build-package.yml` now resolves the channel from the trigger this way: a `v*` tag push publishes the immutable pinned `X.Y.Z` AND moves `stable` to that release (DELETE-then-PUT the same bytes under `.../stable`), so `stable` always points at the most recent SemVer release; a push to main publishes ONLY the moving `latest` coordinate and never touches `stable`, so `latest` tracks the head of main. Operators pin `stable` for released agents or `latest` to auto-track main (staging/dev).

The moving-upload closure is now channel-generic: it derives the channel label from the last path segment of the base URL for its log/error lines, so the same DELETE 204|404 then PUT 201 path serves both `latest` and `stable`. The immutable pinned path (201 fresh / 409 already-published) is unchanged, and every package file (the descriptive artifact, its `.sha256` and `.sig`, plus the `vervainagent-6` + `.sig` fetcher pair) is published to whichever coordinate the trigger selects.

Update the VA-60 default-pin comment and docs/agent-package-distribution.md to reflect that `stable` now means latest release and `latest` means latest main, and add the VERVAIN_AGENT_FETCHER_VERSION guidance for choosing between them.

#VA-78
David scheduled this pull request to auto merge when all checks succeed 2026-06-29 04:13:35 +02:00
David merged commit addfd0942d into main 2026-06-29 04:17:44 +02:00
David deleted branch fix/VA-78-agent-channels-stable-latest 2026-06-29 04:17:44 +02:00
Sign in to join this conversation.
No reviewers
No labels
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
psa-systems/vervain-agent!85
No description provided.