Levelrail v0.1.0
0.1.0 (2026-09-09)
Features
- actionable restart-required toast for health check and resource limit saves (e21390c)
- actionable restart-required toast for health check and resource limit saves (e7112c9)
- add a restart action for apps (99f4873)
- add a restart action for apps (4a8287d)
- add age-based backup retention alongside count-based retention (#194) (64db57e)
- add backup targets settings page (c2a0619)
- add build.base_directory for monorepo subdirectory builds (#139) (afb0a53)
- add CLI support for deploying a Docker Compose file (#109) (0eb9b35)
- add cloudflare-tunnel CLI subcommands (#188) (a1cc9c6)
- add CPU/memory quick-stat cards to app overview (#163) (4160094)
- add dashboard home page at / (4bd810d)
- add developer-view raw text editor for env vars (4300911)
- add Dokploy as a migrate CLI source (#135) (dcef119)
- add Dragonfly and ClickHouse as managed database engines (#145) (b75a7d2)
- add editable port control to app overview page (8c5bd1e)
- add environment-level shared env var tier between project and app (#195) (0fede7b)
- add fullscreen size variant to dialog primitive (4b57d39)
- add fullscreen toggle to the create resource wizard (3106621)
- add GET .../secrets and POST .../secrets/{key}/lock endpoints (7aa3c46)
- add interactive wizard mode to apps create (#239) (0207202)
- add interactive wizard mode to databases create (#245) (106cd53)
- add levelrail-cli doctor command for local preflight health checks (#265) (91d20db)
- add list_audit_log MCP tool (#285) (4eb5ca5)
- add loading states across dashboard routes and data-fetching components (#248) (a91e388)
- add MariaDB and KeyDB managed database engines (#141) (01716bc)
- add MCP server, extract shared internal/apiclient package (#121) (e354a10)
- add migrate caprover CLI command (#191) (910081d)
- add Network tab showing live traffic path from domain to container (#148) (f29d827)
- add nodes CLI subcommands (#192) (abea231)
- add non-interactive exec endpoint for running commands in app containers (c5c86f8)
- add organization-level shared env var tier above projects (#193) (59d737b)
- add periodic OS package-update check per node (#220) (0d1a1d8)
- add projects CRUD, project env vars, and project membership to the CLI (#250) (e804735)
- add reversible per-secret lock to the store layer (bf808e5)
- add secret key listing and lock mutation hooks (97136ce)
- add settings sub-sidebar and fix stale route tree (#222) (428a5df)
- add SetValueGuarded, ListKeys, SetLocked to secrets.Manager (996ed50)
- add structured issue templates and type-specific PR templates (#77) (729a4ea)
- add System status dashboard page (#324) (b20f380)
- add test-connection action for backup targets (#307) (5d94dc0)
- admin recovery email, general email capability, forgot-password flow (b384f35)
- admin recovery email, general email capability, forgot-password flow (backend) (2d8b8d0)
- alert on repeated scheduled task failures (#290) (ed20b7d)
- allow clickhouse as an app.yaml database engine (#186) (5b957b5)
- allow pinning a service's host port (#170) (f861ea1)
- App Clone (78cf10e)
- App Clone (aed12f5)
- app detail screen polish - deploy history, grouped nav, build hints, convergence (ceddf79)
- App Overview hero+checklist, batched Apps list status (7e10b6e)
- App Overview hero+checklist, batched Apps list status (9fdc4e5)
- app volume backups (backend, API, CLI, and web UI) (#311) (9dccec3)
- app-detail polish - deploy columns, grouped nav, convergence badge, build-log hints (fa81b98)
- app-level scheduled tasks (#140) (fb66f24)
- apply resource limit changes to running containers live (#242) (c8f33cb)
- apps deploy/status/logs and databases commands for the CLI (89e0143)
- apps restart/rollback CLI subcommands (6f0f6b3)
- apps restart/rollback CLI subcommands (6932e10)
- apps table + read-path for multi-service app support (stage 1) (#61) (5cd187f)
- attribute audit log entries to their client and add retention (#316) (7bbe9c7)
- audit log CSV export via API, dashboard, and CLI (#277) (9dc536d)
- audit log for write/deploy/root-tier requests (#125) (665cb0c)
- auto-generate and persist master key on first boot (#60) (72265b0)
- auto-verify scheduled backups right after they complete (#280) (51722a8)
- backup file download to browser (3d6e8e9)
- backup file download to browser (6599a88)
- backup integrity verification (#273) (162dd0e)
- backup target onboarding, connect an S3-compatible bucket (25fab52)
- bounded health check and opt-in ufw setup in install.sh (#323) (060408f)
- breadcrumb and hierarchical navigation for org/project/environment/app (#173) (145ab27)
- browse and deploy from the curated service-template catalog (#119) (ccecb1f)
- build Docker Compose services with build: directives (#190) (fbaa87e)
- build pack selector and branch picker for git app creation (94d80c6)
- build pack selector and branch picker for git app creation (97aeeac)
- build.type: image, deploy a prebuilt registry image with no build (#124) (5e41b5e)
- built-in container registry (#366) (56dc8d6)
- BYO TLS certificate upload for domains (#363) (86a1e6d)
- centralized Domains page with ACME settings and app-domain list (5e6a421)
- changed-line coverage gate for PRs (#350) (2062874)
- CLI and dashboard wiring for organizations and environments (#169) (5ee8706)
- CLI CRUD for backup targets and registry credentials (#251) (1bba14d)
- CLI device login flow (auth login --device) (#319) (97ac63a)
- CLI exec, auth login/whoami, tokens, domains, backups commands (ae3c606)
- CLI exec, auth, tokens, domains, and backups commands (f2a9b48)
- CLI output formats and JMESPath query filtering (#318) (d94ea5b)
- CLI support for app-level scheduled tasks (#144) (d27f0f5)
- ClickHouse and Dragonfly backup/restore support (#157) (39689e9)
- close git provider capability gaps (GitLab branches, GitHub webhooks, aggregated status) (#228) (f16833a)
- Cloudflare Tunnel integration for outbound-only ingress (#138) (d235fc5)
- collect and surface node disk space as a real telemetry metric (#185) (b2064f3)
- connect a GitHub App for private-repo access and repo browsing (25e3952)
- connect a GitHub App for private-repo access and repo browsing (1a5fbe5)
- containers page and master key rotation UI, feature catalog doc (#358) (27a038c)
- Coolify migration CLI (levelrail-cli migrate coolify) (#45) (b980659)
- copyable DNS record rows and better layout for domain check (#63) (489e542)
- curated named roles (admin/operator/viewer) over the ability model (#240) (eff9f9a)
- curated service-template catalog and read-only browsing API (#117) (cc5581f)
- custom Docker labels escape hatch on spec.Service (6b03e8b)
- custom Docker labels escape hatch on spec.Service (0ef3331)
- dashboard empty states for alerts, deploy history, and log search (#238) (090dbde)
- dashboard home page at / (73e130f)
- database backups to S3-compatible storage, with restore (c34c67e)
- database publicly-accessible toggle + host port (78fb42f)
- database publicly-accessible toggle + host port (71b2a46)
- delete pruned scheduled-backup objects from their bucket (a76e782)
- delete pruned scheduled-backup objects from their bucket (f24d563)
- deploy comparison view (#272) (144976f)
- deploy-outcome notifications (6fc9cca)
- deploy-outcome notifications (c1bd571)
- deterministic resource right-sizing suggestions (#279) (ab7c147)
- dismissible dashboard nudge to enable platform-wide alert rules (#300) (aa23b42)
- docker compose as a deploy target (#97) (b67064b)
- draft autosave and guided defaults for create-resource forms (#260) (005830f)
- editable port control on app overview (41b6741)
- empty states and inline field guidance (0118b1e)
- empty states and inline field guidance (97a7a22)
- enforce frontend bundle size budget in CI (#299) (331bd52)
- env var tier provenance and audit activity panel in EnvEditor (#261) (3be751f)
- env/secrets developer view (frontend) (f771abe)
- expand MCP server tool coverage to nodes, previews, alerts, metrics, rollback (#252) (85f1bda)
- explicit Stop/Start action for apps (b460919)
- explicit Stop/Start action for apps (4d81635)
- extend resource right-sizing recommendations to databases (#288) (0c68dc3)
- fan out git push webhook deploys to sibling app-group services (#172) (b6998ff)
- feature flags with live evaluation via existing API tokens (#262) (6047a4b)
- fill CLI gaps for app lifecycle, database delete, secrets, git-source (#247) (01451be)
- forgot-password flow and email settings pages (frontend) (3da9466)
- forward app logs to an external HTTP or syslog sink (#137) (3ecc436)
- framework-aware guided deploy picker (9591ee4)
- framework-aware guided deploy picker (d2042e5)
- full-screen presentation for the create resource wizard (b33764b)
- fullscreen log viewer toggle and finish-aware auto-scroll (#226) (e5296b4)
- general per-actor rate limit on the authenticated API surface (#284) (9a47287)
- generic OIDC SSO as a third login provider (#160) (e398b88)
- GitHub Enterprise Server and Bitbucket Cloud git provider support (#221) (aaa03e2)
- GitLab App integration (#127) (91a0cc2)
- global notification channels settings page (ec520db)
- global notification channels settings page (e28ca4e)
- guided domain add flow with inline TLS status (9a5a818)
- guided domain add flow with inline TLS status (50bc930)
- guided domain DNS check (d03dafe)
- guided domain DNS check (9333eee)
- guided first-run onboarding flow for zero-app instances (#266) (db8b7a1)
- HTTP Basic Auth protection for domains, with helpful no-domain UX (#162) (7c1c4ea)
- IAM policies dashboard page (#322) (e43ea76)
- IAM-style resource-scoped policy engine (#317) (6be11f5)
- implement database dump mechanism for backup targets (61acbb9)
- implement database restore from backup (f405544)
- implement Redis backup restore (8e6cad3)
- implement Redis backup restore (e080529)
- implement rolling deploy strategy (#171) (2b6c679)
- ingress settings and domains API endpoints (189e9b3)
- ingress_settings store for ACME toggle and primary domain (2d3e226)
- land on the live build log after triggering a build (#67) (080a67e)
- let operators pick between CNAME, A, and AAAA for domain setup (#189) (6229630)
- levelrail-cli version command and CHANGELOG (#301) (947f147)
- lightweight non-RBAC Projects grouping (96f5c23)
- lightweight non-RBAC Projects grouping (b49ca26)
- list every container on a node, not just Levelrail-managed apps (#326) (73d0f17)
- list secret keys with reversible lock toggle in SecretsEditor (5cf50a5)
- live per-node alert status for patch_status, node_disk_space, node_resource_usage (#304) (94caeed)
- live SSE log broadcaster and stream endpoint for app containers (ab4670f)
- live-tailing terminal viewer for app container logs (1989c77)
- log export as a downloadable text file (#276) (758097a)
- make the New resource wizard friendlier to non-technical users (#70) (a692ae5)
- managed database logs and metrics (#225) (2d882ab)
- manual Docker disk/image/volume pruning (6577add)
- manual Docker disk/image/volume pruning (93ef2a2)
- manual GitHub App connect flow, domain disclaimer on automated setup (#104) (97e242b)
- master key rotation for envelope-encrypted secrets (#295) (592b779)
- MCP tools for feature flags, doctor, webhook deliveries, backup verification, deploy compare, notification deliveries (#274) (3b84bc8)
- memory/CPU resource limits for databases (f4a3b9f)
- memory/CPU resource limits for databases (d21df63)
- MongoDB as a managed database engine (#120) (f33de88)
- multi-service apps stage 2 (deploy fan-out + per-app Docker networking) (#75) (db6e96e)
- multi-service support in apps create --interactive (#349) (31c78aa)
- multi-user sessions, OAuth sign-in (Google/GitHub), users management (8a39531)
- multi-user sessions, OAuth sign-in, users management API (b555e67)
- named credentials profiles (--profile / APP_PROFILE) (#315) (f90903b)
- named-volume support for ordinary application services (#76) (6ba605f)
- node CPU/memory alert rule (node_resource_usage) (#297) (ca49158)
- node-level resource dashboard (224e8fb)
- node-level resource dashboard (e23c57f)
- non-interactive one-off exec in app containers (d37e3a0)
- notification channel test-send delivery history and CLI/UI wiring (#267) (470f2ff)
- OAuth sign-in UI, OAuth and Users settings pages (8f554c6)
- PagerDuty and Microsoft Teams notification channels (#151) (93409d1)
- paginate backup execution history (#143) (cb3686f)
- per-domain maintenance mode (#360) (6610745)
- per-user RBAC, extending the existing ability system to sessions (#131) (6d76d9d)
- persisted per-app git source + multi-app GitHub webhook (531afd4)
- persisted per-app git source + multi-app GitHub webhook (fd49569)
- persistent restart-required signal for env var changes (#263) (d51f5fa)
- post GitHub PR comments and commit statuses for preview deploys (#361) (2afbafb)
- pre/post-deploy hook commands (#362) (a296cb3)
- preview environments per pull request (#246) (0417adb)
- proactive alerting for certificate expiry (#283) (c57381e)
- proactive domain_health alert rule kind (#308) (6b9f241)
- proactive node disk space alerting (#293) (11b089c)
- proactive node patch status alerting (#289) (0781c20)
- promote an app's image across environments in the same project (#278) (eb9883d)
- protected environments with confirm-to-deploy friction gate (#282) (c91eef6)
- Pushover notification channel (#126) (47cf081)
- Railpack auto-detection for Node.js and Go builds (ba9d15b)
- Railpack auto-detection for Node.js and Go builds (3f296c5)
- read-only dashboard visibility for static sites (8040079)
- read-only deploy failure and crashloop diagnosis (#268) (eba61a9)
- real ACME issuer option in ingress config builder (dd3e709)
- real ACME issuer, platform primary domain, and centralized Domains page (8192230)
- real app-to-database attachment (#146) (f6cee9d)
- real deploy history, rollback, and build-log persistence (272c104)
- real deploy history, rollback, and build-log persistence (841a419)
- real multi-marker deploy history on the metrics chart (3655449)
- real multi-marker deploy history on the metrics chart (01c7406)
- real S3-compatible upload client for backup targets (fef6b4b)
- real-time deploy stage timeline and in-progress banner (#158) (59f61ba)
- real-time live log streaming for app containers (7f37281)
- redesign deploy detail page with metadata card and collapsible stages (#165) (453b610)
- redesign New Resource picker into a categorized, searchable modal (#110) (6ae5aa6)
- registry credentials for pulling private images (#130) (fbc1bb2)
- relabel git-source wizard card, elevate Railpack, add connect-GitHub CTA and domain field (#68) (1bbf90e)
- replace one-off empty states with shared EmptyState component (#164) (2a998d4)
- replace single-admin store with multi-user users table (65bda2b)
- required-check CI gate, CodeQL path filtering, label taxonomy and auto-labeler (#95) (116d50f)
- resolve SERVICE_FQDN_* magic vars to a service's own assigned domain (#113) (8a1465a)
- resolve template SERVICE_ magic vars in compose deploys (#108) (3198c84)
- restore a backup into a brand-new database, alongside in-place restore (#310) (0ab0e33)
- restore app volume backups as a new, standalone volume (#313) (2b5c60a)
- reuse GitRepoSourcePicker in GitSourceCard (#229) (d75549f)
- scheduled database backup configuration UI and CLI (#174) (cae179e)
- scheduled/cron backups (0d5f370)
- scheduled/cron backups (ab41a3c)
- scope new-resource picker to the caller's intent (#254) (9228977)
- secret key list/lock API + scope deploy trigger card to Overview/Deploys (35601c6)
- service templates, team invites, deploy comparison, notification channels, and MCP tools (b71b9bd)
- settings hub, global search, updates page, and ingress DNS transparency (#111) (cd9c327)
- shared/group env vars at the project level (7078159)
- shared/group env vars at the project level (f451f00)
- shell completion for levelrail-cli (bash, zsh, fish) (#270) (cdc18f4)
- splice generated secrets into composite env values (#118) (3120457)
- storage as an app resource (R2/S3) (6964d72)
- storage as an app resource (R2/S3) (18d2a4e)
- surface compose restart: and networks: as non-blocking notices (#287) (002bd8f)
- surface deploy strategy and replicas on the app screen (2878e9b)
- surface deploy strategy and replicas on the app screen (925e9e6)
- surface Docker daemon reachability as a dashboard-wide health check (#259) (9276ff2)
- swap memory and CPU pinning (cpuset) resource limits (#233) (2e2a09b)
- test registry credentials before deploy relies on them (#291) (f4c8721)
- thread ingress settings into the ingress reconciler (96f984d)
- TOTP two-factor authentication for admin login (#114) (55ec280)
- track commit sha and trigger source on deploy attempts (8894f40)
- translate compose healthcheck blocks into readiness probes (#286) (888c221)
- trigger and track a real database backup (e93c88c)
- trigger and track database backups from the database page (600b294)
- unify git provider connect flow, fix missing git-source and build bugs (#227) (b13deaa)
- unify webhook-triggered and manual multi-service deploys (#241) (669ede6)
- v1 install script, systemd unit, release build workflow (#44) (567af6e)
- webhook delivery history and replay (#269) (5776a64)
- wildcard domain support via Cloudflare DNS-01 (#152) (afae9c7)
- wire alert rules to global notification channels (bdc2b1d)
- wire alert rules to global notification channels (df4a033)
- wire developer-view toggle into the Environment section (4216271)
- wire Dockerfile build args through app spec, API, CLI, and UI (#155) (9367d6c)
- wire IAM policy resource-scoped enforcement into apps/databases routes (#321) (f0482a3)
- wire mesh DNS server into container creation (73b5377)
- wire mesh DNS server into container creation (d6fefdd)
- wire OAuth secrets, update recover-admin for multi-user store (6e171d7)
- wire prebuilt-image build type into CLI, UI, and git-source validation (#129) (9903572)
Bug Fixes
- accessibility gaps in git picker, log terminal, and nav sidebars (#232) (5f206a8)
- accessible names for placeholder-only domain/env form inputs (0888368)
- accessible names for placeholder-only domain/env form inputs (c9d40ad)
- adapt notification_channel.go to the email.Sender interface (efc055c)
- add accessible names to per-row feature flag toggle and rollout input (#275) (a0edb7f)
- add missing --json support to three CLI clear commands (#271) (50bac91)
- add TTL fallback sweep for preview environments across all git providers (#281) (e0db26e)
- allow railpack build type through apps create (#147) (c53543d)
- async build trigger, private repo auth, and ability-gated token minting (#64) (f6ca950)
- avoid BuildKit MergeOp deadlock in Railpack deploy image assembly (#149) (f9d3158)
- clear stored secrets when disconnecting a GitHub App (4055351)
- close forgot-password rate-limit bypass, remove dead admin-email frontend code (fe52150)
- close no-auth confirmation gap for KeyDB/Dragonfly, polish secrets CLI help (#303) (3d7d129)
- close pre-existing AppDetail test-fixture typecheck gaps (#264) (0c9e76a)
- correct misleading test name/comment on a secrets test (49191f0)
- crashloop alert's view-logs link goes to a dead same-page anchor (#218) (3ed2889)
- don't show a redundant inline error while the overwrite-confirm dialog is open (6dbad34)
- drop stale preview-envs docs claim, skip live Docker tests in short mode (#314) (f0a052e)
- eliminate race in TestHandleTriggerBuild_RecordsDeployAttempt_Succeeded (#298) (6094a5b)
- explain why the live logs tail is empty, don't just wait forever (#161) (d90a2ea)
- feed persisted build logs to diagnose for build-phase failures (#292) (b1a98b6)
- fix overflowing create-resource picker, add category filter (#255) (b73c49d)
- force 0.1.0 as release-please's first proposed version (#372) (bf5ad96)
- gate one-off container exec at AbilityRoot, not AbilityDeploy (c2cb301)
- generate routeTree.gen.ts before web lint, trim test duplication (#116) (5bc54e9)
- get the main frontend bundle under the 500kB warning threshold (fe49363)
- get the main frontend bundle under the 500kB warning threshold (397e45d)
- guard ClickHouse restore live test against entrypoint's temp-server handoff (#312) (807a297)
- image-sourced deploys show a clear no-build-output message (914a5ee)
- image-sourced deploys show a clear no-build-output message instead of hanging on 'Waiting for log output...' (0ac7e1f)
- land signed-in users on the dashboard, not /apps (#66) (9820068)
- live deploy log stream stuck on zero output (f365ad7)
- live deploy log stream stuck on zero output (b52572f)
- make password-reset token single-use atomic, tidy go.mod, trim comments (df72b84)
- mark orphaned deploy attempts as failed on startup (#159) (af04e62)
- move showDeployTrigger's useRouterState above the early-return (faaf90e)
- pin cel-go back to 0.28.1, incompatible with pinned Caddy version (#134) (be72bc2)
- pin golangci-lint-action to a commit SHA, suppress a false-positive Sonar finding (#352) (fd6aeb0)
- point install.sh at the real first-run registration path (#325) (d4840af)
- poll for post-stop/remove state on CI's daemon (4847f8a)
- poll for stopped state in Stop/Remove live test (2a4ae1b)
- poll for stopped state in Stop/Remove live test instead of asserting immediately (7824a79)
- pre-fill and suggest commands in the exec panel (#327) (a3fc79d)
- raise internal/api CI test timeout to fix false-failure panics on main (908bea4)
- raise internal/api's CI test timeout to 25m (2670e8f)
- re-ensure a container's network before restarting it (#150) (180bf63)
- record a deploy attempt when an app is created with a real image (#154) (189ae19)
- record deploy attempts for compose deploys and image-changing updates (#256) (67065ee)
- recreate a container whose Start fails even after EnsureNetwork (#153) (30af32a)
- reduce SonarCloud duplication flagged after #228 merged (#231) (ae21dbd)
- reject ACME contact emails with a display name (f55714f)
- renumber cloudflare-tunnel migration to 0049, collided with 0047 (#142) (20bbaf2)
- renumber deploy_attempts_commit_source migration to 0025 (84a30a0)
- renumber domain-basic-auth migration to 0053, collided with 0052 (#166) (3107714)
- renumber github app connection migration to 0029 (da478e0)
- renumber ingress_settings migration to 0024 (df671a9)
- renumber migration to 0028 (0027 claimed by service_labels) (a48c436)
- renumber migration to 0030 (0029 claimed by service_git_sources) (f93c3c6)
- renumber migrations past 0030_service_storage_target.sql (89b2f0e)
- renumber oidc-provider migration to 0054, collided with 0053 (#168) (448d960)
- renumber secret-lock migration to 0038 (0037 collision with PR #56) (27c275a)
- renumber users migration to 0035, dedupe nullableString helper (3ca070a)
- require MySQL readiness probe to hold twice before proceeding (96442a9)
- resolve duplicate migration version 0052 (#167) (1bf10f1)
- resolve migration 0030 number collision (github-app vs storage-target) (8b11236)
- resolve migration 0030 number collision between github-app and storage-target (47ecc8c)
- restore docker/docker + go-connections to versions internal/build/build.go's ImageLoadWithQuiet call needs (#100) (4d36c69)
- restore frontend checks in the pre-commit hook (#72) (e5e3887)
- restore main build and resolve SonarCloud findings on multi-service apps (#99) (3416514)
- restrict git branch listing to http/https schemes (0436b01)
- revert docker/docker, docker/go-connections, cel-go bumps (#98) (e4a0dc2)
- revert typescript to 6.0.x, main is broken for npm ci (#96) (aedf340)
- rework forgot-password and admin-email for the multi-user model (159e068)
- satisfy golangci-lint (revive, unparam) and fix dangling doc refs (a54dcd1)
- scope deploy trigger card to Overview and Deploys sections (1f79a92)
- scope MongoDB restore to drop non-system databases first (#309) (19d0323)
- set explicit Content-Type on remaining webhook-derived response bodies (#249) (1bd2238)
- small UX polish bundle (git-source validation, stale doc comment, database status dots) (#223) (a86503b)
- stop bundling zod into the eager main chunk via reset-password validateSearch (#230) (4a5cc80)
- stop clipping browse-templates category headers in a nested scroll box (#257) (c29ecf9)
- subscribe GitLab and Bitbucket webhooks to pull request events (#253) (2eacc2f)
- suppress SonarCloud false-positive on the intentional unconditional backfill UPDATE (#132) (4e45748)
- surface swap and CPU pinning limits on the app overview (#234) (ecfcae5)
- TestValidateDatabaseResource's unknown-engine case used mongodb, now a real engine (#122) (52492b9)
- unlock build fields after a failed build trigger in git app wizard (#224) (491e47c)
- unstick finished-attempt deploy log SSE connection status (ef97298)
- unstick finished-attempt deploy log SSE connection status (3acb273)
- update Docker client call sites deprecated by the docker/docker 28.x bump (#103) (0933d50)
- use localeCompare when sorting env var keys in dev view (#351) (534393d)
- verify github app installation status live against github, not just the local row (#294) (d54e05d)
- warn on missing secrets master key before database creation (3a113f8)
- warn on missing secrets master key before database creation (25a0305)
- widen TestCertStorage_TouchLock_KeepsItFresh's timing margin (#356) (dc55f2d)
- wire Dragonfly into app.yaml spec and database URL resolution (#187) (d5d6e58)
Performance Improvements
- scan only new log lines for build-log hints (36453f7)