DOCUMENTATION / PART 1 — ORIENTATION1.3

1.3 The four surfaces

The same sixty-one modules are reachable through four surfaces. They are not four implementations; they are four views over one command line, and the command line is the truth.

The module CLI — modules/NN_name.sh --verb. Authoritative. Every verb, every store and every exit code is defined here, and nothing about a module's behaviour is decided anywhere else. If a GUI button and a module disagree, the module is right and the button is a bug.

The launcher — ./imsisting.sh. A menu over a table of CATEGORY|KEY|LABEL|MENU_FUNCTION|MODULE_ID rows, useful for finding the number of a module you have heard of but not memorised.

The TUI — tools/imsisting_tui.py, or ./imsisting.sh --tui. A full-screen terminal interface that reads the same table and the same module index, offering categories, search, a module detail pane (description, needs, verbs grouped by the same views the GUI uses) and one-click actions. Useful over SSH, on a machine with no display, and while a capture is running in another pane.

The GUI — native/builddir/imsisting-gui, built with meson and GTK 4. Ten pages in a left drawer, a module catalogue on the dashboard, a per-module page with the same views the TUI lists, and a header strip that reports the bench: radio present, transmit capability, current frequency, cell count, GPS.

Two supporting agents belong with the surfaces rather than under a module, because every surface may call them: tools/node_agent.sh (what runs on a remote node) and tools/ue_agent.sh (what runs against a handset over adb). Both are read-only by construction, and both refuse rather than guess when the device they were pointed at answers with something unexpected.