What (One-liner)
The editable LDI book as an input-data node: a materialised level-payment liability schedule plus the asset/hedge side — deliberately curve-free, feeding both the engine and its independent verification from one place.
How to use
Set the liability profile / annual payment / horizon and the asset value + duration (hedge optional), then run — it materialises the schedule (liability_cashflows plus flat cf_t/cf_amount arrays for script binding). Wire it upstream of ldi_funding_gap_v1 (the engine consumes book) and/or a script node. Because both chains read this one node, editing the book here changes both sides of a cross-check at once.
Input / Output contract
Inputs: liability_profile (annuity_20y / level_30y / custom), liability_annual, liability_years, asset_value, asset_duration, hedge_notional, hedge_duration.
Output: book (structured liability_cashflows + flat cf_t/cf_amount + liability_annual and asset/hedge scalars), liability_nominal_total (undiscounted), n_cashflows, plus flat display scalars. Scripts should rebuild the level schedule from the SCALARS (liability_annual × n_cashflows) — binding the 20-length arrays next to date-axis series would trigger the script lane's shortest-length alignment (the 2026-08-25 template lesson).
Known limitations
- Level-payment profiles only; bespoke schedules need a future custom-cashflow mode.
- The hedge overlay is notional × duration bookkeeping, not an instrument model.
- No discounting here by design — PV and duration belong downstream, against a curve node.

