This website requires JavaScript.
af970aa564
[grade=B] feat: real macOS .dmg built entirely on Linux (libguestfs + libdmg-hfsplus)
main
v1.0.0
Hermes
2026-09-01 03:36:16 -07:00
d87ca00e58
[grade=B] docs+cleanup: fix BUILD_GUIDE factual errors, document wine/i386 NSIS pitfall, drop .bak junk
Hermes
2026-09-01 00:51:24 -07:00
468bc00106
[grade=A] installer: stop shipping production CA private keys in installers
Hermes
2026-09-01 00:20:00 -07:00
b08de2955b
[grade=A] installer: fix 17 failing tests across 4 suites + tld data-loss bug
Hermes
2026-08-31 23:37:38 -07:00
c28322eb46
[grade=B] api: fix undeclared 'format' runtime bug in routes/ca.js + 10 lint errors
Hermes
2026-08-31 23:37:00 -07:00
b6678cf591
DC-061: remove superseded status/pricing/index.html and obsolete pricing-page-catalog test
Hermes
2026-08-23 20:24:42 -07:00
a7a2b70b2d
DC-061: claim for Hermes
Hermes
2026-08-23 20:20:43 -07:00
65a4d825fb
fix(dns): container DNS fallback must serve internal .sami TLD — replace 8.8.8.8 with DNS1 Technitium secondary (DC-121)
Hermes
2026-08-23 17:55:11 -07:00
46b6952c36
[glm-grade=A] fix(security): DC-120 surface caddy-source perimeter events in Log Insights dashboard — new GET /api/v1/security/events/perimeter endpoint with per-IP/per-vhost aggregations, event-store compileFilter/filterEvents primitives, and Perimeter section in Log Insights modal with XSS-safe rendering and stale-request guards
Hermes
2026-08-23 17:26:07 -07:00
4d97a11978
fix(build): frontend build determinism across line endings (DC-119) [glm-grade=A]
Hermes
2026-08-23 16:34:49 -07:00
1744d1c86e
fix(security): caddy-event self-noise conjunction filter for host curl probes (DC-118) [glm-grade=A]
Hermes
2026-08-23 15:53:58 -07:00
2dce6dca5e
fix(security): event-store retention + race + total-cap defects (DC-116) [glm-grade=B]
Hermes
2026-08-23 15:02:00 -07:00
65457ff8e0
feat(security): activate caddy security-event pipeline — bounded first-start replay, self-noise filter, host fidelity (DC-113) [glm-grade=A]
Hermes
2026-08-23 12:40:32 -07:00
a29a59a320
fix(security): name caddy-worker SSO gate events + dead-path visibility (DC-112) [glm-grade=A]
Hermes
2026-08-23 09:37:18 -07:00
56b807543c
fix(audit): restore named audit actions for SSO gate traffic — 3 live defects (DC-111) [glm-grade=A]
Hermes
2026-08-23 09:05:27 -07:00
0721b1cb04
fix(security): audit-logger PII masking parity with unified logger (DC-110) [glm-grade=A]
Hermes
2026-08-23 08:01:29 -07:00
9322831f1b
fix(security): quoted local-part email mask — strip delimiter quotes, split on last @ (DC-109) [glm-grade=A]
Hermes
2026-08-23 07:28:10 -07:00
c429b8fdd7
fix(security): redact-on-rotate for error.log archive + README PII docs (DC-108) [glm-grade=B]
Hermes
2026-08-23 05:22:04 -07:00
5efacd11e8
fix(security): close rotateEncryptionKey crash window with in-process key rollback (DC-107) [glm-grade=A]
Hermes
2026-08-23 04:40:41 -07:00
eb2bab7a96
refactor(persistence): migrate credential-manager to canonical atomic-write util (DC-106) [glm-grade=B]
Hermes
2026-08-23 03:06:58 -07:00
b1464d9b85
refactor(persistence): migrate caddy-upstream-watcher state to canonical atomic-write util (DC-105) [glm-grade=A]
Hermes
2026-08-23 02:31:16 -07:00
3c04a740e4
refactor(persistence): migrate bridge events file to canonical atomic-write util (DC-104) [glm-grade=A]
Hermes
2026-08-23 01:57:20 -07:00
6f8fac142f
refactor(persistence): migrate fulfillment-store to canonical atomic-write util (DC-103) [glm-grade=A]
Hermes
2026-08-23 01:21:28 -07:00
521b2f24a1
refactor(persistence): migrate share-store to canonical atomic-write util (DC-102) [glm-grade=A]
Hermes
2026-08-23 00:50:47 -07:00
7fd651f388
[grade=B] docs(backlog): resolve DC-054/085/086 status drift — mark done with verified evidence; DC-055 held in-progress with live-surface verification + explicit unverified end-to-end-Stripe gap
Hermes
2026-08-23 00:30:52 -07:00
09d56fde2c
refactor(persistence): migrate user-store to canonical atomic-write util (DC-101) [glm-grade=A]
Hermes
2026-08-23 00:21:41 -07:00
3742e2658d
refactor(persistence): migrate invite-store to canonical atomic-write util (DC-100) [glm-grade=A]
Hermes
2026-08-22 23:54:37 -07:00
86e4c9fc81
wip: Windows desktop app scaffold (WinUI 3/.NET 8) + NSIS installer + docs
wip/windows-app-scaffold
Hermes
2026-08-22 23:44:34 -07:00
80a82c4cae
refactor(persistence): canonical atomic file writer + notifications.json crash-safety (DC-099) [glm-grade=B]
Hermes
2026-08-22 23:28:36 -07:00
8d42eae6ac
feat(maintenance): one-shot PII redaction tool for pre-DC-095 log files (DC-098) [glm-grade=A]
Hermes
2026-08-22 22:24:38 -07:00
3ccd00d1a1
fix(notifications): persist canonicalized config on load — legacy keys no longer stale on disk (DC-097) [glm-grade=B]
Hermes
2026-08-22 21:52:19 -07:00
bb59595d6d
fix(config): monitoring.public gate was dead 4 ways — live gate + schema + dedupe (DC-096) [glm-grade=A]
Hermes
2026-08-22 21:35:51 -07:00
83ef84d218
feat(logging): central email PII masking across all log sinks [glm-grade=A]
Hermes
2026-08-22 20:49:09 -07:00
97672f7e74
[glm-grade=A] fix(notifications): un-gate 7 dead emitters + repair legacy 4-arg send shape (DC-094)
Hermes
2026-08-22 19:42:25 -07:00
5add962178
[glm-grade=B] fix(auth): /auth/me hotfix — isValid not isSessionValid + guard (DC-093 r2)
Hermes
2026-08-22 19:06:34 -07:00
4125d7a4e1
[glm-grade=B] fix(auth): mount /auth/me on single-user installs — kill the 60s 404 log storm (DC-093)
Hermes
2026-08-22 18:54:57 -07:00
7e4ee60dcf
[glm-grade=B] fix(notifications): repair UI/API contract drift — SMTP auth, event gate, test button (DC-092)
Hermes
2026-08-22 18:16:47 -07:00
1328cfda6b
[glm-grade=B] fix(notifications): repair UI/API contract drift — SMTP auth, event gate, test button (DC-092)
dc/DC-092-notifications-contract-drift
Hermes
2026-08-22 18:16:47 -07:00
5e60c27f2b
[grade=A] Harden server-managed license renewals
Hermes
2026-08-22 17:35:34 -07:00
df55677bd1
Merge DC-091: config-schema KNOWN_KEYS licenseBackup/_version fix [glm-grade=A]
Hermes
2026-08-22 17:22:20 -07:00
ddbea0a040
[glm-grade=A] fix(config): teach schema KNOWN_KEYS the licenseBackup/_version writer keys (DC-091)
Hermes
2026-08-22 17:22:13 -07:00
1d1cd5c95e
Merge dc/DC-090-incident-hysteresis-parity: outage incidents follow displayed hysteresis status [glm-grade=A]
Hermes
2026-08-22 16:53:02 -07:00
88f1d4a414
[glm-grade=A] fix(monitoring): DC-090 outage incidents follow displayed hysteresis status
dc/DC-090-incident-hysteresis-parity
Hermes
2026-08-22 16:52:53 -07:00
dd1110ef52
Merge dc/DC-089-invite-log-pii-masking: mask invite/user emails in server logs [glm-grade=B]
Hermes
2026-08-22 16:23:06 -07:00
6732a1e1df
[glm-grade=B] fix(auth): DC-089 mask invite/user emails in server logs
dc/DC-089-invite-log-pii-masking
Hermes
2026-08-22 16:22:53 -07:00
ea96abe95a
Merge dc/DC-088-remove-service-tombstones: removeService generation tombstones + incident closure [glm-grade=B]
Hermes
2026-08-22 15:55:29 -07:00
3ccf66754a
[glm-grade=B] fix(monitoring): DC-088 removeService generation tombstones + incident closure
Hermes
2026-08-22 15:55:26 -07:00
c71b794ccc
Merge dc/DC-087-test-mirrors-fetcht: hermetic caddy-admin test mirrors + raw-fetch guard [glm-grade=B]
Hermes
2026-08-22 15:14:35 -07:00
f2285a2550
test(api): DC-087 hermetic caddy-admin health mirrors + file-level raw-fetch guard [glm-grade=B]
dc/DC-087-test-mirrors-fetcht
Hermes
2026-08-22 15:14:25 -07:00
54a1df5ac4
[glm-grade=A] build(status): rebuild dist + sw — DC-085 link-first invite frontend bundle
Hermes
2026-08-22 14:28:21 -07:00
eb546bf468
Merge dc/DC-085-link-first-invite-dc-086-flicker-fix: DC-085 link-first invite + DC-086 badge flicker hysteresis + race hardening [glm-grade=A]
Hermes
2026-08-22 14:27:54 -07:00
84e051d975
Merge earlier-tick staging branch (duplicate DC-085/086 cherry-picks + auth-gate/vault tests) — content identical to eab2b00/f8b99f9
dc/DC-085-link-first-invite-dc-086-flicker-fix
Hermes
2026-08-22 14:27:40 -07:00
628bbe32f6
[glm-grade=A] fix(monitoring): DC-086 round-2 — probe/config race hardening + env parse + incident compare
Hermes
2026-08-22 14:23:25 -07:00
f8b99f9b5a
DC-086 service-status flicker fix — asymmetric hysteresis
Hermes
2026-08-20 04:46:17 -07:00
eab2b00b13
DC-085 link-first invite — Discord-style share it however you want
Hermes
2026-08-20 04:46:12 -07:00
84edb035e3
[grade=B] feat(auth): onboard missing credentials into encrypted vault
Hermes
2026-08-22 05:41:38 -07:00
d313b1e872
[grade=B] fix(auth): reuse valid session for cross-host SSO
Hermes
2026-08-22 04:06:27 -07:00
be021588c7
DC-086 service-status flicker fix — asymmetric hysteresis
Hermes
2026-08-20 04:46:17 -07:00
d8459a4a87
DC-085 link-first invite — Discord-style share it however you want
Hermes
2026-08-20 04:46:12 -07:00
499fcc2742
Merge dc/DC-084-arch-sami-caddy-healthcheck-removal: DC-084 remove redundant active Caddy health check from arch.sami [glm-grade=A]
Hermes
2026-08-19 01:43:30 -07:00
93d6c44e45
[glm-grade=A] docs(backlog): document DC-084 — remove redundant active Caddy health check from arch.sami
dc/DC-084-arch-sami-caddy-healthcheck-removal
Hermes
2026-08-19 01:43:10 -07:00
4c4ffc35ca
Merge dc/DC-082-update-manager-compose-prefix: DC-083 public share endpoint input hardening [glm-grade=A]
Hermes
2026-08-19 00:11:24 -07:00
7e68955e66
[glm-grade=A] fix(share): public-endpoint input hardening + rate limit (DC-083)
dc/DC-082-update-manager-compose-prefix
Hermes
2026-08-19 00:10:37 -07:00
7938cc76ec
[grade=A] docs: update DC-106 CHANGELOG to cover frontend builder
dc/DC-106
Hermes
2026-08-18 23:51:33 -07:00
5abf385c7e
[grade=A] feat(caddy-builder): DC-106 visual reverse proxy builder (frontend)
Hermes
2026-08-18 23:46:48 -07:00
089f5d2902
[glm-grade=A] fix(update-manager): compose-prefixed image names probe <project>/<service> not library/<project>-<service> (DC-082)
Hermes
2026-08-18 19:45:08 -07:00
0e7bb97129
[glm-grade=A] fix(log-insights): wire dispose to /app/data paths + bound keepDays (DC-081)
dc/DC-081-log-insights-dispose
Hermes
2026-08-18 18:56:13 -07:00
98737995a9
Merge dc/DC-080: Tailscale admin endpoint validation hardening (DC-080) [glm-grade=B]
DashCaddy Polish Loop
2026-08-18 18:35:59 -07:00
99ec6ebc53
fix(tailscale-admin): harden apiToken/tags/description validation (DC-080) [glm-grade=B]
dc/DC-080
Hermes
2026-08-18 18:32:34 -07:00
a7260436d1
fix(disaster-recovery): stage Caddyfile + close path-traversal in assets/themes (DC-079) [glm-grade=A]
feature/dc-064-discover-adopt-fetcht
dashcaddy-polish
2026-08-18 17:52:49 -07:00
a4e4b24732
fix(update-manager): force IPv4 + per-request timeout + transient-only retry on registry digest probes (DC-078) [glm-grade=A]
Hermes
2026-08-18 17:35:59 -07:00
0086de97da
Merge feature/dc-064-discover-adopt-fetcht: DC-077 nesting-guard silent no-op fix [glm-grade=B]
Hermes
2026-08-18 17:07:47 -07:00
18ffd2e519
fix(nesting-guard): export dataDir from src/config/paths; harden fallback to platform-paths (DC-077) [glm-grade=B]
DashCaddy Polish
2026-08-18 17:07:13 -07:00
2fef1c47e5
fix(ca): gate per-service cert/key download behind TOTP+admin scope; require explicit PFX password; add rate limit (DC-076) [glm-grade=A]
DashCaddy Polish Loop
2026-08-18 16:40:28 -07:00
e8c5a7a1fb
Merge dc/DC-074-sites-ssrf: DC-074 sites SSRF hardening [glm-grade=A]
DashCaddy Polish Loop
2026-08-18 15:31:14 -07:00
270e8d57e3
fix(sites): SSRF hardening — validate upstream + externalUrl reject private/reserved hosts (DC-074) [glm-grade=A]
DashCaddy Polish Loop
2026-08-18 15:31:07 -07:00
7db152499c
Merge dc/DC-073-caddy-upstreams-host-validation: DC-073 phantom-mute hardening [glm-grade=A]
DashCaddy Polish Loop
2026-08-18 15:10:40 -07:00
a9bb4a1835
fix(caddy-upstreams): validate host is known upstream on all 3 mute endpoints (DC-073) [glm-grade=A]
DashCaddy Polish Loop
2026-08-18 15:10:36 -07:00
b64f23301b
Merge dc/DC-072-exec-scope: DC-072 exec scope + containerId hardening (glm-grade=A)
DashCaddy Polish Loop
2026-08-18 14:54:06 -07:00
83d7c65bf2
fix(exec): scope-based authorization + tighten containerId charset (DC-072) [glm-grade=A]
DashCaddy Polish Loop
2026-08-18 14:53:57 -07:00
1462024944
Merge feature/dc-064-discover-adopt-fetcht: DC-070 caddycode config sanitization [glm-grade=A]
Hermes
2026-08-18 14:17:34 -07:00
297332b0e1
fix(caddycode): validate + escape generation config — block CRLF / " / brace injection in Caddyfile interpolation (DC-070) [glm-grade=A]
DashCaddy Polish Loop
2026-08-18 14:16:24 -07:00
384f9c8bdb
Merge remote-tracking branch 'origin/fix/dc-069-caddy-admin-ipv6-origin'
DashCaddy Polish Loop
2026-08-18 13:35:30 -07:00
933606ce3f
fix(caddy-admin): IPv6 loopback origin allowlist + bracket-strip helper (DC-069) [glm-grade=A]
fix/dc-069-caddy-admin-ipv6-origin
Hermes
2026-08-18 13:34:51 -07:00
5382d832d9
fix(fleet): SSRF hardening — hostname validation + DNS rebinding + probe-by-IP (DC-068) [glm-grade=A]
DashCaddy Polish Loop
2026-08-18 13:16:44 -07:00
c6b2f556c2
fix(openclaw): harden proxy — 5 MiB cap, RFC 7230 hop-by-hop strip, open-redirect (Location/Refresh/WWW-Auth) strip, path + status validators (DC-065) [glm-grade=A]
DashCaddy Polish Loop
2026-08-18 11:59:58 -07:00
4e75b13e90
Merge feature/dc-064-discover-adopt-fetcht: DC-064 discover-adopt fetchT (glm-grade=A)
DashCaddy Polish Loop
2026-08-18 11:32:14 -07:00
597bbf67c8
fix(discover-adopt): use fetchT + caddy.adminUrl (no hardcoded localhost:2019) (DC-064) [glm-grade=A]
DashCaddy Polish Loop
2026-08-18 11:31:47 -07:00
a2e2a12eb8
fix(routes): convert alias-import + canonical-shape callsites to canonical errorResponse (DC-063) [glm-grade=A]
feature/dc-063-errorresponse-canonical-conversion
Hermes
2026-08-18 10:53:29 -07:00
c01a011d47
[glm-grade=A] fix(caddy-upstreams): swap errorResponse arg order to statusCode-first; add type validator (DC-062)
DashCaddy Polish Loop
2026-08-18 09:03:58 -07:00
74fe35d969
Merge feature/dc-061-fix-export: preserve default-export compat for createDashboardWS
Hermes
2026-08-18 08:28:43 -07:00
678a0160c4
[glm-grade=A] fix(websocket): preserve default-export compat for createDashboardWS
dc/DC-061-build
Krystie
2026-08-18 08:28:24 -07:00
9779feae70
Merge feature/dc-061-websocket-auth: HMAC-verify dashboard WS auth + listener isolation
Hermes
2026-08-18 08:23:52 -07:00
30d5fdbb2c
[glm-grade=A] fix(websocket): HMAC-verify dashboard WS auth + listener isolation (DC-061)
Krystie
2026-08-18 08:22:29 -07:00
71d20ceef3
[glm-grade=A] fix(auto-restart): await async servicesStateManager.read() so handleContainerDown actually fires (DC-060)
dc/DC-061
Hermes
2026-08-18 05:52:32 -07:00
87f76aef66
[glm-grade=B] fix(disk-space): enforce monotonic threshold ordering (DC-059)
dc/DC-059
Hermes
2026-08-18 04:18:19 -07:00
8105bed3fb
[glm-grade=A] fix(csrf): tag browser auto-retry as [CSRF-debug], keep [CSRF] for real probes (DC-058)
dc/DC-058
DashCaddy Loop
2026-08-18 04:15:48 -07:00
2f76b83565
Merge feature/dc-057-backups-route-cleanup: remove dead-shadow /backups/schedule route
Krystie
2026-08-18 03:33:35 -07:00
0714bf2334
[glm-grade=A] fix(backups): remove dead-shadow POST /backups/schedule handler (DC-057)
feature/dc-057-backups-route-cleanup
Hermes
2026-08-18 03:32:54 -07:00
23922923a5
Merge feature/dc-056-aggregate-error-diagnostics: surface AggregateError causes in error.log
Krystie
2026-08-18 01:59:43 -07:00