refactor(theme): Introduce semantic theme layer and clean NERV cruft from gui_2.py

This commit is contained in:
2026-05-12 20:24:47 -04:00
parent b53fc19f99
commit 12465fd04c
4 changed files with 450 additions and 393 deletions
@@ -0,0 +1,34 @@
# Implementation Plan: Clean Theme Abstraction
## Objective
Decouple the NERV theme logic and FX from `src/gui_2.py` by introducing a semantic theme layer in `src/theme_2.py`. This will remove scattered `is_nerv_active()` checks and keep the ImGui hierarchy clean.
## Key Files & Context
- `src/theme_2.py`: The primary theming interface.
- `src/gui_2.py`: The main GUI module containing the "cruft".
- `src/theme_nerv.py` & `src/theme_nerv_fx.py`: NERV-specific colors and effects.
- `src/imgui_scopes.py`: Context managers for ImGui scopes.
## Implementation Steps
### Phase 1: Semantic Theme Layer Foundations
- [ ] Task: In `src/theme_2.py`, define semantic color functions (e.g., `ai_text_color()`, `alert_color()`, `warning_color()`) that return theme-specific colors.
- [ ] Task: In `src/theme_2.py`, implement context manager helpers (e.g., `ai_text_style()`, `alert_style()`) that wrap `imscope.style_color`.
- [ ] Task: In `src/theme_2.py`, add a `render_post_fx(width, height, ai_status, crt_enabled)` hook that encapsulates CRT and Alert pulsing effects.
- [ ] Task: Move `CRTFilter`, `AlertPulsing`, and `StatusFlicker` instances from `App` class to `src/theme_2.py` (private module state).
### Phase 2: Refactor `gui_2.py`
- [ ] Task: In `gui_2.py`, remove all NERV-specific filter/flicker/alert instances from `__init__`.
- [ ] Task: In `_gui_func`, replace the NERV FX rendering block with a single call to `theme.render_post_fx()`.
- [ ] Task: Systematically replace scattered `if is_nerv_active(): push_style_color(...)` blocks with the new semantic style context managers.
- [ ] Task: Standardize status indicators (e.g., "PIPELINE PAUSED", "LIVE") to use semantic theme colors rather than manual `vec4` overrides.
### Phase 3: Verification & Cleanup
- [ ] Task: Run the custom AST linter to ensure no unclosed scopes were introduced during refactoring.
- [ ] Task: Run fast render tests to ensure UI stability.
- [ ] Task: Verify that both NERV and standard themes still render correctly (visual verification).
## Verification & Testing
- **AST Linting**: `uv run python scripts/check_imgui_scopes.py src/gui_2.py`
- **Fast Render Tests**: `uv run pytest tests/test_gui_fast_render.py`
- **Manual Verification**: Toggle NERV theme and verify CRT filter, alert pulsing, and DATA highlights are still active and correctly colored.