Milestone 5 (debugging & collaboration) ships in full, joined by the first pieces of Milestone 6 (:fleet, :rightsize) and a ctrl-e compact mode for small panes.
Highlights
- Debugging & collaboration is complete —
:debug(pod + node, the latter previewed and confirmed),:bundleredacted incident bundles,:snapshot/:snapshotscapture-and-review,:inforuntime diagnostics, and richer log filtering. - Fleet & right-sizing open Milestone 6 — an opt-in
:fleethealth dashboard, a Prometheus/VictoriaMetrics backend that autodiscovers in-cluster, and:rightsizewith a strategic-merge patch preview (no mutation). - Compact mode (
ctrl-e) — collapses the header and footer into a single info line, so a small tiled or multiplexed pane is almost all table.
Added
- Ephemeral debug container (
:debugon a pod) — attaches a throwaway debug container viakubectl debug, prompting for the image (prefilled from[debug].image).din the container picker pins--target=<container>so the debug container shares that container's process namespace. Disabled in read-only mode and gated by thedebugguardrail; recorded in the action journal (#66). - Node debug pod workflow (
:debugon a node) — launcheskubectl debug node/<node>with the host filesystem mounted at/hostand host PID/network/IPC namespaces joined. sofka previews exactly that access and requires confirmation before creating it, tracks the node debuggers it launched this session, and ships:debug-cleanto remove them afterwards. Gated by thenode-debugguardrail (#67). - Redacted diagnostic bundles (
:bundle/:bundle-save) — assembles a Markdown incident bundle off-thread (manifest, explanation, redacted YAML + owner, events, session timeline, metrics snapshot, bounded recent logs), then writes it to a file. Secretdata/stringData, credential-looking annotations, andlast-applied-configurationare stripped unconditionally, and a manifest discloses every redaction.:bundle-savewrites the previewed bundle to a temp file (#68). - Screen dumps and structured snapshots (
:snapshot/:snapshots) — captures the current table — its columns and visible rows, plus metadata (context, cluster, namespace, resource, filter, timestamp) — to a file as alignedtext(default),json, oryaml.:snapshotsbrowses saved captures newest-first with their age;⏎opens one into a viewer with a staleness banner,ddeletes the highlighted file. Files land in$XDG_STATE_HOME/sofka/snapshots(#69). - Runtime diagnostics (
:info/sofka --info) — version/build, live context/cluster/API server, discovery + Metrics API status, watch error counts, config sources, an active-config summary (skin, readonly, aliases, plugins, views, bookmarks, guardrails, warnings), and the state/snapshot/bundle directories.sofka --infoprints the static subset offline — handy in CI. Only identifiers and counts are emitted, never credentials, tokens, or Secret values (#70). - Richer log controls — the
/filter now accepts a case-insensitive substring (highlighted, as before), a/regex/, or a leading!to invert (keep non-matching lines). A malformed regex is flagged[invalid regex]rather than silently hiding the buffer.zclears the on-screen buffer; the live stream keeps appending. A new[logs]section configures initialtail, followbuffer, and an optionalsincelookback (#71). - Opt-in cross-context fleet dashboard (
:fleet) — a side-by-side health summary of the kubeconfig contexts listed in[fleet].contexts: connectivity (with a clear error on the row if a context is unreachable), Kubernetes version, node readiness, unhealthy pods, FluxReady=Falsefailures, and the resolved read-only policy. Gathered concurrently with a per-context timeout so a slow cluster never blocks the rest.⏎switches to the highlighted context;rre-gathers (#75). - Historical right-sizing (
:rightsize, aliases:sizing,:vpa) — estimates right-sized requests from historical usage in a Prometheus-compatible backend. Per container: current requests vs P50/P95/P99 CPU & memory over the window, a suggested request (P95 + headroom), OOM & CPU-throttle evidence, and a strategic-merge patch preview you can copy withcand apply yourself. Zero-config: with no[providers.metrics], sofka autodiscovers a queryServicein-cluster by well-known labels and reaches it through the API-server proxy; configure it via[providers.metrics]to point at an external URL or tune the window/headroom/step. Uses standard cAdvisor metric names; VictoriaMetrics cluster mode (vmselect) needs a tenant path in the URL (#76).
Changed
- Compact mode (
ctrl-e) — collapses the seven-line header and the footer into a single info line (kind · count · namespace · context, plus a transient flash and the live/sync dot), so a small tiled or multiplexed pane is almost all table. Folds k9s's separate header (ctrl-e) and footer (ctrl-g) toggles into one. Works in every mode (#74).
Full Changelog: v0.11.0...v0.12.0