Notify on IDLE→ARMED and ARMED→PRIMED so the user gets staged warnings before FIRE. If atm run starts mid-cycle on dark_green/dark_red, synth a catchup arm so the prime alert still fires (audit tagged catchup:true). If it starts on light_green/light_red, emit one late_start warn and skip the FSM feed — FIRE already passed. Extracted _handle_tick() as a pure helper (takes fsm + duck-typed notifier/audit Protocols) so the dispatch is unit-testable without mocking FanoutNotifier. 9 new tests cover arm, prime, refresh silence, catchup synth-arm (+ audit), and late-start on both directions. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
58 lines
2.6 KiB
Markdown
58 lines
2.6 KiB
Markdown
# TODOS
|
|
|
|
Post-Faza 1 backlog. Priority tags: **P1** (next sprint), **P2** (after baseline proven), **P3** (nice-to-have).
|
|
|
|
---
|
|
|
|
## P2-ack-loop — Discord reaction feedback
|
|
|
|
**Deferred from Faza 1.** Operator reacts to alert with emoji (👍 = good call, 👎 = false positive, ⏭️ = phase-skip). Bot reads reactions via Discord Bot API (not webhook), appends to `labels_live.json`. Feeds precision tuning without manual labeling.
|
|
|
|
- Requires upgrading Discord integration from webhook to bot (token + gateway).
|
|
- Ack loop runs as separate async task; not in hot detection path.
|
|
- Start after 5+ sessions of stable Faza 1 baseline.
|
|
|
|
## P2-screenshot-dump
|
|
|
|
Standalone helper `atm dump --duration 4h --dir samples/` that just captures frames every N seconds to a directory without running detection. Used during early sessions to accumulate labeled corpus.
|
|
|
|
- Small module `src/atm/dumper.py` invoked via main.py.
|
|
- Separate from `run` so operator can capture raw data even before calibration is dialed in.
|
|
|
|
## P2-windows-scheduler-docs
|
|
|
|
Expand README with concrete Windows Task Scheduler XML export + import steps, example triggers for 16:30→18:30 and 21:00→23:00, and DST-change checklist reminder.
|
|
|
|
## P2-alert-mute-flags
|
|
|
|
Per-kind mute toggles for notifications in case arm/prime turn out too noisy in live sessions:
|
|
|
|
- `cfg.notify.arm: bool = true`
|
|
- `cfg.notify.prime: bool = true`
|
|
- `cfg.notify.late_start: bool = true`
|
|
|
|
Default all true. Gate each `notifier.send()` in `_handle_tick()` on the flag. Start after 3+ live sessions confirm the signal/noise ratio.
|
|
|
|
Blocked on: Faza 1 baseline evidence.
|
|
|
|
## P3-faza2-exec
|
|
|
|
Auto-execution on TradeLocker. Blocked on TOS audit (see `docs/phase2-prop-firm-audit.md`). Not started until GO decision + 20+ Faza 1 sessions.
|
|
|
|
## P3-multi-symbol
|
|
|
|
Monitor DIA and GLD concurrently (two separate charts). Current scope: one at a time, operator switches. Multi-symbol needs per-symbol config, separate state machines, and separate notification threads.
|
|
|
|
## P3-web-dashboard
|
|
|
|
Read-only web view of today's audit JSONL + recent triggers. Useful for review after a session but not essential. Would share `audit.py` log format.
|
|
|
|
---
|
|
|
|
## Quality debt
|
|
|
|
- [ ] **Integration test for run_live loop**: currently mocked at module level. Add a short-duration in-memory loop test that threads real detector/state_machine/audit together (no network).
|
|
- [ ] **Coverage report**: run `pytest --cov=atm --cov-report=term-missing`, aim for ≥ 85% per module.
|
|
- [ ] **Typing strictness**: run `pyright src/` with strict mode, fix reported issues.
|
|
- [ ] **Perf baseline**: profile one detection cycle on a representative frame; ensure < 100ms so 5s loop has ample headroom.
|