Release-level history for completed roadmap phases. The per-task delivery ledger remains in
roadmap/tasks.toml; upcoming work is in ROADMAP.md.
0.3.0 - 2026-08-10
Completes milestones v0_3 (consumer decision primitives) and v0_4 (base-numeraire covered-call math).
- Split the
Calcgod-module along cohesion seams intoDeltaCalc.Leverage,Liquidation,Allocation,Safety, andQuantization(DCA-ladder logic moved toDCAPlanner). DeltaCalc.Calc remains as an undocumented compatibility façade delegating all 11 previous public functions; the agent manifest advertises the extracted modules instead. - Breaking: moved rounding to explicit caller-controlled output boundaries — generic
price/rate/percentage/ratio math no longer quantizes internally and returns full active
Decimal.Contextprecision (34 under decimal 3.x).OptionLadderstrike rounding takes caller:strike_increment+:rounding_mode; whole-day rounding inFundingProjection/MarginBridgeis documented as intrinsic.Calc.quantize/1remains only as the documented eight-place legacy compatibility boundary. - Advertised every exact Decimal money/price/rate
:valueinput as a canonical JSON-string contract across all calculation modules (matching theDeltaCalc.Decimalcoercion boundary); a manifest-wide CI invariant now rejects any MCP input schema advertising{"type": "number"}. - Made
Calc.multi_leg_positionpublic and side-aware (sidedefaults to:long), so short multi-leg positions reach the existing side-aware math through a documented API. - Added base-numeraire math to
DeltaCalc.DeltaNeutral: inverse-perp exposure, settlement-period net-delta handling, covered-call coverage (capacity/uncovered reporting without implying approval), and risk-target checks. - Breaking: DeltaCalc.PositionCalculator.calculate_position/2 (removed) is now
DeltaCalc.PositionCalculator.calculate_position/1— the unusedfee_rateinput (fee modeling belongs toDeltaCalc.Fees) and the echoed risk-mode config were removed, so the API no longer advertises inputs that don't affect the calculation.Calc.dca_laddernow actually applies the advertisedmark_bufferto every intermediate and final liquidation MMR (zero preserves prior results). - Removed baked-in venue risk constants from generic margin/liquidation math:
Calctakes a caller-supplied MMR tier schedule (:mmr_schedule), andMarginBridge.check_kill_switchcompares a per-period funding rate scaled by caller-supplied cadence against an overridable daily threshold. Defaults are documented conventions, not venue truths. - Registered
DeltaCalc.Decimal(the shared input-coercion boundary from task 39) in the agent manifest withapi()annotations forcast/1andcast!/1, and hardened the manifest-consistency suite: every publicly documentedlib/delta_calc/module must now be registered — a documented module withoutapi()coverage fails CI instead of silently missing from the agent surface. - Added
DeltaCalc.describe/0..2— progressive disclosure over the manifest registry, so an agent narrows from library to module to function without reading source. - Breaking: renamed DeltaCalc.PnL (unbackticked: the module no longer exists, and an
ex_doc autolink would try to load it) to
DeltaCalc.Pnl. Descripex derives discovery short names withMacro.underscore/1, which split the internal capital into"pn_l"; the module now resolves as"pnl". Function names and signatures are unchanged.
Phase 1: Extraction
- Extracted the retired TradingDashboard calculation engine into a standalone, headless
DeltaCalclibrary with Decimal arithmetic, tests, documentation, and agent discovery.
Phase 2: Calc primitives
- Added the dashboard-facing funding, hedging, account, concentration, margin-bridge, funding-projection, option-ladder, and options-risk calculation primitives.