feat: remote commands, systemd units, process observability, broker auth split
- Command intake (reboot/shutdown) on infoscreen/{uuid}/commands with ack lifecycle
- MQTT_USER/MQTT_PASSWORD_BROKER split from identity vars; configure_mqtt_security() updated
- infoscreen-simclient.service: Type=notify, WatchdogSec=60, Restart=on-failure
- infoscreen-notify-failure@.service + script: retained MQTT alert when systemd gives up (Gap 3)
- _sd_notify() watchdog keepalive in simclient main loop (Gap 1)
- broker_connection block in health payload: reconnect_count, last_disconnect_at (Gap 2)
- COMMAND_MOCK_REBOOT_IMMEDIATE_COMPLETE canary flag with safety guard
- SERVER_TEAM_ACTIONS.md: server-side integration action items
- Docs: README, CHANGELOG, src/README, copilot-instructions updated
- 43 tests passing
This commit is contained in:
6
.github/copilot-instructions.md
vendored
6
.github/copilot-instructions.md
vendored
@@ -45,6 +45,7 @@ Use specialist docs for deep operational details:
|
||||
- `HDMI_CEC_SETUP.md` (CEC setup/troubleshooting)
|
||||
- `SCREENSHOT_MQTT_FIX.md` (screenshot race-condition fixes)
|
||||
- `src/README.md` (developer-focused architecture/debugging)
|
||||
- `SERVER_TEAM_ACTIONS.md` (server-side integration action items)
|
||||
|
||||
## Critical Rules
|
||||
|
||||
@@ -60,12 +61,13 @@ Use specialist docs for deep operational details:
|
||||
- Root `README.md` is a landing page; do not re-expand it into a full manual.
|
||||
- TV power rollout guidance lives in `TV_POWER_RUNBOOK.md`.
|
||||
- TV power contract truth lives in `TV_POWER_INTENT_SERVER_CONTRACT_V1.md`.
|
||||
- `MQTT_USER`/`MQTT_PASSWORD_BROKER` are broker login credentials; `MQTT_USERNAME`/`MQTT_PASSWORD` are legacy identity fields. Never confuse the two.
|
||||
|
||||
## Architecture Snapshot
|
||||
|
||||
Two-process design:
|
||||
|
||||
- `src/simclient.py`: MQTT communication, discovery, group assignment, event intake, heartbeat, dashboard publish, power intent ingestion.
|
||||
- `src/simclient.py`: MQTT communication, discovery, group assignment, event intake, heartbeat, dashboard publish, power intent ingestion, remote command intake.
|
||||
- `src/display_manager.py`: content display lifecycle, HDMI-CEC, screenshot capture, runtime process health.
|
||||
|
||||
Runtime coordination files:
|
||||
@@ -105,6 +107,8 @@ Runtime coordination files:
|
||||
- Power intent application: `src/display_manager.py` -> `_apply_mqtt_power_intent()`
|
||||
- Screenshot capture logic: `src/display_manager.py` -> `_capture_screenshot()`
|
||||
- Dashboard payload: `src/simclient.py` -> `_build_dashboard_payload()`
|
||||
- Remote command intake: `src/simclient.py` -> `on_command_message()`
|
||||
- Command validation: `src/simclient.py` -> `validate_command_payload()`
|
||||
- File URL rewriting: `src/simclient.py` -> `resolve_file_url()`
|
||||
|
||||
## Documentation Policy
|
||||
|
||||
Reference in New Issue
Block a user