| @@ -0,0 +1,211 @@ | |||
| # SDR Wideband Suite - Persisted Roadmap | |||
| This file is the durable architectural roadmap and phase memory for the project. | |||
| It exists so a context reset, model switch, or new coding agent can continue from the real project state without reconstructing the entire plan from chat history. | |||
| ## Current Project Status | |||
| The project has progressed through four major milestones: | |||
| - **Phase 1 complete**: architecture foundation | |||
| - **Phase 2 complete**: multi-resolution surveillance semantics | |||
| - **Phase 3 complete**: conservative runtime prioritization / admission / rebalance intelligence | |||
| - **Phase 4 complete**: monitor-window operating model | |||
| This roadmap reflects the actual code state as of the latest landed Phase-4 work. | |||
| --- | |||
| ## Phase 1 - Architecture Foundation (Complete) | |||
| ### Intent | |||
| Turn the original SDR visualizer into a scalable, policy-driven wideband SDR engine. | |||
| ### Delivered | |||
| - explicit config model for `pipeline`, `surveillance`, `refinement`, `resources`, `profiles` | |||
| - separation of surveillance / refinement / presentation concerns | |||
| - explicit candidate / refinement model | |||
| - centralized arbitration / admission surface for refinement / record / decode | |||
| - budget / hold / queue scaffolding | |||
| - profile and policy surface established | |||
| ### Meaning | |||
| Phase 1 established the architecture so later scaling would not require another ground-up rewrite. | |||
| --- | |||
| ## Phase 2 - Multi-Resolution Surveillance Semantics (Complete) | |||
| ### Intent | |||
| Make surveillance genuinely multi-level and connect those levels to candidate behavior. | |||
| ### Delivered | |||
| - operational surveillance level sets | |||
| - derived / decimated surveillance spectra | |||
| - primary / derived / support / presentation level roles | |||
| - derived detection governance | |||
| - candidate evidence model across levels | |||
| - primary/derived fusion | |||
| - level-aware refinement scoring | |||
| - debug/API visibility for surveillance levels and evidence | |||
| ### Meaning | |||
| Phase 2 moved the system from a single-spectrum mentality toward a real multi-resolution surveillance engine. | |||
| --- | |||
| ## Phase 3 - Runtime Prioritization / Admission / Rebalance (Complete) | |||
| ### Intent | |||
| Move from architecture + heuristics to conservative runtime intelligence. | |||
| ### Delivered | |||
| - priority tiers and admission classes | |||
| - richer reason taxonomy across refinement / record / decode | |||
| - budget preference and effective budget semantics | |||
| - pressure summaries | |||
| - hold / protection / opportunistic displacement semantics | |||
| - intent-aware hold behavior | |||
| - family-aware tier floors | |||
| - conservative adaptive cross-resource rebalance | |||
| - debug/API visibility for admission / pressure / rebalance state | |||
| ### Meaning | |||
| Phase 3 created a real runtime decision layer rather than just a scoring layer. | |||
| It is intentionally conservative, explainable, and incremental rather than a full adaptive scheduler. | |||
| --- | |||
| ## Phase 4 - Monitor-Window Operating Model (Complete) | |||
| ### Intent | |||
| Turn monitor windows from simple goal/gating objects into operational monitoring zones inside a capture span. | |||
| ### Delivered | |||
| - `monitor_windows` in config/goals/policy/runtime | |||
| - monitor-window candidate gating | |||
| - per-window candidate attribution | |||
| - per-window stats | |||
| - monitor-window priority bias | |||
| - window-based record/decode actions | |||
| - lightweight zone hints: | |||
| - `focus` | |||
| - `record` | |||
| - `decode` | |||
| - `background` | |||
| - consolidated `window_summary` | |||
| - per-window pressure / outcome summaries | |||
| - overlap and zone/action tests | |||
| - debug/API visibility for monitor-window behavior | |||
| ### Meaning | |||
| Phase 4 delivered a practical operating model for multiple monitoring zones within a single capture span, without requiring full hardware multi-span orchestration. | |||
| --- | |||
| # Next Planned Phases | |||
| ## Phase 5 - Span / Operating-Orchestration | |||
| ### Core idea | |||
| Move from monitor windows inside one capture span to richer orchestration across operational spans / span groups / monitoring areas. | |||
| ### Target outcomes | |||
| - explicit span / zone groups | |||
| - span-aware resource allocation | |||
| - stronger profile-driven operating modes | |||
| - retune / dwell / revisit semantics where hardware or mode requires it | |||
| - more operational behavior across multiple monitoring regions, not just one captured span | |||
| ### Likely sub-areas | |||
| - span orchestration model | |||
| - span-aware resource allocation | |||
| - profile-driven operating modes | |||
| - retune / scan / dwell semantics | |||
| ### Important note | |||
| Phase 5 should still avoid unnecessary premature hardware-specific complexity, but it is the logical next step after the monitor-window model. | |||
| --- | |||
| ## Phase 6 - Adaptive QoS / Scheduler Intelligence | |||
| ### Core idea | |||
| Make the engine more adaptive under changing load and signal density. | |||
| ### Target outcomes | |||
| - deeper QoS model | |||
| - adaptive runtime rebalance beyond the conservative Phase-3 layer | |||
| - richer priority ecology (decay, revisit, persistence, overload behavior) | |||
| - broader operating-state behavior under calm / dense / overload conditions | |||
| ### Important note | |||
| This should build on the operational structures from Phase 5 rather than bypass them. | |||
| --- | |||
| ## Phase 7 - Performance / Scale / Hardware Depth | |||
| ### Core idea | |||
| Turn the architecture into a genuinely high-bandwidth, high-throughput system. | |||
| ### Target outcomes | |||
| - GPU spectral pyramid / multi-resolution acceleration | |||
| - better batching / buffering / async processing | |||
| - larger stable operating bandwidths | |||
| - profiling / benchmark / regression discipline for throughput | |||
| ### Important note | |||
| Performance work should follow the behavioral model, not lead it. | |||
| --- | |||
| ## Phase 8 - Productization / Operator Workflow / Polish | |||
| ### Core idea | |||
| Turn the powerful engine into a polished operator product. | |||
| ### Target outcomes | |||
| - better UX and status visibility | |||
| - reusable monitoring plans / templates | |||
| - export / review / workflow polish | |||
| - safer and clearer autonomous behavior | |||
| - polished docs, defaults, and examples | |||
| --- | |||
| # Practical Continuation Guidance | |||
| If a future agent resumes work, the recommended order is: | |||
| 1. **Start with Phase 5**, not Phase 6/7/8. | |||
| 2. Treat Phases 1-4 as completed milestones. | |||
| 3. Avoid reopening already-closed phase work unless there is a concrete bug or mismatch. | |||
| 4. Before starting a new major block, inspect the current repo state and confirm the roadmap still matches the code. | |||
| 5. Prefer milestone-sized coherent blocks over broad speculative redesigns. | |||
| --- | |||
| # Current Default Testing / Operator Context | |||
| A valid FM/UKW-oriented test config was intentionally introduced for easier local testing. | |||
| Current default direction: | |||
| - FM broadcast band (87.5-108 MHz) | |||
| - centered around 99.5 MHz | |||
| - `wideband-balanced` | |||
| - `broadcast-monitoring` | |||
| - WFM/RDS-friendly priorities | |||
| If that changes later, update this file when the default operator/testing posture changes materially. | |||
| --- | |||
| # Why this file exists | |||
| This file is meant to survive: | |||
| - context resets | |||
| - model changes | |||
| - agent swaps | |||
| - long pauses in development | |||
| It should be kept updated whenever a phase is meaningfully completed or the roadmap changes materially. | |||
| @@ -0,0 +1,184 @@ | |||
| # SDR Wideband Suite - Current State | |||
| This file is the practical handoff / resume state for future work. | |||
| Use it together with `ROADMAP.md`. | |||
| - `ROADMAP.md` = long-term architecture and phase roadmap | |||
| - `STATE.md` = current repo state, working conventions, and next recommended entry point | |||
| ## Current Milestone State | |||
| - **Phase 1 complete** | |||
| - **Phase 2 complete** | |||
| - **Phase 3 complete** | |||
| - **Phase 4 complete** | |||
| Current project state should be treated as: | |||
| - Phase 1 = architecture foundation landed | |||
| - Phase 2 = multi-resolution surveillance semantics landed | |||
| - Phase 3 = conservative runtime prioritization/admission/rebalance landed | |||
| - Phase 4 = monitor-window operating model landed | |||
| Do not reopen these phases unless there is a concrete bug, mismatch, or regression. | |||
| --- | |||
| ## Most Recent Relevant Commits | |||
| These are the most important recent milestone commits that define the current state: | |||
| ### Phase 4 monitor-window operating model | |||
| - `efe137b` Add monitor window goals for multi-span gating | |||
| - `ac64d6b` Add monitor window matches and stats | |||
| - `d7e457d` Expose monitor window summaries in runtime debug | |||
| - `c520423` Add monitor window priority bias | |||
| - `838c941` Add window-based record/decode actions | |||
| - `962cf06` Add window zone biases for record/decode actions | |||
| - `402a772` Consolidate monitor window summary in debug outputs | |||
| - `8545b62` Add per-window outcome summaries for admission pressure | |||
| - `65b9845` test: cover overlapping monitor windows | |||
| - `efe3215` docs: capture Phase-4 monitor-window status | |||
| ### Phase 3 runtime intelligence milestone | |||
| - `4ebd51d` Add priority tiers and admission classes to pipeline | |||
| - `18b179b` Expose admission metadata in debug output and tests | |||
| - `ba9adca` Add budget preference and pressure modeling | |||
| - `7a75367` Expose arbitration pressure summary | |||
| - `592fa03` pipeline: deepen hold/displacement semantics | |||
| - `30a5d11` pipeline: apply intent holds and family tier floors | |||
| - `1f5d4ab` pipeline: add intent and family priority tests | |||
| - `822829c` Add conservative budget rebalance layer | |||
| - `da5fa22` Update Phase-3 Wave 3E status | |||
| ### Documentation / stable defaults | |||
| - `fd718d5` docs: finalize phase milestones and ukf test config | |||
| If resuming after a long pause, inspect the current `git log` around these commits first. | |||
| --- | |||
| ## Current Important Files / Subsystems | |||
| ### Long-term guidance | |||
| - `ROADMAP.md` - durable roadmap across phases | |||
| - `STATE.md` - practical resume/handoff state | |||
| - `PLAN.md` - project plan / narrative (may be less pristine than ROADMAP.md) | |||
| - `README.md` - user-facing/current feature status | |||
| ### Config / runtime surface | |||
| - `config.yaml` - current committed default config | |||
| - `config.autosave.yaml` - local autosave; intentionally not tracked in git | |||
| - `internal/config/config.go` | |||
| - `internal/runtime/runtime.go` | |||
| ### Phase 3 core runtime intelligence | |||
| - `internal/pipeline/arbiter.go` | |||
| - `internal/pipeline/arbitration.go` | |||
| - `internal/pipeline/arbitration_state.go` | |||
| - `internal/pipeline/priority.go` | |||
| - `internal/pipeline/budget.go` | |||
| - `internal/pipeline/pressure.go` | |||
| - `internal/pipeline/rebalance.go` | |||
| - `internal/pipeline/decision_queue.go` | |||
| ### Phase 2 surveillance/evidence model | |||
| - `internal/pipeline/types.go` | |||
| - `internal/pipeline/evidence.go` | |||
| - `internal/pipeline/candidate_fusion.go` | |||
| - `internal/pipeline/scheduler.go` | |||
| - `cmd/sdrd/pipeline_runtime.go` | |||
| ### Phase 4 monitor-window model | |||
| - `internal/pipeline/monitor_rules.go` | |||
| - `cmd/sdrd/window_summary.go` | |||
| - `cmd/sdrd/level_summary.go` | |||
| - `cmd/sdrd/http_handlers.go` | |||
| - `cmd/sdrd/decision_compact.go` | |||
| - `cmd/sdrd/dsp_loop.go` | |||
| --- | |||
| ## Current Default Operator / Test Posture | |||
| The repo was intentionally switched to an FM/UKW-friendly default test posture. | |||
| ### Current committed config defaults | |||
| - band: `87.5-108.0 MHz` | |||
| - center: `99.5 MHz` | |||
| - sample rate: `2.048 MHz` | |||
| - FFT: `4096` | |||
| - profile: `wideband-balanced` | |||
| - intent: `broadcast-monitoring` | |||
| - priorities include `wfm`, `rds`, `broadcast`, `digital` | |||
| ### Important config note | |||
| - `config.yaml` is committed and intended as the stable default reference | |||
| - `config.autosave.yaml` is **not** git-tracked and may diverge locally | |||
| - if behavior seems odd, compare the active runtime config against `config.yaml` | |||
| --- | |||
| ## Working Conventions That Matter | |||
| ### Codex invocation on Windows | |||
| Preferred stable flow: | |||
| 1. write prompt to `codex_prompt.txt` | |||
| 2. create/use `run_codex.ps1` containing: | |||
| - read prompt file | |||
| - pipe to `codex exec --yolo` | |||
| 3. run with PTY/background from the repo root | |||
| 4. remove `codex_prompt.txt` and `run_codex.ps1` after the run | |||
| This was adopted specifically to avoid PowerShell quoting failures. | |||
| ### Expectations for coding runs | |||
| - before every commit: `go test ./...` and `go build ./cmd/sdrd` | |||
| - commit in coherent blocks with clear messages | |||
| - push after successful validation | |||
| - avoid reopening already-closed phase work without a concrete reason | |||
| --- | |||
| ## Known Practical Caveats | |||
| - `PLAN.md` has had encoding/character issues in some reads; treat `ROADMAP.md` + `STATE.md` as the cleaner authoritative continuity docs. | |||
| - README is generally useful, but `ROADMAP.md`/`STATE.md` are better for architectural continuity. | |||
| - `config.autosave.yaml` can become misleading because it is local/autosaved and not tracked. | |||
| --- | |||
| ## Recommended Next Entry Point | |||
| If resuming technical work after this checkpoint: | |||
| ### Start with **Phase 5** | |||
| Do **not** reopen Phase 1-4 unless there is a concrete bug or regression. | |||
| ### Recommended Phase 5 direction | |||
| Move from monitor windows inside a single capture span toward richer span / operating orchestration: | |||
| - span / zone groups | |||
| - span-aware resource allocation | |||
| - stronger profile-driven operating modes | |||
| - retune / scan / dwell semantics where needed | |||
| ### Avoid jumping ahead prematurely to | |||
| - full adaptive QoS engine (Phase 6) | |||
| - major GPU/performance re-architecture (Phase 7) | |||
| - heavy UX/product polish (Phase 8) | |||
| Those should build on Phase 5, not bypass it. | |||
| --- | |||
| ## Resume Checklist For A Future Agent | |||
| 1. Read `ROADMAP.md` | |||
| 2. Read `STATE.md` | |||
| 3. Check current `git log` near the commits listed above | |||
| 4. Inspect `config.yaml` | |||
| 5. Confirm current repo state with: | |||
| - `go test ./...` | |||
| - `go build ./cmd/sdrd` | |||
| 6. Then start Phase 5 planning from the actual repo state | |||
| If these steps still match the repo, continuation should be seamless enough even after a hard context reset. | |||