Files
sencho/CHANGELOG.md
T
sencho-quartermaster[bot] 1f859d26d2 chore(main): release 0.89.0 (#1308)
Co-authored-by: sencho-quartermaster[bot] <275163604+sencho-quartermaster[bot]@users.noreply.github.com>
Co-authored-by: Anso <dev@saelix.com>
2026-06-04 23:16:00 -04:00

220 KiB

Changelog

All notable changes to this project will be documented in this file. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.89.0 (2026-06-05)

Added

  • appearance: add theme, accent, contrast, and typography personalization (#1307) (c0a2520)
  • mesh: refine the Routing tab and add per-route removal (#1311) (81858a0)
  • pricing: collapse to two tiers (#1309) (865d792)

Fixed

  • settings: reflect role, tier, and node scope in settings panels (#1300) (0683aa9)
  • settings: serialize GET /api/settings from an allowlist (#1299) (4596a90)
  • ui: center create-stack label and drop duplicate plus on mesh CTA (#1310) (9d30550)

0.88.2 (2026-06-03)

Fixed

  • metrics: host memory usage excludes reclaimable page cache (#1297) (42fc804)

0.88.1 (2026-06-03)

Fixed

  • api-tokens: harden rate limiting and surface list-load errors (#1292) (2435da2)

0.88.0 (2026-06-03)

Added

  • fleet-snapshots: add restore-all, per-file download, and scrollable preview (#1276) (e60c1c0)
  • mesh: add developer-mode diagnostics to the mesh data plane (#1287) (5e6e96e)
  • onboarding: add first-run environment checker (#1290) (5289f01)
  • recovery: add safe-mode recovery surface and emergency CLI (#1286) (c6d1631)
  • stacks: guided first stack import flow (#1285) (06b2526)

Fixed

  • blueprints: stop the deployment detail sheet flickering and show deploy progress (#1278) (f6c6ffe)
  • federation: gate node cordon control on node:manage to match backend (#1277) (dd2c2b2)
  • fleet-secrets: restrict bundle management to admin hub sessions (#1274) (9fb4ccc)
  • git-sources: return 200 for stacks without a Git source (#1294) (ae0b9d1)
  • mesh: hide node and stack management controls from non-admins (#1284) (c82a39c)
  • nodes: gate node-management actions by role and release pilot tunnels on delete (#1280) (35a1182)
  • nodes: never send stored node tokens to clients (#1281) (65a69d9)
  • notifications: stop subscribing to offline remote nodes (#1291) (a8f0ce9)
  • stack-files: record download metric when response closes after a full read (#1282) (5af0c04)
  • stacks: name the body field in the stack-create required error (#1289) (653be32)
  • stacks: reflect apply progress and clear the anatomy update banner (#1279) (2dd0660)

0.87.0 (2026-06-01)

Added

  • auto-heal: restart crashed containers and harden the heal loop (#1258) (dbb7fe8)
  • dashboard: surface metrics-stale indicator after sustained poll failure (#1213) (7c3ba3f)
  • deploy-panel: tell Community operators deploys lack auto-rollback (#1193) (27b8954)
  • fleet-sync: gate sync-status polling on admin role (#1271) (7d7e0a6)
  • fleet: show stack-label filtering in Fleet View on every tier (#1268) (d8f73f8)
  • labels: harden Stack Labels (gate parity, abort, dry-run, cap) (#1232) (2a29fed)
  • security: make CVE suppressions optionally honored by deploy-block policies (#1269) (085267b)
  • security: per-image scroll + retention cap in scan history (#1231) (42e8d3a)
  • sidebar: surface unreachable nodes in cross-node stack search (#1195) (5196f04)
  • stack-activity: in-process metrics, structured diagnostic logs, docs (#1229) (80499ee)
  • stack-files: cap directory listings at 1000 + add file-tree filter (#1208) (fcf2222)
  • stack-files: drag-and-drop upload zone (#1207) (ea002cd)
  • stack-files: force-text override for misidentified binary files (#1215) (d8b6f8c)
  • stack-files: in-process metrics and structured mutation logs (#1216) (9f2f13f)
  • stack-logs: WebSocket reconnect with backoff and gap sentinel (#1197) (07a2e8f)
  • stacks: in-process per-(nodeId, action) metrics + admin endpoint (#1196) (7ec6fe0)
  • stacks: optimistic concurrency on compose and env file writes (#1183) (fbd13ac)
  • stacks: server-side POST /api/stacks/bulk endpoint (#1185) (5aedc52)
  • stacks: structured 503 docker_unavailable envelope + disconnect tests (#1191) (009ec43)
  • stacks: surface post-deploy scan attempt status (#1198) (d727a55)

Fixed

  • app-store: harden template deploy, registry fetch, and catalogue refresh (#1250) (96c5f05)
  • atomic-deploy: harden rollback locking, restore fidelity, and tier gating (#1247) (45844b9)
  • audit-log: neutralize CSV export injection, clamp pagination, bound anomaly history (#1259) (5e66b54)
  • auto-heal: gate panel write controls on admin role (#1245) (b034de5)
  • auto-update: paid-gate execute route and harden image-check watchdog (#1257) (ca34691)
  • blueprints: gate Federation pin control on admin role (#1252) (d41282e)
  • dashboard: debounce state-invalidate refetches (#1209) (03a5826)
  • dashboard: decouple FleetHeartbeat refresh from the active local node (#1210) (0db0d29)
  • dashboard: slow HealthStatusBar sync-label tick to 5s (#1211) (6d995b9)
  • deploy-enforcement: surface scan-policy blocks on update and sidebar deploys (#1248) (b33a0e8)
  • deploy-progress: decouple deploys from the live progress stream (#1246) (5dea040)
  • editor: harden save-deploy, node-switch, delete, and stats reactivity (#1188) (7c84969)
  • fleet-actions: stop-by-label works on Community remote nodes (#1270) (7e0cffa)
  • fleet-snapshots: gate reads on admin role and encrypt content at rest (#1273) (c11a550)
  • fleet: gate node update actions to admins and harden update tracking (#1272) (0953025)
  • git-sources: harden webhook delivery, transport errors, and clone limits (#1249) (2844f60)
  • global-search: close the command palette on Escape deterministically (#1256) (a5bfd48)
  • global-search: surface unreachable nodes and harden the command palette (#1253) (98049e3)
  • host-console: audit session lifecycle and harden path, resize, and route gating (#1263) (d4fa4a4)
  • mesh: re-evaluate data plane every 10s and add opt-in auto-recreate (#1184) (aa3d99a)
  • mfa: enforce single-use backup codes under concurrent verification (#1262) (7e65a2a)
  • nodes: close capability-gating gaps in node compatibility (#1261) (d03d97d)
  • notifications: harden alert dispatch crash-safety and redact webhook secrets in logs (#1255) (7d4e616)
  • notifications: prevent self-container stack routing (#1242) (265fece)
  • observability: gate global logs to admins, scope to managed containers, harden SSE (#1254) (69edb0d)
  • rbac: enforce admin seat cap on promotion and harden last-admin and audit paths (#1266) (b61388c)
  • registries: keep registry endpoints local to each instance (#1267) (18762fa)
  • resources: harden Resources Hub data race, prune errors, and scan lifecycle (#1251) (eed7e04)
  • scheduled-ops: run stack lifecycle schedules on remote nodes and harden run visibility (#1260) (6fc7f20)
  • security: gate admin-only scan affordances on isAdmin (#1230) (117f590)
  • sidebar: cancel pending debounce emit on external value reset (#1244) (0a8e6a7)
  • sidebar: require admin role for Schedule task and debounce search input (#1243) (9791818)
  • sso: surface config load, test, and removal errors in the SSO settings UI (#1265) (4248ac0)
  • stack-activity: per-stack history integrity, attribution, sanitization (#1228) (2d56ea9)
  • stack-files: atomic write via tmp+rename with optional exclusive mode (#1205) (668eda6)
  • stack-files: avoid false failed download metrics (#1236) (92355d5)
  • stack-files: confirm before overwriting an existing upload target (#1204) (c8b095b)
  • stack-files: guard download stream destroy against the supertest in-process close race (#1227) (a4a8abb)
  • stack-files: optimistic concurrency on file-tab writes via mtime ETag (#1206) (4964320)
  • stack-files: prompt before discarding unsaved edits on file switch (#1203) (3e56696)
  • stack-files: symlink-aware delete and chmod (#1214) (c2357ec)
  • stack-files: track download metric off the file stream, not the response (#1220) (f86042b)
  • stacks: default Empty template ships ports block commented out (#1189) (8ba8875)
  • stacks: refuse file-explorer delete/rename/chmod on protected stack files (#1202) (37b1237)
  • stacks: require stack:read on file explorer GET routes (#1200) (4c28b37)
  • stacks: serialize concurrent lifecycle operations per stack (#1182) (60ecd57)

0.86.6 (2026-05-23)

Fixed

  • monitor: collapse repeated host-metric alerts into per-window summary (F-11) (#1175) (fcff8e9)
  • webhooks: address Codex review of PR #1177 (#1181) (f03c9dc)
  • webhooks: harden trigger response surface (#1177) (21ec5e7)
  • webhooks: hide write affordances from non-admin paid users (#1176) (a928267)

0.86.5 (2026-05-23)

Fixed

  • security: collapse repeated trivy-missing pre-deploy notifications (#1166) (0947da1)
  • stacks: close dialog and toast on Empty create (F-2) (#1168) (9d8d8ab)

0.86.4 (2026-05-23)

Fixed

  • monitor: decouple janitor disk-usage check from 30s cycle (F-6) (#1164) (a51547a)

0.86.3 (2026-05-23)

Fixed

  • mesh: bias Sencho static IP via IPAM IPRange (F-13) (#1162) (64bf634)

0.86.2 (2026-05-22)

Fixed

  • mesh: log boot state to console so docker logs surfaces mesh status (#1159) (4742900)

0.86.1 (2026-05-22)

Fixed

  • mesh: address Codex audit findings on F-1 PR (#1158) (e4fe4cf)
  • mesh: auto-fallback through candidate subnets when default overlaps (#1156) (1a03cf8)

0.86.0 (2026-05-22)

Added

  • cloud-backup: make Custom S3-compatible target available on every tier (#1143) (380ed6f)
  • files: open stack file explorer to every tier (#1144) (535023b)
  • fleet: move bulk Remote OTA updates to Community tier (#1151) (60f893a)
  • fleet: open Fleet Actions tab to Community (admin-only) (#1153) (519a59e)
  • notifications: move Notification Routing to Skipper tier (#1145) (66b8493)
  • resources: protect Sencho's own image, network, volumes from deletion (#1149) (b740dd1)
  • schedules: make every scheduled action available on Skipper (#1141) (c491d30)
  • security: move managed Trivy auto-update to Skipper tier (#1150) (8a3889d)

Fixed

  • fleet: equalize action card heights, swap order, replace native autocomplete (#1138) (2563e30)
  • fleet: route remaining fleet dispatches through getProxyTarget for pilot-agent nodes (#1152) (2f2401d)
  • frontend: wire favicon to existing logo assets (#1146) (dc8a368)
  • hub-only-guard: reject hub-only collection paths without trailing slash (#1142) (8d1304b)
  • resources: subtract shared layers when accounting managed prune bytes (#1155) (cd1cde2)
  • resources: use daemon-reported reclaimable image bytes (#1154) (a1caf6b)

0.85.0 (2026-05-21)

Added

  • api-tokens: make API tokens available on every tier (#1136) (d0e1404)
  • fleet: redesign Fleet Action cards to the System Sheet recipe (#1137) (6f301e0)
  • routing: redesign node cards to the System Sheet recipe (#1133) (cdb9cd4)

0.84.3 (2026-05-21)

Fixed

  • pilot: post-merge audit followups (WS via getProxyTarget, closeTunnel lifecycle, mesh source buffer, docs) (#1128) (e65c5e8)

0.84.2 (2026-05-20)

Fixed

  • mesh: address audit follow-ups (early-data, recompose, admiral gate, error codes, docs) (#1126) (982c783)

0.84.1 (2026-05-20)

Fixed

  • fleet: route remote update trigger through getProxyTarget (#1123) (0b50c88)
  • pilot: let SENCHO_PUBLIC_URL override the request Host in enrollment (#1122) (282ab8d)
  • self-update: resolve /app/data through bind or named volume (#1124) (ee891b0)

0.84.0 (2026-05-20)

Added

  • pilot: make Docker Compose the canonical pilot enrollment payload (#1121) (3ad6ea9)

Fixed

  • fleet: rename Traffic tab label to Routing for consistency (#1119) (0117556)

0.83.1 (2026-05-19)

Fixed

  • fleet-sync: make control-identity-mismatch sticky and surface in UI (#1117) (e05099f)

0.83.0 (2026-05-19)

Added

  • cloud-backup: paginate cloud snapshots list (#1110) (37413c1)
  • fleet-secrets: add Import from stack action to bundle editor (#1115) (e3e5943)

Fixed

  • fleet-secrets: align bundle-row action aria-label with icon ("Send") (#1116) (96d9bb9)
  • stack-update: refresh frontend state automatically after a stack update (#1113) (6722335)

0.82.1 (2026-05-19)

Fixed

  • spawn: attribute ENOMEM and ENOENT-under-memory-pressure spawn failures to host OOM (#1111) (9dbce9c)

0.82.0 (2026-05-19)

Added

  • fleet: add fleet-wide Docker prune to Fleet Actions (#1104) (1f67307)

Fixed

  • stack-editor: reset tab to compose.yaml when clicking edit (#1107) (3a839b7)
  • stacks: return 404 for nonexistent stacks on deploy/down/update (F-7) (#1108) (523ba58)

0.81.15 (2026-05-19)

Fixed

  • mesh: clean up activeStreams on src socket close/error (F-10) (#1105) (0cffd60)

0.81.14 (2026-05-18)

Fixed

  • security: suppress CVE-2026-41567 and CVE-2026-42306 against vendored docker-compose moby library (VEX) (#1102) (596cce3)

0.81.13 (2026-05-18)

Fixed

  • mesh: probe upstream synchronously in route diagnostic (F-11) (#1100) (c460bb8)

0.81.12 (2026-05-18)

Fixed

  • mesh: surface stopped-stack opt-ins on routing node cards (#1098) (554f662)

0.81.11 (2026-05-18)

Fixed

  • mesh: cascade opt-out when a stack is deleted (F-1 / F-14) (#1096) (9f238e1)

0.81.10 (2026-05-18)

Fixed

  • mesh: route peer→central traffic over the existing forward WS (#1094) (f6e4253)

0.81.9 (2026-05-18)

Fixed

  • http: strip zstd from Accept-Encoding so compression sets Content-Encoding (#1092) (ed49ed6)

0.81.8 (2026-05-17)

Fixed

  • mesh: recompose previously-meshed containers when alias set changes (#1090) (1d7418a)

0.81.7 (2026-05-17)

Fixed

  • mesh: surface data-plane failures in health, meta, and Routing tab (#1088) (578cac8)

0.81.6 (2026-05-17)

Fixed

  • mesh: close data-plane race that dropped early TcpData frames (#1086) (a318e6b)

0.81.5 (2026-05-17)

Fixed

  • mesh: cascade override regen across all meshed nodes on opt-in/opt-out (#1079) (a32183d)
  • stacks: prevent right-side clipping in Create Stack modal (#1081) (24155ca)

0.81.4 (2026-05-17)

Fixed

  • mesh: gate Trigger 2 re-bootstrap on actual api_token change (#1076) (9aaa857)
  • mesh: name actual bridge kind in proxy-bridge rejection (#1075) (7e3e221)
  • mesh: persist PilotMetrics counters across central restart (#1078) (6b72859)

0.81.3 (2026-05-17)

Fixed

  • mesh: persist rotated handshake when peer bridge owns reverse-dialer slot (#1073) (3a20105)

0.81.2 (2026-05-17)

Fixed

  • mesh: peer-initiated callback bridge installs reverse dialer (#1071) (0b4cf90)
  • security-ui: expose Community-tier scan surfaces per PR #930 (#1070) (6354cb3)

0.81.1 (2026-05-16)

Fixed

  • mesh: skip peer-side recovery in openCrossNode on central instances (#1068) (54d84a7)

0.81.0 (2026-05-16)

Added

  • mesh: symmetric WS dial for proxy-mode mesh peers (#1066) (cf618dd)

0.80.0 (2026-05-15)

Added

  • fleet: add node management actions to Fleet Overview (#1064) (16774ae)

0.79.0 (2026-05-15)

Added

  • api-tokens: switch to sen_sk_ prefixed opaque keys (#1062) (d882f22)

0.78.1 (2026-05-15)

Fixed

  • mesh: persist proxy-tunnel self-id across bridge teardown (#1060) (f63ffdd)

0.78.0 (2026-05-15)

Added

  • fleet: multi-mode topology with label grouping and persisted positions (#1054) (2e82eb4)
  • mesh: add topology graph view and per-stack drill sheet (#1052) (9e4b969)

Fixed

  • mesh: poll topology data and tighten stack-membership equality (#1059) (3323a59)
  • mesh: proxy peer learns its central-namespace nodeId at tunnel upgrade (#1055) (6185206)
  • mesh: reject opt-in when every service has empty ports (#1056) (3d5f0ff)
  • mesh: testUpstream dials via ensureBridge so proxy-mode targets are probeable (#1057) (489aab4)
  • ui: close user dropdown after clicking menu actions (#1058) (13e4edc)

0.77.1 (2026-05-15)

Fixed

  • mesh: accept node_proxy at the proxy-tunnel WS upgrade (#1050) (946db9d)

0.77.0 (2026-05-15)

Added

  • mesh: route mesh traffic over Distributed API remotes (#1048) (a38a3e0)

0.76.9 (2026-05-14)

Fixed

  • fleet: show capabilities, version, metrics, and stacks for pilot-agent nodes (#1044) (8dd0fce)
  • harden auto-heal policies (#1042) (e7a3b54)
  • harden git source webhooks (#1033) (c31d48b)
  • harden stack label permissions (#1036) (b523230)
  • harden stack management operations (#1046) (5461bc3)
  • harden vulnerability scan scheduling (#1035) (328a984)
  • monitor: parallelize per-container stats fetch in evaluation cycle (#1045) (2dda1be)
  • schedules: align Schedules surface with backend tier gate for Skipper admins (#1047) (44e40af)

0.76.8 (2026-05-12)

Fixed

0.76.7 (2026-05-10)

Fixed

  • mesh: enumerate stacks on remote pilot nodes for opt-in sheet (#1025) (b8af40d)

0.76.6 (2026-05-10)

Fixed

  • mesh: fix pilot handleAccept dispatch by deriving self nodeId from enrollment token (#1023) (41a1df2)

0.76.5 (2026-05-10)

Fixed

  • mesh: push alias port map to pilot so reverse-direction forwarder binds listeners (#1021) (6ac7da9)

0.76.4 (2026-05-10)

Fixed

  • mesh: apply D-1 pushed override on pilot deploys via file-presence fallback (#1019) (c12b3ba)

0.76.3 (2026-05-09)

Fixed

  • mesh: derive override services from compose file and surface cross-node dispatch (#1017) (2d9e4d0)

0.76.2 (2026-05-09)

Fixed

  • mesh: operator-triggered override regen and boot lifecycle hardening (#1016) (7cca68f)
  • mesh: trust central for cross-node dial auth and regenerate overrides at boot (#1014) (0947a80)

0.76.1 (2026-05-09)

Fixed

  • fleet: drop tier gate from stack and container list endpoints (#1012) (693f9b4)

0.76.0 (2026-05-09)

⚠ BREAKING CHANGES

  • mesh: the operator's docker-compose.yml no longer uses network_mode: host. After upgrading, redeploy any meshed stacks once so they pick up the new IP-based override and join sencho_mesh.

Added

  • mesh: replace host-mode with shared sencho_mesh Docker network (#1009) (23bbee4)
  • nodes: hide hub-only views when active node is remote (#1007) (ccad5c9)

0.75.1 (2026-05-08)

Fixed

  • mesh: bind every alias port on every node, not just local-owned (#1004) (10a469e)

0.75.0 (2026-05-08)

Added

  • drop stack labels and network topology to Community tier (#995) (1803512)
  • mesh: bidirectional routing via tcp_open_reverse and central relay (#1003) (567e524)
  • mesh: collapse sidecar into Sencho process via in-process forwarder (#1000) (f599110)

0.74.4 (2026-05-08)

Fixed

  • pilot: generate auth_jwt_secret on pilot-agent boot (#997) (3d1cf0f)

0.74.3 (2026-05-08)

Fixed

  • mesh: treat local-node aliases as always reachable in diagnostics (#994) (34581e5)

0.74.2 (2026-05-08)

Fixed

  • mesh: inspect remote stacks via HTTP proxy not Dockerode (#992) (e176ae9)

0.74.1 (2026-05-08)

Fixed

  • pilot: inject loopback auth on agent-side HTTP/WS forwarding (#990) (a6d3e5d)

0.74.0 (2026-05-08)

Added

  • app-store: show inline port-conflict message on deploy sheet (#984) (86abd90)

Fixed

  • pilot: harden outbound reverse-tunnel against resource exhaustion (#979) (3d94896)
  • pilot: stop silently swallowing fs errors in agent token helpers (#985) (8f13a7f)
  • proxy: route pilot-agent HTTP via PilotTunnelBridge loopback (#989) (94ce7c7)
  • templates: align App Store deploy gate with stack:create permission (#986) (3112f58)

0.73.0 (2026-05-07)

Added

  • fleet-sync: anchor replicas to a control fingerprint (#968) (f3757b4)
  • fleet-sync: hide other replicas' identity-scoped policies on a replica (#973) (a284732)
  • fleet-sync: replica self-demote endpoint and role UX (#969) (7dde257)
  • fleet-sync: retry failed pushes and backfill on add-node (#970) (33b15d6)
  • security: audit-hardening pass for fleet-replicated CVE suppressions (#976) (060bc30)
  • security: audit-hardening pass for secret and misconfiguration scanning (#977) (887d8fb)

Fixed

  • fleet-sync: clear stale policy_evaluation on replica sync swap (#971) (f8c75aa)
  • fleet-sync: hygiene pass on receiver behavior and cleanup (#972) (4007709)
  • fleet-sync: version the wire protocol and serialize per-node pushes (#967) (27660f6)

0.72.0 (2026-05-07)

Added

  • blueprints: capture compose snapshot before stateful eviction (#957) (7fe90d9)
  • fleet: add Federation tab with cordon and pin policy (Admiral) (#964) (52b4675)
  • fleet: add Fleet Actions tab for cross-node bulk operations (#963) (77d5ff5)
  • fleet: Fleet Secrets tab with env-var bundles (v1 MVP) (#965) (0f0b22c)
  • frontend: add SystemSheet primitive and migrate mesh sheets to §9.11 chrome (#960) (4d9617a)
  • frontend: migrate resources, app store, and blueprint sheets to §9.11 chrome (#962) (907e742)
  • frontend: SystemSheet §9.11 — security and scheduled sheets (PR 2/3) (#961) (3ec0a45)

0.71.2 (2026-05-06)

Fixed

  • harden MonitorService evaluation loop (#942) (13cb49c)

0.71.1 (2026-05-06)

Fixed

  • suppress ERROR logging for missing .env files in image update scan (#936) (72b6cdd)

0.71.0 (2026-05-06)

Added

  • dashboard: replace duplicate Recent Activity card with Fleet Heartbeat / Stack Restart Map (#932) (775fab7)
  • implement file explorer context menus and dialogs (#934) (0c3ce4b)
  • open security basics, manual fleet ops, and basic fleet management to Community (#930) (ecf4dd5)
  • sidebar: filter toggle + action button padding fix (#933) (166ba21)

Fixed

  • add CodeQL barrier model for sanitizeForLog against log injection (#935) (0dcf309)

0.70.0 (2026-05-05)

Added

  • resources: add image details sheet with layer history (#925) (7e5dc2d)
  • volumes: add read-only volume browser (#926) (49d775c)

Fixed

  • frontend: align sidebar brand box with top nav chrome (#928) (6f45a3b)
  • frontend: tighten bell notification panel toolbar (#929) (a85af40)

0.69.3 (2026-05-04)

Fixed

  • ci: create posts dir before writing scaffold output (#914) (73b5ca7)

0.69.2 (2026-05-04)

Fixed

  • backend: batch-insert stress test metrics to avoid per-insert fsync timeout (#911) (2e8ca76)

0.69.1 (2026-05-04)

Fixed

  • frontend: remove unused MockWS constructor param (#904) (34fcb25)

0.69.0 (2026-05-03)

Added

  • license: simplify community license page to activate form + pricing link (#892) (c06f937)
  • ui: add ConfirmModal, migrate EditorLayout inline confirms (#897) (d492594)
  • ui: add Modal chrome primitives, migrate file dialogs (#896) (898ef1a)
  • ui: hide paid features from community-tier dashboard (#891) (1f8ce77)

Fixed

  • ci: disable CLA Assistant PR auto-lock so release-please can comment (#890) (b9ada7f)

0.68.0 (2026-05-02)

Added

  • meta: gate deferred Fleet tabs behind SENCHO_EXPERIMENTAL flag (#886) (d69fb9f)

0.67.1 (2026-05-02)

Fixed

  • ci: tolerate empty inline blogPosts array in scaffold script (#883) (87abfc2)

0.67.0 (2026-05-02)

Added

  • entitlements: wire dynamic import of @studio-saelix/sencho-pro (#880) (cffb481)
  • frontend: add LazyBoundary for chunk-load failure recovery (#875) (b843b89)
  • frontend: code-split non-settings paid views and security overlay (#872) (a8d1a9d)
  • frontend: code-split paid-tier settings sections (#870) (fd05b5e)

Fixed

  • frontend: replace post-dismissal blur in PaidGate / AdmiralGate with click-to-restore pill (#874) (6fa0272)
  • frontend: short-circuit CapabilityGate and extract shared LockCard (#873) (6b74767)

0.66.2 (2026-05-02)

Fixed

  • license: reject activation when LS response is missing instance.id (#867) (d17562a)

0.66.1 (2026-05-02)

Fixed

  • license: verify LS store, product, and variant IDs in validate response (#862) (9f9e1bd)

0.66.0 (2026-05-01)

Added

  • blueprints: add Fleet > Deployments tab UI, node labels, and docs (#861) (e5391e6)
  • blueprints: backend foundation for fleet-wide compose templates (#860) (685d5d7)
  • editor: opt-in diff preview before save (#855) (a25acbe)
  • fleet: §16 orchestrator tab foundation (Deployments, Federation, Secrets) (#856) (b8437e8)
  • fleet: sencho mesh in traffic and routing tab (#858) (7663f4c)
  • pilot: add tcp tunnel frames + mesh sidecar package (#857) (6893ece)
  • settings: dress the page to match the audit (#849) (eead195)
  • sidebar: §14 sidebar orchestration, filter chips, pinned rail, trailing column (#850) (4c0efcb)
  • sidebar: bulk stack operations (#854) (a0bf5b5)
  • stack: per-stack activity timeline with actor attribution (#852) (3e01daf)

0.65.1 (2026-04-29)

Fixed

  • backend: resolve ts-node dynamic import and TS2322 narrowing errors (#839) (7d4390a)
  • cla: ensure signatures file has no BOM (1f21526)
  • cla: strictly enforce no-BOM UTF8 for signatures (1a67c6c)
  • convert: resolve TS7016 and TS2322 for composerize dynamic import (#837) (219dee7)
  • docker: upgrade CLI to v29.4.1 and Compose to v5.1.3, clear VEX (#836) (e124874)

0.65.0 (2026-04-28)

Added

  • scaffold: fully automate release blog post publishing (#810) (b5acfd8)

Fixed

  • backend: batch audit_log inserts into a buffered transaction (#817) (5cf4323)
  • backend: cache global_settings reads in DatabaseService (#814) (836e384)
  • backend: lazy-load @aws-sdk/client-s3 in CloudBackupService (#820) (14c25a6)
  • backend: lazy-load composerize and isomorphic-git (#819) (329b4ec)
  • backend: mark AWS SDK clients as optional dependencies (#821) (04f35fd)
  • backend: parallelize independent startup initializers (#816) (18cf2e6)
  • backend: parallelize pruneManagedOnly removals (#830) (46fae21)
  • backend: replace docker system df shell-out with dockerode API (#818) (279ec62)
  • build: enable incremental tsc (#827) (f4338c9)
  • docker: switch builder stages to npm ci (#822) (eb1d627)
  • fleet: forward main node tier to remote config fetch and hide local-only fields (#811) (ae8211c)
  • frontend: lazy-load Monaco editor + diff editor (#824) (b5d038f)
  • frontend: lazy-load xterm chunk + addons (#825) (e74b4db)
  • frontend: parallelize auth bootstrap fetches (#826) (405f9cd)
  • frontend: split heavyweight vendors into manual chunks (#823) (f5dd8af)
  • proxy: cache LicenseService tier headers for the proxy hot path (#815) (61a7e43)
  • test: build baseline DB once via vitest globalSetup (#829) (2000653)
  • test: cap vitest fork pool at 4 workers (#828) (65f43b8)

0.64.2 (2026-04-27)

Fixed

  • backend: use URL parser for registry scheme + template host check (#808) (6ac02c7)
  • deps: bump dompurify to 3.4.0 to resolve four advisories (#801) (c18d369)

0.64.1 (2026-04-27)

Fixed

  • docker: build compose plugin from ./cmd, not ./cmd/compose (#803) (06d9ef5)

0.64.0 (2026-04-27)

Added

  • app-store: sort grid by stars and rotate featured weekly (#787) (dcf8794)
  • auto-update: per-stack auto-update enable/disable toggle (#771) (af9cb0a)
  • auto-update: show pending image updates fleet-wide on the Auto-Updates page (#770) (58df1a5)
  • change default listen port from 3000 to 1852 (#756) (ed553f1)
  • cloud-backup: mirror fleet snapshots to S3-compatible storage (#782) (03f91cd)
  • dashboard: replace 24h charts with Configuration Status and Recent Activity (#785) (d7d8f9b)
  • deploy-logs: opt-in deploy progress modal with structured log rows (#779) (dd9d338)
  • events: broadcast state-invalidate on docker events so dashboard updates live (#768) (5c50218)
  • files: per-stack file explorer (#780) (801a098)
  • license: replace local auto-trial with Lemon Squeezy hosted trial flow (#755) (d6b744e)
  • notifications: add structured category enum to dispatcher and history (#774) (44dba59)
  • notifications: match routing rules by labels and categories (#776) (e003413)
  • scheduler: add auto_backup, auto_stop, auto_down, auto_start and delete_after_run one-shot mode (#777) (abee078)
  • scheduler: support fleet-wide auto-update schedules per node (#773) (a74564f)
  • security: add SBOM attestations, VEX document, and retire .trivyignore (#790) (3668c71)
  • security: rebuild Docker CLI/Compose from source, pin base image digests (#789) (7e4ea71)
  • sidebar: keyboard shortcuts for stack menu actions (#729) (1ef9658)
  • sso: split SSO providers by delivery model across tiers (#754) (a502da5)
  • stacks: add optional volume prune to delete confirmation (#788) (38a9f27)
  • stacks: add Schedule task shortcut to stack context and kebab menus (#772) (819d2a6)
  • stacks: per-service start/stop/restart lifecycle actions (#778) (6986b92)

Fixed

  • auto-update: label same-tag rebuilds as 'Rebuild available' instead of '10.11 -> 10.11' (#766) (584cda7)
  • backend: restore remote proxy mount order before local routers (#747) (43a5959)
  • env: return empty body for missing .env files; surface non-OK responses cleanly (#767) (a962654)
  • frontend: clear sidebar update dot after toolbar Update click (#763) (5746104)
  • frontend: make copy buttons work over plain HTTP (#757) (4c35226)
  • frontend: stream log lines on next paint and show ms-precision timestamps (#764) (c9657b1)
  • login: remove branding duplication, add shimmer and ping dot (#727) (d47f6b4)
  • logs: drop millisecond suffix from log timestamp display (#769) (c7cdcd0)
  • monitor: include node name in janitor alert and stop firing on near-empty hosts (#765) (9e0f521)
  • notifications: scope routing rules to nodes via node_id column (#775) (fcbdd59)
  • security: clear cached policy evaluations when a scan policy is deleted (#758) (24c0a28)
  • sidebar: remove 1-hour staleness filter from activity ticker (#786) (f94b2ce)

0.63.0 (2026-04-21)

Added

  • auth: redesign login, MFA, and setup surfaces with cockpit voice (#714) (0a01980)
  • design-system: retune oklch tokens to cozy-pebble palette (#709) (2b499cb)
  • fleet: aggregate labels across nodes and allow remote edits (#710) (a41af47)
  • fleet: interactive topology with ReactFlow hub-and-spoke layout (#713) (d95e154)
  • fleet: reorganize overview page for clarity and density (#712) (6f132b7)
  • notifications: add per-node filter and 60s refetch safety net (#717) (3e1fb76)
  • search: add global Ctrl+K command palette (#711) (856de35)
  • security: enforce scan policies as a pre-deploy gate (#719) (661b9c6)
  • security: polish scan sheets, fix CVE links, surface policy violations (#721) (12c2b37)
  • settings: surface security, notifications, and app store on remote nodes (#716) (08f57c7)
  • sidebar: cockpit redesign with grouped stacks and activity footer (#702) (370b67d)
  • sidebar: inline label create, live sync, and kebab submenu parity (#706) (75370d8)
  • ui: redesign global logs as cockpit surface (#699) (b95442c)
  • ui: redesign host console as cockpit surface (#701) (490c89c)

Fixed

  • app-store: use stack name as compose service key (#704) (9f861e0)
  • dashboard: remove peak indicator dot from CPU sparkline (#705) (5f2d678)
  • security: convert scan history from full page to sheet overlay (#720) (e4fdb1c)
  • sidebar: distinct fuchsia notification dot for update indicator (#708) (c7dfde4)
  • trivy: remove unsupported --no-progress flag from trivy config (#718) (aa10db1)
  • ui: raise toast z-index above dialog overlays (#715) (a42cc5b)

0.62.0 (2026-04-19)

Added

  • notifications: deep-link bell rows to source stack and container logs (#692) (ed2a16a)
  • sidebar: global multi-node stack search with status (#685) (bd94ef9)
  • stack-view: anatomy panel replaces always-open yaml (#690) (9e41d5e)
  • stack-view: identity header with health state and action hierarchy (#688) (82aabfe)
  • stack-view: per-container health strip and structured logs viewer (#689) (a65a1c0)
  • ui: redesign node switcher as sidebar identity anchor (#694) (e721742)
  • ui: redesign top bar as chrome-glass masthead (#696) (5589110)
  • ui: redesign user menu and notification panel (#691) (7c01906)
  • ui: replace Switch with TogglePill per design audit (#687) (88ec71f)
  • ui: wire overlay popovers to density tokens (#695) (72a1ecd)

0.61.0 (2026-04-18)

Added

  • app-store: editorial hero, category rail, security scan signal per tile (#679) (ec76206)
  • audit-log: signal rail, day-banded stream, anomaly detection (#682) (591dc75)
  • dashboard: status masthead, unified gauges, stack health sparklines (#676) (748ba46)
  • design-system: adopt cyan as data color, add Instrument Serif, introduce label roles (#674) (7ec189d)
  • fleet: add aggregate masthead and local-vs-remote topology (#677) (c3b06f4)
  • resources: lead with reclaimable disk banner and per-tab landings (#678) (5f6fdfc)
  • schedules: next-24h timeline + merge auto-update into schedules (#681) (9527884)
  • settings: add comfortable/compact density toggle (#683) (ad90bd9)
  • settings: group sections, add ⌘K search, scope breadcrumb (#680) (0bf061a)

0.60.0 (2026-04-18)

Added

  • auto-heal policies for unhealthy containers (#671) (5bb4b01)

0.59.0 (2026-04-18)

Added

  • pilot agent outbound-mode for remote nodes (#667) (8e7a567)

0.58.1 (2026-04-17)

Fixed

  • security: relabel unchanged bucket for cross-image comparisons (#662) (e0f2e23)
  • security: server-driven pagination for scan history (#661) (2fce1d3)
  • security: signal when scan comparison is truncated (#658) (c211f65)

0.58.0 (2026-04-17)

Added

  • security: severity-aware scheduled scan notifications (#654) (29ed052)

0.57.0 (2026-04-17)

Added

  • fleet: replicate scan policies across managed nodes (#649) (708d15b)
  • scheduler: notify on scheduled scan completion (#646) (e660d2a)
  • security: export scan results as SARIF 2.1.0 (#652) (12bbf86)
  • security: fleet-replicated CVE suppression list (#650) (732fc95)
  • security: scan comparison UI (#648) (8ee0c0c)
  • security: secret and misconfiguration scanning (#651) (a95bf1f)

0.56.0 (2026-04-17)

Added

  • security: one-click managed Trivy install (#643) (61bac08)

0.55.1 (2026-04-17)

Fixed

  • security: harden Trivy scan lifecycle, logging, and docs (#639) (dc8370f)

0.55.0 (2026-04-16)

Added

  • images: Trivy-powered vulnerability scanning (#635) (c9cd699)

0.54.1 (2026-04-16)

Fixed

  • sso: harden Custom OIDC provider and SSO configuration (#630) (6890224)

0.54.0 (2026-04-16)

Added

  • add Custom OIDC provider and move SSO to Community tier (#626) (7c6df0a)

0.53.0 (2026-04-16)

Added

0.52.0 (2026-04-15)

Added

  • mfa: UX hardening — auto-submit, paste tolerance, low-codes warning, dev-mode diagnostics (#620) (4722028)

0.51.0 (2026-04-15)

Added

  • auth: add TOTP two-factor authentication with backup codes (#615) (7d78c9f)

0.50.0 (2026-04-15)

Added

  • git-sources: harden create-from-git with LFS + submodule warnings (#609) (6529a24)

0.49.0 (2026-04-15)

Added

  • git-sources: create a stack from a Git repository (#606) (3955267)

0.48.1 (2026-04-15)

Fixed

  • git-sources: harden validation, RBAC, concurrency, and deploy recovery (#603) (00901cf)

0.48.0 (2026-04-15)

Added

  • git-sources: link stacks to Git repositories with diff-and-apply workflow (#600) (377df7e)

0.47.0 (2026-04-14)

Added

  • registries: harden Private Registry Credentials feature (#597) (6275adc)

0.46.20 (2026-04-14)

Fixed

  • notifications: stop Sencho version notifications from silently skipping (#594) (6b8c369)

0.46.19 (2026-04-14)

Fixed

  • docker-events: harden crash detection against edge cases (#591) (44a89d9)

0.46.18 (2026-04-14)

Fixed

  • notifications: replace polling with Docker event stream for container lifecycle detection (#588) (ad9a685)

0.46.17 (2026-04-14)

Fixed

  • notifications: resolve version notification showing 0.0.0 and backfill missing image update notifications (#586) (4a03193)

0.46.16 (2026-04-14)

Fixed

  • network-topology: harden with edge-case fixes, logging, and test coverage (#583) (23fc702)

0.46.15 (2026-04-14)

Fixed

  • host-console: harden with security fixes, validation, and test coverage (#580) (718c1eb)

0.46.14 (2026-04-14)

Fixed

  • container-exec: harden with security fixes, validation, and test coverage (#577) (c4ff583)

0.46.13 (2026-04-14)

Fixed

  • notification-routing: harden with security fixes, validation, and test coverage (#573) (e59df35)

0.46.12 (2026-04-14)

Fixed

  • alerts: harden with security fixes, design compliance, and test coverage (#570) (0a94df3)

0.46.11 (2026-04-13)

Fixed

  • api-tokens: harden with security fixes, design compliance, and test coverage (#567) (e0d1ca9)

0.46.10 (2026-04-13)

Fixed

  • sso: harden SSO with role sync, security fixes, design compliance, and test coverage (#564) (1d89e8c)

0.46.9 (2026-04-13)

Fixed

  • audit: harden audit log with summary fixes, design compliance, and test coverage (#561) (6daa7a1)

0.46.8 (2026-04-13)

Fixed

  • rbac: harden user management with token versioning, session invalidation, and test coverage (#558) (c261fbc)

0.46.7 (2026-04-13)

Fixed

  • fleet: harden fleet snapshots with DRY capture, audit fixes, and design compliance (#555) (809bf76)

0.46.6 (2026-04-13)

Fixed

  • labels: harden stack labels with nodeId filtering, concurrency guard, and test coverage (#552) (a695251)

0.46.5 (2026-04-13)

Fixed

  • scheduler: harden scheduled operations with stale cleanup, cron validation, and design fixes (#549) (44e8fdf)

0.46.4 (2026-04-13)

Fixed

  • scheduler: harden auto-update policies with cascade deletes, error reporting, and UI fixes (#545) (a17b16b)

0.46.3 (2026-04-13)

Fixed

  • fleet: harden remote node updates with admin enforcement, expiry fix, and diagnostics (#542) (d23c677)

0.46.2 (2026-04-13)

Fixed

  • logs: harden global logs with shared parsing, SSE fixes, and level filter (#539) (a74a516)

0.46.1 (2026-04-13)

Fixed

  • fleet: add auth middleware, input validation, and design system compliance (#536) (1702dab)

0.46.0 (2026-04-12)

Added

  • app-store: add port conflict indicator to deploy sheet (#533) (cd3d7b2)

0.45.6 (2026-04-12)

Fixed

  • app-store: handle orphaned stack directories on template deploy (#530) (5f91e16)

0.45.5 (2026-04-12)

Fixed

  • resources: harden Resource Explorer with auth, validation, design, and UX fixes (#527) (4909c35)

0.45.4 (2026-04-12)

Fixed

  • app-store: harden App Store with auth, validation, bug fixes, and design compliance (#523) (d4882d3)

0.45.3 (2026-04-12)

Fixed

  • stacks: harden stack management with security, validation, and logging (#520) (2465f76)

0.45.2 (2026-04-12)

Fixed

  • dashboard: harden real-time dashboard with bug fixes and design compliance (#517) (9db9710)

0.45.1 (2026-04-12)

Fixed

  • updates: scan all filesystem stacks for image updates (#514) (4950cd0)

0.45.0 (2026-04-12)

Added

  • add automated docs pipeline and scaffold /docs folder (9496b14)
  • add Community/Pro licensing, fleet view, and UI reorganization (#145) (4f26f22)
  • add update-screenshots CI job and screenshot capture spec (ed8b8e3)
  • api-tokens: add scoped API tokens for CI/CD automation (Team Pro) (#220) (8d8118c)
  • api: add global rate limiter for all API endpoints (#317) (b28ebfa)
  • app-store: category filter bar + custom registry settings (ae4540b)
  • app-store: category filter bar and custom registry settings (34cad76)
  • audit logging, secrets at rest, and legacy cleanup (#205) (1799030)
  • audit-log: add configurable retention, export, Auditor role, and enhanced filtering (#258) (d586ce3)
  • auth: redesign Login and Setup pages with split-panel branding layout (#153) (e0319b5)
  • auth: redesign Login and Setup pages with split-panel branding layout (#168) (f80190d)
  • auto-refresh doc screenshots on develop push (eaf2177)
  • auto-update: add auto-update policies and fix image update detection (#297) (28c7a8f)
  • automated docs pipeline (05a6b93)
  • ci: add release-please automated versioning workflow (c2d5d37)
  • ci: add release-please automated versioning workflow (c2d5d37)
  • ci: add release-please automated versioning workflow (c294def)
  • ci: automated versioning with release-please (c991b81)
  • ci: automated versioning with release-please (c991b81)
  • contact: add official contact emails throughout app and docs (#428) (8e0857e)
  • dashboard: add node badge to Recent Alerts for remote node alerts (#423) (a6849ae)
  • dashboard: redesign as DevOps command center (#371) (2ee959e)
  • design: animated design system foundation with animate-ui and motion (c34092f)
  • design: animated design system foundation with animate-ui and motion (0cb5fae)
  • docker: add linux/arm64 platform support via xx cross-compilation (cf19390)
  • docker: add linux/arm64 platform support via xx cross-compilation (cf19390)
  • fleet: add Pro fleet management features and container drill-down (#174) (0630f57)
  • fleet: add remote node update management (#353) (87b5908)
  • home dashboard and Settings Hub polish (#506) (622c1f9)
  • host-console: gate Host Console behind Admiral tier (#277) (b5d3f49)
  • labels: add stack labels for organizing, filtering, and bulk actions (#341) (28e7be6)
  • license: distributed license enforcement across multi-node setups (#359) (6c26ae3)
  • multi-node: warn when configuring remote node with plain HTTP URL (#292) (e587256)
  • nav: add pulsing animation to local node status dot (#418) (8920d8c)
  • nodes: add capability-based node compatibility negotiation (#350) (ee75811)
  • nodes: add per-node scheduling and update visibility (#344) (efbd20f)
  • notifications: add shared notification routing rules (Admiral tier) (#347) (1b573f5)
  • notifications: aggregate alerts from all connected nodes in the notification panel (16f55bb)
  • notifications: aggregate alerts from all nodes in the notification panel (1690f0d)
  • notifications: replace polling with WebSocket push (4d1aef7)
  • notifications: replace polling with WebSocket push (a5ac3e4)
  • RBAC, atomic deployments, and fleet-wide backups (Pro) (#181) (db73d76)
  • RBAC, atomic deployments, fleet backups, and licensing (Pro) (#185) (32a7d53)
  • rbac: add Deployer & Node Admin roles with scoped permissions (Team Pro) (#253) (8380fba)
  • registries: add private registry credential management (Team Pro) (#240) (244c83a)
  • release: sign and attest published docker images (#480) (2a2efb8)
  • resources: add loading toast for prune, delete, and purge operations (#426) (f6d2199)
  • resources: add network management with create, inspect, and topology (#338) (24299a0)
  • resources: add network management with create, inspect, and topology visualization (#335) (4488637)
  • resources: managed/unmanaged resource separation across Resources Hub (2a444bd)
  • resources: managed/unmanaged resource separation across Resources Hub (5191737)
  • scheduled-ops: add failure notifications, granular targeting, and history export (#286) (eccdd1b)
  • scheduled-ops: add scheduled operations for Team Pro users (#231) (31e1795)
  • settings: harden settings API and overhaul SettingsModal (23a2259)
  • settings: harden settings API and overhaul SettingsModal (322e717)
  • settings: replace static license CTA with dynamic upgrade cards (#201) (d3828e8)
  • settings: scope split — developer settings always target local node (f7e8e40)
  • SSO & LDAP authentication for Team Pro (#209) (bd4008f)
  • stack context menu, tier icons, centered logo & support (#194) (dda1671)
  • stack-management: add scan stacks folder button (#332) (6f74153)
  • stacks: per-stack action tracking, optimistic status, and bulk status endpoint (#362) (dfd4d28)
  • stacks: state-aware sidebar context menu and Open App action (#368) (55d3b8c)
  • topology: overhaul network topology with dagre layout, enriched nodes, and click-to-logs (#447) (3ee4fe6)
  • UI polish sprint — 7 items + logs toolbar redesign (#365) (f9ebd1d)
  • ui: glassmorphism redesign with settings decomposition (#274) (7637091)
  • ui: redesign top bar with three-zone navigation layout (#237) (b7e7ee8)
  • ui: theme-aware sidebar logo with dark/light variants (#74) (b25574a)
  • webhooks: add CI/CD webhook integration for triggering stack actions (Pro) (#177) (4fc3633)

Fixed

  • add --exclude='.git' to the rsync invocation. (8902f6f)
  • add linux/arm64 platform to Docker build for ARM server support (12467c3)
  • alerts: overhaul alerts & notifications system for local and remote nodes (33c4976)
  • alerts: overhaul alerts & notifications system for local and remote nodes (e190f3a)
  • api-tokens: harden scope enforcement and add expiration support (#224) (954994c)
  • api-tokens: harden scope enforcement and block sensitive endpoints (#228) (5b607de)
  • api: add tiered rate limiting to prevent polling lockouts (#460) (8e1b982)
  • auto-update: proxy update execution to remote nodes via Distributed API (#419) (ca8f227)
  • billing: hide billing portal for lifetime licenses (#427) (be7eda8)
  • charts: suppress Recharts dimension warnings on initial render (#141) (c6633b0)
  • ci: add linux/arm64 Docker build support with QEMU optimization (#76) (278f7f1)
  • ci: add load: true to buildx so Trivy can find the built image (353fd25)
  • ci: correct release-please changelog section names and tag format (ea57cbe)
  • ci: correct release-please changelog section names and tag format (ea57cbe)
  • ci: correct release-please changelog section names and tag format (e653bc2)
  • ci: docker-publish tag trigger (6cd84ba)
  • ci: docker-publish tag trigger + re-release v0.1.0 (6cd84ba)
  • ci: exclude .git from rsync --delete in sync-docs (aefeb7a)
  • ci: exclude .git from rsync --delete in sync-docs (8902f6f)
  • ci: fix sync-docs empty-repo crash and update-screenshots protected-branch push (bed63f8)
  • ci: fix sync-docs empty-repo crash and update-screenshots protected-branch push (9505132)
  • ci: fix update-screenshots token and sync-docs empty-repo handling (392a49e)
  • ci: fix update-screenshots token and sync-docs empty-repo handling (b24863d)
  • ci: release-please config corrections (b6391b9)
  • ci: release-please config corrections (b6391b9)
  • ci: trigger docker-publish on v* tag push instead of GitHub Release event (c8047c2)
  • ci: trigger docker-publish on v* tag push instead of GitHub Release event (c8047c2)
  • ci: trigger docker-publish on v* tag push instead of GitHub Release event (6c911fd)
  • ci: update lock files after adding ESLint deps and fixing high CVEs (3cf9f02)
  • ci: use double-quoted string for if condition to fix YAML parse error (f5c5eda)
  • ci: YAML syntax error and sync-docs git directory failure (dfa93c0)
  • ci: YAML syntax error in if condition and safe.directory for sync-docs (dc79683)
  • compose: move atomic backup out of stack folder, silence stale stats 404s (#498) (ba9c4f4)
  • console: send proxy tier headers for remote node console-token requests (#424) (2354bee)
  • csp: allow external images in App Store and suppress console warnings (#138) (c5217cd)
  • dashboard: correct stale Stats reset with inactive field (0d5dc57)
  • db: recreate stack_update_status table with composite primary key (#356) (4fe4ac5)
  • deps: migrate SSO OIDC code to openid-client v6 (#492) (12fe79f)
  • docker: add entrypoint for volume permission handling (593a709)
  • docker: entrypoint for volume permission handling (c743f6c)
  • docker: fix xx cross-compilation sysroot for native modules (#80) (381701e)
  • docker: fix xx cross-compilation sysroot for node-pty and C++ modules (518b0af)
  • docker: install Docker CLI v29.3.1 from static binaries to resolve CVEs (#268) (f9b86e6)
  • docker: repair broken entrypoint from bad merge conflict resolution (987fc3d)
  • docker: replace QEMU npm execution with tonistiigi/xx cross-compilation (#78) (1e0014e)
  • docker: upgrade Compose v2.40.3 → v5.1.1 to remediate dependency CVEs (#283) (36ebd5a)
  • docker: use native g++ for same-platform builds, xx-clang only for cross (f23d8c6)
  • e2e: fill api_token in nodes tests so submit button is enabled (707a5e8)
  • e2e: fix stacks timeout and nodes skip in CI (14c24c8)
  • e2e: fully rewrite nodes tests to handle Radix UI Select and remote type flow (12bbe51)
  • e2e: get all E2E tests passing and fix AlertDialog crash on delete (f7471a1)
  • e2e: use #node-name locator instead of getByLabel in nodes tests (e01c0d6)
  • e2e: use button role for Resources nav item in screenshots spec (b0e2b2d)
  • e2e: wait for sidebar stacks to finish loading before assertions (#149) (9ba9a3a)
  • editor: bundle Monaco locally to fix stuck Loading state (0eaa45b)
  • editor: bundle Monaco locally to fix stuck Loading state (0eaa45b)
  • editor: bundle Monaco locally to fix stuck Loading state and CSP block (79fde6e)
  • editor: ESLint unused params fix (dd5b698)
  • editor: ESLint unused params fix (dd5b698)
  • editor: Monaco CSP fix + release pipeline fixes (36a9bf3)
  • editor: Monaco CSP fix + release pipeline fixes — v0.2.1 (36a9bf3)
  • editor: remove unused params from getWorker to satisfy ESLint (34172a9)
  • editor: remove unused params from getWorker to satisfy ESLint (34172a9)
  • editor: remove unused params from getWorker to satisfy ESLint (59290e9)
  • env: resolve 404 when loading env files and CSP inline script violation (#134) (1e6367a)
  • error-handling: surface silent errors across the codebase (#326) (10597d2)
  • fleet: add Docker Hub fallback for version detection on private repos (#463) (8adcef8)
  • fleet: capture local self-update helper errors (#495) (4003e7c)
  • fleet: detect updates via GitHub Releases instead of gateway self-comparison (#454) (368bef2)
  • fleet: filter invalid version strings from UI display (#399) (2089e75)
  • fleet: forward host bind mounts to self-update helper container (#509) (023e962)
  • fleet: make local self-update flow reliable end-to-end (#472) (3d69746)
  • fleet: navigate to editor instead of dashboard on "Open in Editor" click (#289) (71ce6b3)
  • fleet: prevent modal flash when clicking Recheck button (#457) (8de82ed)
  • fleet: resolve ENOENT when triggering remote node self-update (#413) (1b890b4)
  • fleet: resolve getSenchoVersion crash in Docker containers (#391) (d437a19)
  • fleet: resolve getSenchoVersion crash in Docker containers (#396) (670a429)
  • fleet: resolve remote node capability detection failures (#388) (dee7c66)
  • fleet: resolve self-update compose file access and improve completion detection (#441) (6fff2c2)
  • fleet: resolve stuck update states and improve detection (#405) (cc2da99)
  • fleet: resolve version detection pipeline for Docker builds (#402) (a55d124)
  • fleet: resolve version detection using package.json over stale generated constant (#410) (8ba4532)
  • fleet: strip trailing slash in fetchRemoteMeta URL construction (#444) (8080540)
  • gate SSO and Audit behind Team Pro license tier (#213) (8d48b0a)
  • license: default 14-day trial to Personal Pro instead of Team Pro (#216) (f99abe9)
  • licensing: backward-compatible tier/variant enforcement and self-healing variant detection (#385) (9e0c9d3)
  • licensing: rename variant values to skipper/admiral and store resolved type (#379) (797623e)
  • licensing: resolve Admiral variant detection and lifetime license handling (#376) (f841c40)
  • licensing: resolve variant from product_name when variant_name lacks tier info (#382) (b08f698)
  • lint: resolve all backend ESLint errors to pass CI lint step (e876a91)
  • lint: resolve all ESLint errors to pass CI lint step (c8a54a9)
  • logs: cap DOM rendering to 300 rows to prevent browser OOM crash (ec3a249)
  • merge: resolve CHANGELOG conflict with develop (9f0257e)
  • nav: remove toggle behavior on navigation tabs (#417) (5b06992)
  • proxy: prevent remote 401 from triggering local session logout (278aa22)
  • proxy: prevent remote 401 from triggering local session logout (aeefd79)
  • proxy: re-stream express.json()-consumed body to remote nodes for POST/PUT/PATCH (a703707)
  • proxy: skip express.json() for remote proxy requests to fix body forwarding (ed69543)
  • remediate Dependabot and Docker Scout security vulnerabilities (#265) (59fd528)
  • resources: unify container/resource classification with multi-fallback resolution (#425) (662bc1a)
  • run as root by default to eliminate stack-folder permission failures (#501) (9eb945a)
  • scheduled-ops: audit log text, run attribution, prune targets, and pagination (#234) (330eec4)
  • schedules: filter auto-update policies from Scheduled Operations view (#420) (455bfa8)
  • security: disable COOP header and Vite module-preload polyfill (c36ee93)
  • security: disable COOP header and Vite module-preload polyfill (35a57e5)
  • security: enforce stack name validation on all routes (#314) (1ab04be)
  • security: explicitly disable upgrade-insecure-requests via Helmet 8 API (50df5b3)
  • security: harden encryption key permissions, increase password minimum, remove sensitive logs (#323) (f317a83)
  • security: pre-launch security hardening audit & remediation (#320) (2d6b4c2)
  • security: prevent path traversal via env_file resolution (#311) (dc545dd)
  • security: remove CSP upgrade-insecure-requests and HSTS for HTTP deployments (25012a0)
  • security: remove CSP upgrade-insecure-requests and HSTS over HTTP (cf2946c)
  • settings: prevent X button overlap and add tooltip to Always Local badge (ed0817b)
  • sidebar: resolve stacks showing unknown status when compose name field is set (#416) (88011e1)
  • stacks: avoid resource busy error in Docker fallback deletion (#271) (10d1636)
  • stacks: resolve permission denied error on stack deletion (#261) (116f15d)
  • stats: classify managed containers by working_dir instead of project name (16e978b)
  • stats: classify managed containers by working_dir instead of project name (d62ac09)
  • trigger docs sync on develop instead of main (7d1b996)
  • ts: remove unused motion import from alert-dialog (0dd72b3)
  • ts: use type-only import for Node to satisfy verbatimModuleSyntax (94d6c8f)
  • ui: resolve 9 animated design system bugs including Monaco tab height accumulation (22e6462)
  • ui: settings modal sidebar nav clipped on smaller viewports (#280) (9e14ce9)
  • ui: standardize toast background to match floating overlay glass style (#451) (089d43b)
  • unify caching behind a single CacheService and enable HTTP compression (#468) (c0c3212)
  • ws: fix remote node console — delegate console session tokens (6c518ce)
  • ws: fix remote node console by delegating console session tokens (30fe77c)

Security

  • harden terminal WebSocket endpoints against three attack vectors (2e0f3e2)
  • pre-release hardening, automated testing, and production readiness (ce50db0)

0.44.1 (2026-04-12)

Fixed

  • fleet: forward host bind mounts to self-update helper container (#509) (023e962)

0.44.0 (2026-04-12)

Added

  • home dashboard and Settings Hub polish (#506) (622c1f9)

0.43.4 (2026-04-11)

Fixed

  • run as root by default to eliminate stack-folder permission failures (#501) (9eb945a)

0.43.3 (2026-04-11)

Fixed

  • compose: move atomic backup out of stack folder, silence stale stats 404s (#498) (ba9c4f4)

0.43.2 (2026-04-10)

Fixed

  • fleet: capture local self-update helper errors (#495) (4003e7c)

0.43.1 (2026-04-10)

Fixed

  • deps: update SSO/OIDC integration for upstream library v6 (#492) (12fe79f)

0.43.0 (2026-04-10)

Added

  • release: sign and attest published docker images (#480) (2a2efb8)

0.42.7 (2026-04-10)

Fixed

  • fleet: make local self-update flow reliable end-to-end (#472) (3d69746)

0.42.6 (2026-04-10)

Fixed

  • unify caching behind a single cache layer and enable HTTP compression (#468) (c0c3212)

0.42.5 (2026-04-10)

Fixed

  • fleet: add Docker Hub fallback for version detection on private repos (#463) (8adcef8)

0.42.4 (2026-04-09)

Fixed

  • api: add tiered rate limiting to prevent polling lockouts (#460) (8e1b982)

0.42.3 (2026-04-09)

Fixed

  • fleet: prevent modal flash when clicking Recheck button (#457) (8de82ed)

0.42.2 (2026-04-09)

Fixed

  • fleet: detect updates via GitHub Releases instead of gateway self-comparison (#454) (368bef2)

0.42.1 (2026-04-09)

Fixed

  • ui: standardize toast background to match floating overlay glass style (#451) (089d43b)

0.42.0 (2026-04-09)

Added

  • topology: overhaul network topology with dagre layout, enriched nodes, and click-to-logs (#447) (3ee4fe6)

0.41.2 (2026-04-08)

Fixed

  • fleet: strip trailing slash in fetchRemoteMeta URL construction (#444) (8080540)

0.41.1 (2026-04-08)

Fixed

  • fleet: resolve self-update compose file access and improve completion detection (#441) (6fff2c2)

0.41.0 (2026-04-08)

Added

  • contact: add official contact emails throughout app and docs (#428) (8e0857e)
  • dashboard: add node badge to Recent Alerts for remote node alerts (#423) (a6849ae)
  • resources: add loading toast for prune, delete, and purge operations (#426) (f6d2199)

Fixed

  • billing: hide billing portal for lifetime licenses (#427) (be7eda8)
  • console: send proxy tier headers for remote node console-token requests (#424) (2354bee)
  • resources: unify container/resource classification with multi-fallback resolution (#425) (662bc1a)

0.40.0 (2026-04-07)

Added

  • nav: add pulsing animation to local node status dot (#418) (8920d8c)

Fixed

  • auto-update: proxy update execution to remote nodes via Distributed API (#419) (ca8f227)
  • nav: remove toggle behavior on navigation tabs (#417) (5b06992)
  • schedules: filter auto-update policies from Scheduled Operations view (#420) (455bfa8)
  • sidebar: resolve stacks showing unknown status when compose name field is set (#416) (88011e1)

0.39.6 (2026-04-07)

Fixed

  • fleet: resolve ENOENT when triggering remote node self-update (#413) (1b890b4)

0.39.5 (2026-04-07)

Fixed

  • fleet: resolve version detection using package.json over stale generated constant (#410) (8ba4532)

0.39.4 (2026-04-07)

Fixed

  • fleet: resolve stuck update states and improve detection (#405) (cc2da99)

0.39.3 (2026-04-06)

Fixed

  • fleet: resolve version detection pipeline for Docker builds (#402) (a55d124)

0.39.2 (2026-04-06)

Fixed

  • fleet: filter invalid version strings from UI display (#399) (2089e75)

0.39.1 (2026-04-06)

Fixed

  • fleet: resolve getSenchoVersion crash in Docker containers (#396) (670a429)

0.39.0 (2026-04-06)

Added

  • add automated docs pipeline and scaffold /docs folder (9496b14)
  • add Community/Pro licensing, fleet view, and UI reorganization (#145) (4f26f22)
  • add dynamic template registry and smart volume path sanitizer (536a714)
  • add update-screenshots CI job and screenshot capture spec (ed8b8e3)
  • Advanced Error Handling & Probes (b90db01)
  • api-tokens: add scoped API tokens for CI/CD automation (Admiral) (#220) (8d8118c)
  • api: add global rate limiter for all API endpoints (#317) (b28ebfa)
  • App Store Polish (5c7e08a)
  • App Templates & One-Click Installs (b519fbb)
  • app-store: category filter bar + custom registry settings (ae4540b)
  • app-store: category filter bar and custom registry settings (34cad76)
  • audit logging, secrets at rest, and legacy cleanup (#205) (1799030)
  • audit-log: add configurable retention, export, Auditor role, and enhanced filtering (#258) (d586ce3)
  • auth: redesign Login and Setup pages with split-panel branding layout (#153) (e0319b5)
  • auto-refresh doc screenshots on develop push (eaf2177)
  • auto-update: add auto-update policies and fix image update detection (#297) (28c7a8f)
  • automated docs pipeline (05a6b93)
  • ci: add release-please automated versioning workflow (c2d5d37)
  • ci: automated versioning with release-please (c991b81)
  • dashboard: redesign as DevOps command center (#371) (2ee959e)
  • Deployment Freedom & Polish (a6bf1a3)
  • design: animated design system foundation with animate-ui and motion (c34092f)
  • docker: add linux/arm64 platform support via xx cross-compilation (cf19390)
  • Dynamic Templates & Sanitizer (c05654b)
  • Enterprise Logs & Dev Mode (b32cf54)
  • fleet: add Pro fleet management features and container drill-down (#174) (0630f57)
  • fleet: add remote node update management (#353) (87b5908)
  • host-console: gate Host Console behind Admiral tier (#277) (b5d3f49)
  • implement app templates storefront and deployment engine (1676dc2)
  • implement centralized logging and historical metrics dashboard (a4a5365)
  • implement dynamic volumes, custom env vars, and timezone detection (f2fbca1)
  • implement enterprise sse global logs and developer mode (448a64a)
  • implement pre-deploy collision checks and universal two-stage t… (12aab3a)
  • implement pre-deploy collision checks and universal two-stage teardown (b979525)
  • implement real-time container log streaming via SSE (49cef7a)
  • implement remote tls/ssh security, isolate system stats, and polish ux (2a37e11)
  • implement smart error parser and post-deploy health probe (953049a)
  • integrate official lsio api and rich template metadata (f9e8874)
  • labels: add stack labels for organizing, filtering, and bulk actions (#341) (28e7be6)
  • license: distributed license enforcement across multi-node setups (#359) (6c26ae3)
  • multi-node: warn when configuring remote node with plain HTTP URL (#292) (e587256)
  • nodes: add capability-based node compatibility negotiation (#350) (ee75811)
  • nodes: add per-node scheduling and update visibility (#344) (efbd20f)
  • notifications: add shared notification routing rules (Admiral tier) (#347) (1b573f5)
  • notifications: aggregate alerts from all connected nodes in the notification panel (16f55bb)
  • notifications: aggregate alerts from all nodes in the notification panel (1690f0d)
  • notifications: replace polling with WebSocket push (4d1aef7)
  • Official LSIO API Integration (33b4881)
  • polish app store ui and add advanced deployment configuration (44acfd7)
  • RBAC, atomic deployments, and fleet-wide backups (Skipper and Admiral) (#181) (db73d76)
  • RBAC, atomic deployments, fleet backups, and licensing (Skipper and Admiral) (#185) (32a7d53)
  • rbac: add Deployer & Node Admin roles with scoped permissions (Admiral) (#253) (8380fba)
  • registries: add private registry credential management (Admiral) (#240) (244c83a)
  • Remote Nodes Foundation (457c997)
  • Remote Nodes foundation: nodes table, node registry service, node management API, Node Manager UI, active-node switcher, and Nodes settings tab (02e1ebe)
  • Remote Nodes Security & Polish (2373043)
  • Remote Nodes Wiring & SSH Adapters (8a4f887)
  • resources: add network management with create, inspect, and topology (#338) (24299a0)
  • resources: add network management with create, inspect, and topology visualization (#335) (4488637)
  • resources: managed/unmanaged resource separation across Resources Hub (2a444bd)
  • scheduled-ops: add failure notifications, granular targeting, and history export (#286) (eccdd1b)
  • scheduled-ops: add scheduled operations for Admiral users (#231) (31e1795)
  • settings: harden settings API and overhaul SettingsModal (23a2259)
  • settings: replace static license CTA with dynamic upgrade cards (#201) (d3828e8)
  • settings: scope split: developer settings always target local node (f7e8e40)
  • SSO & LDAP authentication for Admiral (#209) (bd4008f)
  • stack context menu, tier icons, centered logo & support (#194) (dda1671)
  • stack-management: add scan stacks folder button (#332) (6f74153)
  • stacks: per-stack action tracking, optimistic status, and bulk status endpoint (#362) (dfd4d28)
  • stacks: state-aware sidebar context menu and Open App action (#368) (55d3b8c)
  • system: background image update checker with stack badges (ef5621e)
  • UI polish sprint: 7 items + logs toolbar redesign (#365) (f9ebd1d)
  • ui: glassmorphism redesign with settings decomposition (#274) (7637091)
  • ui: Phase 57 - Remote Context Navigation (b7748b4)
  • ui: Phase 57 - remote context UX (Option A) + network layer fixes (04c770c)
  • ui: redesign top bar with three-zone navigation layout (#237) (b7e7ee8)
  • ui: theme-aware sidebar logo with dark/light variants (#74) (b25574a)
  • Unified Observability (935c2b0)
  • webhooks: add CI/CD webhook integration for triggering stack actions (Skipper and Admiral) (#177) (4fc3633)

Fixed

  • add --exclude='.git' to the rsync invocation. (8902f6f)
  • add linux/arm64 platform to Docker build for ARM server support (12467c3)
  • add tls_ca, tls_cert, tls_key to frontend Node interface (96b1105)
  • alerts: overhaul alerts & notifications system for local and remote nodes (33c4976)
  • api-tokens: harden scope enforcement and add expiration support (#224) (954994c)
  • api-tokens: harden scope enforcement and block sensitive endpoints (#228) (5b607de)
  • App Store Polish & Rollbacks (7935029)
  • backend,frontend: correct docker socket connection on windows and fix api proxy in vite config (4aa4bf1)
  • backend: remove broken remote branch in the system stats endpoint (3f473c5)
  • cast req.params.id as string to resolve TS2345 type errors (d2c5b2d)
  • charts: suppress Recharts dimension warnings on initial render (#141) (c6633b0)
  • ci: add linux/arm64 Docker build support with QEMU optimization (#76) (278f7f1)
  • ci: add load: true to buildx so Trivy can find the built image (353fd25)
  • ci: correct release-please changelog section names and tag format (ea57cbe)
  • ci: docker-publish tag trigger (6cd84ba)
  • ci: docker-publish tag trigger + re-release v0.1.0 (6cd84ba)
  • ci: exclude .git from rsync --delete in sync-docs (aefeb7a)
  • ci: fix sync-docs empty-repo crash and update-screenshots protected-branch push (bed63f8)
  • ci: fix update-screenshots token and sync-docs empty-repo handling (392a49e)
  • ci: release-please config corrections (b6391b9)
  • ci: trigger docker-publish on v* tag push instead of GitHub Release event (c8047c2)
  • ci: update lock files after adding ESLint deps and fixing high CVEs (3cf9f02)
  • ci: use double-quoted string for if condition to fix YAML parse error (f5c5eda)
  • ci: YAML syntax error and sync-docs git directory failure (dfa93c0)
  • ci: YAML syntax error in if condition and safe.directory for sync-docs (dc79683)
  • csp: allow external images in App Store and suppress console warnings (#138) (c5217cd)
  • dashboard cards and stacks list do not update on remote node switch (497a48c)
  • dashboard: correct stale Stats reset with inactive field (0d5dc57)
  • dashboard: surface server error messages in create-stack flow (9367abf)
  • db: recreate stack_update_status table with composite primary key (#356) (4fe4ac5)
  • Distributed API Auth (45a6420)
  • Distributed API auth hardening: Bearer tokens and URL normalization (5932bce)
  • Distributed API Proxy & Auth Refinement (9e6f721)
  • Distributed API proxy memory leak, node switcher refresh, and copy button (fddd855)
  • Distributed API UI & Metrics Polish (ebec4a5)
  • Distributed API UI & metrics polish + DEP0060 suppression (eb0c026)
  • docker: add entrypoint for volume permission handling (593a709)
  • docker: entrypoint for volume permission handling (c743f6c)
  • docker: fix xx cross-compilation sysroot for native modules (#80) (381701e)
  • docker: fix xx cross-compilation sysroot for node-pty and C++ modules (518b0af)
  • docker: install Docker CLI v29.3.1 from static binaries to resolve CVEs (#268) (f9b86e6)
  • docker: repair broken entrypoint from bad merge conflict resolution (987fc3d)
  • docker: replace QEMU npm execution with tonistiigi/xx cross-compilation (#78) (1e0014e)
  • docker: upgrade Compose v2.40.3 → v5.1.1 to remediate dependency CVEs (#283) (36ebd5a)
  • docker: use native g++ for same-platform builds, xx-clang only for cross (f23d8c6)
  • e2e: fill api_token in nodes tests so submit button is enabled (707a5e8)
  • e2e: fix stacks timeout and nodes skip in CI (14c24c8)
  • e2e: fully rewrite nodes tests to handle Radix UI Select and remote type flow (12bbe51)
  • e2e: get all E2E tests passing and fix AlertDialog crash on delete (f7471a1)
  • e2e: use #node-name locator instead of getByLabel in nodes tests (e01c0d6)
  • e2e: use button role for Resources nav item in screenshots spec (b0e2b2d)
  • e2e: wait for sidebar stacks to finish loading before assertions (#149) (9ba9a3a)
  • editor: bundle Monaco locally to fix stuck Loading state (0eaa45b)
  • editor: bundle Monaco locally to fix stuck Loading state and CSP block (79fde6e)
  • editor: ESLint unused params fix (dd5b698)
  • editor: Monaco CSP fix + release pipeline fixes (36a9bf3)
  • editor: Monaco CSP fix + release pipeline fixes: v0.2.1 (36a9bf3)
  • editor: remove unused params from getWorker to satisfy ESLint (34172a9)
  • env: resolve 404 when loading env files and CSP inline script violation (#134) (1e6367a)
  • error-handling: surface silent errors across the codebase (#326) (10597d2)
  • fix dashboard out of memory crash on remote nodes (e027a94)
  • fix dashboard out of memory crashing from massive historical metrics payloads (4e9777d)
  • fleet: navigate to editor instead of dashboard on "Open in Editor" click (#289) (71ce6b3)
  • fleet: resolve getSenchoVersion crash in Docker containers (#391) (d437a19)
  • fleet: resolve remote node capability detection failures (#388) (dee7c66)
  • frontend: remove duplicate ScrollArea tag causing build failure (d38d48f)
  • frontend: sync NodeContext with localStorage on initial load (eb58f30)
  • gate SSO and Audit behind Admiral license tier (#213) (8d48b0a)
  • Global Logs Polish (f501fa4)
  • Global Logs UX Polish (7336ea8)
  • harden docker api validation, handle sftp errors, and fix node manager ui (4bd80e2)
  • harden telemetry parsing and null node fallbacks (f1f8e34)
  • implement atomic deployment rollbacks and custom scrollbar UI (6940825)
  • implement smart auto-scroll and definitive stack filtering in global logs (b267408)
  • implement two-stage teardown for reliable atomic rollbacks (c4805a1)
  • license: default 14-day trial to Skipper instead of Admiral (#216) (f99abe9)
  • licensing: backward-compatible tier/variant enforcement and self-healing variant detection (#385) (9e0c9d3)
  • licensing: rename variant values to skipper/admiral and store resolved type (#379) (797623e)
  • licensing: resolve Admiral variant detection and lifetime license handling (#376) (f841c40)
  • licensing: resolve variant from product_name when variant_name lacks tier info (#382) (b08f698)
  • lint: resolve all backend ESLint errors to pass CI lint step (e876a91)
  • lint: resolve all ESLint errors to pass CI lint step (c8a54a9)
  • logs: cap DOM rendering to 300 rows to prevent browser OOM crash (ec3a249)
  • logs: cap DOM rendering to 300 rows to prevent OOM crash (0db6c94)
  • logs: use monotonic _id key to prevent O(n) DOM mutations on scroll (753b0c3)
  • Memory Leak & Reload Loop (ac5032d)
  • memory leak in SSE log accumulation and infinite reload loop in NodeContext (fd07374)
  • merge: resolve CHANGELOG conflict with develop (9f0257e)
  • Observability Polish & Normalization (da5a74a)
  • Observability UI & TTY Parsing (1f544c6)
  • proxy forwards browser cookie to remote causing 401; fix node context self-heal loop (7b2f28f)
  • proxy: prevent remote 401 from triggering local session logout (278aa22)
  • proxy: re-stream express.json()-consumed body to remote nodes for POST/PUT/PATCH (a703707)
  • proxy: skip express.json() for remote proxy requests to fix body forwarding (ed69543)
  • refine log level parsing and implement bottom auto-scroll (9af0f85)
  • remediate Dependabot and Docker Scout security vulnerabilities (#265) (59fd528)
  • remediate observability dashboard and global logs parsing (29b1015)
  • Remote Nodes Hardening (7f23c88)
  • Remote Nodes Remediation: Port Routing, SSH Credentials & compose_dir (1fb0494)
  • Remote Nodes Telemetry Fixes (792e977)
  • remote proxy strips /api prefix: remote Sencho returns SPA HTML instead of JSON (efd3d7b)
  • remote proxy strips /api prefix causing remote Sencho to return SPA HTML (a26c255)
  • remote: harden WS stream lifecycle, auth precedence, and proxy error handling (1831411)
  • remote: repair stats, bash exec, and Open App for remote nodes (dbf8ec8)
  • remote: strip cookie & nodeId from WS/HTTP proxy to remote nodes (f115a48)
  • remote: strip cookie header and nodeId from WS/HTTP proxy to remote nodes (774190c)
  • remove unused React import in TemplatesView (9c66a4f)
  • replace naive log level detection with robust 3-tier regex class… (c324d98)
  • replace naive log level detection with robust 3-tier regex classification engine (b7e6b5a)
  • resolve a SQL syntax error in the database layer and add concrete file adapter implementations (69e86a0)
  • scheduled-ops: audit log text, run attribution, prune targets, and pagination (#234) (330eec4)
  • security: disable COOP header and Vite module-preload polyfill (c36ee93)
  • security: enforce stack name validation on all routes (#314) (1ab04be)
  • security: explicitly disable upgrade-insecure-requests via Helmet 8 API (50df5b3)
  • security: harden encryption key permissions, increase password minimum, remove sensitive logs (#323) (f317a83)
  • security: pre-launch security hardening audit & remediation (#320) (2d6b4c2)
  • security: prevent path traversal via env_file resolution (#311) (dc545dd)
  • security: remove CSP upgrade-insecure-requests and HSTS for HTTP deployments (25012a0)
  • security: remove CSP upgrade-insecure-requests and HSTS over HTTP (cf2946c)
  • separate Docker API port from SSH port, add SSH credential UI, fix compose_dir routing (26b8f62)
  • settings: prevent X button overlap and add tooltip to Always Local badge (ed0817b)
  • skip remote nodes in the local monitoring loop (880919f)
  • skip remote nodes in the local monitoring loop to prevent direct Docker access errors (b48cf62)
  • stacks: avoid resource busy error in Docker fallback deletion (#271) (10d1636)
  • stacks: resolve permission denied error on stack deletion (#261) (116f15d)
  • stats: classify managed containers by working_dir instead of project name (16e978b)
  • stats: throttle container stat WebSocket updates via ref buffer (74964b0)
  • stop infinite page reload caused by premature NodeProvider mount and 401 hard-redirect (67c7078)
  • strip browser cookie from proxy requests; fix node context self-heal loop (39e63be)
  • trigger docs sync on develop instead of main (7d1b996)
  • ts: remove unused motion import from alert-dialog (0dd72b3)
  • ts: use type-only import for Node to satisfy verbatimModuleSyntax (94d6c8f)
  • tty parsing, timezone mapping, and floating action bar for global logs (8203dd6)
  • ui: resolve 9 animated design system bugs including Monaco tab height accumulation (22e6462)
  • ui: settings modal sidebar nav clipped on smaller viewports (#280) (9e14ce9)
  • update lsio template registry url to valid endpoint (e45915f)
  • ws: fix remote node console: delegate console session tokens (6c518ce)
  • ws: fix remote node console by delegating console session tokens (30fe77c)

Security

  • harden terminal WebSocket endpoints against three attack vectors (2e0f3e2)
  • pre-release hardening, automated testing, and production readiness (ce50db0)

0.38.6 (2026-04-06)

Fixed

  • fleet: resolve getSenchoVersion crash in Docker containers (#391) (d437a19)

0.38.5 (2026-04-06)

Fixed

  • fleet: resolve remote node capability detection failures (#388) (dee7c66)

0.38.4 (2026-04-06)

Fixed

  • licensing: backward-compatible tier/variant enforcement and self-healing variant detection (#385) (9e0c9d3)

0.38.3 (2026-04-05)

Fixed

  • licensing: resolve variant from product_name when variant_name lacks tier info (#382) (b08f698)

0.38.2 (2026-04-05)

Fixed

  • licensing: rename variant values to skipper/admiral and store resolved type (#379) (797623e)

0.38.1 (2026-04-05)

Fixed

  • licensing: resolve Admiral variant detection and lifetime license handling (#376) (f841c40)

0.38.0 (2026-04-04)

Added

  • dashboard: redesign as DevOps command center (#371) (2ee959e)

0.37.0 (2026-04-04)

Added

  • stacks: state-aware sidebar context menu and Open App action (#368) (55d3b8c)

0.36.0 (2026-04-04)

Added

  • UI polish sprint: 7 items + logs toolbar redesign (#365) (f9ebd1d)

0.35.0 (2026-04-03)

Added

  • stacks: per-stack action tracking, optimistic status, and bulk status endpoint (#362) (dfd4d28)

0.34.0 (2026-04-03)

Added

  • license: distributed license enforcement across multi-node setups (#359) (6c26ae3)

0.33.1 (2026-04-03)

Fixed

  • db: recreate stack_update_status table with composite primary key (#356) (4fe4ac5)

0.33.0 (2026-04-03)

Added

  • fleet: add remote node update management (#353) (87b5908)

0.32.0 (2026-04-03)

Added

  • nodes: add capability-based node compatibility negotiation (#350) (ee75811)

0.31.0 (2026-04-03)

Added

  • notifications: add shared notification routing rules (Admiral tier) (#347) (1b573f5)

0.30.0 (2026-04-03)

Added

  • nodes: add per-node scheduling and update visibility (#344) (efbd20f)

0.29.0 (2026-04-02)

Added

  • labels: add stack labels for organizing, filtering, and bulk actions (#341) (28e7be6)

0.28.0 (2026-04-02)

Added

  • resources: add network management with create, inspect, and topology (#338) (24299a0)

0.27.0 (2026-04-02)

Added

  • resources: add network management with create, inspect, and topology visualization (#335) (4488637)

0.26.0 (2026-04-02)

Added

  • stack-management: add scan stacks folder button (#332) (6f74153)

0.25.3 (2026-04-02)

Fixed

  • error-handling: surface silent errors across the codebase (#326) (10597d2)

0.25.2 (2026-04-02)

Fixed

  • security: harden encryption key permissions, increase password minimum, remove sensitive logs (#323) (f317a83)

0.25.1 (2026-04-02)

Fixed

  • security: pre-launch security hardening audit & remediation (#320) (2d6b4c2)

0.25.0 (2026-04-02)

Added

  • api: add global rate limiter for all API endpoints (#317) (b28ebfa)

0.24.2 (2026-04-01)

Fixed

  • security: enforce stack name validation on all routes (#314) (1ab04be)

0.24.1 (2026-04-01)

Fixed

  • security: prevent path traversal via env_file resolution (#311) (dc545dd)

0.24.0 (2026-04-01)

Added

  • auto-update: add auto-update policies and fix image update detection (#297) (28c7a8f)

0.23.0 (2026-03-31)

Added

  • multi-node: warn when configuring remote node with plain HTTP URL (#292) (e587256)

0.22.1 (2026-03-31)

Fixed

  • fleet: navigate to editor instead of dashboard on "Open in Editor" click (#289) (71ce6b3)

0.22.0 (2026-03-31)

Added

  • scheduled-ops: add failure notifications, granular targeting, and history export (#286) (eccdd1b)

0.21.2 (2026-03-30)

Fixed

  • docker: upgrade Compose v2.40.3 → v5.1.1 to remediate dependency CVEs (#283) (36ebd5a)

0.21.1 (2026-03-30)

Fixed

  • ui: settings modal sidebar nav clipped on smaller viewports (#280) (9e14ce9)

0.21.0 (2026-03-30)

Added

  • host-console: gate Host Console behind Admiral tier (#277) (b5d3f49)

0.20.0 (2026-03-30)

Added

  • ui: glassmorphism redesign with settings decomposition (#274) (7637091)

0.19.4 (2026-03-30)

Fixed

  • stacks: avoid resource busy error in Docker fallback deletion (#271) (10d1636)

0.19.3 (2026-03-30)

Fixed

  • docker: install Docker CLI v29.3.1 from static binaries to resolve CVEs (#268) (f9b86e6)

0.19.2 (2026-03-30)

Fixed

  • remediate Dependabot and Docker Scout security vulnerabilities (#265) (59fd528)

0.19.1 (2026-03-30)

Fixed

  • stacks: resolve permission denied error on stack deletion (#261) (116f15d)

0.19.0 (2026-03-30)

Added

  • audit-log: add configurable retention, export, Auditor role, and enhanced filtering (#258) (d586ce3)

0.18.0 (2026-03-29)

Added

  • rbac: add Deployer & Node Admin roles with scoped permissions (Admiral) (#253) (8380fba)

0.17.0 (2026-03-29)

Added

  • registries: add private registry credential management (Admiral) (#240) (244c83a)

0.16.0 (2026-03-29)

Added

  • ui: redesign top bar with three-zone navigation layout (#237) (b7e7ee8)

0.15.1 (2026-03-29)

Fixed

  • scheduled-ops: audit log text, run attribution, prune targets, and pagination (#234) (330eec4)

0.15.0 (2026-03-29)

Added

  • scheduled-ops: add scheduled operations for Admiral users (#231) (31e1795)

0.14.2 (2026-03-29)

Fixed

  • api-tokens: harden scope enforcement and block sensitive endpoints (#228) (5b607de)

0.14.1 (2026-03-28)

Fixed

  • api-tokens: harden scope enforcement and add expiration support (#224) (954994c)

0.14.0 (2026-03-28)

Added

  • api-tokens: add scoped API tokens for CI/CD automation (Admiral) (#220) (8d8118c)

0.13.2 (2026-03-28)

Fixed

  • license: default 14-day trial to Skipper instead of Admiral (#216) (f99abe9)

0.13.1 (2026-03-28)

Fixed

  • gate SSO and Audit behind Admiral license tier (#213) (8d48b0a)

0.13.0 (2026-03-28)

Added

  • SSO & LDAP authentication for Admiral (#209) (bd4008f)

0.12.0 (2026-03-28)

Added

  • audit logging, secrets at rest, and legacy cleanup (#205) (1799030)

0.11.0 (2026-03-28)

Added

  • settings: replace static license CTA with dynamic upgrade cards (#201) (d3828e8)

0.10.0 (2026-03-27)

Added

  • stack context menu, tier icons, centered logo & support (#194) (dda1671)

0.9.0 (2026-03-27)

Added

  • RBAC, atomic deployments, fleet backups, and licensing (Skipper and Admiral) (#185) (32a7d53)

0.8.0 (2026-03-26)

Added

  • RBAC, atomic deployments, and fleet-wide backups (Skipper and Admiral) (#181) (db73d76)

0.7.0 (2026-03-26)

Added

  • webhooks: add CI/CD webhook integration for triggering stack actions (Skipper and Admiral) (#177) (4fc3633)

0.6.0 (2026-03-26)

Added

  • fleet: add Pro fleet management features and container drill-down (#174) (0630f57)

0.5.0 (2026-03-25)

Added

  • auth: redesign Login and Setup pages with split-panel branding layout (#168) (f80190d)

0.4.0 (2026-03-25)

Added

  • auth: redesign Login and Setup pages with split-panel branding layout (#153) (e0319b5)

0.3.1 (2026-03-25)

Fixed

  • e2e: wait for sidebar stacks to finish loading before assertions (#149) (9ba9a3a)

0.3.0 (2026-03-25)

Added

  • add Community/Pro licensing, fleet view, and UI reorganization (#145) (4f26f22)

0.2.5 (2026-03-25)

Fixed

  • charts: suppress Recharts dimension warnings on initial render (#141) (c6633b0)

0.2.4 (2026-03-25)

Fixed

  • csp: allow external images in App Store and suppress console warnings (#138) (c5217cd)

0.2.3 (2026-03-25)

Fixed

  • env: resolve 404 when loading env files and CSP inline script violation (#134) (1e6367a)

0.2.2 (2026-03-25)

Fixed

  • editor: ESLint unused params fix (dd5b698)
  • editor: remove unused params from getWorker to satisfy ESLint (34172a9)

0.2.1 (2026-03-24)

Fixed

  • editor: bundle Monaco locally to fix stuck Loading state (0eaa45b)
  • editor: bundle Monaco locally to fix stuck Loading state and CSP block (79fde6e)
  • editor: Monaco CSP fix + release pipeline fixes (36a9bf3)
  • editor: Monaco CSP fix + release pipeline fixes - v0.2.1 (36a9bf3)

0.2.0 (2026-03-24)

Added

  • ci: add release-please automated versioning workflow (c2d5d37)
  • ci: automated versioning with release-please (c991b81)

Fixed

  • ci: correct release-please changelog section names and tag format (ea57cbe)
  • ci: release-please config corrections (b6391b9)

0.1.0 - 2026-03-24

First public release of Sencho.

Security

  • Closed an authentication gap on several notification and console endpoints that were missing session checks.
  • Added strict validation for remote node URLs to block pointing a node at loopback or internal services (prevents server-side request forgery from node configuration).
  • Prevented path traversal through env_file entries in compose files: all resolved env file paths are now confined to the stack's own directory.
  • Extended stack name validation to every route so traversal-style names are rejected consistently.
  • Hardened the Host Console working-directory parameter to reject paths outside the configured compose base directory.
  • Host Console now launches shells with a sanitized environment so Sencho's own secrets (signing key, stored credentials, database URL) are not inherited by the terminal.
  • Host Console and container exec WebSockets now reject node-to-node proxy tokens, which are only valid for API forwarding.
  • Settings responses no longer expose auth credential fields, and settings writes reject any attempt to modify auth keys.
  • Added login and setup rate limiting to slow down brute-force attempts.
  • Added standard security response headers (frame, content-type, referrer, etc.).
  • CORS is now restricted to the configured frontend origin in production.

Added

Infrastructure

  • linux/arm64 images published alongside linux/amd64, so Sencho runs natively on Raspberry Pi 4/5 and ARM cloud VMs.
  • Automated Docker Hub publishing pipeline for dev and latest images.
  • Automated documentation and screenshot refresh pipeline.
  • Container health check so Docker can auto-restart an unhealthy Sencho instance.
  • Public /api/health endpoint for uptime monitoring and load balancer probes.
  • Graceful shutdown: Sencho drains in-flight requests, stops background workers, and closes its database before exiting.
  • Initial backend unit test suite and end-to-end test suite covering auth, stacks, and node management.

Multi-Node & Distributed API

  • Distributed API proxy architecture: manage remote Sencho instances over HTTP/WebSocket using a long-lived API token. This replaces the previous SSH/SFTP remote node model entirely.
  • Node-to-node authentication tokens generated from the Nodes settings tab.
  • Node management UI: add, edit, delete, and test remote nodes.
  • Top-bar context pill that always shows which node is currently active (green for local, blue pulse for remote).
  • Cross-node notifications: the notification bell aggregates alerts from every connected node in real time.
  • Host Console and container exec are now available on remote nodes via a short-lived proxied session.
  • Settings panel automatically scopes its tabs to the active node type so global-only settings are hidden when a remote node is selected.

Application Features

  • App Store powered by the LinuxServer.io template registry: browse templates with rich metadata, deploy in one click, edit ports/volumes/env vars before deploy, and auto-rollback on failure. Custom Portainer v2 registry URLs are also supported.
  • Resources Hub with Images, Volumes, and Networks tabs, Managed/External/Unused classification, a Docker disk footprint widget, and scoped prune operations (Sencho-only vs. all Docker).
  • Global Observability dashboard with historical CPU/RAM charts and a centralized tail-logs view across every container, including multi-stack filtering, search, and live SSE streaming.
  • Background image update checker that quietly polls your registries and badges stacks whose images have a newer version available.
  • Real-time WebSocket notifications replacing the old polling model: alerts arrive the moment they fire.
  • Live container logs viewer with real-time streaming.
  • Animated design system overhaul with new brand color, spring-based motion on dialogs and tooltips, reduced-motion support, and the Geist font family.
  • Theme-aware sidebar logo with dark/light variants and an Auto theme that follows the system preference.
  • Bulk settings save endpoint with atomic persistence (either every setting saves or none do).
  • Active/external container split in the dashboard Active Containers card.
  • Two-Stage Teardown on stack deletion so ghost networks are always cleaned up before the files are removed.
  • Custom environment variable injection in the deploy flow.
  • Root-level error boundary so an unexpected crash lands on a friendly screen instead of a blank page.

Fixed

Authentication & Proxy

  • Remote node auth failures no longer trigger a full logout of the local session.
  • JSON request bodies are now forwarded correctly to remote nodes (previously the body could be dropped under certain timing conditions).
  • Browser session cookies are stripped from remote-node requests so the remote instance uses the proxy Bearer token exclusively.
  • Deleted-node recovery: the frontend can now re-sync to a valid node after its active node has been removed, instead of getting stuck on an unreachable ID.
  • Fixed a backend memory leak where the remote proxy was being re-instantiated on every API call.

WebSockets & Streaming

  • Container stats streams no longer flood the UI with hundreds of updates per second; updates are now batched and flushed on a steady cadence.
  • Docker stats streams and exec sessions are now cleanly torn down when the client disconnects, so they no longer leak file descriptors.
  • Reliable reconnect strategy for notification WebSockets, with exponential backoff.
  • Terminal logs, host console, and container stats now work correctly through the remote node proxy.

UI & Frontend

  • Sencho now loads correctly over plain HTTP without the browser silently upgrading requests or complaining about security headers.
  • Monaco editor workers and WebSocket connections are no longer blocked by the default content security policy.
  • Several edge cases in the Docker socket permission detection logic now handled correctly.
  • Managed vs. external container counts are now accurate when stacks are launched from the compose base directory itself.
  • Fixed a browser out-of-memory crash in the global logs view when streaming high-volume containers.
  • Many small UI polish items: tooltip crashes, dialog animations, button spacing, menu toggles, tab height accumulation, scrollbar styling in dark mode, and more.
  • Remote-node "Open App" button now resolves the hostname from the remote node's API URL instead of assuming localhost.
  • Dashboard cards and stack lists now update immediately when switching between nodes.
  • Active node state is now hydrated from local storage on first paint so there is no visible flash of the wrong node.
  • Historical metrics polling and log buffers are now capped to avoid long-session memory creep.

Changed

  • Architecture: replaced the SSH/SFTP remote node model with the Distributed API proxy. Adding a remote node now only requires its URL and an API token, no SSH keys.
  • Docs: bootstrapped the full user-facing documentation (configuration, stack management, editor, multi-node, alerts, dashboard, resources, app store, observability, settings reference, troubleshooting, backup & restore).
  • Design system: new brand accent color, refreshed dark-mode shadows, and a consistent animation language across dialogs, tooltips, switches, and tabs.
  • Notification delivery moved from polling to real-time push.
  • Rebranded a few areas for clarity: "Templates" is now "App Store", "Ghost Containers" is now "Unmanaged Containers", and the standalone "Observability" section is now "Logs".
  • Global logs display chronologically (newest at the bottom) with smooth auto-scroll, and timestamps are shown in your local browser timezone.

Removed

  • The entire SSH/SFTP remote node adapter layer, superseded by the Distributed API proxy.