-
v0.1.32 Stable
released this
2026-07-04 20:47:20 +00:00 | 1174 commits to main since this releaseAdded
- Left-nav "moving" indicator. Each project in the sidebar now shows a pulsing blue dot when it
has a Running/Pending pipeline (any Build/Release/Deploy/ship) right now — an at-a-glance view of
what's active across the fleet without clicking in. The wf-poller emits/shared/active.txt
(projects with a running workflow, recomputed each 6s cycle from the fleet-wide wf list); nginx
serves it at/api/active; the SPA polls it every 5s and toggles a.runningclass. Distinct
from the.active(selected-project) highlight — a project can be selected, moving, both, or neither.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Left-nav "moving" indicator. Each project in the sidebar now shows a pulsing blue dot when it
-
v0.1.31 Stable
released this
2026-07-04 20:33:57 +00:00 | 1179 commits to main since this releaseChanged
- docs/CHANGE-MODEL.md documents the deploy-provenance chain closure (fromSha/version/
releaseRef/outcome, requestedBy/image) and the new retention caps (builds 50, deploys 400,
releases 500).
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- docs/CHANGE-MODEL.md documents the deploy-provenance chain closure (fromSha/version/
-
v0.1.30 Stable
released this
2026-07-04 20:18:39 +00:00 | 1185 commits to main since this releaseAdded
- "Which changes did this deploy include" (end-to-end traceability, Phase A). The deploy
templates now emit provenance as Argo output params for the pipelines-operator to project onto
PipelineDeploy.status:pipeline-deploy(gitops-deploy) andpipeline-deploy-flux(gitops-flux) writefromSha
(the previously-deployed tip —pipeline-deploytakes it from the push'sbody.beforevia a
new sensor param; the flux twin captures the pre-ff main tip in-workflow),version(the
release tag pointing at the deployed sha, resolved via the Forgejo tags API), andoutcome
(deployed/superseded/failed/rolled-back, written at each exit).
- Dashboard: a deploy row now folds open to the commits it shipped — a Forgejo compare
(fromSha...sha) rendered as "N changes since<short>" with per-commit links + a full-compare
link. A deploy row also shows a version chip when the deployed commit is a tagged release, and
the Deploy card reflectsoutcome(a superseded deploy reads "superseded", not a bare
"Succeeded"). Release rows carry the newrequestedBy/imagedata. All additive: the panes'
uniform identity (build/deploy lead with a 12-char sha, release withvX.Y.Z) is unchanged.
Fixed
- devbump + release-cadence reap their branches on merge.
pipeline-devbumpand
pipeline-release-cadencenow passdelete_branch_after_merge: trueon the PR merge, so
_devbump/*-devandrelease-cadence/*branches no longer pile up on Forgejo after every
dev-cycle open / release (matchingpipeline-land's feature-branch reap; the promotes already
explicit-DELETEtheir_promote/*/_devbump/v*temps). Theffprmain-advance merges are
deliberately left untouched — their head istrunk, which must never be deleted.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- "Which changes did this deploy include" (end-to-end traceability, Phase A). The deploy
-
v0.1.29 Stable
released this
2026-07-04 11:08:40 +00:00 | 1191 commits to main since this releaseFixed
- devbump + release-cadence reap their branches on merge.
pipeline-devbumpand
pipeline-release-cadencenow passdelete_branch_after_merge: trueon the PR merge, so
_devbump/*-devandrelease-cadence/*branches no longer pile up on Forgejo after every
dev-cycle open / release (matchingpipeline-land's feature-branch reap; the promotes already
explicit-DELETEtheir_promote/*/_devbump/v*temps). Theffprmain-advance merges are
deliberately left untouched — their head istrunk, which must never be deleted.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- devbump + release-cadence reap their branches on merge.
-
v0.1.28 Stable
released this
2026-07-04 10:39:41 +00:00 | 1196 commits to main since this releaseSecurity
- buildkit + ibmi publish no longer xtrace-leak the MinIO build key.
pipeline-build-buildkit
andpipeline-build-ibmiranset -euxbeforemc alias set … "$AK" "$SK", so bash printed the
work-bucket access/secret key into the archived pod log (archiveLogs: true) on every buildkit- and
ibmi-taxonomy build — a supply-chain vector (anyone reading logs could poisonbuilds/<sha>/). Now
set -eu→ alias →set -x, matching thepipeline-build/-desktoptwins that already did this. - shipd hardens the
X-User-Emailidentity.POST /api/shipnow rejects a blank/malformed header
(must match a basic email shape) before stamping the audited actor;nginx.confdocuments why the
header cannot be safely cleared at that hop. Still trusted transitively — the proper close (verify a
signed oathkeeper id_token) remains accepted debt, bounded by the shipd-guard VAP + cadence idempotency.
Fixed
- deploy-flux no longer green-skips a REGRESSED trunk. The superseded check treated any
trunk-tip != shaas "superseded → exit 0"; a Forgejo ff-race regressing the ref backward then stranded a release
undeployed while the row showed Succeeded. Ported the compare-API discrimination frompipeline-deploy
(sha AHEAD of tip ⇒ regression ⇒ exit 1 loud) and added an empty-tip guard (transient API failure now
fails loud, not green). Protects the gitops-flux spine (seanfarm / platform-seanfarm). - promote PR-fallbacks match by base AND head. The ff-main and dev-cycle-bump fallbacks in
promote,
promote-tag, andpromote-imageselected the first open PR by base only, so an unrelated concurrent PR
could be ff-merged onto a protectedmain/trunk. Now use the by-base/head lookup the codebase already
uses inpipeline-land. - image + tag promote enforce version monotonicity.
promote-tagandpromote-imageoverwrote
releases/latestunconditionally; a lower clean version reaching trunk could roll the latest pointer
backward. Ported thesort -Vno-downgrade guard frompipeline-promote. - desktop release fails closed on a missing macOS SDK.
fetch-sdklogged a warning and exited 0, so a
release build could ship a signed zelnet package silently missing its.app/.pkg. Nowexit 1when a
required SDK object is absent on a release build (dev/feature-branch CI still skips gracefully). - land binds the merge to the verified sha.
pipeline-landmerged by branch name; a machine branch
(image-bumps) could advance between the green-check and the merge and land an unvalidated tip. Now
re-asserts the tip and passeshead_commit_id(Forgejo 409s on any move). - releases-only
mainis push-protected on the rpg + zelnet repos.branch-protectionrendered
enablePush: trueformainon rpg-hello/demo/lemonade/munchers + zelnet, contradicting their
main: releases-only. Set tofalse(the ff-only merge-API promote works fine under protection). - ibmi deploy integrity gate no longer masks a failed query. Added
set -o pipefail+ a non-empty
assertion so a failingzelnet sqlin the piped integrity check can't be swallowed into a false "differs". - trunk-name resolver is failure-safe fleet-wide (11 sites). Replaced
ls-remote --exit-code … || TRUNK=staging— which misread any transient ls-remote failure as "repo uses the deadstagingname" —
with a single dual-head query that picks the present ref and defaults to the livetrunkon error, across
build/build-buildkit/build-ibmi/build-desktop, validate/validate-flux, promote-image, deploy-ibmi,
test-ibmi-behavioral, and the two zerotea crons. rollback-*CI reservation narrowed to the machine pattern. The gitops CI filters excluded any
rollback-…branch (so a humanrollback-cnpg-migrationgot no CI); tightened torollback-[0-9a-f]{7,}$
so only the ephemeralrollback-<sha>branches the deploy creates are skipped.- devbump reads only the
.versionfield for zig-zon. The "already -dev" idempotency guard grepped the
wholebuild.zig.zonand false-matched a nightlyminimum_zig_version = "…-dev.N", which would wedge
auto-releases; now extracts.versionthe way the cadence template does. - validate dropped the dead
stagingremap left by the staging→trunk rename, and shipd's config
parser strips YAML quotes so a quotedkind: "none"is honored by the no-release guard (matching pipectl).
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- buildkit + ibmi publish no longer xtrace-leak the MinIO build key.
-
v0.1.27 Stable
released this
2026-07-03 22:54:58 +00:00 | 1201 commits to main since this releaseChanged
- Integration trunk renamed
staging→trunk, fleet-wide. All 15 pipeline repos now
carry a push-protectedtrunkcreated at their staging tip (the oldstagingbranches are
frozen relics, deleted after this release removes their protections). Sensors now trigger on
refs/heads/trunkonly, CI excludes it, provision hooks ENSUREtrunk, and
pipeline-stagingpassesbranch: trunkto builds (the runtime resolver still maps either
name, so older seeds self-heal). Proven end-to-end on rpg-lemonade before rollout:
land → trunk build → ship → release v0.1.5 (savf) → prod deploy →chore(trunk)devbump.
The word "staging" now belongs exclusively to the ENVIRONMENT ladder (dev/staging/prod —
e.g. ibmi's SOMEARA1/SOMEARA2/SOMEARAB). hello-lib (operator-rendered sensors) migrates when
pipelines-operator learns the trunk name — the laststagingholdout.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Integration trunk renamed
-
v0.1.26 Stable
released this
2026-07-03 22:13:27 +00:00 | 1206 commits to main since this releaseAdded
- Trunk-name resolver — the staging→trunk branch-rename foundation. Every shared template
that touches the integration trunk now resolves the trunk NAME per-repo at runtime (Forgejo
branches/trunk200 →trunk, 404 → the legacystaging, anything else → fail loud, never
guess): pipeline-land (PR base), release-cadence + devbump + the three promotes (provenance
clones, ancestry checks, devbump PRs), deploy + deploy-flux (superseded check, ff-main,
rollback), the build/validate family (clone branch + builds/latest gates; git-less publish
pods accept both names), test-ibmi/deploy-ibmi clones, fuzz, and the zerotea crons.
pipectl/shipdresolve project config fromraw/branch/trunkwith astagingfallback.
Every trunk sensor now watches BOTHrefs/heads/stagingandrefs/heads/trunk(a sensor
deploy and a branch rename can never be atomic — single-ref flips guarantee a dead window),
every CI sensor excludes both, and every project gains atrunkForgejoBranchProtection
(enablePush:false) that PRE-EXISTS the branch, so a rogue push cannot mint an unprotected
trunk and hijack the resolvers. With no repo renamed yet this release is behavior-neutral;
each repo's rename is now pure branch surgery (createtrunkat the staging tip, delete
staging) with zero further sensor/template changes. rpg-hello also gains the trunk
protection its staging never had.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Trunk-name resolver — the staging→trunk branch-rename foundation. Every shared template
-
v0.1.25 Stable
released this
2026-07-03 20:38:24 +00:00 | 1211 commits to main since this releaseFixed
- pipeline-deploy-ibmi: first-deploy file seeding no longer passes CRTDUPOBJ an explicit
object list —OBJ()takes ONE (possibly generic) name (CPD0047 on a list; hit by rpg-demo
v0.1.6's PARTPF+PARTLF seed). Missing PFs now duplicate one-per-command (DATA(*YES)), then
LFs — a duplicated LF attaches to the same-named PF already in the TO-library (verified via
DSPDBR: prod PARTLF pins prod PARTPF, not staging's).
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- pipeline-deploy-ibmi: first-deploy file seeding no longer passes CRTDUPOBJ an explicit
-
v0.1.24 Stable
released this
2026-07-03 20:07:55 +00:00 | 1216 commits to main since this releaseFixed
- pipeline-deploy-ibmi: staging-read race + devbump false-refusal (found by the very first
live deploy, rpg-lemonade v0.1.4). (1) The promote step now holds thepub400-ibmi-compile
mutex instead of a deploy-private one — CRTDUPOBJ reads the staging library that every build
rewrites, and the post-release devbump build's clean-slate DLTPGM deleted LEMONADE mid-promote
(CPF2105). (2) The integrity gate now tolerates release-equivalent rebuilds: on OBJCREATED
drift it promotes iffgit diff <release-sha>..stagingexcluding VERSION/CHANGELOG.md is
empty (the devbump rebuild recompiles identical source); real source drift still refuses with
"re-ship".
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- pipeline-deploy-ibmi: staging-read race + devbump false-refusal (found by the very first
-
v0.1.23 Stable
released this
2026-07-03 19:48:47 +00:00 | 1221 commits to main since this releaseAdded
- ibmi-rpg environments + Deploy pipeline (IBMI-IMPORT.md §11): an environment is an IBM i
LIBRARY — SOMEARA1 (CI scratch) / SOMEARA2 (staging) / SOMEARAB (prod), pre-provisioned on
pub400 (CRTLIB denied). pipeline-build-ibmi selects the lib by branch and compiles behind
CHGCURLIBin-job (ibmi-builder :v8, zelnet 0.10.1 multi-commandcmd); the behavioral test
gains a package step (SAVOBJ the tested objects.env manifest → release*SAVF+ an
OBJCREATED deploy-manifest, published toreleases/v<V>/before main ff's); promote-tag
attaches the.savfto the Forgejo release; and the new pipeline-deploy-ibmi (per-project
main-push sensors on all four rpg-* projects) promotes staging→prod with integrity-gated
CRTDUPOBJ — *PGM/DSPF replaced with the tested binaries, PF/LF only-if-missing so prod data is
never clobbered. pub400 denies RSTOBJ/RST, so the SAVF is the durable real-IBM-i artifact and
drift between ship and deploy refuses with "re-ship".
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- ibmi-rpg environments + Deploy pipeline (IBMI-IMPORT.md §11): an environment is an IBM i