Foundation Core#

macroforecast.core is the Phase 0 foundation for the next DAG-based execution surface. It is intentionally introduced beside the current public runtime.

Current Authority#

The public runtime stack is:

  • macroforecast.api — public entry points (mf.run, mf.forecast, mf.Experiment).

  • macroforecast.core — recipe schema, DAG, layer contracts, and execution runtime that backs every public entry.

  • macroforecast.scaffold — option-doc registry and encyclopedia generator that drives Navigator and for_researchers/encyclopedia/.

There is no separate macroforecast.compiler or macroforecast.execution module in v0.9.0; recipe parsing, validation, and execution are unified under macroforecast.core.

New Core Contract#

The foundation layer provides:

  • universal DAG schema with five node types: source, axis, step, combine, sink;

  • typed artifacts for cross-layer sink contracts;

  • layer registration for L0 through L8 plus diagnostics;

  • operation registration for DAG step libraries;

  • sweep expansion, validation, cache hashing, YAML normalization, recipe, and manifest scaffolding.

Registry Migration Plan#

macroforecast.core is the source of truth for the new DAG execution system. macroforecast/registry will be regenerated from macroforecast.core entries once L0-L8 coverage lands.

Until that point, macroforecast/registry stays frozen for backward compatibility:

  • DO NOT add new axes to macroforecast/registry.

  • DO NOT modify existing axes in macroforecast/registry.

  • DO NOT remove existing axes from macroforecast/registry.

Phase 1 layer work adds new axes only to macroforecast.core. If current public recipes need backward-compatible behavior during the transition, implement an adapter at the boundary instead of changing legacy registry entries.

Capability Counts#

README capability counts refer to the legacy registry runtime, not macroforecast.core. Phase 0 Foundation work must not modify headline capability counts.

The Foundation Core should not change runtime capability counts until it is wired to execution and a dedicated capability-audit test owns those numbers.