v1.5.1
The keybinding UX pass. v1.5.0 shipped Helm; v1.5.1 steps back and
collapses the accumulated key-binding choices into one consistent mental
model. Four navigation keys with disjoint meanings:
Enter= into — the sole drill / focus / commit-popup keySpace= right-click menu — opens contextual menus, mirror-closes popupsh/l= panel 3 tab switch — only when panel 3 is activeEsc= back — pop drill frame / close popup (LIFO)
Trigger letters (Y/E/S/D/N/C) are uppercase so they require
Shift — the modifier exists to prevent accidental key presses, not to
signal danger. The mental-model anchor is a desktop GUI analogue: Enter
= double-click, Space = right-click.
Added
- Per-row context menu on panel 2. Press
Spaceon a regular row
to open a menu listingYAML(Y)/Edit(E)/Shell(S)/Delete(D).
Items are resource-aware: Shell is hidden for resources without
containers (Service / ConfigMap / Secret / ...). Items can be committed
via cursor +Enteror by hitting the letter directly while the menu
is open. Trigger closes the menu either way — three paths (direct
hotkey at row / menu + cursor / menu + hotkey) reach the same final
state. - Rule A read-only — Helm-managed Delete. Pressing
Don a Helm-
managed K8s resource (labelapp.kubernetes.io/managed-by=Helmor
annotationmeta.helm.sh/release-name) now surfaces a "Helm-managed
(read-only)" toast and refuses, matchingEedit. Closes the v1.5.0
leak whereDskipped the guard. ztoggle expand panel. Single key toggles the focused panel
(table or detail) between expanded and normal — replaces the
=/-pair, which were ergonomically awkward (different keys for
open vs close).
Changed
- Trigger letters uppercase across the board.
e→E(edit),
s→S(shell). Aligns withD/Y/N/Cand the Shift = anti-
accidental modifier rule. Also affects the YAML popup's edit hotkey
(nowE). n/clowercase aliases removed. Namespace / context pickers
only respond toN/Cnow — the lowercase aliases were a leak
in the Shift = intentional rule.h/lpurely panel 3 tab switch. Previouslyh/lswitched
the panel 3 tab while panel 2 was focused; now they only fire when
panel 3 is the active panel. Panel 2 = pure list (cursor + Enter +
Space). Panel 3 = tab navigation (h/l).lretired as a drill key. Enter is now the sole drill / focus-
next-panel key throughout km8 (sidebarl/Enter→Enteronly;
Relatives tabEnter/l→Enteronly).hretired as drill-frame pop.Escwas always an alias; now
it's the only key for back-out.bkey retired. The breadcrumb popup is now reachable via
Spaceon the Relatives tab — folds into the universal "Space =
open menu" rule. The[b]readcrumbspanel-border hint is removed.- Breadcrumb popup:
Entercommits,Spacecloses. Inside the
popup,Enternow commits the cursor row as a panel 1+2 switch
(replaces the old jump-to-drill-level behavior).Spacemirrors
open and closes the popup without committing. - Any menu popup:
Space= close (mirror open). Breadcrumb popup,
Helm doc menu, per-row context menu — uniform rule. Confirm dialogs
already accepted Space as cancel; behavior unchanged. - Status line trimmed. Now shows only
?/q/N/C/
space/enter— plus/filter when panel 1/2 is active
(hidden on panel 3 since in-panel search was retired in v1.5.0).
Trigger letters (Y/E/S/D) live in the per-row context menu
instead of being duplicated on the status bar. - Help popup (
?) rewritten as the single source of truth for the
full key map under the new mental model.
Mental model summary
| Key | Meaning |
|---|---|
Enter |
Into — drill / focus next / commit popup |
Space |
Right-click menu — open context menu / mirror-close popup |
h/l |
Tab switch (panel 3 active only) |
Esc |
Back — pop drill / close popup |
Y/E/S/D/N/C |
Triggers, uppercase = needs Shift = anti-accidental |
j/k/u/d/gg/G |
Vim navigation (unchanged baseline) |
Fixed
- Table cell truncation no longer slices UTF-8 mid-codepoint. The
table renderer used byte-length truncation (val[:w-1]), which broke
any multi-byte cell whose byte count exceeded the column width — the
Nerd Font helm glyph (3 bytes / 1 cell) rendered as◇◇in a 2-cell
column. Now uses visual-width truncation viaansi.Truncate+
lipgloss.Width, so any multi-byte content survives narrow columns
intact. - Pod STATUS color column-index lookup is dynamic. The hard-coded
colIdx == 2check broke when the helm-marker column was inserted at
index 1; STATUS color stopped applying. Status column lookup is now
by column title, not position.
Changed (polish)
- Helm-managed visibility defaults to shown. Previously hidden by
default with the rationale that helm objects are "noise" on a scout
workflow. Reverted — the cluster's actual contents should be the
default surface..on any non-Releases panel 2 list toggles hide. - Helm marker column on every resource type. A dedicated unlabeled
column right after Name shows the `` (Nerd Font nf-dev-helm) glyph
on helm-managed rows, blank otherwise. Same glyph used for popup
title icons. Previously only Secrets list filtered helm storage blobs;
this universalizes the visual signal across all 26 resource types. - Panel 2 bottom-left always shows the
.: toggle helmhotkey hint.
Previously the chip only appeared when helm filter was off, as a
state indicator. Now it's a permanent hotkey advert (Releases panel
is the only exception — toggle is a no-op there). - Space closes every popup uniformly. YAML popup, Help popup, App
log popup, Splash screen all now acceptSpaceto close, matching
the universal "Space mirror-closes the popup that opened" rule from
the v1.5.1 mental model. - README rewritten around zero-learning-curve framing. Three keys
(Enter/Space/Esc) cover the primary interaction; layout
navigation (1/2/3,h/l) and accelerators (Y/E/S/D/...)
are framed as optional. Honest about whereSpaceworks vs not
(sidebar has no per-row menu — every row is itself a navigation
target).
Demo
- 5 demo gifs re-recorded against the v1.5.1 mental model:
demo-basics(three-key tour + Space menu → Y → YAML),
demo-relatives(chain drill + Space breadcrumb popup + confirm
switch),demo-yaml-edit(Space menu → Edit → confirm → vim, the
v1.5.1-correct path tokubectl edit),demo-helm(new — Space
doc menu → Manifest YAML popup),demo-km8erm(two scale cycles
showing hide/show persistence).