File size: 5,693 Bytes
2e96a4f 2a88270 2d8f274 2e96a4f 5ec1901 2e96a4f 5ec1901 2e96a4f 3e3d78c 2e96a4f 3e3d78c 2a88270 3e3d78c 2a88270 2e96a4f 3f782b5 2e96a4f 3f782b5 2a88270 2d8f274 2e96a4f 3e3d78c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | # 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
- [x] Repo created (`GeoForce-CCHackathon`) + pushed
- [x] `initial/` seeded from ForceX-AI v2-real-transform planning docs
- [x] Hackathon research complete (rules, prizes, Discord, prior winners)
- [x] HACKATHON-PLAN.md v2 (dual-tool pivot) committed
- [x] CLAUDE.md, AGENTS.md, PROGRESS.md scaffolded
- [x] `.claude/` subagents defined (8)
- [x] `.claude/` skills defined (6)
- [x] `.claude/` commands defined (4)
- [x] `.claude/settings.json` β model pinned to `claude-opus-4-7`
- [x] Fresh `.venv` + `pyproject.toml`
- [x] `ANTHROPIC_API_KEY` in `.env` (gitignored) + round-trip tested
- [x] `.gitignore` protects secrets
- [~] Registration + Discord acceptance email β deferred per user (2026-04-23)
## Day 1 β Build both engines
### Morning (3h) β COMPLETE 2026-04-23
- [x] Copy `geoforce_cnn_v1.1.pt` to `surrogate/weights/` (248,595 bytes, from ForceX-AI/products/model_registry)
- [x] Port `ReservoirCNN` class + encoding to `surrogate/` (model.py, encoding.py, predict.py)
- [x] `tests/test_surrogate_smoke.py` green β 5/5 pass, 1.7s total
- [x] 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
- [x] `solver/properties.py` β IAPWS-IF97 wrappers
- [x] `solver/grid.py` β 2D vertical section structured grid
- [x] `solver/darcy.py` β pressure solver
- [x] `solver/energy.py` β heat solver
- [x] `solver/wells.py` β source terms
- [x] `solver/coupled.py` β implicit backward-Euler
- [x] `solver/benchmarks/theis.py` β analytical pressure
- [x] `solver/benchmarks/conduction_1d.py` β analytical temperature
- [x] `tests/test_solver_theis.py` passes (<5% error)
- [x] `tests/test_solver_conduction.py` passes (<5% error)
### Evening (2h) β CHECKPOINT + wiring β COMPLETE 2026-04-23
- [x] **GO/NO-GO checkpoint:** both analytical tests green β GO
- [x] `tools/predict_solver.py` + `tools/predict_surrogate.py`
- [x] `agent/runtime.py` β claude-agent-sdk boot
- [x] CLI answers Q1 end-to-end
- [x] Commit + push β **milestone: both engines live**
## Day 2 β Polish + demo + ship
### Morning (3h) β Backend + Streamlit fallback β COMPLETE 2026-04-23
- [x] `agent/api.py` β FastAPI + SSE (+ `/predict`, + SPA static mount)
- [x] `app/app.py` β Streamlit fallback
- [x] `demo/scenarios.yaml` β Q1, Q2, Q3
- [x] `tools/monte_carlo.py` + `tools/sensitivity.py`
### Afternoon (4h) β React dashboard β COMPLETE 2026-04-23
- [x] `dashboard/` scaffold (Vite+TS+zustand)
- [x] `tokens.css` from claude-design-system skill
- [x] Components: Header, QueryInput, ScenarioPicker, AgentTrace, AnswerPanel, FieldPlot, FieldPanel
- [x] `api/client.ts` SSE consumer + `predictFields` helper
- [x] Canvas-based magma heatmap (no plotly β bundle stays <160 kB)
- [x] Dry-run 3 scenarios through `/predict` + SSE smoke of `/query`
- [x] `Dockerfile` multi-stage (node build β python runtime, CPU-only torch)
### Evening (3h) β Ship
- [ ] Deploy to HF Spaces (Dockerfile space)
- [x] 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.
|