== Motor A: keybinding parity (Pi vs Tapir), from source ==
Pi:    keybindings.ts + keybindings.ts  (72 actions)
Tapir: keybindings.rs  (36 actions)
Omissions policy: (see report; not auto-suppressed — judged by hand)

-- MISSING in Tapir, WITH a default key (real gaps): 35
   app.message.dequeue  ->  alt+up
   app.models.clearAll  ->  ctrl+x
   app.models.enableAll  ->  ctrl+a
   app.models.reorderDown  ->  alt+down
   app.models.reorderUp  ->  alt+up
   app.models.save  ->  ctrl+s
   app.models.toggleProvider  ->  ctrl+p
   app.session.delete  ->  ctrl+d
   app.session.deleteNoninvasive  ->  ctrl+backspace
   app.session.rename  ->  ctrl+r
   app.session.toggleNamedFilter  ->  ctrl+n
   app.session.togglePath  ->  ctrl+p
   app.session.toggleSort  ->  ctrl+s
   app.suspend  ->  ctrl+z
   app.thinking.toggle  ->  ctrl+t
   app.tools.expand  ->  ctrl+o
   app.tree.editLabel  ->  shift+l
   app.tree.filter.all  ->  ctrl+a
   app.tree.filter.cycleBackward  ->  shift+ctrl+o
   app.tree.filter.cycleForward  ->  ctrl+o
   app.tree.filter.default  ->  ctrl+d
   app.tree.filter.labeledOnly  ->  ctrl+l
   app.tree.filter.noTools  ->  ctrl+t
   app.tree.filter.userOnly  ->  ctrl+u
   app.tree.foldOrUp  ->  ctrl+left,alt+left
   app.tree.toggleLabelTimestamp  ->  shift+t
   app.tree.unfoldOrDown  ->  ctrl+right,alt+right
   tui.editor.jumpBackward  ->  ctrl+alt+]
   tui.editor.jumpForward  ->  ctrl+]
   tui.editor.pageDown  ->  pageDown
   tui.editor.pageUp  ->  pageUp
   tui.editor.yankPop  ->  alt+y
   tui.input.copy  ->  ctrl+c
   tui.select.pageDown  ->  pageDown
   tui.select.pageUp  ->  pageUp

-- MISSING in Tapir, no default key in Pi either (lower priority): 4
   app.session.fork
   app.session.new
   app.session.resume
   app.session.tree

-- EXTRA in Tapir (id not in Pi): 3
   app.scroll.down  ->  pagedown
   app.scroll.up  ->  pageup,ctrl+u
   tui.editor.redo  ->  alt+z

-- DIVERGENT keys (id in both, keys differ): 0

RESULT: keybinding tables DIFFER (real gaps and/or divergences above).
