11 KiB
Module ownership map
Domain ownership for MeshChatX. Use this when deciding where code and tests live.
Orchestration entry remains meshchatx.meshchat (ReticulumMeshChat, main).
Schema contracts live under tests/backend/ (not production route modules).
Backend
| Domain | Manager modules | HTTP route module | WS module | Primary tests | Frontend page |
|---|---|---|---|---|---|
| Identity | identity_context.py, identity_manager.py |
http/routes/identities.py |
http/ws/dispatch.py |
test_identity_*, identity-switch skills |
Identities / tutorial |
| Status / startup | lifecycle/deferred_network.py, rns_startup_recovery.py |
http/routes/status.py |
(status via REST) | test_deferred_network_startup.py, test_api_json_contracts.py |
App shell banners |
| Auth / CSRF | csrf.py, app_security_settings.py, ip_allowlist.py |
http/routes/auth.py |
http/ws/dispatch.py |
test_csrf*, test_access_attempts_* |
Auth gate in App.vue |
| Messages / LXMF | message_handler.py, lxmf_utils.py, database/messages.py |
http/routes/messages.py, lxmf.py |
http/ws/dispatch.py |
LXMF messaging skill tests | messages/MessagesPage.vue, ConversationViewer.vue |
| Telephone / LXST | telephone_manager.py, database/telephone.py |
http/routes/telephone.py, contacts.py |
http/ws/dispatch.py |
telephone contract tests | call/CallPage.vue |
| RRC | rrc/manager.py, rrc/server.py |
http/routes/rrc.py |
http/ws/dispatch.py |
RRC skill tests | relay/RelayChatPage.vue |
| Map | map_manager.py, map_overlay_manager.py |
http/routes/map.py |
marker updates via broadcast | map manager tests | map/MapPage.vue |
| Plugins | plugin_manager.py, plugin_permissions.py |
http/routes/plugins.py, sideband.py |
http/ws/dispatch.py |
plugin install security tests | settings/PluginsSettingsSection.vue |
| FileSync | rns_filesync_handler.py |
http/routes/filesync.py |
(REST-heavy) | filesync security tests | filesync/ pages |
| Interfaces | interface_editor.py, interface_config_parser.py |
http/routes/interfaces.py |
(announce loops on app) | interface stats tests | interfaces/InterfacesPage.vue |
| Database / backup | database/*, recovery/* |
http/routes/database.py, maintenance.py |
(broadcasts on restore) | backup/restore skill tests | About / maintenance settings |
| Docs | docs_manager.py |
http/routes/docs.py |
(none) | docs manager tests | docs/DocsPage.vue |
| Sandbox | landlock_sandbox.py, seccomp_sandbox.py |
http/routes/status.py |
(none) | test_landlock_sandbox.py, test_landlock_integration_surfaces.py, sqlite landlock tests |
Web exposure settings |
| RNS Link API | rns_link_manager.py |
(WS only) | http/ws/dispatch.py |
test_rns_link_* |
plugins / external tools |
| Config | config_manager.py |
http/routes/config.py |
http/ws/dispatch.py |
settings config services tests | settings/SettingsPage.vue |
HTTP package layout
meshchatx/src/backend/http/
context.py
errors.py
live_names.py
middleware.py
register.py
routes/<domain>.py
routes/__init__.py
ws/dispatch.py
register_all_routes(routes, app) is the sole composition entry. Call it only from
ReticulumMeshChat._define_routes. Domain register functions are listed in fixed order
in routes/__init__.py. Free names resolve through live_names.inject_meshchat_names.
WS inbound handlers live in ws/handlers_*.py and are composed by ws/dispatch.py.
Frontend mega-pages
Placement for extracts. Follow docs/agents/skills/vue-mega-page-split/SKILL.md.
Do not invent folders outside this table.
| Kind | Put it here | Example |
|---|---|---|
| Page-private panel or UI | components/<feature>/internal/*.vue |
MapSearchBar |
| Settings chunk | components/settings/sections/*SettingsSection.vue |
TelephonySettingsSection |
| Pure logic | colocated *.js or js/<feature>/ |
clusterUtils, settingsConfigService |
| Cross-feature primitive | root components/ or components/forms/ |
ConfirmDialog, Toggle |
| Nav, tools, commands wiring | js/registries/ only |
never grow App.vue for discovery |
| Page shell | On-disk child dirs | Planned child dirs | Shared JS | Primary tests |
|---|---|---|---|---|
settings/SettingsPage.vue |
settings/sections/ (incl. Battery), toggle/block helpers |
more sections from remaining inline template | js/settings/ |
SettingsPage*.test.js, settingsSections.test.js, behaviorContracts.test.js |
messages/ConversationViewer.vue |
composer/, modals/, outbound/, lxmf/, telemetry, helpers |
further script slices | conversationMessageHelpers.js |
ConversationViewer tests |
call/CallPage.vue |
call/tabs/, call/audio/, CallOverlay.vue |
more tabs and audio panels | call helpers | CallPage*.test.js |
map/MapPage.vue |
map/internal/ (panels + helpers, incl. MapSaveDrawingModal) |
more overlays and modals into internal/ |
js/map* |
map component tests |
relay/RelayChatPage.vue |
relay view components | further relay panels as needed | js/relay* |
relay tests |
App.vue |
layout/AppShellBanners.vue, layout/AppIdentitySwitchOverlay.vue |
more shell chrome under layout/ |
registries, WS shell | AppIdentitySwitch.test.js |
network-visualiser/NetworkVisualiser.vue |
network-visualiser/internal/ |
more chrome into internal/ |
js/networkVisualiser* |
network visualiser tests |
interfaces/AddInterfacePage.vue |
interfaces/internal/AddInterfaceDiscoveryPanel.vue |
further interface form panels | js/interfaceDiscoveryUtils.js |
AddInterface tests |
Frontend ownership contracts:
tests/frontend/fixtures/frontend_mega_page_ownership.jsontests/frontend/fixtures/frontend_symbol_continuity/tests/frontend/frontendOwnershipContract.test.js
Contract ownership
| Contract | Owner files |
|---|---|
| HTTP route inventory | tests/backend/fixtures/http_api_routes.json, scanners in http_api_contract_helpers.py (reads meshchat.py and backend/http/**/*.py) |
| HTTP JSON GET schemas | http_api_response_schemas.py, http_api_response_registry.py |
| Core status/auth/app_info | api_json_contract_schemas.py |
| WS message manifest | tests/backend/fixtures/ws_message_manifest.json, ws_contract_helpers.py (reads meshchat.py, backend/http/**/*.py, lifecycle/**, rns_link_manager.py) |
Schema contracts stay in tests/backend/. Route and WS owners are production modules under backend/http/.