# Build Progress Checklist
# Museum Vintage Radar Exhibit — C++ / OpenGL
# Update this file as each item is completed.
# At the start of a new session, read this file to Claude to resume.

## HOW TO USE
- Mark completed files with [x]
- Note any partial files with [~] and add a comment
- If a session ends mid-task, note it under RESUME POINT below

---

## RESUME POINT
*(update this when a session ends mid-task)*

Last completed: Marine PPI builds and runs cleanly (build_progress.md updated).
In-progress:    —
Next task:      Marine A-Scope (scope_ascope + scope_marine_a) or ATC PPI

---

## CONFIGURATION

- [x] src/settings.h                        — all constexpr constants
- [x] CMakeLists.txt                        — builds main radar binary; terrain_preprocess commented out

---

## CORE / INFRASTRUCTURE

- [x] src/main.cpp                          — entry point; GLFW/GLAD init; thread launch
- [x] src/shared_render_state.h             — Mutex A; state vars Thread 1 reads each frame
- [x] src/shared_render_state.cpp
- [x] src/target_buffer.h                   — Mutex B; target data between TrafficCop & Simulator
- [x] src/target_buffer.cpp

---

## SCOPE FRAMEWORK

- [x] src/scope.h                           — abstract Scope base; auto-advance timer
- [x] src/scope.cpp
- [x] src/scope_manager.h                   — owns scope list; s/S switching; 120s timer
- [x] src/scope_manager.cpp

---

## SCOPES — INDIVIDUAL

- [x] src/scope_intro.h                     — Exhibit Introduction (text only)
- [x] src/scope_intro.cpp
- [ ] src/scope_ascope.h                    — abstract AScope (A-scope shared behavior)
- [ ] src/scope_ascope.cpp
- [ ] src/scope_marine_a.h                  — Marine A-Scope; P1; graticule swap animation
- [ ] src/scope_marine_a.cpp
- [ ] src/scope_chain_home.h                — Chain Home A-Scope; P2; goniometer; PRF; calibrator
- [ ] src/scope_chain_home.cpp
- [x] src/scope_ppi.h                       — abstract PPIScope; P7 phosphor; graticule; cursor; held-keys
- [x] src/scope_ppi.cpp
- [x] src/scope_marine_ppi.h                — Marine PPI; 4s sweep; 2/4/6 mi ranges; beam-painted rings
- [x] src/scope_marine_ppi.cpp
- [ ] src/scope_boat_ppi.h                  — Boat PPI; moving origin; heading marker; patrol route
- [ ] src/scope_boat_ppi.cpp
- [ ] src/scope_atc_ppi.h                   — ATC PPI; 5s sweep; 5/10/15/20 mi ranges
- [ ] src/scope_atc_ppi.cpp
- [ ] src/scope_par.h                       — PAR; dual stacked scopes; az + el; 30 Hz
- [ ] src/scope_par.cpp

---

## RENDERING SUPPORT

- [x] src/phosphor.h                        — P7 decay/persistence; ping-pong FBO
- [x] src/phosphor.cpp
- [x] src/graticule.h                       — incandescent bearing ring; ticks; 15° labels; cursor
- [x] src/graticule.cpp
- [x] src/left_panel.h                      — FreeType TextRenderer + LeftPanel description pane
- [x] src/left_panel.cpp

---

## TARGET PIPELINE (THREADS 2 & 4)

- [x] src/traffic_cop.h                     — Thread 2; polls Simulator & RPi receivers at 4 Hz
- [x] src/traffic_cop.cpp
- [x] src/simulator.h                       — Thread 4; 7 simulated targets; flat-earth projection
- [x] src/simulator.cpp
- [x] src/rpi_receiver.h                    — stub; always returns 0 targets
- [x] src/rpi_receiver.cpp
- [x] src/knob_panel.h                      — Thread 3; hardware stub; idles until encoders wired
- [x] src/knob_panel.cpp

---

## TERRAIN  (deferred — not part of Marine PPI phase)

- [ ] src/terrain_map.h
- [ ] src/terrain_map.cpp
- [ ] src/land_clutter.h
- [ ] src/land_clutter.cpp
- [ ] src/terrain_preprocess.cpp            — STANDALONE offline tool; links GDAL only

---

## DATABASE PANEL  (deferred)

- [ ] src/db_panel.h
- [ ] src/db_panel.cpp

---

## DEAR IMGUI  (deferred — needed only for --database mode)

- [ ] src/imgui/imgui.h
- [ ] src/imgui/imgui.cpp
- [ ] src/imgui/imgui_impl_glfw.h
- [ ] src/imgui/imgui_impl_glfw.cpp
- [ ] src/imgui/imgui_impl_opengl3.h
- [ ] src/imgui/imgui_impl_opengl3.cpp
- [ ] src/imgui/imgui_draw.cpp
- [ ] src/imgui/imgui_tables.cpp
- [ ] src/imgui/imgui_widgets.cpp

---

## SHADERS

- [x] shaders/sweep.vert                    — fullscreen quad pass-through
- [x] shaders/sweep.frag                    — P7 ping-pong decay + beam + rings + targets
- [x] shaders/phosphor.vert                 — fullscreen quad pass-through
- [x] shaders/phosphor.frag                 — P7 color curve; bloom; scope circle clip
- [x] shaders/graticule.vert                — screen-pixel → NDC for line geometry
- [x] shaders/graticule.frag
- [x] shaders/text.vert                     — glyph quad (xy=screen pos, zw=atlas UV)
- [x] shaders/text.frag                     — samples GL_RED atlas; applies text color
- [x] shaders/bloom.vert                    — stub (bloom post-process; not yet wired in)
- [x] shaders/bloom.frag
- [ ] shaders/terrain_clutter.vert          — deferred with terrain
- [ ] shaders/terrain_clutter.frag

---

## DATA FILES

- [x] data/patrol_route.json                — boat waypoints stub (used by future BoatPPIScope)

---

## COUNTS
Total items: 68
Completed:   38
Remaining:   30  (A-scopes, Boat PPI, ATC PPI, PAR, terrain, DB panel, ImGui, 2 shaders)
