Model Semantics =============== The FUCHS model is a nested decision problem on the tsa29mini instance. This page records exactly what the model computes, the formulation choices, and the known limitations. The authoritative source is ``planning/v0.1.0a1-plan.md``. The nested formulation ---------------------- **Inner problem (enterprise / implementation) — a Model I linear program.** Per scenario, maximize discounted net revenue (NPV) over harvest and replanting decisions subject to: - an even-flow band on harvest volume (the AAC proxy): per-period harvest volume within 5% of period 1 on the managed land base; - the outer policy constraints (species-composition area-share targets with tolerance; an optional harvest policy — AAC volume band or rotation-age floor/ceiling — folded in as rows); - salvage feasibility (salvage <= burned stock); - replanting transitions (regeneration after harvest or salvage). The LP is a continuous Model I formulation (no binaries, no thresholding), solved with the ws3 LP machinery + HiGHS. The objective coefficient is the discounted net cash flow along each prescription path (``fresh_fuchs.economy.npv``); the even-flow band stays on harvest volume. With a zero discount rate and no cross-species price differential, the NPV-max LP reproduces the volume-max baseline exactly (verified in ``tests/test_npv.py``). **Outer problem (policy / administration) — a grid search over the NPV distribution.** Landscape policy is a ``PolicyRecord``: species-composition area-share targets (with tolerance) plus an optional harvest policy (AAC proxy, or rotation-age floor/ceiling per species). A ``PolicyGrid`` expands to its Cartesian product (plus an optional unconstrained baseline); each grid point is evaluated on a full-Monte-Carlo distribution of NPV and summarized with downside-risk measures — expected NPV, volatility, VaR, CVaR (default 95%), and shortfall probability — with a Gaussian comparison. Policies are ranked by a reproducible rule (lexicographic on (E[NPV], CVaR), or a weighted mean-CVaR score), and a recommended policy plus a coarse-vs-fine grid-resolution sensitivity are reported. The scenario engine ------------------- Fire occurrence, extent, and severity are sampled per scenario from MFRI-by-zone annual burn rates (burn probability 1/MFRI) with a severity ladder (Unburned 0 / Low 0.30 / Moderate 0.60 / High 0.85; default Moderate). Fire is encoded in the inner LP as path-dependent coefficients — survival ``Pi(1-p)`` since regeneration, green volume ``Y(age) x survival``, burn influx ``p x exposed``, salvageable ``severity x influx`` — and ``salvage`` is a real Model I action with age-0 regeneration. Burned volume decays at 0.85/yr; the within-timestep ordering is harvest -> fire -> salvage -> decay. One inner LP is solved per scenario with **full foresight** (the fire events are fixed within a scenario); recourse / rolling-horizon is post-v0.1.0a1. The uncertainty vector pairs a Gaussian burn-rate multiplier with a price factor (fixed at 1.0 in v0.1.0a1; the dimension exists for the later stochastic-price work). Orchestration ------------- The whole pipeline is wrapped as freshforge workflows/matrices with evidence manifests (``fresh_fuchs.orchestration``), reproducible on the public-safe synthetic instance (``fresh_fuchs.instance.synthetic``) in CI. Known limitations (v0.1.0a1) ---------------------------- - **Dynamic inconsistency (open-loop inner LP)**: the inner LP — maximize discounted NPV subject to an even-flow harvest-volume constraint — is an open-loop formulation and is **dynamically inconsistent** (it fails Bellman's principle of optimality): a future planner re-solving from the realized state under the same goals would not follow the plan's tail. On the public-safe synthetic instance the period-1 -> 2 transition is followed but the periods-3+ tail diverges by ~9.5% of volume on replan; notably the divergence is identical at 0% and 3% discount, so the driver on this instance is the even-flow band's replanning asymmetry, not the discount rate. The real tsa29mini bundle has more disequilibrium and negatively-valued strata, so the synthetic figure is a lower bound. **Consequence**: the open-loop NPV trajectories — and the outer-layer NPV distributions and policy rankings built on them — are not credible as intertemporal plans, and shadow-price / constraint-cost analysis from them is biased. Recorded in ``planning/dynamic-inconsistency-note.md`` (Daugherty 1991 reference) and gated by ``tests/test_dynamic_inconsistency.py``. Remedies (consistent / subgame-perfect formulations, credible precommitment via a regeneration requirement, receding-horizon replanning) are follow-on research, not a v0.1.0a1 patch. - **Full-foresight optimism**: the inner LP sees the whole scenario's fire schedule in advance, so NPV is an upper bound on the recourse value. - **Interior price-surface provenance**: flat Q4-2023 interior sawlog-basis prices; grade/peeler premia reserved for the log-grade follow-on. - **Harvest-area discrepancy vs Patchworks**: ws3 mean annual harvest is ~3.8% above Patchworks (modelling-convention difference, understood and bounded; recorded in the validation report). - **Unsubsidized salvage**: the default prompt-salvage regime has a negative margin, so salvage is suppressed (matching the fresh-salvage reference agent); subsidy/salvage-uptake scenarios are post-v0.1.0a1. - **Replant costs**: flat per-ha assumptions, not charged by default (the $45/m3 harvest cost carries the silviculture allocation); transition- dependent replanting cost is post-v0.1.0a1.