Hop3 0.5 release notes¶
This page holds the full notes for each 0.5 release, newest first. The changelog gives each release's date and a summary.
0.5.0¶
Highlights¶
- CLI server/context model (ADR 042): credentialed servers separated from per-project deploy contexts.
- Unified testing architecture (ADR 043): one speed-tier taxonomy, shared diagnostic bundle.
- Nightly Test Lab (ADR 044): web dashboard for run history and regressions.
- Privileged-operations daemon (ADR 041): narrow root-boundary daemon replaces broad sudoers.
- Security hardening: RPC boundary, authentication, credential storage.
Added¶
- CLI ergonomics overhaul (ADR 036): a redesigned command surface: space-separated command names (
hop3 env set), an implicit current app, a sticky working context (hop3 use), command aliases, did-you-mean suggestions, categorized help with an example on every command, scriptable confirmations and non-interactive flags, and secret inputs from a file or stdin. - Nix integration: hermetic, reproducible builds from a
hop3.nixfile, a starter set of Nix-based application packages, and installer support for Nix on every supported distribution. - Computed environment variables: interpolate values in
hop3.tomlwith${VAR}, resolved after addon variables are injected, so platform variables can be mapped to the names an app expects. - WSGI auto-discovery: Python web entry points are detected automatically when no worker is configured.
- Servers and project contexts (ADR 042): manage credentialed hosts with
hop3 serverand per-project deploy targets withhop3 context. - Deploy preview and project-mismatch guard (ADR 042):
hop3 deployshows the resolved plan and confirms before acting; destructive commands refuse to run when the resolved app contradicts the current project. - Shared failure diagnosis (ADR 043): every deploy-and-verify path collects one diagnostic bundle on failure and classifies it into a one-line cause, closing the silent-502 gap.
- Nightly dashboard
hop3-testlab(ADR 044): run history, live progress, the regressions diff, and trends. - Privileged-operations daemon
rootd(ADR 041): the operations that need root run through a small, audited daemon, which replaces the sudoers rules. - App hostnames: declare and manage an app's domains from
hop3.tomland the CLI. - Cross-instance backup migration (ADR 024): restore a backup onto a different Hop3 server.
Changed¶
- Command syntax (BREAKING, ADR 036): multi-word commands are separated by spaces (
hop3 env set, formerlyhop3 config:set); the old colon form prints a migration hint. - Command names (BREAKING, ADR 036): user management moved under
user, addon commands to the singularaddon, and a few verbs were normalized. - Exit codes (ADR 036): the exit-code scheme was reorganized; scripts that branch on specific codes may need updating.
- Server vs context vocabulary (BREAKING, ADR 042): the old global "context" is now a server. "Context" means a project deploy target; existing config is migrated on first run.
- Testing layers (ADR 043): the test suite is three layers selected by speed tier; a plain
pytestrun never starts Docker. - More reliable deploys: clearer messages about already-set env vars, IPv4 addon hosts to avoid IPv6 resolution issues, and assorted build and worker-precedence fixes.
- Safer upgrades: pending database migrations run on upgrade. An existing virtualenv is no longer replaced.
- Containerized app database access: addons are reachable from apps on any private Docker network.
Fixed¶
- Faster deploy log streaming.
- Addon connection fixes (MySQL, host resolution).
--whynow diagnostic-only; app name resolves fromhop3.toml.
Security¶
- Untrusted RPC arguments validated.
- Auth hardening; admin-takeover path closed.
- Addon credentials re-encrypted with automatic migration.
- Privilege boundary moved from sudoers to rootd (ADR 041).