Repository navigation
feat(web): command palette (Ctrl+K), tree filter and keyboard shortcuts - #369
Conversation
🛑 Fix loop escalated — human attention neededThis PR has stayed red on the same commit through 6 automated fix re-dispatches with no new commit pushed (1 distinct red head seen). The hive has stopped dispatching further automated fixes for it. Failing checks: ste / Simplified Technical English, ui-smoke Raw failure evidence (from check-run annotations): Remove the |
There was a problem hiding this comment.
[reviewer] recommend close: the requested command-palette capability is still absent from main, but this branch cannot be repaired in this mode because it changes .github/workflows/ui-smoke.yml, a protected path that this contributor-tier App cannot push; the branch’s ui-smoke also fails the new shortcut-overlay assertion and an existing VM-to-pool drag assertion. A human or ISSUES_PRS_MERGE agent must split/recreate the change without the workflow diff and repair the shortcut behavior; evidence: current main has no palette.js or command-palette implementation, the PR is 4 main commits behind, and CI recorded 2 smoke failures; tests: CI ui-smoke executed all checks and reported the two failures; remaining risk: the user-facing feature remains unlanded until recreated by an authorized agent.
— hive: agent=adjudicator backend=copilot model=claude-fable-5 copilot=1.0.88
ff0ab3a to
b5b1af9
Compare
Ctrl/Cmd+K opens a command palette that searches VMs, CTs, nodes, pools,
views and actions ("stop web-prod", "migrate db-prod", "create VM").
Items run from it are remembered in localStorage and rank first. The
palette is a native <dialog> with a combobox/listbox, so screen readers
follow the active result.
Single-key shortcuts, ignored while typing in a field or a console:
? shortcut overlay, / focus the new tree filter, c console, s start/stop,
g d datacenter. Read-only callers are offered no action that mutates,
and the Create CT button is now hidden from them like Create VM.
The ui-smoke "command-palette" check presses Ctrl+K, types a demo VM
name, presses Enter and asserts that VM is selected; it saves
command-palette.png and shortcuts.png, which the workflow uploads.
No build step and no new dependency (ADR-0004): palette.js is a native
ES module embedded with the rest of static/.
Hive-Run: tuna-os#349
Hive-Plan: tuna-os#349 web UI command palette
Hive-Spec: tuna-os#349#acceptance-command-palette
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: James Reilly <jreilly1821@gmail.com>
After Escape the palette returns focus to an input, where ? is text and not a shortcut, so the overlay check failed intermittently on CI. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TexZnEN3jq4jRUi8T3zZuY Signed-off-by: hanthor <hanthor@users.noreply.github.com>
8925e41 to
c8145f5
Compare
…ore bulk actions Rebuilds tuna-os#374 on top of the command palette (tuna-os#369), inventory grid (tuna-os#373) and context menus (tuna-os#385), which already cover the tree filter box, the shared tree/grid selection set and the pool/backend menu equivalents. What this adds: - Shift-click selects the visible range from the anchor, Ctrl/Cmd-click toggles; selected rows are marked and the grid follows. - The tree filter also matches tags and IP addresses. - Arrow/Home/End move focus between visible tree rows. - Bulk Snapshot, Tag and Delete next to Start/Stop/Restart. - A bulk-select smoke check. Fixes tuna-os#344 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TexZnEN3jq4jRUi8T3zZuY Signed-off-by: hanthor <hanthor@users.noreply.github.com>
Fixes #349
What this does
stop web-prod,migrate db-prodorcreate VM. Enter runs the top result. Items run from the palette are stored inlocalStorageand rank first. An exact name ranks above the verbs for that name, so typingdb-prodand pressing Enter opens db-prod rather than stopping it. A pool result switches to Pool View and highlights the pool row.?), plus single-key shortcuts:copens the console (serial terminal when there is no VNC),sstarts or stops the VM,/focuses the new tree filter, andg dgoes to the datacenter. These keys are ignored while focus is in a field or a VNC/serial/RDP console, so Ctrl+K still works as kill-line in a serial shell.body.read-onlyis set,sdoes nothing, and the overlay does not lists. While here,#btn-create-ctis now hidden in read-only mode too; before this only Create VM was hidden.<dialog>with acombobox/listboxandaria-activedescendant. Every palette action has the same effect as the matching toolbar button.The shortcuts and palette only call functions that already exist (
select,vmAction,ctAction, the create buttons), so they add no new API surface.Constraints (ADR-0004)
There is no build step and no new dependency.
pkg/web/static/palette.jsis a native ES module under the existinggo:embed static, injected with helpers the same waypools.jsis.Small fix found on the way
renderPowerSchedulecrashed withCannot set properties of nullwhen the tab changed while the schedule was loading.cmakes that easy to hit, and Playwright reports it as a page error. It now returns early if its box was detached.Acceptance:
command-paletteinscripts/ui-smoke.mjsFrom Cluster health, the check presses Ctrl+K, types
db-prodand presses Enter. It then asserts that the palette closed, that db-prod is the selected tree row and that the db-prod page is open. It also checks recency ranking,?,/with the filter, andg d. It savescommand-palette.pngandshortcuts.pngtoui-smoke-screenshots/, andui-smoke.ymluploads that directory as theui-smoke-screenshotsartifact. On currentmainthe check fails at "Ctrl+K opens the palette".Validation
node --checkpasses onapp.js,palette.jsandscripts/ui-smoke.mjs.ui-smokeCI job. Instead, I loadedindex.htmland the real modules into jsdom againstcorral web --demoand ran the same flow. All steps passed with no page errors:db-prodranks first. Enter selects db-prod in the tree and opens its page, and db-prod then ranks first as recent.?opens the overlay./focuses the filter,db-prleaves one guest row, and Escape restores the rest.copens the Console tab andg dgoes to the datacenter.stop webreturns onlyStop web-prod. In read-only mode no Start, Stop, Restart, Migrate or Create result appears. A pool created through/api/foldersis found and opened in Pool View.GOOS=js GOARCH=wasm go build ./cmd/corral-wasmpasses, so the browser demo still builds.go test ./pkg/web/: onlyTestDemoMode_EndToEndfails, and it fails the same way onmainon this machine (no OVMF).docs/user-guide.mdsection adds no findings. The file scores 30 before and after on the shared linter. The repo total is still 1062 against a budget of 1054 until docs: clear every Simplified Technical English finding #356 lands, so the Prose check may fail for reasons unrelated to this PR.— hive: backend=claude
🤖 Generated with Claude Code
🐝 Hive Agent:
contributor| SHA:7fb92a8