Spending in augur is rigid: AmountSpec is structurally closed to exogenous series, so a recurring obligation can be CPI-indexed but cannot read simulated state. A trajectory therefore cannot cut its own spending in response to what happened to it.
This blocks the allocation study, which is trying to price exactly that: how much safety does spending elasticity buy, versus buying the same safety with a bond ladder.
Why a bracket is not a substitute
I proposed approximating this by running the same portfolio twice — once at full spend, once at reduced spend — and treating the gap as the value of elasticity. That is wrong and worth recording so it isn't retried:
- Both runs hold spending rigid for the whole horizon, so neither is a life anyone lives. A narrow gap between two wrong models does not license skipping the right one.
- It cannot distinguish the outcome that matters. "Lived cheaply from day one" and "was forced into living cheaply in year twelve" produce the same number, and they are completely different outcomes — the exact collapse that motivated classifying trajectories rather than scoring them.
Shape
_ScanState gains a tier field. Which tier you are in depends on history — dropped in month 40, never came back — so it is genuine carry state, not derivable per-month. This is also what makes hysteresis expressible; without it a portfolio hovering at the threshold flips tiers every month and the model reports a life nobody lives.
- A new
AmountSpec variant reading current, a new amount_kind in compiler/obligations.py, and a branch in the JAX scan. sim/DESIGN.md:280-334 names the phase that would host it.
- Tier transitions emitted as events, so a trajectory can be classified by when it dropped and whether it recovered.
Interaction with #TBD (liquidation policy)
Cutting spending and rebalancing are substitutes when a drawdown hits: cut deeper and you sell less, rebalance harder and you cut less. Wired independently, the study will attribute the benefit to whichever trigger happens to fire first and the answer becomes an artifact of ordering. The withdrawal rule needs to be explicit — which sleeve funds a shortfall, in what order, before the tier drops.
Related
Consumer is the allocation study in haku-state (surface/finance/allocation/model.py), which reads its tiers from the cake's model.py.
Spending in augur is rigid:
AmountSpecis structurally closed to exogenous series, so a recurring obligation can be CPI-indexed but cannot read simulated state. A trajectory therefore cannot cut its own spending in response to what happened to it.This blocks the allocation study, which is trying to price exactly that: how much safety does spending elasticity buy, versus buying the same safety with a bond ladder.
Why a bracket is not a substitute
I proposed approximating this by running the same portfolio twice — once at full spend, once at reduced spend — and treating the gap as the value of elasticity. That is wrong and worth recording so it isn't retried:
Shape
_ScanStategains a tier field. Which tier you are in depends on history — dropped in month 40, never came back — so it is genuine carry state, not derivable per-month. This is also what makes hysteresis expressible; without it a portfolio hovering at the threshold flips tiers every month and the model reports a life nobody lives.AmountSpecvariant readingcurrent, a newamount_kindincompiler/obligations.py, and a branch in the JAX scan.sim/DESIGN.md:280-334names the phase that would host it.Interaction with #TBD (liquidation policy)
Cutting spending and rebalancing are substitutes when a drawdown hits: cut deeper and you sell less, rebalance harder and you cut less. Wired independently, the study will attribute the benefit to whichever trigger happens to fire first and the answer becomes an artifact of ordering. The withdrawal rule needs to be explicit — which sleeve funds a shortfall, in what order, before the tier drops.
Related
Consumer is the allocation study in haku-state (
surface/finance/allocation/model.py), which reads its tiers from the cake'smodel.py.