geoforce / PROGRESS.md
Ubuntu
Day-2 afternoon: field heatmaps, Dockerfile, README
3e3d78c

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 to claude-opus-4-7
  • Fresh .venv + pyproject.toml
  • ANTHROPIC_API_KEY in .env (gitignored) + round-trip tested
  • .gitignore protects 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.pt to surrogate/weights/ (248,595 bytes, from ForceX-AI/products/model_registry)
  • Port ReservoirCNN class + encoding to surrogate/ (model.py, encoding.py, predict.py)
  • tests/test_surrogate_smoke.py green β€” 5/5 pass, 1.7s total
  • Claude scaffolding discoverable (subagents + skills load; surrogate-operator.md corrected 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.py passes (<5% error)
  • tests/test_solver_conduction.py passes (<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.css from claude-design-system skill
  • Components: Header, QueryInput, ScenarioPicker, AgentTrace, AnswerPanel, FieldPlot, FieldPanel
  • api/client.ts SSE consumer + predictFields helper
  • Canvas-based magma heatmap (no plotly β€” bundle stays <160 kB)
  • Dry-run 3 scenarios through /predict + SSE smoke of /query
  • Dockerfile multi-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.json exposing 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_temperature and q3_well_placement reports values ~10Β² MPa after the unit conversion, which is physically implausible (reservoir should stay around 15 MPa with the small doublet stress). The /predict endpoint itself works; the issue is either a unit in the solver output dict or boundary treatment in solver.coupled. Flagged for the reviewer agent before the demo video is recorded.