github Studio-Saelix/sencho v0.98.0

7 hours ago

0.98.0 (2026-10-23)

Added

  • blueprints: call the tab Blueprints, add a Needs attention filter and keep the catalog on screen (#2082) (8a9115f)
  • blueprints: create node labels and see matched nodes from the Blueprint form (#2077) (03e2636)
  • blueprints: detect and enforce runtime digest drift (#1949) (489e1a9)
  • blueprints: give the Blueprint sheet one Answer and a shorter toolbar (#2080) (d3fb532)
  • blueprints: open a Blueprint and the create dialog over the GitOps workplace (#2083) (143f5a2)
  • blueprints: pin the create actions and show form errors beside the field (#2079) (7051673)
  • dashboard: rebalance the Home lower half around operational signals (#1953) (0ab2652)
  • dashboard: Stack Health All nodes inventory (#1918) (a375861)
  • deliver hub registry credentials to remote Compose targets (#1866) (341511a), thanks @samschultzponsys
  • drift: say how to resolve drift and dismiss it (#2116) (87db3f1)
  • editor: add Save & Pull Images to the compose editor (#1948) (f0906f8)
  • editor: create the stack .env from the editor on first save (#2097) (a6eaea0), thanks @Hambrook
  • fleet: add Cordon and Delete to the node details sheet (#2090) (fd5824c)
  • fleet: detect and update from a new sencho-dev:dev build (#1871) (275c654)
  • fleet: draw the Map one node at a time as each answers (#2091) (d7e0ebc)
  • fleet: replace the Status tab with Readiness (#1952) (1efaa13)
  • fleet: separate the Fleet tabs into two sections, with a layout setting (#2092) (a54ebcc)
  • git: add GitOps revision store and Direct apply transitions (#1835) (38ee452)
  • git: classify Git host rate-limit responses as their own error state (#1884) (1bcf7b5)
  • git: classify managed-file changes before apply (#1832) (3c4c057)
  • git: complete-project materialization with a managed-project manifest (#1786) (578ce76)
  • GitOps executable artifact identity (Direct nodes) (#1937) (a698b6d)
  • gitops: add decomposed approval actions for Git-managed Blueprints (#1959) (b27fbee)
  • gitops: add rollout generations and Inline placement approval (20d0db4)
  • gitops: add rollout lifecycle controls and rollback recovery (#1965) (bb85e08)
  • gitops: add the GitOps portfolio workplace (#1954) (85f5246)
  • gitops: authorize Git-managed Blueprint rollout generations (9cbb5f8)
  • gitops: bind Blueprint content to a live Git source (#1926) (ea905b7), thanks @samschultzponsys
  • gitops: block Blueprint place until private registry targets are ready (#1946) (2fb2c91)
  • gitops: complete the Git-managed Blueprint rollout path (#2084) (612c25a)
  • gitops: compose the authority evidence into the Blueprint rollout preview (#1957) (a881e42)
  • gitops: connect the workplace to stacks, Git sources, Blueprints, and Fleet (#1978) (13690c0)
  • gitops: dispatch accepted generations through the shared pipeline (#1913) (3f91705)
  • gitops: durable reconcile-attempt reservation, coalescing, and recovery (#1893) (69e7609)
  • gitops: harden the portfolio workplace and scope stack indicators (#1977) (09494d2)
  • gitops: independent source, placement, and rollout authority policies (#2020) (ab34e85)
  • gitops: native Git provider webhook ingestion (#1934) (e62b059)
  • gitops: notify on authority, rollout, and stateful-hold decisions (#1969) (48b0276)
  • gitops: observe remote rollout targets over the node proxy (#2149) (48b8d69)
  • gitops: open each portfolio application in a read-only application view (#1956) (46937e7)
  • gitops: open the Git source in place and animate Pull (#2062) (bba9d30)
  • gitops: persist the observed apply invocation and classify invocation drift (#2032) (3623ce2)
  • gitops: poll scheduling, source policies, and retry evidence (#1910) (57cd842)
  • gitops: produce the remaining drift classes (#1979) (698d3f3)
  • gitops: render decomposed approval authority and placement/rollout state (#1955) (5981355)
  • gitops: resolve attention in place (#2065) (2d89f13)
  • gitops: resolve branch, tag, and SHA refs to immutable commits before fetch (#1864) (48f0104)
  • gitops: show per-target image digests and document the drift model (#1984) (61b25f4)
  • gitops: SOPS/age repository secrets without durable plaintext (#1935) (9d0dbeb)
  • gitops: source controller follow-on (#1920) (71595cb)
  • gitops: stage-aware retry and resume re-evaluation (#1917) (d4ef263)
  • git: per-source private CA bundles and redirect credential guard (#1870) (d5ef403)
  • git: SSH deploy keys with strict host-key verification (#1867) (3ca0f8e)
  • git: swap isomorphic-git for native git transport behind clone seam (#1849) (392bc15)
  • health-gated Blueprint rollout policy (#2018) (32fd95d)
  • listen with HTTPS so Pilot credential delivery stays confidential (#1943) (c02dfa4)
  • navigation: make Compact Launcher the default desktop style (#1890) (b676657)
  • networking: resolve and dismiss networking findings in place (#2106) (f935fa7)
  • notifications: customizable per-channel JSON payload templates (#1805) (866d784), thanks @axiomatose
  • notifications: mark alerts read and mute them where they appear (#2117) (63220a7)
  • open a published port at its configured service URL (#2124) (e9f8242), thanks @AnyColorIWant
  • preferences: server-backed per-user appearance and navigation (#1901) (e7b457f)
  • raise the Compact launcher quick-link cap to 10 (#2120) (d48daa0)
  • readiness: dismiss readiness findings until they change (#2100) (11312d8)
  • readiness: resolve readiness findings in place (#2101) (2fedeaf)
  • recovery: complete authored-project atomic rollback generations (#1819) (f517888)
  • registry: exact-ref private-registry delivery to remote nodes (#1905) (ce8b454)
  • registry: Pilot private-registry parity - target facts, hub authority, auto-update (#1930) (39e0af9)
  • registry: seal private-registry credentials for HTTP delivery (#1945) (591b062), thanks @samschultzponsys
  • resources: add search, filters, and sort to Rollback generations (#1788) (9798700)
  • resources: bring the Resources page to the design system (#2156) (935158b)
  • security: act on posture findings from the overview (#2113) (184f2ce)
  • settings: change fresh-install defaults for charts, log chips, progress style and stack guardrails (#2119) (7c99a65)
  • stacks: rescan from the scan banner; recheck Blueprint name conflicts (#2118) (23f8735)
  • surface the running build identity in About, the shell chip, and Admiral Account (#1899) (1ad20da)
  • ui: add resizable sidebar and Anatomy pane (#1902) (ab6e494), thanks @candroid-man
  • updates: table view as the default for the update page (#2059) (8eaa954)

Fixed

  • app-store: give every catalogue port exactly one protocol (#2019) (aadbd05)
  • auth: honor SSO-only CLI recovery without restart (#1810) (27fe0ae)
  • blueprints: announce a Suggest-mode drift once per episode (#2086) (661412a)
  • blueprints: detect a remote name conflict from the leaf stack list (#2129) (daed461)
  • blueprints: gate digest-pinned remote apply on leaf capability (#2005) (248154a)
  • blueprints: retry a refused drift repair instead of stranding the row (#2028) (c92004d)
  • bump moby/go-archive to v0.3.0 in Docker CLI and Compose builds (#1845) (a07401f)
  • calm shared modal open/close motion (#1931) (7569f1d)
  • classify a synced sibling .env as a SOPS secret (#2131) (25c272e)
  • console: clarify Pilot Agent host-console unavailability (#1868) (4994031), closes #1855, thanks @samschultzponsys
  • dashboard: keep the Stack Health name column readable at 1280 (#2073) (a128575)
  • dashboard: use balloon-adjusted memory percent on the Memory tile (#1847) (c3c6c1b), thanks @Crosis47
  • db: log failed column migrations and cover poll-column upgrades (#1976) (39e1325), thanks @samschultzponsys
  • deps: bump dompurify to 3.4.17 (#2168) (77026fc)
  • deps: bump follow-redirects to 1.16.1 (#2157) (95398a1)
  • deps: bump grpc-go to v1.83.1 to clear CVE-2026-84304 (#1885) (3cfa8ab)
  • deps: bump grpc-go to v1.83.2 (72fd455)
  • deps: bump transitive deps to clear fast-uri, qs, and humanfs advisories (#1891) (f8cfcb5)
  • docker: bump the Compose plugin's containerd to v2.2.10 (#2144) (4f1ed31)
  • docker: floor libexpat at the version that fixes CVE-2026-77214 (#2147) (e536275)
  • docker: floor pcre2 at the version that fixes CVE-2026-103111 (#2057) (18d6aba)
  • docker: rebuild the CLI and Compose binaries with Go 1.27.2 and x/net v0.60.0 (#2107) (325d4e3)
  • docker: rebuild the CLI and Compose binaries with Go 1.27.3 (#2164) (7a9abb8)
  • docker: rebuild the Compose plugin from v5.6.0 (#2145) (57e2d98)
  • docs: repair broken anchors and missing images (#2171) (adb0d8a)
  • docs: use MDX comment markers on the Git transport support page (#2166) (3f8a678)
  • editor: dispose compose DiffEditor models after widget reset (#1828) (93a5ba9)
  • editor: keep the compose toolbar inside the pane at 1280 (#2125) (712c96a)
  • editor: pin compose editor requests to the captured node (#1897) (607904e), thanks @samschultzponsys
  • exec: fall back to /bin/sh when a container has no bash (#1997) (e1c044d)
  • exec: send Tty on exec start so the stream is not multiplex-framed (#2096) (a77eb1b)
  • filesystem: require lstat to report a link before refusing a path (#2115) (22df038)
  • fleet: bound unreachable proxy overview probes (#1919) (e8da1fd)
  • fleet: report a gone Pilot as offline and bound the Fleet map reads (#2088) (f38d488)
  • fleet: stop advertising a dev build the node already applied (#1974) (1347bca)
  • frontend: coalesce concurrent stack statuses fetches (#1816) (017ac57)
  • frontend: overlap stack list and status hydration requests (#1820) (c47b8eb)
  • frontend: stop client-side preference changes refetching all settings (#2008) (bcc4b7e)
  • git: classify an untrusted-signer TLS failure as a certificate error (#2158) (108a47a)
  • gitops: address the runtime drift repair audit (#2026) (e686f55)
  • gitops: announce local Git source changes on the channel GitOps views listen to (#2067) (e34948b)
  • gitops: announce one pull result per attempt, and only when it changes (#2104) (f208a1f)
  • gitops: attribute a health verdict to an unacked rollout attempt (#2033) (2358a07)
  • gitops: authenticate SOPS values with their key path (#2081) (fc96137)
  • gitops: bound concurrency for the startup preflight backfill (#2004) (e0a5425)
  • gitops: bound GitOps history with a retention window (#2105) (ca90588)
  • gitops: bound the Blueprint detail reachability probe with a short-lived verdict window (#2052) (ae22a22)
  • gitops: capture Pilot recovery and stop refused rollbacks from parking the application (#2087) (cee2ec8)
  • gitops: compare stale artifact probes by platform membership (#2034) (d57d2a3)
  • gitops: date a recorded placement refusal instead of presenting it as current (#2042) (c0b5708)
  • gitops: fail closed on incomplete target evidence (#1998) (b4d01da)
  • gitops: guard automatic acceptance against stateful withdrawal (#1975) (3ecb954)
  • gitops: health-gate a Blueprint rollout under its deploy stack (#2165) (f967a59)
  • gitops: keep an accepted Blueprint commit on the next poll (#2126) (5ca0f6a)
  • gitops: keep an application addressable when its evidence cannot be read (#2000) (acfcb55)
  • gitops: keep Stack Drift, notifications, and metrics on the canonical posture (#2011) (91648b0)
  • gitops: make automatic placement approvals reach execution (#2103) (0ce9754)
  • gitops: make native provider webhooks work on remote nodes and for GitLab (#2078) (d3f6783)
  • gitops: match Blueprint repo claims on repository identity (#2054) (d2d2a5d)
  • gitops: match webhook deliveries on canonical repository identity (#2102) (b8de90d)
  • gitops: name the unresolved artifact identity and drop the stale source report (#1960) (7767fd6)
  • gitops: name what a Blueprint acknowledgement actually means (#2037) (3f02e7f)
  • gitops: normalize Docker architecture names to OCI platform names (#2074) (6178bc6)
  • gitops: observe a remote deploy's runtime identity on the leaf (#2038) (b2155bd)
  • gitops: project Blueprint deploys, withdrawals, and their failures (#2029) (3c5d4aa)
  • gitops: prune provider webhook endpoints when a git source or stack is removed (#1940) (23baec2)
  • gitops: read a failed marker as unverified rather than as drift (#2043) (194b8a5)
  • gitops: read a redeployed failed generation as work in progress (#2045) (1e1bea0)
  • gitops: record the policy on a policy-authorized rollout (#2040) (e0c4c10)
  • gitops: render the portfolio Rollout column through the rollout vocabulary (#1970) (38de9b6)
  • gitops: report a Blueprint reconciler drift in the canonical drift list (#2025) (709c7e0)
  • gitops: restore only the generation a Blueprint target acknowledged (#2024) (324dd7e)
  • gitops: retry an unresolved Blueprint artifact freeze from the drift check (#2039) (e4ad902)
  • gitops: return reconciliation results from manual pulls (#1927) (e41722d)
  • gitops: stop asking a detached Blueprint for a rollout authorization (#2114) (2074080)
  • gitops: surface withdrawal residue for a tombstoned target (#2053) (b6b059a)
  • gitops: treat an unresolved health run as an operation in flight (#2041) (adab9f3)
  • group the GitOps portfolio filters into one popover (#2154) (1a52b50)
  • hub-only: enforce hub-only /api/api-tokens/ boundary (#1894) (6fc4a43)
  • hydration-timing: report list hydration relative to the foreground attempt (#1813) (88fc547)
  • keep outline buttons and filter selects flush with the card in the Dim theme (#2153) (d8891f3)
  • keep readiness finding verbs inside the pane (#2127) (6da06ce)
  • keep Restore toasts when overlapping silent service gates begin (#1947) (d87746c)
  • mesh: keep stack networks, scope mesh listeners, detect dead tunnels (#2010) (bb77576)
  • networking: hold unsafe network deletions and stabilize aggregate reads (#1850) (cc4a657)
  • nodes: reject whitespace-only names on create (#1911) (0a6d0bf)
  • notifications: redact webhook URLs on channel reads (#1951) (2baf4e3)
  • pilot: preserve tunnel JWT across upgrade 401 reconnects (#1818) (2d35013), closes #1817, thanks @Auxilias
  • polish notification actions, topology icon, minimized progress, security sheet and timeline lanes (#2151) (495bac5)
  • preferences: migrate explicit UI preferences on first login after upgrade (#2072) (2f6c0ff)
  • preserve exact guardrail message for Save & Deploy and Start (#1898) (30e3936)
  • proxy: resolve node id consistently before deciding to bypass json parsing (#1880) (8d9522c)
  • pull the next commit on a manual Git-managed Blueprint (#2130) (7a6682e)
  • recovery: deploy stacks whose inputs a recovery generation cannot hold (#2148) (646f60f)
  • registries: key delivered Docker Hub credentials under the v1 auths key (#2075) (4b060ea)
  • remove a stack's mute rules when the stack is deleted (#2152) (09d4547)
  • resources: load the Resources page and volume prune without the slow image df (#2155) (880e6c6)
  • resources: zero reclaimable images when held state is unknown (#1912) (4b2f9aa)
  • security: forward only validated client addresses to remote nodes (#2071) (ef2bd00)
  • security: harden authentication and outbound targets (#1877) (79b86dd)
  • security: make ignored forwarded headers loud (#2069) (966cf72)
  • security: refresh overview when image-update checks toggle (#1827) (cb1f6b1)
  • security: resolve the WebSocket client IP through the trusted-proxy predicate (#2031) (b833e55)
  • security: tie fixable CVE posture to image-update evidence (#1815) (fcd44f5)
  • security: triage the unfixable braces advisory (#2070) (d30e4da)
  • serve the UI typefaces from the instance (#2132) (9034198)
  • sso: accept the issuer GitHub now returns on the OAuth callback (#2061) (1426b79)
  • sso: enforce hub-only SSO config when remote node is active (#1865) (c6d9fb9), thanks @samschultzponsys
  • sso: preserve admin-assigned roles across SSO sign-in; IdP role synchronization is opt-in in Settings · SSO (#1862) (7cd4269), thanks @samschultzponsys
  • sso: preserve granular roles across enabled role synchronization (#1875) (8cf10c4)
  • stacks: make remote create-from-git honor deploy keys and private CAs (#2076) (fd95c8e)
  • stacks: remove repeated self-identity discovery from statuses hot path (#1811) (600367e)
  • statuses: align stack-status cache TTL and invalidation with polling (#1814) (55ca82a)
  • stop compose-ps spam after deleting a stack (#1831) (4c93947), thanks @proofquantu
  • terminal: support copy and paste in container and host consoles (#1996) (423f4e9), closes #1988, thanks @samschultzponsys
  • ui: polish modal footer, quick-link removal, and empty Recent alerts (#1973) (8ff0f51)
  • ui: prevent modal footer overflow and keep a viewport gutter (#1928) (a82cf5e)
  • ui: tighten Stack Health row semantics and resizable pane affordances (#1972) (fc6cc62)
  • ui: wrap modal titles on word boundaries (#1950) (6345e69)
  • untag reviewed image names during prune (#1836) (01ffbdb), thanks @Crosis47
  • whats-new: open screenshots in a zoomable lightbox (#1806) (e9901aa)

Security

Don't miss a new sencho release

NewReleases is sending notifications on new releases.