v2.2.52026-10-19Bug Fixesactions: show every pod in the drain plan, the ones that need attention first 87ff963
v2.2.42026-10-16Bug Fixescharts: refuse a chart index with a merge key beside a map key instead of crashing 2dd4b75deps: bump golang.org/x/net to v0.60.0 8d791e2frontend: share one capabilities read between the parts of a page 5ff371b
v2.2.32026-10-15Bug Fixesfrontend: open the workspace once the cluster is known so views load once 38bb7c3metrics: read pod usage in the chosen namespace for accounts bound to one e6e29c7resources: name the namespaces that would work instead of advising one blindly ac05d8a
v2.2.22026-10-08Bug Fixeschecks: lay the framework posture out as a table that holds every framework 425ca74deps: clear the frontend dev dependency advisories failing vulns 774d94f
v2.2.12026-10-01Bug Fixese2e: keep non-ascii out of harness command errors 10ea45de2e: map the namespaces setting and keep its parser out of the full-run set b934b18e2e: pin argo cd, preload its images and keep cluster diagnostics on failure 5df3e02frontend: show the error a failed payload carries when it has no message 4567662helm: retry release reads the server refuses as busy 5ae317bresources: do not cache a custom resource layout whose definition could not be read d845a5esettings: skip settings when there is no user e419b9a
v2.2.02026-09-29Featuresnamespaces: narrow the desktop app to the namespaces an account can read f7166f9Bug Fixesdeps: bump undici to 7.30.0 for GHSA-3wwx-pv8p-q78v e3f7bdafeed: free the snapshot slot of a table replaced while it was building 8e72c9coverview: stop showing unread nodes, events and a missing metrics API as data 9c9fce0
v2.1.22026-09-28Bug Fixeshelm: restore dialog lifecycle after Strict Mode effect replay ee6de73resources: prevent global search for empty identity scopes bbaad4f
v2.1.02026-09-16Featurescompare: say which fields the comparison ignored 6f977b9compare: say which fields the comparison ignored 5ae40e6metrics: label where a series came from and when sampling began 6e44445Bug Fixesauth: keep back-channel revocations across a restart 57927a9auth: keep back-channel revocations across a restart 58fb9e4http: report a timed-out write as unknown rather than failed 194fc68resources: honor namespace-only credentials, stable windows and uid-bound deletes ecff4a1resources: refuse cached metrics history the reader cannot read fresh 1fb054dresources: release the cache build gate when a builder panics b6f306erouter: ask before browser history discards an unsaved draft 4094f65timeline: record a durable gap when a batch could not be written f29e981timeline: record a durable gap when a batch could not be written 93d03db
v2.0.02026-09-10Featuresapi: declare the shapes and routes the next tranche fills ec04681chart: render the objects an operator looks for before installing 9bd02eachecks: hand the audit to a machine, and answer for a framework 829ea3cchecks: run the audit on a timer and say when posture moved dbc7afccli: log as json when serving a cluster, and hand the new work its flags d578414clusters: the picker says what is already open and shows that tab d54830eexec: keep a transcript of a terminal, when this deployment asks for one f71787fhistory: let the audit trail leave the pod, and let somebody take it away ef25337metrics: let spinoza report on itself in the format a scrape reads c6aa6efpanels: a Focused and a Console preset, and the size spinoza is built for 943ea96rollout: show what a workload rolled out, and let it go back 951eb2eserver: say when spinoza is ready, and let it stop without cutting anyone off 25a90f9support: hand over what spinoza knows about itself c30e1e9ui: revisions, reserved-against-used, posture, saved views and the support bundle 5356740views: save a filtered table by name, and let an admin publish one 7050d1fwaste: rank what is reserved and never used 00ee5e6Bug Fixesaccess: work a person's scope out once per request 014953ccatalog: file the discovered catalog under the cluster it belongs to b089cf4deps: take the smol-toml fix for GHSA-7w5x-hrqm-74c2 e527121history: carry the audit cursor so an export pages past the first page 74803cainstall: wait out a locked binary when replacing it on windows 319ece3kubeconfigs: give each dialog its own path field 9ffb751waste: read the report once rather than once per render cce3bbbRefactoringapi: one severity scale, and reach as a count beside it d087959app: work out where a saved view or a waste row opens, separately ed80b38frontend: one reasonOf for what a failed request said 84717b7
v1.30.02026-09-09Featureschecks: lead with the findings and put the settings behind one control 8f242a9clusters: ask about protecting a new cluster in a toast, not a modal 49709f9clusters: give opening a cluster a visible budget and a way out a31bd7bclusters: let a picked context replace the tab instead of always opening one 99542fdclusters: put every cluster control in one place, the strip d34685aclusters: refactor cluster picker ff110feclusters: say on screen when a cluster stops answering 43910b9clusters: show the open cluster on the header picker 7982b9cfeed: notice a backend that went quiet or belongs to an earlier run 35b682egraphs: head every graph with what it drew dbc3a8chealth: name why a cluster stopped answering 001150blayout: hold the canvas at 1280 and keep every dialog inside the window a2d2defpanels: give a fresh workspace the canvas, not two empty docks 8b865b9sidebar: split the workflows from the kinds, and let a kind be found 0efe2fatable: drive the rows from the keyboard, and say which keys 71ec56etheme: read the chrome in the system sans and the cluster in mono ce9dbbfui: give every action the same shape, size and colour language 5f1afe5ui: give every missing, partial or stale answer one shape ff3bfc2ui: give every view the same row for narrowing what it shows 79d8872ui: head every view with what it is, what it covers and how it counts cd9b7afBug Fixescluster: report an unreachable context as unreachable, not as a bad request baec819clusters: keep the plus beside the tabs and its menu on screen 851b905clusters: let the plus open its menu clear of the tab strip 4a644c3clusters: name the tab swatch after the menu it opens 2567807clusters: open the tab menu clear of the strip that scrolls e303e0aclusters: say so in the strip when no cluster is open 59b689cclusters: shape the open-cluster control like a tab d2c1c32deps: take the vitest and js-yaml advisory fixes 42e7b80docs: indent the e2e selection list so editorconfig accepts it b9d47d9feed: break the import cycle between the feed and its store de5386efeed: explain one silence once, in one place 0d1667dfeed: read again when the reader comes back to the tab 19635a0health: stop a URL's timeout parameter reading as a timeout 38f182emutation: keep the total check and its tests from failing inside Actions 5989ff5panels: keep an open dock open when the window narrows 1e22be4panels: open the inspector for an object opened from a panel 9988319settings: let the keyboard reach the settings panel when it scrolls 7267663sidebar: stop the kind tree stretching the page below the window d1a1b9atopbar: put the plain cause on the status dot, not the raw error 472de20ui: keep the quiet words readable instead of decorative 5a36a28ui: name each count for the scale it is counted in bd6dcd3ui: say what each figure means instead of repeating or overstating it 25dbb09
v1.29.02026-09-07Featureschecks: decide PSS upstream, import scanner findings, widen rule CEL 5914c2ccluster-mode: refactor cluster mode ed4ec06theme: make Borg the default theme 4e4bb94Bug Fixescluster: name the host and a possible proxy when a certificate is not trusted f7b29d1desktop: take the login shell environment and name an untrusted kubeconfig d705cc9test: quote the oauth2-proxy cookie secret so the fixture applies f2bb7c4theme: give the editor a readable dimmed line number 5548812
v1.28.02026-09-04Featurespalette: group command results f38b2a9resources: show table scope identity fb67eecBug Fixesactions: explain unavailable controls 0d91c84auth: harden cluster identity boundaries cf9535dbuild: retain kubeconfig sources in Docker context dac7877checks: move rule controls into details 05ecd83command-palette: limit activation to rendered results f436191deps: update x/crypto e56e01dfleet: clarify resource identity 26baa15fleet: keep GitOps errors and namespaces distinct d8f8d53gitops: preserve object identity and event completeness f24ea07history: preserve loaded page boundaries 3f9914dkubernetes: enforce exact live authorization e32d29ckubernetes: pin privileged workload images 2894922logs: reject unbounded zero-tail requests 66b277dlogs: stop streams for recreated pods 50e3e2amcp: preserve bounds, completeness, and access checks 3f77364mcp: withhold unsafe credential-bearing output 5942bb2metrics: clear stale range data e8e14a2namespaces: preserve data on refresh failures e8b591anode-shell: surface support check failures 039476cruntime: bound caller-controlled work 8f28af5server: harden HTTP and audit boundaries b3168a2settings: retry transient persistence failures 566f7dbupdate: disable unauthenticated script execution 4aedf0c
v1.27.52026-09-03Bug Fixesauth: isolate entropy failure testing 196ad61auth: require POST to sign out 0e26f05ci: reject incomplete mutation reports df2c8d3ci: render Helm chart in vulnerability scan 050fbd7ci: shard mutation testing 0130edbci: stabilize long-running test jobs 433add6e2e: stabilize cluster setup and browser state 759d09aexport: neutralize spreadsheet formulas 12b4662export: satisfy switch lint ccfb637frontend: reset parameter-scoped polls 444aa70mcp: redact GitHub tokens from logs c8e9b81test: use valid cluster mode session secret 39da795
v1.27.42026-09-02Bug Fixesatomicfile: reject incomplete replacements 514e5e2ci: rerun all release PR checks 9f8379fhelm: harden paginated release reads b9d4ad1helm: load release history lazily 82bbfd4helm: reject incomplete values files 2847cc7issues: preserve revision characters c1a0f56issues: use readable duration labels 6b8d7fdoverview: reject stalled warning pagination 4fe06faprom: discard non-finite samples 3b02491traffic: keep aggregated rates finite 1058bd0
v1.27.32026-09-02Bug Fixesa11y: describe cluster color swatches 90e781aauth: harden OIDC local inputs ad07ec1ci: enforce exact mutation thresholds e37f9feconfig: bound local configuration reads c02ba3efiletx: bound local file reads 9fb138akubeconfig: normalize default context identity b5f1da9kube: replace in-cluster config atomically f152a2alimits: normalize nonpositive scan limits 4159580logs: surface selector refresh failures e1c37c1podcount: paginate for exact totals 7beb419podcount: reject repeated continuation tokens 755f3c1release: tag draft releases immediately 9d85e06resources: count paginated resources exactly ef0e3e2server: bound and sanitize fleet reads 376a0dbsort: avoid identifier overflow 26acdecstate: cancel blocked file transactions bb25937store: serialize cross-process state updates 2ea018ftopology: fit large graphs into view 4d53c16topology: retain mixed projected references ebfde87
v1.27.22026-09-02Bug Fixesaccess: distinguish group lists in cache keys 6afe352actions: harden cron triggers and drain failures 2e86cc6auth: enforce login flow expiry 6d4c248auth: fail closed when secret generation fails c60f816cluster: cancel stalled opens on shutdown 85d1215clusters: bound terminal teardown 36d5412clusters: snapshot context protection atomically bef96fbconfig: validate cluster resource limits 2c1aed4e2e: prepare cluster-mode assets 7e80f72frontend: apply namespace start to active cluster 3925a75frontend: scope namespace results to active cluster 492b32cinspect: expose only forwardable TCP ports d47318dkube: suppress warning overflow floods f495deflisterr: bound and deduplicate list failures 3e625e9logs: follow recreated pod generations 3ee88celogs: surface merged stream failures 8f0f0ecmcp: contain handler panics and bound result limits 5df0af8portforward: bound startup lifecycle and validate ports 4e3a10bprometheus: bound proxy response bodies 5ad67e9prometheus: use clear network alias 8532fcdreaders: report recovered partial failures 54608e2samples: enforce the remembered pod limit 3a751f0schema: discard stale fetches after refresh 6221b79server: harden asynchronous lifecycle handling 4249758toolpath: bound login shell PATH output 782dede
v1.27.12026-09-02Bug Fixesci: isolate main push concurrency 17bdabfci: preserve main push validation e5d912cci: satisfy Go lint checks 01e1731ci: supersede obsolete main validation 4b28899clusters: clear stale errors on switch c85ab74clusters: restart log streams 7e43d6ecommandbuffer: distinguish exact-limit output e5c85ccfrontend: discard stale action completions 13a8438frontend: isolate cluster-scoped state bc7c89bfrontend: isolate report and history lifecycles 20a33b1gitops: isolate application state dc1d279kubeconfig: deduplicate default sources 1a256e3release: fail on draft lookup errors f67970erelease: scope draft detection permission 3d2a416server: enforce local shell connection budgets 13d158a
v1.27.02026-09-01Bug Fixeschecks: compare structured probe values 6953c4cchecks: make quota selection deterministic b4084e5ci: validate release pull requests automatically 62cf979frontend: discard stale action and query results e73f8a8frontend: isolate cluster-bound asynchronous state cb9337ffrontend: scope polling errors to requests 3d5f915helm: reject oversized payloads 2a97f05helm: report OCI catalog failures d97aec5history: preserve timeline and persistence invariants 1d26717release: make draft recovery reliable a74f7fbrelease: make validation self-contained a149b17release: recognize squash commit subjects 79b02c0release: recover drafts automatically 5c07e41release: restore release boundaries df995dcrelease: use native release recovery 2157e57resources: compile root cancellation 4109099runtime: bound subprocess output f244e8asecurity: enforce auth and cluster scope boundaries 636e60bserver: strictly decode bounded JSON bodies eee74b9settings: serialize migration and synchronization 0c0c4c7store: paginate history by timestamp and ID 7da75ddupdate: order rechecks and bound responses c880f7e
v1.26.12026-09-01Bug Fixescluster: restore persisted timeline 3d29302go: stabilize unit test CI 28286b0release: verify Helm chart checksums 28e41f3settings: isolate served user preferences 63096fb
v1.26.02026-09-01Featuresaccess: scope reads to the namespaces an account may list c9afeadapi: carry partial check coverage, the issue total and the cluster wobble b5a42e6api: carry the account's role and the namespaces it reads ab4df95auth: add the identity, session and oidc package 70e63fdcli: serve a cluster to a team behind an identity provider 7c8c50cfrontend: sign in and show what the account reaches 58dd4b8kube: impersonate the signed-in account against the apiserver 859e6f8server: gate every route on role, locality and cluster reach 914c4b8Bug Fixesaccess: fail closed on unanswered reviews cd6d546atomicfile: sync directory after replacement 16e6951auth: enforce session maximum age d68c0edauth: enforce trusted proxy boundary 1999a81auth: reject weak session secrets f8615d6auth: restrict shared audit metadata ae28dbfauth: validate trusted proxy requests 9d1f001charts: require modern TLS 83f80f6checks: align namespace counts 86a8d35checks: key surveys by metrics state 63129fechecks: read API removals from the k8s.io/api markers, keyed by kind 798f329checks: reject non-boolean user rules 47a0ff9checks: reject unreachable silencer rules 4acfb19checks: report silencer evaluation errors 2c54bd5ci: name uv where a Python tool needs it, and yq for the scope guard e2d8c23ci: prepare assets before vulnerability scans 572d2a9ci: satisfy Go lint checks 82ee33dci: scope every mise install, and stop counting a cut list as the whole f1393fdcluster: require public URL origin ac44f0dcompare: drop the spec fields each cluster allocates for itself 1949ae9fleet: page merged check findings b887a51fleet: preserve namespace provenance ac5688cfleet: report partial image inventory c745893frontend: explain absent GitOps controllers 8d001f0frontend: migrate custom check rules d7a0971frontend: replace deprecated type matcher 68f873afrontend: show fleet warning b26644fhealth: settle cluster verdict under one lock 94a1bffhelm: constrain repository network access 6a8ef2ehelm: reuse cached repository indexes bb02a38history: persist action actors d7081bchistory: record action actors 01a22dfhistory: record partial drains as failed 8de3f25issues: validate page cursors 221d6a6mcp: recheck cluster protection 73cea28release: publish image and Helm chart ff8dd47release: verify release tags before creation 8466f48server: avoid websocket shutdown delays 602bbf6server: bound and revalidate live connections b69ec1fserver: count cluster label characters 9f76dd3server: finish started writes and gate the node shell before it upgrades e1d5d5bserver: limit websocket subscriptions 189c894server: minimize public 520f936server: release unresponsive websocket feeds dab5d76streams: synchronize subscription access 33ea429timeline: resume saved recordings after restart 902da76update: reject oversized install scripts f911b5fRefactoringauth: consolidate signed cookie handling 881357cauth: share signed cookie codec c375678frontend: share view labels 6a093abserver: consolidate cluster key lookup 50b06f6server: one door for cluster writes b9e964e
v1.25.02026-08-31Featuresdesktop: write the app log to a file 8e6e314Bug Fixeschecks: decide orphans from the kinds that carry references, and filter on severity 717e46acluster: keep the context you asked for active, and settle cluster health with one writer 901b21bcounts: page the unhealthy pod count instead of stopping at 500 51a776ffleet: keep the baseline and the skip mark, and survive a panicking cluster 5f4866cfrontend: key cluster health, page history per table, and gate issue cursors on their own sort 64f44fdfrontend: stop exporting queueKey 1e95927rbac: stop a rule tied to named objects answering for every object 6677679server: refuse every cluster write on a protected cluster and finish the ones already started 7aed69eRefactoringdesktop: lift logging, local shell and file picker out of runDesktop 56ca8dc
v1.24.12026-08-31Bug Fixese2e: stop the harness killing a server it does not own 1ff746ftest: wait for the quota controller before auditing the namespace it fills e94d045
v1.24.02026-08-31Featurescli: open on a named view and context, and keep injected values inside their quotes 472f06bBug Fixesclusters: remember tab and columns on switch 1808c8fRefactoringresources: give each interface the manager implements its own file 187f187
v1.23.02026-08-30Featureschecks: compare a baseline from another cluster by count, not by finding db7ae52checks: let a rule of your own quieten a check, and carry a baseline between clusters 709be32fleet: a fleet view, and reach older history from the timeline 3a06124fleet: reach the release and delivery lists from the fleet view b8aea75issues: sort by date, page the audit half, and calm the traffic graph and the cluster dot 12cb34arbac: answer who can do what on a cluster, not only what I can 89f6bfbresources: add columns of your own from any field, label or annotation 5933880store: bound the audit the way the timeline is bounded 4e71403Bug Fixeschecks: drop the paging hook nothing calls, and a name typos rejects ce0b349sidebar: say the pods tally counts phases, not readiness df8d083
v1.22.02026-08-30Featureschecks: make the findings a work list — mute, a baseline to compare against, and per-namespace 7d3bdbdchecks: rank each finding by how far the problem actually reaches 0dd4370checks: read the custom resources, and only when a check needs them bcd2b92checks: tell a leftover from something a controller reads 5753086fleet: checks, search, releases and GitOps across every open cluster 4b815ebissues: hand the queue out a page at a time, keyed on the sort order cd5fc9fjust: filter every test suite by name and by path c77f7efspinoza: one Issues queue across every open cluster, and a timeline of what the cluster does a6a0a73Bug Fixesci: break the checks import cycle, and stop exporting what nothing imports fa00b3eclusters: key the namespace answer on the cluster, and let the strip scroll 1e88a6ae2e test 5fc0e34frontend: check what production actually reaches with knip 903b09alint: check a marshal, convert two identical structs, and stop shadowing net/url f0f7abfthemes: warn when an imported theme would make the editor unreadable 9187c45Refactoringfrontend: put one graph shell behind the gitops and traffic canvases afd26ffserver: answer helm, traffic and shell support in one capability probe ebf88ea
v1.21.02026-08-29Featureschecks: warn about APIs a release removes, watch certificates bb2e7d0checks: write own checks as CEL expressions d183aa8clusters: give every tab a colour and name the cluster before anything destructive e1f6c4eclusters: name a tab, group it, and choose whether it comes back 425d1b8Bug Fixesclusters: give the cluster spinoza starts on a tab of its own ba93a77e2e: lint fixes ba4b627lint: scope the a11y relaxations to the three files that need them cf8b442prom: refuse a range query that matched more than one series a0f616dtraffic: read how many flow series carry labels, not whether any do b627fb3
v1.20.02026-08-29Featureschecks: audit RBAC, networking and storage, and choose what the audit reads and shows 935d363Bug Fixesci: read the whole archive listing so verify-archives stops failing the release 8f4088fthemes: paint the editor from the theme instead of leaving monaco its own greys 18e7d66
v1.19.02026-08-29Featureschecks: 53 more checks, and your own workloads ranked above packaged ones 1709f34checks: decide schedulability and references against the live cluster 8ff9681clusters: open several clusters as tabs, each keeping its own state 86a379dclusters: open, list, activate and close a cluster over the api cf27a65clusters: remember which clusters were open and report every one's health 5095e9eclusters: send every request and subscription to the cluster it is for 09220acclusters: track health per cluster instead of assuming the rest are fine c6693f2history: give each cluster its own writer and keep one file honest between them 79dbb71license: print the terms with --license and lay them down on install e58e66eBug Fixeschecks: drop two rules a live apiserver can never trip 60bbc9aci: scope knip away from the hand-mirrored wire contract c7c0af9clusters: check protection on the cluster being written to ff41d58graph: size flow nodes and refit the canvas so edges draw 79dee50issues: raise the row cap above what a real cluster produces 68c8302mise: pin uv so the pipx-backed tools resolve 312b556sidebar: retry discovery automatically after a transient failure 319377fspinoza: close the act-now findings from the speedrun review 658875dRefactoringclusters: resolve the backend per request and key connections by id d528c74
v1.18.02026-08-29Featureschecks: audit pods and workloads against 15 best-practice checks c304b84checks: page through every finding a capped group holds back b23369dgitops: name the writer that took a field on a server-side applied resource dd0bd24gitops: the argo write surface, a per-application page, drift and diagnosis 14a2016history: key clusters on a normalised api server url and record what spinoza did eea1f66history: record what spinoza changed and show it in its own view 70baf40install: uninstall on macos and linux efc858finstall: uninstall on windows and check build provenance on request 31a3bf0issues: rank what is broken now into a self-clearing queue 0f2d08cmcp: an MCP server and command line over one cluster, in its own binary 89d8426packaging: windows, the linux desktop app, deb, rpm and channel manifests 1003450topology: an ownership graph of the cluster, folded by default 59a318ctraffic: a workload traffic graph from Cilium Hubble metrics ad3efd2update: offer windows the powershell install command 6a8d08eBug Fixesa11y: give the docks a valid role and let the keyboard reach the scrollable panes a7068e0checks: emit patches the api server accepts 7a9b5f6checks: resolve owners by api group and quote what yaml would eat 096bb05ci: repair ci 7fcb02cgitops: verify the terminate patch, key drift by name and stop the hidden panel polling 1be42b9install: compute the checksum without Get-FileHash e91bc4dinstall: stop a typed parameter swallowing the registry handle e04d3c8issues: bound the stall probe and stop a guess erasing a fatal row c325976issues: read a crash loop from the terminated state, not just the waiting one bd9c4famcp: keep one bad message from ending the session and stop a slow tool blocking the rest db15521mcp: refuse a replica count that is not a number, and bound every tool call e1cc011overview: count a paged event walk as one listing attempt f2348b2overview: page the warning events so the newest 25 really are the newest 022dd83topology: stop a test owning a shared namespace and lint fixes a28029ftraffic: fold a crowded graph to namespaces and bound the probes 659ef57update: stop comparing a release against a version that does not parse b19be9b
v1.17.02026-08-28Featurescronjob: suspend, resume and run now 4664381settings: follow a theme another window chose 278eaf9tables: sort a node metric by how much it has, not only how much it uses eebfad9Bug Fixesbuild: give the frontend the same version as the binary fb808d4settings: send only the keys this window changed 174ab3b
v1.16.02026-08-28Featuresupdate: add an update button and a switch for the automatic check f88b290Bug Fixessettings: merge on write so two windows do not undo each other 6b5bcfdupdate: refuse an install script that ignores the skip 3215aa4
v1.15.02026-08-28Featuresmetrics: draw a chart from what spinoza measured when there is no Prometheus 5275939update: move the release check to spinoza.tech 344b84fupdate: say when a newer spinoza is out and offer the command that installs it 1b9fab5Bug Fixesmetrics: stop exporting a constant nothing imports ce288b8Refactoringupdate: drop the update-check flags 8053632
v1.14.12026-08-27Bug Fixescolumns: read a declared column that ranges for every row, not just the first 0b57602Refactoringlogging: stop quoting what the handler already escapes eaedd1f
v1.14.02026-08-27Featuresnodes: say how much of how much, not just a percentage 7e5d198Bug Fixesconditions: stop reading a node's problem detectors as readiness 07785ae
v1.13.12026-08-26Bug Fixesdeps: take echo 4.15.4 for GHSA-vfp3-v2gw-7wfq 74d41cbRefactoringaccess: one place asks the cluster what this user may do 52b4760
v1.13.02026-08-25Featurestables: keep declared columns current and color the ones that say if it works c76d617tables: show custom resources the columns their own definitions ask for 430870eRefactoringserver: split the route table and handlers out of one file 6d6e864
v1.12.02026-08-21Featuresaccess: tell a bulk action what the cluster will refuse, row by row da9289ehealth: flip the cluster indicator on a failed request, not on the next ping 42b31a9helm: tell a release's buttons what the cluster will refuse 687ef61logs: tail every pod of a workload in one stream 0a8378drbac: check gitops actions and split the log tail across pods f29407frbac: grey out actions the cluster would refuse 48ba22eBug Fixescontexts: tell every window when the cluster changes, and ask the right question before a drain eb56b54kube: tell helm and kubectl which kubeconfig spinoza was started with b0400ebui: say when the cluster stops answering, and refuse an apply that would overwrite blind 59d5713Refactoringstores: one atomic file write, and cover the paths that only fail on a broken socket 67a1468
v1.11.02026-08-20Featurescompare: report drift across two contexts for a whole kind 4c83d0aevents: filter a windowed table against the whole cluster 7ffcb87helm: find and install charts from oci registries 1a85ac2helm: install a chart from a configured repository d5de7cfnodeshell: open a root shell on a node from the node panel 878fe3bui: compare an object against another context 7797e80ui: show configmap data beside the secret values ae53630ui: turn node shells on in settings, and follow the cluster a link names 3992b15Bug Fixesui: focus a docked release on a deep link and name it in the title 74ef4ea
v1.10.02026-08-19Featuresui: add ui to display secrets c57474cui: dock the helm release detail and drill into its resources 51c9da0Bug Fixesui: colour a condition by what it means, not by its truth value 461f884ui: keep Progressing and Initialized reading as they did 3df1d18
v1.9.02026-08-19Featuresui: say why the desktop switch is unavailable instead of hiding it d2af123Bug Fixesci: green sast, go lint and the integration helm upgrade test feaf6d1cli: rewrite the token file so mode 0600 always applies 44acf60helm: block private hosts on the upgrade repo URL b565907server: drop the run token from the address bar after load 1005b1cserver: keep the pprof profiler off unless -pprof is set 584a267server: only treat GET as a websocket upgrade 67345d6server: send Referrer-Policy: no-referrer on served pages c6ac62b
v1.7.12026-08-18Bug Fixesui: close the top-bar menus on an outside click, escape or focus loss 35f85bc
v1.7.02026-08-18Featuresargocd: sync and refresh applications from the inspect panel d4ad6e5Bug Fixesci: tell gh which repo to publish the release in 82577c6desktop: take the PATH from the login shell so credential plugins run 4dd683aui: say what watching every namespace costs d4b2a69
v1.4.02026-08-18Featuresnamespace: keep the opening namespace per cluster and only offer it on big ones cb0c245protect: ask for the typed name before applying, as before deleting 9165be5Bug Fixesbulk: say that the typed confirmation is the cluster name aca4dafinstall: report the directory the binary was installed to 3fc3a19release: publish as draft until the artifacts are attached 0c7ff8atest: make the integration tree compile and keep it that way 47e2709Refactoringfrontend: stop exporting what nothing outside the module uses 6f488ff
v1.3.02026-08-18Featuresevents: open on the newest 100 and load more on demand 88482adfilter: complete field names and values as you type 7552dccfilter: filter the table with chips shared with the namespace picker 1088d0chelm: name the namespaces a partial secret read could reach 46eb354panels: let a selection reopen the collapsed details dock 7e31da3table: share leftover width across every column 45eafedBug Fixesfilter: ignore a namespace chip on a kind that has none a890cbbfilter: take the kind scope from discovery instead of the first snapshot adb24b9flux: fill the width with the shared column rule 57fbc6bRefactoringapi: give the error envelope a named wire type 1acba11contexts: share the protected-cluster confirm name c65848esidebar: move the cluster Overview next to the CLUSTER group 246f65fviews: derive the view type from the one list that registers views 59a6aff
v1.2.02026-08-18Featuresflux: show the control plane, the sync and controller usage above the resources f566677ui: one loading indicator, used by every view 49f10a5Bug Fixesevents: give events their own columns and facts, and show one Event kind a4da2d5flux: fill the usage bar against the limit a9297c5ui: name the api group when two kinds share a name fccce78ui: say what the namespace offer means and keep it in the history 1475919Performance Improvementscounts: count through the metadata client and share one tally per window d821123feed: send row changes in one frame instead of one each 46245cahelm: list releases by metadata and decode only the newest revision 125bf11ui: sort rows once, not twice 8c57c8b
v1.1.02026-08-18Featuresargocd: give Argo the graph and resource list Flux has, and separate chart from app version b7c62aaargocd: list applications from their CRDs, and tidy the top bar d62d1b1ci: cut GitHub releases with release-please 0653cd4ci: publish coverage badges and show them on the README 57557cbsearch: find objects by name across common kinds from the palette ba75911settings: keep interface settings on the server, not in localStorage 35cc2c2ui: choose the namespace a cluster opens on, and offer it once e799121ui: pick the namespace in the top bar and scope the feed to it 203f5bbui: show every namespace by default d62f15bui: sort nodes and pods by cpu and memory 9c42381ui: split GitOps into detected Flux and Argo CD groups, drop the status tiles 8f36066ui: switch between the desktop window and a browser tab 7383ec6Bug Fixesci: green the hygiene, docs and go audit jobs 6fa0e73frontend: unexport helpers that nothing else imports c2aacddinstall: match the Location header without a bracket class 70cefc5ui: open the filtered list from search, keep tooltips current, drop the native context select 173830cPerformance Improvementsmetrics: cache one build per window, watch node capacity, read in parallel 4b758daresources: share one informer per kind and keep it warm between views 90c0779