{
  "tool_id": "art-330-tvm-dv01",
  "note": "golden_hash is empty until first golden-parity.test.mjs --update. Same bond as art-329's fixture (6% coupon, 5yr, semiannual, YTM 8%). ⚠ BUG FOUND AND FIXED IN THIS RECOVERY (CC-G-RECOVER-1, 2026-07-16): the rescued kernel computed shockPeriodicYield as (bpSize/10000)/100/periodsPerYear — an extra /100 that made every DV01 output 100x too small (would have shipped ~0.00385 instead of the correct ~0.385). Fixed to (bpSize/10000)/periodsPerYear (1bp = 0.0001 decimal, already correct without a second /100 — matches art-331/convexity's yield_shock_bp handling, which never had the bug). Cross-checked: dv01 ≈ modified_duration * price * 0.0001 = 4.193709 * 918.89 * 0.0001 = 0.3853, matching this fixture's 0.385356 to 3 decimal places.",
  "vectors": [
    {
      "name": "dv01_semiannual_bullet_1bp",
      "description": "6% coupon, $1000 face, 5yr to maturity, semiannual, YTM 8%, 1bp shock. Full central-difference reprice.",
      "policy_parameters": {
        "face_value": 1000,
        "coupon_rate_pct": 6,
        "ytm_pct": 8,
        "years_to_maturity": 5,
        "periods_per_year": 2,
        "basis_points": 1
      },
      "output_payload": {
        "dv01": 0.385356,
        "price": 918.89,
        "price_up_shock": 918.51,
        "price_down_shock": 919.28,
        "shock_size_bp": 1,
        "face_value": 1000,
        "coupon_rate_pct": 6,
        "ytm_pct": 8,
        "years_to_maturity": 5,
        "periods_per_year": 2,
        "method": "central_difference_full_reprice",
        "regulatory_basis": "DV01 / price value of a basis point (PVBP), standard fixed-income risk measure (Fabozzi, Bond Markets)",
        "note": "DV01 computed by full central-difference reprice at yield +/- shock_size_bp basis points (default 1bp), not the linear modified-duration approximation, so it stays accurate for large coupons or short maturities. Same even-period bullet-bond schedule as compute_bond_duration (no odd first coupon / stub support, declared limitation)."
      },
      "golden_hash": "2bba10691ab0b22ae03a6fa58878c828533dd0c7d2cff5c4b6c9d66c6c600ed8"
    }
  ]
}
