class BBS::Application

The widget event loop. Acts as the root container:

root_panel        — base UI (drawn behind windows)
menubar           — optional, Alt-letter pulldown menus
statusbar         — optional, hotkey hints at the bottom
window stack      — modal windows on top of root_panel

Build one with Application.define { … } DSL, or instantiate directly and use add_window / menubar / statusbar.

Doors (BBS::Door) are declared in the DSL and opened from any handler; Builder#run then hands the line to the door and rebuilds the application when the caller comes back:

APP = BBS::Application.define do
  door :sermo, Sermo::OS, label: '&SERMO'
  menubar do
    menu('&Doors') { doors }        # one item per declared door
  end
end

APP.run(session: session, session_id: sid, context: ctx)