@@ -4,6 +4,140 @@ All notable changes to argos-edge are documented here. Format
44follows [ Keep a Changelog] ( https://keepachangelog.com/en/1.1.0/ ) ;
55versions use [ Semantic Versioning] ( https://semver.org/spec/v2.0.0.html ) .
66
7+ ## [ 1.1.0] - 2026-04-21
8+
9+ Minor feature release. Focus on certificate lifecycle: three ACME
10+ challenge types, enriched renewal visibility, and full import
11+ support for operator-owned certificates including disaster-recovery
12+ materialisation on boot. Plus the navbar / layout refinements and
13+ the Security / Logs / Settings documentation pages that landed
14+ incrementally since v1.0.
15+
16+ ### Added
17+
18+ - ** ACME challenge selector** — new per-host ` tls_challenge ` field
19+ supporting ` dns ` (default, Cloudflare DNS-01 — unchanged from
20+ v1.0), ` http ` (HTTP-01 on :80), ` tls-alpn ` (TLS-ALPN-01 on
21+ :443). Host form gains a radio + amber reachability warning for
22+ the port-dependent challenges. See
23+ [ Reverse proxy → TLS challenges] ( docs/features/reverse-proxy.md#tls-challenges ) .
24+ - ** Auto-renewal UI** — ` /certs ` (now at ` /certificates ` ) is
25+ enriched with status badges (` ok ` / ` warning ` / ` critical ` /
26+ ` expired ` / ` unknown ` ), days-left column, last Caddy-error event
27+ (green/red dot + deep-link to filtered logs), next renewal
28+ estimate, and a ** Renew now** button that re-pushes the Caddy
29+ config so certmagic re-evaluates every cert.
30+ - ** Import own certificates (Feature 5)** — new ** Certificates →
31+ Imported tab** with an ** Import certificate** modal. Upload
32+ cert + key + optional chain; argos validates (cert/key match,
33+ domain covered including wildcards, lifetime, chain well-formed),
34+ encrypts the key with ` ARGOS_MASTER_KEY ` , writes files to the
35+ new ` caddy_manual_certs ` volume, and flips the host to
36+ ` tls_mode=manual ` atomically. Host edit modal shows a read-only
37+ summary card for manual hosts plus a link to the Certificates
38+ page. Full docs at
39+ [ Manual certificates] ( docs/features/manual-certs.md ) and
40+ [ Import own cert] ( docs/workflows/import-own-cert.md ) .
41+ - ** Manual cert DR reconciler** — on panel boot, after migrations
42+ and before the first Caddy reconcile, every ` host_manual_certs `
43+ row is checked against the shared volume. Missing ` .crt ` / ` .key `
44+ files are decrypted from the DB and materialised on disk. Makes
45+ the argos backup tarball (DB only) a self-contained DR unit for
46+ manual certs — ` caddy_manual_certs ` does not need out-of-band
47+ replication as long as ` ARGOS_MASTER_KEY ` is kept safe.
48+ - ** ` manual_cert_expiring_soon ` notification event** — daily cron
49+ fires at 30 / 14 / 7 / 1 days before expiry for each manual
50+ cert. Wire a notification rule to get a reminder before the
51+ cert lapses (manual certs have no auto-renewal by design).
52+ - ** ACME CA toggle** (from v1.0.1, included in this release) —
53+ global ` acme.ca_url ` setting + per-host ` tls_acme_ca_url `
54+ override + ` ARGOS_ACME_CA_URL ` env var. Switch the whole panel
55+ or one host to LE staging for development without burning
56+ production rate limits.
57+ - ** Cert troubleshooting operations page** —
58+ [ docs/operations/cert-troubleshooting.md] ( docs/operations/cert-troubleshooting.md )
59+ walks through the common failure modes per challenge type, rate
60+ limits, and when to use ** Renew now** vs restoring from a
61+ backup.
62+ - ** Security overview, Logs browser, Settings** feature docs —
63+ three new pages under docs/features/ covering ` /security ` ,
64+ ` /logs ` , and ` /settings ` .
65+ - ** GeoIP status card** in System → shows loaded DB versions, size,
66+ last refresh, next refresh, and a manual Refresh now button
67+ (from v1.0.x).
68+
69+ ### Changed
70+
71+ - ** Certificates page** : renamed from ` /certs ` to ` /certificates ` ,
72+ split into ` Active ` / ` Imported ` tabs. ` /certs ` route redirects
73+ to ` /certificates ` for external-link compatibility.
74+ - ** Host update API** : ` tls_mode ` validator now accepts ` manual ` .
75+ Round-tripping a manual-mode host no longer errors. Direct flip
76+ auto/none → manual without an upload is rejected with a clear
77+ message pointing at the import flow. Reverse flip (manual →
78+ auto/none) cascades cleanup of the manual cert row + files.
79+ - ** Navbar / layout** : always-on hamburger, status pills (AppSec
80+ always visible, LAN-mode conditional), content width cap at
81+ 1400 px, bigger logo, relative-timestamp component used across
82+ all list views.
83+ - ** Caddy config generation** : ` acmeIssuer ` emits a ` ca ` field when
84+ resolution returns non-empty (for staging / custom CA); omitted
85+ otherwise to preserve pre-1.0.1 behaviour.
86+
87+ ### Database
88+
89+ - ** Migration 021** : ` hosts.tls_acme_ca_url TEXT NOT NULL DEFAULT '' ` .
90+ - ** Migration 022** : ` hosts.tls_challenge TEXT NOT NULL DEFAULT 'dns' `
91+ with CHECK constraint.
92+ - ** Migration 023** (Go hook): creates ` host_manual_certs ` table
93+ (host_id, cert_pem, key_pem_encrypted, chain_pem, not_after,
94+ not_before, sans, fingerprint, uploaded_at, uploaded_by) and
95+ extends ` hosts.tls_mode ` CHECK to accept ` 'manual' ` . Uses the
96+ SQLite ` writable_schema ` pattern to update the CHECK in place
97+ without a full table rebuild.
98+
99+ All migrations are additive and roll forward cleanly from v1.0.
100+
101+ ### Volumes
102+
103+ - ** New** : ` caddy_manual_certs ` (host-side name:
104+ ` argos_caddy_manual_certs ` ) shared read-write into argos-panel
105+ and read-only into argos-caddy. Panel writes uploaded cert + key
106+ files here; Caddy reads them via ` tls.certificates.load_files ` .
107+
108+ Operators running a second instance via the
109+ [ multi-instances override] ( docs/operations/running-multiple-instances.md )
110+ must rename this volume alongside the others to avoid cross-stack
111+ collision — the override template is updated accordingly.
112+
113+ ### Documentation
114+
115+ - Installation Volumes table: listed 3 of the 8 volumes; rewritten
116+ to cover all 8 with backup-scope + "lose it and what happens"
117+ columns.
118+ - ` ARGOS_MASTER_KEY ` is-part-of-your-backup callout added to
119+ installation, upgrading, and restore workflows.
120+ - ` docker compose down -v ` danger callout added to upgrading +
121+ restore workflows (previously only in installation).
122+
123+ ### Upgrade notes
124+
125+ Standard upgrade — schema migrations run automatically on boot,
126+ all backwards-compatible:
127+
128+ ``` bash
129+ cd argos-edge
130+ git fetch --tags
131+ git pull
132+ docker compose pull
133+ docker compose up -d
134+ ```
135+
136+ Existing ` tls_mode=auto ` hosts keep DNS-01 via Cloudflare as the
137+ default challenge (migration 022 seeds every row with
138+ ` tls_challenge='dns' ` ). No action required unless you want to
139+ switch a host to HTTP-01 / TLS-ALPN-01.
140+
7141## [ 1.0.1] - 2026-04-21
8142
9143Safety-net release before the v1.1 cert-lifecycle push. Makes the
0 commit comments