PROGRESS β Hackathon Task State
Live task tracking. Updated at the end of every work block. Source of truth = this file.
Started: 2026-04-23 Target submission: 2026-04-25 EOD (2-day sprint)
Pre-flight
- Repo created (
GeoForce-CCHackathon) + pushed -
initial/seeded from ForceX-AI v2-real-transform planning docs - Hackathon research complete (rules, prizes, Discord, prior winners)
- HACKATHON-PLAN.md v2 (dual-tool pivot) committed
- CLAUDE.md, AGENTS.md, PROGRESS.md scaffolded
-
.claude/subagents defined (8) -
.claude/skills defined (6) -
.claude/commands defined (4) -
.claude/settings.jsonβ model pinned toclaude-opus-4-7 - Fresh
.venv+pyproject.toml -
ANTHROPIC_API_KEYin.env(gitignored) + round-trip tested -
.gitignoreprotects secrets - [~] Registration + Discord acceptance email β deferred per user (2026-04-23)
Day 1 β Build both engines
Morning (3h) β COMPLETE 2026-04-23
- Copy
geoforce_cnn_v1.1.pttosurrogate/weights/(248,595 bytes, from ForceX-AI/products/model_registry) - Port
ReservoirCNNclass + encoding tosurrogate/(model.py, encoding.py, predict.py) -
tests/test_surrogate_smoke.pygreen β 5/5 pass, 1.7s total - Claude scaffolding discoverable (subagents + skills load;
surrogate-operator.mdcorrected to match real v1.1 encoding)
Afternoon (4h) β Agent team builds GeoForce-Solver β COMPLETE 2026-04-23
-
solver/properties.pyβ IAPWS-IF97 wrappers -
solver/grid.pyβ 2D vertical section structured grid -
solver/darcy.pyβ pressure solver -
solver/energy.pyβ heat solver -
solver/wells.pyβ source terms -
solver/coupled.pyβ implicit backward-Euler -
solver/benchmarks/theis.pyβ analytical pressure -
solver/benchmarks/conduction_1d.pyβ analytical temperature -
tests/test_solver_theis.pypasses (<5% error) -
tests/test_solver_conduction.pypasses (<5% error)
Evening (2h) β CHECKPOINT + wiring β COMPLETE 2026-04-23
- GO/NO-GO checkpoint: both analytical tests green β GO
-
tools/predict_solver.py+tools/predict_surrogate.py -
agent/runtime.pyβ claude-agent-sdk boot - CLI answers Q1 end-to-end
- Commit + push β milestone: both engines live
Day 2 β Polish + demo + ship
Morning (3h) β Backend + Streamlit fallback β COMPLETE 2026-04-23
-
agent/api.pyβ FastAPI + SSE (+/predict, + SPA static mount) -
app/app.pyβ Streamlit fallback -
demo/scenarios.yamlβ Q1, Q2, Q3 -
tools/monte_carlo.py+tools/sensitivity.py
Afternoon (4h) β React dashboard β COMPLETE 2026-04-23
-
dashboard/scaffold (Vite+TS+zustand) -
tokens.cssfrom claude-design-system skill - Components: Header, QueryInput, ScenarioPicker, AgentTrace, AnswerPanel, FieldPlot, FieldPanel
-
api/client.tsSSE consumer +predictFieldshelper - Canvas-based magma heatmap (no plotly β bundle stays <160 kB)
- Dry-run 3 scenarios through
/predict+ SSE smoke of/query -
Dockerfilemulti-stage (node build β python runtime, CPU-only torch)
Evening (3h) β Ship
- Deploy to HF Spaces (Dockerfile space)
- Root
README.md+ ASCII architecture diagram - 90s demo video (recorded against React dashboard)
-
demo/brady_validation.ipynb(compressed) - Tag
v0.1-hackathon+ submit via Cerebral Valley portal
Stretch (only if all above shipped)
-
.mcp.jsonexposing GeoForce-Solver via MCP - Two-phase stub (saturation variable plumbing, no flash)
Fallback Plan (if Day 1 Evening checkpoint fails)
If either analytical-benchmark test fails:
- Drop
solver/from critical path - Reframe as "Claude Opus 4.7 agent orchestration over deployed surrogate"
- Keep all Day 2 deliverables intact
- Still viable for "Best use of Claude Managed Agents" $5K
Decisions Log
| Date | Decision | Source |
|---|---|---|
| 2026-04-23 | 1st-place target, Managed Agents as safety net | user |
| 2026-04-23 | Solver + Surrogate dual-tool | user |
| 2026-04-23 | Solver name = GeoForce-Solver (provisional) | claude |
| 2026-04-23 | Single-phase water (not two-phase) | user approval of pitch |
| 2026-04-23 | NREL Brady for validation cameo | claude proposal |
| 2026-04-23 | Day 1 evening GO/NO-GO trigger | claude proposal |
| 2026-04-23 | Solver renamed TinyTOUGH β GeoForce-Solver | user |
| 2026-04-23 | Two-phase: single-phase for Day 1; optional stub Day 2 evening only if solver green + submitted | user |
| 2026-04-23 | Demo framing: Ulubelu-inspired synthetic (liquid-dominated, on-brand) | user approved claude recommendation |
| 2026-04-23 | Demo UI: React dashboard (primary) + Streamlit (fallback), Claude design language, HF Spaces Dockerfile deploy | user |
| 2026-04-23 | Added 8th subagent: ui-engineer | claude (per user request) |
| 2026-04-23 | Added 5th skill: claude-design-system | claude (per user request) |
| 2026-04-23 | Added 6th skill: tough-reference (deep TOUGH family knowledge from LBNL manuals) | claude (per user request) |
Blocker Log
- 2026-04-23 β Solver pressure output for
q1_drill_temperatureandq3_well_placementreports values ~10Β² MPa after the unit conversion, which is physically implausible (reservoir should stay around 15 MPa with the small doublet stress). The/predictendpoint itself works; the issue is either a unit in the solver output dict or boundary treatment insolver.coupled. Flagged for the reviewer agent before the demo video is recorded.