Drop the keyboard shortcuts; add a Re-read all button

The page carried the TUI's keymap -- screens on 1-8, / u a i r, the
report's arrows and s, the rule builder's ctrl+s and esc. Every one of
them already had a link, button or click, so they are gone, along with
the key numbers in the nav and the key hints in placeholders and
tooltips. The upload box still answers Enter and Space, which is what
makes it a button rather than a shortcut.

The forced import was reachable only by shift-clicking Import. It is now
a Re-read all button: every statement parsed again, including the ones
an import skips as unchanged -- what to run after a parser fix. Both
buttons disable while either runs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-02 23:36:59 +02:00
co-authored by Claude Opus 5.5
parent 3d72a54be1
commit c271cf2c8f
5 changed files with 71 additions and 141 deletions
+6 -6
View File
@@ -174,12 +174,12 @@ tag so ties keep a fixed position instead of shuffling between reloads.
own copy of that mapping; a new order needs a column of its own, which
`TestOrderColumnsAreDistinct` checks.
**The single-key shortcuts must not fire while typing.** The page's `keydown`
handler ignores them whenever the target is an input, or typing `i` in the tag
field would start an import. A view's own `key` hook runs first and is told
whether the user is typing, so a command *inside* a builder has to be a chord —
`ctrl+s` re-sorts the preview — because every printable key belongs to the
field being typed in.
**There are no keyboard shortcuts.** The page used to carry the TUI's keymap —
screens on `1`–`8`, `u`, `/`, `i`, `r`, and chords inside the builders — and it
was removed on purpose: every action is a link or a button. Do not add a global
`keydown` handler back without being asked; a single-letter key fires while
typing in a field unless every one of them is guarded, which is what the old one
existed to do.
**A rule's usage count is how many transactions it wins, not how many its glob
could match** — `Engine.Usage` counts by `MatchIndex`, so a rule shadowed by a