-
Changemaker Lite v2.9.12 Stable
released this
2026-04-23 11:47:02 -06:00 | 0 commits to main since this releaseRelease v2.9.12 (
aba935c)Downloads
-
Changemaker Lite v2.9.11 Stable
released this
2026-04-23 10:54:24 -06:00 | 1 commits to main since this releaseRelease v2.9.11 (
4ccc433)Downloads
-
Changemaker Lite v2.9.10 Stable
released this
2026-04-16 20:55:15 -06:00 | 3 commits to main since this releaseRelease v2.9.10 (
6d562da)Downloads
-
Changemaker Lite v2.9.9 Stable
released this
2026-04-16 15:17:54 -06:00 | 8 commits to main since this releaseInstall flow follow-up — extract preservation + release drift protection
Two small but real polish items landed right after v2.9.8 based on friction observed during the v2.9.8 end-to-end test. Both commits are scripts-only; no image rebuild.
Upgrade notes: Safe upgrade. The behaviour changes only manifest in failure/build paths — happy-path installs are identical to v2.9.8.
Patch 1 —
scripts/install.shpreserves extract on config-wizard failureCommit:
20f4bcd3Previously, when
config.shcould not start (classic case:curl | ssh bashover non-interactive SSH failing at/dev/tty), the cleanup trap removed$INSTALL_DIRbecause.envhadn't been written yet. The 15 MB tarball had already extracted cleanly — but the user was forced to re-download to retry on a console.New
EXTRACT_COMPLETEstate flag: the trap now distinguishes "extract OK, wizard didn't run" from "extraction itself failed". First case preserves the dir and prints a resumption hint:[INFO] Tarball extracted to /tmp/test-install-dir — preserving. [INFO] To finish setup on an interactive console: cd /tmp/test-install-dir && bash config.sh [ERROR] Configuration wizard could not run (likely no TTY available).The user can then
cdinto the preserved dir and complete setup on a real console, zero re-download.
Patch 2 —
scripts/build-release.shwhitelist parity checkCommit:
5d497b79During the v2.9.8 sprint we added three scripts (
pangolin-teardown.sh,ccp-deregister.sh,validate-env.sh) and had to manually remember to add each tobuild-release.sh's shipping whitelist. Forgetting is silent — the script just doesn't ship, breaking the release in subtle ways.Replaced the implicit for-loop with two explicit arrays and a pre-build assertion:
RUNTIME_SCRIPTS=(...) # ship in tarball DEV_ONLY_SCRIPTS=(...) # stays on dev/build machinesEvery
scripts/*.shmust be classified as one or the other. An unclassified script aborts the build with a clear error naming the file, so the next sprint can't silently ship a broken tarball.Side-effect fixes from this audit:
register-with-ccp.shis now shipped (was only in source, needed for retrofitting CCP onto existing installs)update-env.shis now shipped (safe.envupdater used by upgrade flows)
Release tarballs now contain 20 scripts (up from 17 in v2.9.8).
Verified end-to-end
On marcelle:
curl -fsSL .../install.sh | bash -s -- --dir /tmp/test-install-dir --version v2.9.9over non-TTY SSH → extract preserved, resumption hint printed,/tmp/test-install-dir/retained./scripts/build-release.sh --dry-runwith a hypothetical unclassifiedscripts/*.sh→ aborts with named error./scripts/build-release.sh --tag v2.9.9 --upload→ succeeds on fresh tag without--replace(validates the v2.9.8 safety going the right direction)- Marcelle's live v2.9.8 install continued to run through the test (no teardown needed)
Downloads
-
Changemaker Lite v2.9.8 Stable
released this
2026-04-16 13:21:44 -06:00 | 10 commits to main since this releaseInstallation UX & CCP Integration Polish
This release is the outcome of an end-to-end install-testing sprint on a clean host. Ten friction points surfaced — all addressed. No image rebuilds in this release (changes are scripts + docs); the v2.9.7 container images are still current.
Upgrade notes: Safe upgrade for existing installs — no schema changes, no breaking flag changes.
./scripts/upgrade.shpicks up the new tarball; admin users can re-runbash config.shto regenerate the Next Steps block if desired (not required).
Install flow hardening
Host-port preflight in
install.sh(commita7daf5ff)The installer now runs
ss -Htlnagainst the ~14 required ports before downloading the tarball and aborts with specific remediation hints if any are bound. Catches the cockpit-on-9090 class of collision that previously manifested as a partial-stack startup failure mid-compose up.[OK] Prerequisites OK [OK] Docker daemon is running [OK] Disk space: 143677MB available [OK] Host ports available [INFO] Downloading Changemaker Lite v2.9.8...Admin password persistence (commit
b92ca4f3)When
config.sh -yis run without--admin-password, the auto-generated password is now written todata/admin-credentials.txt(mode 0600) in addition to being printed once to stdout. Users piping output toteeor missing the scroll no longer lose the password. Explicit--admin-passwordis never persisted.Pangolin credential smoke test (commit
b92ca4f3)config.sh -ynow verifies--pangolin-api-key/--pangolin-org-idagainst/org/:id/resourcesbefore committing them to.env. Typos and revoked keys fail fast with a clear message instead of surfacing much later as a broken Newt tunnel. Skip with--skip-pangolin-checkfor offline bootstrap.Next Steps surface new tools (commit
a7daf5ff)After
config.sh -ycompletes, the Next Steps block now points users at:bash scripts/test-deployment.sh --wait 60— verify the install is healthybash scripts/validate-env.sh— re-check.env+ host portsbash scripts/pangolin-teardown.sh— clean reset before reinstall
Also notes the realistic first-boot timing (~3 min image pulls + ~90s stabilization) so brief unhealthy statuses don't confuse first-time users.
New scripts
scripts/pangolin-teardown.sh(commit6602d14e, shipped in release)Wrapper for wiping a Pangolin org's resources + sites before a fresh install. Reads credentials from
.envor takes--api-url/--api-key/--org-idflags. Dry-run by default;--yesto execute. Deletes resources before sites to avoid orphans. Safety via--keep-site-ids.scripts/ccp-deregister.sh(commite8c862f7, shipped in release)Companion to
pangolin-teardown.shfor installs that phone-home registered with a Changemaker Control Panel. Removes the CCP-sideInstancerow during teardown. Without this, a stale row blocks re-registration of the same slug. Dry-run by default. Matches byagentUrl(default from.env),--slug, or--instance-id.Full teardown sequence for a CCP-registered install:
bash scripts/ccp-deregister.sh --token $ADMIN_TOKEN --yes bash scripts/pangolin-teardown.sh --yes docker compose --profile monitoring down -v --remove-orphans sudo rm -rf ~/changemaker.lite
Changemaker Control Panel integration
Tunnel cleanup on
deleteInstance(commit6602d14e)CCP admins clicking "Delete Instance" previously left the Pangolin site + all its resources orphaned for the lifetime of the org. Now
deleteInstance()callsteardownTunnel()beforecomposeDownwhenpangolinSiteIdis set. Best-effort with try/catch matching the existing Docker-cleanup tolerance pattern — if Pangolin API is unreachable, the delete still completes.Slug conflict returns clean 409 (commit
b8ec6286)The
agents/registrations/:id/approvehandler previously leaked a rawPrismaClientKnownRequestErroron slug uniqueness violations. Now returns a409 SLUG_CONFLICTwith a message pointing at the fix:"Slug 'changemakerlite' is already in use by another Instance. Delete the stale instance first (DELETE /api/instances/:id) or run scripts/ccp-deregister.sh from the target host."Agent poll rate limit + exponential backoff (commit
c8d0e9fe)Split the one-size-fits-all rate limiter:
/registerkeeps the strict 10/15min (invite-code brute force is the real attack surface)/pollgets a new looser limiter at 180/15min (one poll per ~5s upper bound)
Agent-side: replaced the fixed 30s
setIntervalwith a self-schedulingsetTimeoutloop that backs off exponentially on HTTP 429 (30s → 60s → 120s → 300s cap) and resets to 30s on any successful poll. Fixes the "agent wedged at 429, restart required" workaround that bit us at the 15-minute approval SLA mark.
Release hygiene
build-release.sh --replacesafety (commit8fdcded2)--uploadnow checks for an existing release at the given tag before POSTing. If found and--replaceis not set, errors out with a clear warning. Prevents the silent-overwrite problem where users on a version see "no update available" because the upgrade-check compares tags, but the tarball contents have changed underneath them.--replaceremains available for deliberate test-bench iteration (DELETE + recreate).Shipped scripts added to tarball whitelist
scripts/build-release.shnow includesvalidate-env.sh,pangolin-teardown.sh, andccp-deregister.shin the release tarball. Previously these existed in source but weren't packaged.
Documentation
Docs are the point of truth; all the above is reflected in:
mkdocs/docs/docs/getting-started/prerequisites.md— new warning covering cockpit and host-port collisionsmkdocs/docs/docs/getting-started/installation.md—test-deployment.shworkflow, admin password file, teardown sequencemkdocs/docs/docs/getting-started/first-steps.md— where to find the generated passwordmkdocs/docs/docs/getting-started/control-panel.md— new "Registering an Existing Install (Phone-Home)" section with rate-limit + backoff behaviour and theccp-deregister.shteardown pathREADME.md— Quick Start block reflects reality including useful-tools listDEV_WORKFLOW.md—--replacesafety for release hygiene
Verified end-to-end
The release was validated on a clean Ubuntu Server test bench (hostname
marcelle): teardown → fresh install viainstall.sh→config.sh -y --enable-allwith--ccp-*flags →docker compose up -d→test-deployment.sh --wait 60:- 37/37 passed, 0 warnings, 0 skipped (all containers healthy, API responding, tunnel subdomains reachable, DB seeded)
- CCP registration round-trip works first-try (certs delivered on 2nd poll, ~60s)
SLUG_CONFLICT 409surfaces correctly when re-registering without deregisterccp-deregister.sh --yesunblocks re-registration cleanlybuild-release.sh --uploadrefuses to overwrite existing tag without--replace
Downloads
-
Changemaker Lite v2.9.7 Stable
released this
2026-04-15 18:33:13 -06:00 | 18 commits to main since this releaseBug fix — VERSION promotion regression
Single-commit patch release fixing a regression in the health-check logic that incorrectly gated VERSION promotion on soft warnings, causing upgrades to roll back unnecessarily.
Commits:
- Fix VERSION promotion regression: don't gate on soft health-check warnings (
0cd7ba3a)
Upgrade notes: Safe upgrade; recommended if you've seen unexpected rollbacks after an upgrade.
Downloads
- Fix VERSION promotion regression: don't gate on soft health-check warnings (
-
Changemaker Lite v2.9.6 Stable
released this
2026-04-15 16:57:13 -06:00 | 19 commits to main since this releaseUpdate system hardening bundle 3 — breaking-release gate, release-mode rollback, Phase 7 budgets, symmetric success archival.
Downloads
-
Changemaker Lite v2.9.5 Stable
released this
2026-04-15 16:13:04 -06:00 | 20 commits to main since this releaseUpgrade infrastructure hardening
Makes upgrade failures observable and adds an out-of-band smoke test from the host.
Commits:
- Upgrade failure visibility + atomic VERSION + external smoke test (
7c25a2d5)
Key changes:
- VERSION file is now written atomically — upgrades either complete fully or not at all, no half-promoted state
- Upgrade failures surface in admin UI instead of silently reverting
scripts/test-deployment.shcan be invoked externally (from dev machine or CI) against the running stack
Upgrade notes: Safe upgrade.
Downloads
- Upgrade failure visibility + atomic VERSION + external smoke test (
-
Changemaker Lite v2.9.4 Stable
released this
2026-04-15 15:40:59 -06:00 | 21 commits to main since this releaseUpgrade watcher timeout extended
Single-commit patch: raises the systemd
changemaker-upgrade.serviceTimeoutStartSecfrom 900s to 3600s. Heavy upgrades (image pulls + migrations + seed) can legitimately exceed 15 minutes on slower networks.Commits:
- Bump upgrade watcher TimeoutStartSec 900s → 3600s (
39a1b717)
Upgrade notes: If you have the upgrade watcher installed, re-run
bash config.sh(Step 13) or manually update/etc/systemd/system/changemaker-upgrade.serviceto pick up the new value.Downloads
- Bump upgrade watcher TimeoutStartSec 900s → 3600s (
-
Changemaker Lite v2.9.3 Stable
released this
2026-04-15 11:57:50 -06:00 | 22 commits to main since this releaseFresh-install + upgrade-path hardening
Addresses friction surfaced during fresh-install testing — specifically, a boot race between nginx/newt and the API healthcheck window.
Commits:
- Fix nginx/newt boot race by raising API healthcheck start_period to 120s (
b8a14d1f) - Fresh-install + upgrade-path hardening bundle (
f07e1961)
Key changes:
- API healthcheck
start_periodbumped 60s → 120s so nginx/newt don't panic during initial migrations - Miscellaneous fresh-install and upgrade edge cases from test-bench iterations
Upgrade notes: Safe upgrade.
Downloads
- Fix nginx/newt boot race by raising API healthcheck start_period to 120s (