+ - Produce `viz/BAKEOFF_NOTES.md` — the written record of the 30-min evaluation. Sections: Methodology (what we tested), Streamlit Prototype (5-line plotly + 5-line components.v1.html for D3 embed), Gradio Prototype (same 2 tests in Gradio), Observations (what rendered cleaner), Decision + Rationale (Streamlit because components.v1.html supports arbitrary D3 HTML more flexibly than gr.HTML, per CLAUDE.md §1.1).
+ - Produce `viz/app.py` — the Streamlit skeleton that Phase 3 DEM-05/DEM-06 will extend. Layout:
+ 1. `st.title("FATHOM — Recursive Language Model")`
+ 2. `st.caption("Theme 2 · Mercor sub-prize · Meta × PyTorch × HF Grand Finale")`
+ 3. Three tabs via `st.tabs(["Reward curve", "Recursion tree", "Pareto frontier"])`:
+ - Tab 1: `st.plotly_chart(_stub_reward_curve())` — stub returns a plotly Figure with one dummy line + a note "Populated from assets/reward_curve.png in Phase 3".
+ - Tab 2: `components.v1.html(_stub_tree_html(), height=500)` — stub returns `"recursion tree renders here (DEM-04 Phase 3)
"`.
+ - Tab 3: `st.plotly_chart(_stub_pareto())` — stub returns a plotly Figure with two dummy scatter points + note "α-sweep populated in Phase 3 DEM-05".
+ - Produce `viz/requirements.txt` with the Streamlit + plotly pins from pyproject.toml's `[viz]` extra — so HF Spaces Streamlit SDK can install from requirements.txt alone (HF Space convention).
+ - `viz/__init__.py` with empty docstring so Python recognizes the package.
+
+