Releases: noahhyden/ataegina-cli
Releases · noahhyden/ataegina-cli
Release list
v0.7.0
Added
- Foreign port-holder awareness in
upanddown. A new ownership check
maps a slot's port to its holding pid(s) and classifies them against ataegina's
own start-time-verified launch record (ours/foreign/unknown).upno
longer claims a slot it never launched is "already up"/"ready" — it names the
foreign holder and declines to launch on top of it.downleaves a
positively-foreign holder alone (previously it killed whatever held the port);
down --force(orATE_DOWN_FORCE=1) still clears the slot on demand.
Ambiguous holders — unmappable pids, or a daemonize-style server of ours that
reparented to init — stayunknownand behave exactly as before, so nothing we
own is spared teardown or falsely accused. - More stacks detected by
init. Backends: Go now emits a runnable
go run .default (with aPORTenv) instead of a bare TODO; Rust
(Cargo.toml→cargo run) and PHP/Laravel (artisan→artisan serve)
added. Frontends: Nuxt, Astro, and SvelteKit added (matched before the
bare-vite fallback they build on). - Man page. Ship
ataegina.1(man ataegina);install.shinstalls it
best-effort alongside the script. - Automated release + Git Bash CI. A
release.ymlworkflow publishes the
GitHub Release (and optionally bumps the Homebrew tap) on a version tag, and a
Windows runner now exercises the Git Bash support the README claims.
v0.6.0
Runtime isolation for git worktrees — collision-free ports, processes, and databases for every worktree, from one zero-dependency bash file.
This release is the "dogfooding hardening" cut: a batch of correctness fixes found by running ataegina against real repos, a new move command, and a much larger test suite that now starts real processes and real databases.
Added
ataegina move N— relocate the current worktree to indexN(and its derived port pair), rewriting the per-repo registry. Refuses an index another live worktree holds, rejects index 0 (reserved for the primary), frees the old slot for reuse, and warns if either new port is already in use. Motivated by dogfooding: when an auto-assigned slot's derived port is permanently held by a process ataegina doesn't manage, the only previous fix was to hand-edit the registry.
Fixed
downno longer leaks worker/child processes. Teardown now enumerates the full process tree under each launched root from a single portablepssnapshot,SIGTERMs it, thenSIGKILLs survivors — independent of any port tool. Previously a dev server's workers (uvicorn--reload, vite/esbuild, webpack/turbopack) were orphaned each up/down cycle, and on hosts without lsof/ss/fuser nothing but the wrapper was killed.- Concurrent first-
upno longer races two worktrees onto the same index (which meant identical ports and the same per-worktree database). Index assignment is now serialized with an atomicmkdirlock plus a double-checked re-read. - A repo path containing a space no longer costs the primary its index 0 (and, with a DB configured, a suffixed DB instead of the shared one).
- Linked worktrees inherit the primary checkout's config, so a fresh
git worktree addtree no longer failsup/dbwith "no backend/database configured". upexits 0 on a successful start with no frontend (scopebackend/none) instead of returning 1 underset -e.updistinguishes a dead server from a slow one, reporting "FAILED to start — see " for a pid that already died instead of "still starting".move/uprefuse an index whose derived port exceeds 65535.downwon't kill a recycled pid (start-time guard on the recorded pid).movefrees the old slot's servers itself instead of orphaning them on the old ports.downnow reports<label>: stopped on :<port>when it actually stops something, instead of being silent on success.
Testing
- The suite grew from 44 to 99 tests, adding the first coverage that starts real processes and runs concurrently: real
up/downlifecycle across python, node, Go, and Ruby backends, a full two-worktree end-to-end (distinct ports + own databases, simultaneously), real frontend-scope borrow of the shared backend, reallogs, and docker-gated integration against live postgres, mysql, and mariadb engines (per-worktree create/drop/isolation) that skip cleanly where docker is absent.
Full details in the CHANGELOG.
Install / upgrade: brew upgrade ataegina · ataegina update · or curl -fsSL https://raw.githubusercontent.com/noahhyden/ataegina-cli/main/install.sh | sh
v0.5.0
Pure worktree-aware dev launcher: collision-free ports, processes, and per-worktree databases.
Removed
- The agent-fleet dispatcher (
ataegina run/ataegina status) and its config keys. ataegina is now solely the worktree dev launcher; orchestration is left to whatever tool you already use.
Fixed
ataegina initno longer aborts underset -eduring stack detection (two cases: apackage.jsonwith nodevscript, andemit_configending on a falsy test). Covered bytests/init.bats.
Changed
- A bare
ataeginanow prints usage instead of silently runningup.
Added
- bats-core test suite and GitHub Actions CI (shellcheck + bats on macOS bash 3.2 and Linux + release-verify).
- Release-hygiene docs: CHANGELOG, SECURITY, CODE_OF_CONDUCT, issue/PR templates.
See CHANGELOG.md for full details.