mirror of
https://github.com/Studio-Saelix/sencho.git
synced 2026-07-26 11:49:16 +00:00
1e262a1fd4
Co-authored-by: sencho-quartermaster[bot] <275163604+sencho-quartermaster[bot]@users.noreply.github.com>
182 KiB
182 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.81.3 (2026-05-17)
Fixed
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
0.81.0 (2026-05-16)
Added
0.80.0 (2026-05-15)
Added
0.79.0 (2026-05-15)
Added
0.78.1 (2026-05-15)
Fixed
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
0.77.0 (2026-05-15)
Added
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
- bump protobufjs to clear npm audit high-severity advisories (#1031) (668474e)
- harden atomic deployment rollback (#1029) (74ae2ce)
- harden blueprint deployment guardrails (#1027) (19cdb36)
- harden deploy enforcement paths (#1030) (b1c5fe8)
- harden stack file explorer operations (#1028) (69b6ac1)
0.76.7 (2026-05-10)
Fixed
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
0.76.4 (2026-05-10)
Fixed
0.76.3 (2026-05-09)
Fixed
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
0.76.0 (2026-05-09)
⚠ BREAKING CHANGES
- mesh: the operator's
docker-compose.ymlno longer usesnetwork_mode: host. After upgrading, redeploy any meshed stacks once so they pick up the new IP-based override and joinsencho_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
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
0.74.3 (2026-05-08)
Fixed
0.74.2 (2026-05-08)
Fixed
0.74.1 (2026-05-08)
Fixed
0.74.0 (2026-05-08)
Added
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
0.71.1 (2026-05-06)
Fixed
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
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
0.69.2 (2026-05-04)
Fixed
0.69.1 (2026-05-04)
Fixed
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
0.68.0 (2026-05-02)
Added
0.67.1 (2026-05-02)
Fixed
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
0.66.1 (2026-05-02)
Fixed
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
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
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
0.59.0 (2026-04-18)
Added
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
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
0.55.1 (2026-04-17)
Fixed
0.55.0 (2026-04-16)
Added
0.54.1 (2026-04-16)
Fixed
0.54.0 (2026-04-16)
Added
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
0.50.0 (2026-04-15)
Added
0.49.0 (2026-04-15)
Added
0.48.1 (2026-04-15)
Fixed
0.48.0 (2026-04-15)
Added
0.47.0 (2026-04-14)
Added
0.46.20 (2026-04-14)
Fixed
0.46.19 (2026-04-14)
Fixed
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
0.46.15 (2026-04-14)
Fixed
0.46.14 (2026-04-14)
Fixed
0.46.13 (2026-04-14)
Fixed
0.46.12 (2026-04-14)
Fixed
0.46.11 (2026-04-13)
Fixed
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
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
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
0.46.1 (2026-04-13)
Fixed
0.46.0 (2026-04-12)
Added
0.45.6 (2026-04-12)
Fixed
0.45.5 (2026-04-12)
Fixed
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
0.45.2 (2026-04-12)
Fixed
0.45.1 (2026-04-12)
Fixed
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
0.44.0 (2026-04-12)
Added
0.43.4 (2026-04-11)
Fixed
0.43.3 (2026-04-11)
Fixed
0.43.2 (2026-04-10)
Fixed
0.43.1 (2026-04-10)
Fixed
0.43.0 (2026-04-10)
Added
0.42.7 (2026-04-10)
Fixed
0.42.6 (2026-04-10)
Fixed
0.42.5 (2026-04-10)
Fixed
0.42.4 (2026-04-09)
Fixed
0.42.3 (2026-04-09)
Fixed
0.42.2 (2026-04-09)
Fixed
0.42.1 (2026-04-09)
Fixed
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
0.41.1 (2026-04-08)
Fixed
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
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
0.39.5 (2026-04-07)
Fixed
0.39.4 (2026-04-07)
Fixed
0.39.3 (2026-04-06)
Fixed
0.39.2 (2026-04-06)
Fixed
0.39.1 (2026-04-06)
Fixed
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
0.38.5 (2026-04-06)
Fixed
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
0.38.2 (2026-04-05)
Fixed
0.38.1 (2026-04-05)
Fixed
0.38.0 (2026-04-04)
Added
0.37.0 (2026-04-04)
Added
0.36.0 (2026-04-04)
Added
0.35.0 (2026-04-03)
Added
0.34.0 (2026-04-03)
Added
0.33.1 (2026-04-03)
Fixed
0.33.0 (2026-04-03)
Added
0.32.0 (2026-04-03)
Added
0.31.0 (2026-04-03)
Added
0.30.0 (2026-04-03)
Added
0.29.0 (2026-04-02)
Added
0.28.0 (2026-04-02)
Added
0.27.0 (2026-04-02)
Added
0.26.0 (2026-04-02)
Added
0.25.3 (2026-04-02)
Fixed
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
0.25.0 (2026-04-02)
Added
0.24.2 (2026-04-01)
Fixed
0.24.1 (2026-04-01)
Fixed
0.24.0 (2026-04-01)
Added
0.23.0 (2026-03-31)
Added
0.22.1 (2026-03-31)
Fixed
0.22.0 (2026-03-31)
Added
0.21.2 (2026-03-30)
Fixed
0.21.1 (2026-03-30)
Fixed
0.21.0 (2026-03-30)
Added
0.20.0 (2026-03-30)
Added
0.19.4 (2026-03-30)
Fixed
0.19.3 (2026-03-30)
Fixed
0.19.2 (2026-03-30)
Fixed
0.19.1 (2026-03-30)
Fixed
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
0.17.0 (2026-03-29)
Added
0.16.0 (2026-03-29)
Added
0.15.1 (2026-03-29)
Fixed
0.15.0 (2026-03-29)
Added
0.14.2 (2026-03-29)
Fixed
0.14.1 (2026-03-28)
Fixed
0.14.0 (2026-03-28)
Added
0.13.2 (2026-03-28)
Fixed
0.13.1 (2026-03-28)
Fixed
0.13.0 (2026-03-28)
Added
0.12.0 (2026-03-28)
Added
0.11.0 (2026-03-28)
Added
0.10.0 (2026-03-27)
Added
0.9.0 (2026-03-27)
Added
0.8.0 (2026-03-26)
Added
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
0.5.0 (2026-03-25)
Added
0.4.0 (2026-03-25)
Added
0.3.1 (2026-03-25)
Fixed
0.3.0 (2026-03-25)
Added
0.2.5 (2026-03-25)
Fixed
0.2.4 (2026-03-25)
Fixed
0.2.3 (2026-03-25)
Fixed
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.