Parent epic for the dependency-closure strategy. On real EnergyPlus code the limiter is dependency closure, not translation skill — the 1.5B draft model is strong, but real functions call siblings, touch the EnergyPlusData god-object, and link libs, so they cannot be ported or verified in isolation.
Reframe: closure is two coupled problems
- Verify-closure — to confirm
F is correct its callees must produce real values → seems to need them ported first.
- Compile-closure — to make
F's Mojo build, every symbol/type it references must exist.
Leaf-first ordering attacks both at once, which is why it stalls. The leverage is to decouple them: make correctness independent of porting order (record/replay), and treat compile-closure as a build-ordering chore (shims + fan-in order). Correctness stays guaranteed at every step by the C++ numeric oracle (/home/bart/Github/EnergyPlus/).
Children
Progress note
The directed-graph foundation for #67/#68/#69 is on main:
- A persisted directed graph (node-link JSON) replaces the flat layer summary.
cbm_graph.py queries the codebase-memory-mcp knowledge graph (via its CLI bridge) to build a multi-relational directed graph — calls + writes_field + reads_field — over the indexed EnergyPlus C++ oracle (18,996 nodes / ~37k edges).
Shape of the approach
Top-down to define the seams (runtime path, god-object slice, trait boundaries); bottom-up to fill and verify leaves along that path — with record/replay so verification never waits for the closure. Compile-closure becomes a build-ordering chore; correctness is guaranteed at every step by the oracle.
Relates to north-star #56.
🤖 Generated with Claude Code
Parent epic for the dependency-closure strategy. On real EnergyPlus code the limiter is dependency closure, not translation skill — the 1.5B draft model is strong, but real functions call siblings, touch the EnergyPlusData god-object, and link libs, so they cannot be ported or verified in isolation.
Reframe: closure is two coupled problems
Fis correct its callees must produce real values → seems to need them ported first.F's Mojo build, every symbol/type it references must exist.Leaf-first ordering attacks both at once, which is why it stalls. The leverage is to decouple them: make correctness independent of porting order (record/replay), and treat compile-closure as a build-ordering chore (shims + fan-in order). Correctness stays guaranteed at every step by the C++ numeric oracle (
/home/bart/Github/EnergyPlus/).Children
main787343c): scalar record/replay decouples verify-closure, proven end-to-end; bool/int/Array deps + gate-integration remainmain61db4bf); psychrometric shims remainmain(90a2971):tarjan_scc/cyclic_componentsinmigration_plan.py, SCC-condensed layering, 18 unit testsmain(90a2971):fan_in/fanin_ranked+top_fanin_scaffoldingin the plancbm_graph.pynow emitswrites_field/reads_fieldedges with Field owners (live: 14,704 writes / 3,792 reads over the EnergyPlusData family), so the slice is queryable. The actual path-specific slice + per-module sub-state port is not done — keep open.Progress note
The directed-graph foundation for #67/#68/#69 is on
main:cbm_graph.pyqueries the codebase-memory-mcp knowledge graph (via its CLI bridge) to build a multi-relational directed graph —calls+writes_field+reads_field— over the indexed EnergyPlus C++ oracle (18,996 nodes / ~37k edges).Shape of the approach
Top-down to define the seams (runtime path, god-object slice, trait boundaries); bottom-up to fill and verify leaves along that path — with record/replay so verification never waits for the closure. Compile-closure becomes a build-ordering chore; correctness is guaranteed at every step by the oracle.
Relates to north-star #56.
🤖 Generated with Claude Code