refactor: restore behavior the branch had changed (codex review)

A codex review of the branch found seven places where earlier refactor commits changed behavior. Each is restored here with a test:

- base_service imported flood_scope relatively; the local-service loader also runs that file as local_services.base_service, where the import cannot resolve. Now absolute.
- Radio-health fields were initialized after commands and services were built, so a plugin constructor reading is_radio_offline raised. They are now set before any plugin.
- Removing the per-command can_execute overrides made 31 commands honor skip_channel_check, which their overrides had dropped. BaseCommand.honors_skip_channel_check (False on exactly those commands) keeps them enforcing their channel list.
- CommandManager.get_plugin_metadata, WxCommand.get_weather_for_zipcode and PluginLoader.validate_plugin were public compatibility entry points; they are back.
- feed_manager stopped exporting DEFAULT_MAX_FEED_RESPONSE_BYTES and DEFAULT_MAX_PARSED_FEED_ITEMS despite the commit saying it re-exported them; it does now.
- wx and gwx logged companion-location lookup failures at WARNING; the shared helper logged at debug. It now takes the level.
- The INFO 'MESSAGE ROUTING' / 'DIRECT MESSAGE' lines for pubkey-correlated DMs were removed with the dead path_info computation; they are logged again by a log-only helper.
This commit is contained in:
agessaman committed 2026-10-01 06:53:14 -07:00
1 parent adedfa6c9e
commit efe074b151
47 files changed
+277 -17

No files matched your search

+9
View File
@@ -85,6 +85,12 @@ class BaseCommand(ABC):
# lists. requires_admin_access() is still the method callers ask.
admin_only: bool = False
# Whether can_execute honors skip_channel_check. Commands whose own override
# used to drop the argument (it called super().can_execute(message)) set this
# to False so they keep enforcing their channel list even when a delegating
# caller asks to skip it. Fixing that is a behavior change, kept separate.
honors_skip_channel_check: bool = True
# Documentation fields - to be overridden by subclasses for website generation
short_description: str = "" # Brief description for website (without usage syntax)
usage: str = "" # Usage syntax, e.g., "wx <zipcode|city> [tomorrow|7d|hourly|alerts]"
@@ -616,6 +622,9 @@ class BaseCommand(ABC):
if self.enabled_attr is not None and not getattr(self, self.enabled_attr):
return False
if not self.honors_skip_channel_check:
skip_channel_check = False
# Check channel access (standardized channel override)
if not skip_channel_check and not self.is_channel_allowed(message):
return False