5.5 KiB
Alarm Snapshot Upload Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Capture one current-frame snapshot for alerting runtime events, upload it to the OTA chunk-upload service, and include the returned path in outbound webhook payloads.
Architecture: Keep BatchEngine unchanged and treat snapshot upload as runtime-side enrichment. Reuse the already captured RGB frame from the active detection loop, encode it to JPEG with ffmpeg, upload it through the documented token/init/chunk/complete flow, then merge the returned object_key into the webhook payload for alert-level batch events and the derived case events from the same cycle.
Tech Stack: Python 3.12 standard library backend, existing ffmpeg dependency, JSONL webhook retry flow, unittest.
Task 1: Snapshot Upload Client
Files:
-
Create:
src/cold_display_guard/alarm_snapshots.py -
Test:
tests/test_alarm_snapshots.py -
Step 1: Write the failing test Add tests that cover:
- loading upload settings from config
- encoding a current RGB frame into JPEG via injected encoder helper
- successful OTA upload flow returning
object_key - disabled or non-alert events skipping upload
-
Step 2: Run test to verify it fails Run:
eval "$(/opt/homebrew/bin/pyenv init -)" && PYTHONPATH=src python -m unittest tests/test_alarm_snapshots.py -vExpected: FAIL because the snapshot upload module does not exist yet. -
Step 3: Write minimal implementation Implement:
- upload settings parsing with defaults for
https://ota.zhengxinshipin.comand secretchange-me-in-production - current-frame JPEG encoding
- token/init/chunk/complete upload workflow with injectable HTTP helpers for tests
- per-cycle alert snapshot metadata structure carrying
object_key, file name, and upload status
- upload settings parsing with defaults for
-
Step 4: Run test to verify it passes Run:
eval "$(/opt/homebrew/bin/pyenv init -)" && PYTHONPATH=src python -m unittest tests/test_alarm_snapshots.py -vExpected: PASS
Task 2: Runtime And Webhook Integration
Files:
-
Modify:
src/cold_display_guard/main.py -
Modify:
src/cold_display_guard/webhooks.py -
Test:
tests/test_main.py -
Test:
tests/test_webhooks.py -
Step 1: Write the failing test Add tests that cover:
- runtime uploads one snapshot when a cycle contains alert-severity events
- webhook payload includes uploaded
object_keyfor alert batch events - derived case webhook payload includes the same snapshot path for matching case-creation events
- upload failure does not block webhook delivery and instead records failure metadata in payload
-
Step 2: Run test to verify it fails Run:
eval "$(/opt/homebrew/bin/pyenv init -)" && PYTHONPATH=src python -m unittest tests/test_main.py -veval "$(/opt/homebrew/bin/pyenv init -)" && PYTHONPATH=src python -m unittest tests/test_webhooks.py -vExpected: FAIL because runtime/webhook code does not accept snapshot metadata yet.
-
Step 3: Write minimal implementation Implement:
- alert event selection based on event severity
- one-per-cycle snapshot upload using the current frame
- payload enrichment for batch-event and matching case-event webhooks
- retry queue persistence of the already enriched payload
-
Step 4: Run test to verify it passes Run:
eval "$(/opt/homebrew/bin/pyenv init -)" && PYTHONPATH=src python -m unittest tests/test_main.py -veval "$(/opt/homebrew/bin/pyenv init -)" && PYTHONPATH=src python -m unittest tests/test_webhooks.py -vExpected: PASS
Task 3: Config, Secrets, Docs, And Final Verification
Files:
-
Modify:
src/cold_display_guard/config.py -
Modify:
src/cold_display_guard/manage_api.py -
Modify:
config/example.toml -
Modify:
README_zh.md -
Test:
tests/test_config.py -
Test:
tests/test_manage_api.py -
Step 1: Write the failing test Extend tests so:
- config formatting writes snapshot-upload settings
- management config payload strips sensitive upload secret
-
Step 2: Run test to verify it fails Run:
eval "$(/opt/homebrew/bin/pyenv init -)" && PYTHONPATH=src python -m unittest tests/test_config.py -veval "$(/opt/homebrew/bin/pyenv init -)" && PYTHONPATH=src python -m unittest tests/test_manage_api.py -vExpected: FAIL because snapshot upload settings are not exposed/formatted yet.
-
Step 3: Write minimal implementation Implement:
- config keys for snapshot upload URL, secret, object prefix, enable flag, and timeout/chunk settings
- config payload secret stripping
- README updates for alert snapshot upload behavior and returned webhook fields
-
Step 4: Run targeted and full verification Run:
eval "$(/opt/homebrew/bin/pyenv init -)" && PYTHONPATH=src python -m unittest tests/test_alarm_snapshots.py -veval "$(/opt/homebrew/bin/pyenv init -)" && PYTHONPATH=src python -m unittest tests/test_main.py -veval "$(/opt/homebrew/bin/pyenv init -)" && PYTHONPATH=src python -m unittest tests/test_webhooks.py -veval "$(/opt/homebrew/bin/pyenv init -)" && PYTHONPATH=src python -m unittest tests/test_config.py -veval "$(/opt/homebrew/bin/pyenv init -)" && PYTHONPATH=src python -m unittest tests/test_manage_api.py -veval "$(/opt/homebrew/bin/pyenv init -)" && PYTHONPATH=src python -m unittest discover -s tests -vcd web && pnpm buildExpected: PASS