The reviewer asked for a known-good interactive-menu library instead of
the custom termios/select key reader; arrow keys had failed in their
terminal. The TTY path now delegates to questionary.select (pointer ">",
bold highlight via pointer/selected styles), keeping choice values mapped
to list indices. Cancellable menus graft an eager Escape binding onto the
prompt's own key-binding registry so Esc backs out while Ctrl-C still
aborts fixed menus and backs out of cancellable ones. The non-TTY
numbered fallback is untouched, and hand-rolled internals
(_arrow_menu/_read_keypress/_option_line/_draw_menu_rows) are gone.
Gitea Actions workflow (.gitea/workflows/ci.yml):
- check job: ruff format --check, ruff check, ty check on pushes to main
- release job on v* tags: build a standalone Linux executable with
PyInstaller (--onefile), smoke-test it, create a Gitea release via
the API and upload the binary as an asset
Also add a pyinstaller build dependency group and bump to 0.3.0.
New `bts` subcommand backed by python-debianbts (bugs.debian.org SOAP):
- Identify by email address: get_bugs(submitter=...) for bugs filed,
get_bugs(owner=...) for bugs owned
- Filed filtered on creation date, owned on log_modified; status
lookups capped at 500 bugs per collect
- Per-query failures degrade to warnings like other sources