{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "registry_version": "constants.v3-2026.07",
  "as_of": "2026-07-17",
  "policy": "INV-7 — every constant in the pricing/underwriting path resolves to a versioned row here (no literals in code). worker.js bakes a copy with a generation comment; pipeline reads this file. Review quarterly; act on expiry.",
  "constants": {
    "rehab_base_psf.cosmetic": {
      "value": 38,
      "unit": "usd_per_sqft",
      "owner": "Mo",
      "rationale": "Paint, flooring, fixtures, light kitchen/bath refresh — no layout or systems work. Chicago 2026 GC labor+materials for a turn-key cosmetic refresh runs ~$30-45/sf; midpoint 38.",
      "source": "Chicago rehab GC quotes 2025-2026 (Mo desk survey) + RSMeans residential light-remodel band",
      "set_on": "2026-07-10",
      "expires": "2027-01-10",
      "review": "quarterly"
    },
    "rehab_base_psf.moderate": {
      "value": 80,
      "unit": "usd_per_sqft",
      "owner": "Mo",
      "rationale": "Kitchen + baths gutted, some walls, updated finishes, partial mechanicals. Chicago 2026 ~$70-90/sf; midpoint 80.",
      "source": "Chicago rehab GC quotes 2025-2026 + flip-pair implied rehab (build_flip_pairs delta minus margin)",
      "set_on": "2026-07-10",
      "expires": "2027-01-10",
      "review": "quarterly"
    },
    "rehab_base_psf.gut": {
      "value": 135,
      "unit": "usd_per_sqft",
      "owner": "Mo",
      "rationale": "Full gut to studs, all-new systems (electrical/plumbing/HVAC), kitchen, baths, windows. Chicago 2026 ~$120-150/sf; midpoint 135.",
      "source": "Chicago rehab GC quotes 2025-2026 + Cook permit reported_cost on gut-rehab permits",
      "set_on": "2026-07-10",
      "expires": "2027-01-10",
      "review": "quarterly"
    },
    "rehab_base_psf.structural": {
      "value": 200,
      "unit": "usd_per_sqft",
      "owner": "Mo",
      "rationale": "Gut plus foundation/framing/roof-structure/additions. Chicago 2026 ~$180-220/sf; midpoint 200.",
      "source": "Chicago rehab GC quotes 2025-2026 + structural-permit cost band",
      "set_on": "2026-07-10",
      "expires": "2027-01-10",
      "review": "quarterly"
    },
    "rehab_lambda.violations": {
      "value": 0.25,
      "unit": "multiplier_add",
      "owner": "Mo",
      "rationale": "Open structural/plumbing building-code violations add ~25% to a rehab (emergency repairs, permit expediting, city sign-off). Plan 2.4.2.",
      "source": "MASTER_PLAN Appendix B; Chicago building-court remediation experience",
      "set_on": "2026-07-10",
      "expires": "2027-01-10",
      "review": "quarterly"
    },
    "rehab_lambda.pre1940": {
      "value": 0.15,
      "unit": "multiplier_add",
      "owner": "Mo",
      "rationale": "Pre-1940 vintage: lath/plaster, knob-and-tube, galvanized/lead service, asbestos/lead protocol — ~15% cost premium. Plan 2.4.2.",
      "source": "MASTER_PLAN Appendix B",
      "set_on": "2026-07-10",
      "expires": "2027-01-10",
      "review": "quarterly"
    },
    "rehab_lambda.mechanicals": {
      "value": 0.1,
      "unit": "multiplier_add",
      "owner": "Mo",
      "rationale": "No electrical/plumbing/HVAC permit in 20y on pre-1980 stock implies original systems — +10% for full mechanical replacement. Plan 2.4.2.",
      "source": "MASTER_PLAN Appendix B; Cook permit-history gap heuristic",
      "set_on": "2026-07-10",
      "expires": "2027-01-10",
      "review": "quarterly"
    },
    "rehab_preset.sfh_full_flip": {
      "value": 175000,
      "unit": "usd",
      "owner": "Mo",
      "rationale": "Mo's SFH full-flip default ($175k). Since 2026-07-17 (Mo's rehab spec) also the engine's spec anchor: the no-GLA preset path scope-scales from it, the GLA×psf path clamps into [rehab_spec.gla_clamp_lo, rehab_spec.gla_clamp_hi] × this default, and rehab_spec.sfh_min/sfh_max bound the result ($150-200k).",
      "source": "Mo rehab spec 2026-07-17 (owner buy-box) + manual underwriting default",
      "set_on": "2026-07-17",
      "expires": "2027-01-17",
      "review": "quarterly"
    },
    "rehab_preset.mfh_per_unit": {
      "value": 62500,
      "unit": "usd_per_unit",
      "owner": "Mo",
      "rationale": "Mo's MFH full-reno default per unit ($62.5k/unit). Since 2026-07-17 (Mo's rehab spec) also the engine's spec anchor: the no-GLA preset path scope-scales from default × units, the GLA×psf path clamps into [rehab_spec.gla_clamp_lo, rehab_spec.gla_clamp_hi] × it, and rehab_spec.mfh_per_unit_min/max bound the result ($50-75k/unit).",
      "source": "Mo rehab spec 2026-07-17 (owner buy-box) + manual underwriting default",
      "set_on": "2026-07-17",
      "expires": "2027-01-17",
      "review": "quarterly"
    },
    "rehab_spec.mfh_per_unit_min": {
      "value": 50000,
      "unit": "usd_per_unit",
      "owner": "Mo",
      "rationale": "Mo's rehab spec (2026-07-17): MFH full-reno budget FLOOR per unit — non-cosmetic estimates never land under $50k/unit (cosmetic scope keeps a floor exemption: an already-renovated subject may honestly need less; ceilings always bind). Clamps are surfaced (clamped:true → warning rehab_clamped_to_spec).",
      "source": "Mo rehab spec 2026-07-17 (owner buy-box)",
      "set_on": "2026-07-17",
      "expires": "2027-01-17",
      "review": "quarterly"
    },
    "rehab_spec.mfh_per_unit_max": {
      "value": 75000,
      "unit": "usd_per_unit",
      "owner": "Mo",
      "rationale": "Mo's rehab spec (2026-07-17): MFH full-reno budget CEILING per unit — $75k/unit always binds (no scope exemption).",
      "source": "Mo rehab spec 2026-07-17 (owner buy-box)",
      "set_on": "2026-07-17",
      "expires": "2027-01-17",
      "review": "quarterly"
    },
    "rehab_spec.sfh_min": {
      "value": 150000,
      "unit": "usd",
      "owner": "Mo",
      "rationale": "Mo's rehab spec (2026-07-17): SFH full-flip budget FLOOR — non-cosmetic estimates never land under $150k (cosmetic scope keeps a floor exemption; ceilings always bind).",
      "source": "Mo rehab spec 2026-07-17 (owner buy-box)",
      "set_on": "2026-07-17",
      "expires": "2027-01-17",
      "review": "quarterly"
    },
    "rehab_spec.sfh_max": {
      "value": 200000,
      "unit": "usd",
      "owner": "Mo",
      "rationale": "Mo's rehab spec (2026-07-17): SFH full-flip budget CEILING — $200k always binds (no scope exemption).",
      "source": "Mo rehab spec 2026-07-17 (owner buy-box)",
      "set_on": "2026-07-17",
      "expires": "2027-01-17",
      "review": "quarterly"
    },
    "rehab_spec.gla_clamp_lo": {
      "value": 0.6,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Mo's rehab spec (2026-07-17): the GLA×psf estimate clamps to no less than 0.6× the applicable spec default (rehab_preset.sfh_full_flip | rehab_preset.mfh_per_unit × units) unless scope is cosmetic (floor exemption).",
      "source": "Mo rehab spec 2026-07-17 (owner buy-box)",
      "set_on": "2026-07-17",
      "expires": "2027-01-17",
      "review": "quarterly"
    },
    "rehab_spec.gla_clamp_hi": {
      "value": 1.6,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Mo's rehab spec (2026-07-17): the GLA×psf estimate clamps to no more than 1.6× the applicable spec default; the ceiling always binds.",
      "source": "Mo rehab spec 2026-07-17 (owner buy-box)",
      "set_on": "2026-07-17",
      "expires": "2027-01-17",
      "review": "quarterly"
    },
    "tax_cook.equalizer": {
      "value": 3.0163,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Illinois Dept. of Revenue final state equalization factor for Cook County, 2023 assessment year (payable 2024). ANNUAL — must be re-ingested; flag on expiry.",
      "source": "IDOR 2023 Cook equalization factor (idor.illinois.gov)",
      "set_on": "2026-07-10",
      "expires": "2026-12-31",
      "review": "annual",
      "stale_flag_on_expiry": true
    },
    "tax_cook.assessment_level_residential": {
      "value": 0.1,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Cook County residential assessment level: 10% of market value. Ordinance-fixed.",
      "source": "Cook County Assessor classification ordinance",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "annual"
    },
    "tax_cook.homeowner_exemption_eav": {
      "value": 10000,
      "unit": "usd_eav",
      "owner": "Mo",
      "rationale": "Cook homeowner (owner-occupant) exemption reduces EAV by $10,000; tax saving ≈ 10000 × local_rate (~$700-900). Applied only when owner_occupied assumed.",
      "source": "Cook County Assessor exemption schedule",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "annual"
    },
    "tax_lake.county_median_eff_rate": {
      "value": 0.023,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Lake County IL median effective property-tax rate ~2.3% of market value. Lake uses ~33.33% assessment level (AV×3≈market); no Cook 10%/equalizer mechanics. LOW confidence — Lake portal tax data unavailable (see DATA_CATALOG).",
      "source": "Lake County Treasurer aggregates / public effective-rate estimates; validated AV×3≈market",
      "set_on": "2026-07-10",
      "expires": "2026-12-31",
      "review": "annual",
      "confidence": "low"
    },
    "rent.mu_blend_min_comps": {
      "value": 5,
      "unit": "count",
      "owner": "Mo",
      "rationale": "Need ≥5 MLS rental comps within 1mi/12mo of matching bed count before MLS signal dominates (μ=0.75); else μ=0.25. Pre-MLS license μ=0 (SAFMR-anchored). Plan 2.3.1.",
      "source": "MASTER_PLAN Appendix B",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "rent.mu_high": {
      "value": 0.75,
      "unit": "weight",
      "owner": "Mo",
      "rationale": "MLS weight when comp-rich (≥5 comps). Plan 2.3.1.",
      "source": "MASTER_PLAN Appendix B",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "rent.safmr_floor_frac": {
      "value": 0.85,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Lower bound on market rent = 0.85×SAFMR_br (poor-tract-in-rich-zip guard); warn when the blend falls below the bedroom SAFMR. SAFMR is HUD's 40th-pctile anchor. Plan 2.3.2.",
      "source": "MASTER_PLAN 2.3.2",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "rent.safmr_cap_frac": {
      "value": 1.6,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Upper bound on any single-unit rent = 1.6×SAFMR_br (voucher-payment-standard band ceiling; no fantasy rents).",
      "source": "HUD payment-standard 90-110% band + local ceiling observation",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "rent.reno_uplift_default": {
      "value": 1.25,
      "unit": "multiplier",
      "owner": "Mo",
      "rationale": "Renovated (pro-forma) rent = market × 1.25, capped at the SAFMR ceiling. Replaces the DEAD global 1.5×. Pre-MLS default; per-area uplift table supersedes when rent evidence lands. Plan 2.3.3.",
      "source": "MASTER_PLAN 2.3.3; average→renovated rent lift 1.2-1.3× observed",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "cashflow.rent_growth_annual": {
      "value": 0.02,
      "unit": "ratio_per_year",
      "owner": "Mo",
      "rationale": "Multi-year cashflow projection (deep_underwrite_asset, Plan 8.2.2): gross rent grows 2%/yr. Conservative long-run Chicago rent anchor; forward cashflow array only, never year-1 underwriting.",
      "source": "MASTER_PLAN 8.2.2",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "cashflow.opex_growth_annual": {
      "value": 0.025,
      "unit": "ratio_per_year",
      "owner": "Mo",
      "rationale": "Multi-year cashflow projection: operating expenses grow 2.5%/yr (taxes/insurance/maintenance outpace rent). Forward projection only.",
      "source": "MASTER_PLAN 8.2.2",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "cashflow.horizon_years": {
      "value": 5,
      "unit": "years",
      "owner": "Mo",
      "rationale": "Default horizon for the deep_underwrite_asset 5-year cashflow array; caller-overridable 1-30.",
      "source": "MASTER_PLAN 8.2.2",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "rent.br_ratio": {
      "value": {
        "0": 0.74,
        "1": 0.86,
        "2": 1.0,
        "3": 1.3,
        "4": 1.49
      },
      "unit": "ratio_vs_2br",
      "owner": "Mo",
      "rationale": "Bedroom rent ladder vs the 2BR SAFMR anchor (HUD-typical). Maps per-unit bedroom count to a rent multiple. Plan 2.3.4.",
      "source": "HUD SAFMR bedroom-ratio norms",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "arv.pool_radius_mi": {
      "value": 0.75,
      "unit": "miles",
      "owner": "Mo",
      "rationale": "Standard renovated-comp pool radius (INV-1). Luxury/unique widens to 1.5mi (Tier-1 only).",
      "source": "MASTER_PLAN 2.2.1 / INV-1",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "arv.luxury_radius_mi": {
      "value": 1.5,
      "unit": "miles",
      "owner": "Mo",
      "rationale": "Widened radius for luxury/unique subjects (subject > area P90 price or GLA > 1.6× area median); Tier-1 same-segment comps ONLY, never Tier 2. Plan 2.2.6.",
      "source": "MASTER_PLAN 2.2.6 (anti-'$2.95M house / $868K ARV')",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "arv.min_comps_tier1": {
      "value": 3,
      "unit": "count",
      "owner": "Mo",
      "rationale": "V3-1.4 comp policy v2: MINIMUM 3 qualifying renovated-stratum comps to value at all (was 4); a public POINT display additionally requires >=5 (comp.min_comps_point_display) else range_only. Set with the expansion ladder + GLA/beds bands + MAD trim, which tightened per-comp quality while lowering the floor count.",
      "source": "DEVELOPMENT_PLAN_V3 1.4",
      "set_on": "2026-07-12",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "arv.min_comps_as_is": {
      "value": 3,
      "unit": "count",
      "owner": "Mo",
      "rationale": "Minimum dated/distressed comps to publish value_as_is (labeled). Plan 2.2 (1638 N Campbell lesson).",
      "source": "MASTER_PLAN 2.2",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "arv.max_dispersion_renovated": {
      "value": 0.35,
      "unit": "iqr_over_median",
      "owner": "Mo",
      "rationale": "Dispersion guardrail on the RENOVATED stratum (tighter than the 0.45 mixed-set gate). Measured on live leave-one-out 2026-07-10 (tests/comp_backtest.py): renovated-stratum IQR/median p50 0.28-0.32, p75 ~0.32-0.33, p90 ~0.34 across Logan Square/Avondale + Woodlawn/Park Manor. 0.35 admits ~90% of genuine renovated sets while rejecting condition-mixed pools (the old MAPE-89% South-Side failure). Above suppress (dispersion_exceeds_threshold), then Tier-2 fallback. Plan 2.2.4.",
      "source": "Live probe measurement 2026-07-10 (see backtest); MASTER_PLAN 2.2.4",
      "set_on": "2026-07-10",
      "expires": "2027-01-10",
      "review": "quarterly"
    },
    "arv.max_dispersion_mixed": {
      "value": 0.45,
      "unit": "iqr_over_median",
      "owner": "Mo",
      "rationale": "Legacy mixed-condition dispersion gate; retained for value_as_is stratum and diagnostics.",
      "source": "Phase 0 P0-A calibration",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "arv.tier2_confidence_ceiling": {
      "value": 55,
      "unit": "score",
      "owner": "Mo",
      "rationale": "Tier-2 (nbhd_premium fallback) confidence is capped at 55 — it is an area estimate, not per-home comps. Plan 2.2.2.",
      "source": "MASTER_PLAN 2.2.2",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "arv.gla_adj_cap": {
      "value": 0.15,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "GLA (living-area) adjustment on a comp capped at ±15% of its price (marginal $/sf × sqft delta). Plan 2.2.1.",
      "source": "MASTER_PLAN 2.2.1",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "arv.trailing_months_primary": {
      "value": 18,
      "unit": "months",
      "owner": "Mo",
      "rationale": "Primary Tier-1 recency window; extendable to 36mo with time-index when thin. Plan 2.2.1.",
      "source": "MASTER_PLAN 2.2.1",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "arv.trailing_months_extended": {
      "value": 36,
      "unit": "months",
      "owner": "Mo",
      "rationale": "Extended Tier-1 recency window when the 18mo pool is thin (prices time-indexed).",
      "source": "MASTER_PLAN 2.2.1",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "arv.appraisal_ceiling_months": {
      "value": 24,
      "unit": "months",
      "owner": "Mo",
      "rationale": "Window for the max renovated sale ≤0.75mi used in the appraisal-ceiling BRRRR reality check. Plan 2.2.5.",
      "source": "MASTER_PLAN 2.2.5",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "arv.income_divergence_warn": {
      "value": 0.25,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Warn when the income-approach implied value diverges > 25% from comp ARV. Income is a CROSS-CHECK only; comps set ARV. Plan 2.2.7.",
      "source": "MASTER_PLAN 2.2.7",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "arv.luxury_gla_mult": {
      "value": 1.6,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "GLA > 1.6× area median flags a subject as unique → luxury path (Tier-1 only, widened radius). Plan 2.2.6.",
      "source": "MASTER_PLAN 2.2.6",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "premium.k_shrink": {
      "value": 8,
      "unit": "count",
      "owner": "Mo",
      "rationale": "Empirical-Bayes shrinkage constant: a nbhd needs ~8 flip pairs before its own premium dominates the county prior. Plan 1.4.2.",
      "source": "MASTER_PLAN 1.4.2; build_nbhd_premium.py",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "tax.reassessment_shock_warn": {
      "value": 1.25,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Warn when predictive tax exceeds current tax by >25% (post-sale/permit reassessment silently kills pro-formas built on the seller's bill). Plan 2.5.3.",
      "source": "MASTER_PLAN 2.5.3",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "tax.triad_calendar": {
      "value": {
        "City": {
          "last": 2024,
          "next": 2027
        },
        "North": {
          "last": 2025,
          "next": 2028
        },
        "South": {
          "last": 2026,
          "next": 2029
        }
      },
      "unit": "year",
      "owner": "Mo",
      "rationale": "Cook triennial reassessment calendar by triad — the next-reassessment year for the shock flag. Plan 2.5.3.",
      "source": "Cook County Assessor triennial calendar",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "annual"
    },
    "opex.insurance_psf_yr": {
      "value": 0.55,
      "unit": "usd_per_sqft_per_year",
      "owner": "Mo",
      "rationale": "Landlord property insurance baseline for Chicago-metro 2-4 flats/SFH: ~$0.55/sf/yr of gross living area. Replaces any flat-% insurance guess. Plan 3.1.1.",
      "source": "MASTER_PLAN 3.1.1; Chicago landlord DP-3 premium survey 2025-26 (~$0.45-0.65/sf)",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "opex.insurance_floor_bldg": {
      "value": 1200,
      "unit": "usd_per_building_per_year",
      "owner": "Mo",
      "rationale": "Minimum annual insurance per building (small/low-GLA subjects still carry a base premium). Plan 3.1.1.",
      "source": "MASTER_PLAN 3.1.1; Chicago DP-3 minimum-premium observation",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "opex.insurance_pre1940_mult": {
      "value": 1.25,
      "unit": "multiplier",
      "owner": "Mo",
      "rationale": "Pre-1940 stock (knob-and-tube, masonry, older systems) carries ~25% higher insurance premium and claims risk. Plan 3.1.1.",
      "source": "MASTER_PLAN 3.1.1; vintage-stock underwriting premium",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "opex.vacancy_strong": {
      "value": 0.05,
      "unit": "ratio_of_gross",
      "owner": "Mo",
      "rationale": "Vacancy allowance in a STRONG/fast submarket (5% of gross scheduled rent). Selected when tract velocity percentile (DOM/s2l) >= threshold. Plan 3.1.1 / table 1.4.4.",
      "source": "MASTER_PLAN 3.1.1; HUD/AMI vacancy norms for hot submarkets",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "opex.vacancy_weak": {
      "value": 0.08,
      "unit": "ratio_of_gross",
      "owner": "Mo",
      "rationale": "Vacancy allowance in a WEAK/low-velocity submarket (8% of gross). Selected when tract velocity percentile below threshold. Plan 3.1.1 / table 1.4.4.",
      "source": "MASTER_PLAN 3.1.1; low-velocity submarket vacancy norms",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "opex.vacancy_velocity_threshold_pct": {
      "value": 50,
      "unit": "percentile",
      "owner": "Mo",
      "rationale": "Tract velocity percentile (mean of DOM-speed + sale-to-list percentiles) at/above which a submarket is 'strong' (5% vacancy) vs 'weak' (8%). Median split. Plan 3.1.1.",
      "source": "MASTER_PLAN 3.1.1",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "opex.maint_capex_post2000": {
      "value": 0.07,
      "unit": "ratio_of_gross",
      "owner": "Mo",
      "rationale": "Maintenance + CapEx reserve for post-2000 vintage: 7% of gross rent (newer systems, less deferred maintenance). Plan 3.1.1 / Plan B.",
      "source": "MASTER_PLAN 3.1.1 (Plan B vintage-scaled reserve)",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "opex.maint_capex_pre1940": {
      "value": 0.12,
      "unit": "ratio_of_gross",
      "owner": "Mo",
      "rationale": "Maintenance + CapEx reserve for pre-1940 vintage: 12% of gross rent (aging roofs, systems, envelope). Linear interpolate by year between 1940->2000. Plan 3.1.1 / Plan B.",
      "source": "MASTER_PLAN 3.1.1 (Plan B vintage-scaled reserve)",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "opex.maint_capex_default_no_year": {
      "value": 0.1,
      "unit": "ratio_of_gross",
      "owner": "Mo",
      "rationale": "Maintenance + CapEx reserve when year_built is unknown: neutral 10% of gross (midpoint of the 7-12% vintage band), labeled. Plan 3.1.1.",
      "source": "MASTER_PLAN 3.1.1",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "opex.postrehab_reserve_relief_mult": {
      "value": 0.6,
      "unit": "multiplier",
      "owner": "Mo",
      "rationale": "Post-rehab reserve relief: maintenance+CapEx reserve x0.6 for the first 3 years after a gut/structural rehab (just-replaced systems carry reduced near-term CapEx). Labeled 'post-rehab reserve relief'. Plan 3.1.1.",
      "source": "MASTER_PLAN 3.1.1 (refined by rehab-scope recency)",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "opex.postrehab_relief_years": {
      "value": 3,
      "unit": "years",
      "owner": "Mo",
      "rationale": "Window (years since a gut/structural rehab) over which post-rehab reserve relief applies. Plan 3.1.1.",
      "source": "MASTER_PLAN 3.1.1",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "opex.management_default": {
      "value": 0.08,
      "unit": "ratio_of_gross",
      "owner": "Mo",
      "rationale": "Property management fee: 8% of gross scheduled rent by default; toggled to 0 when self-managed (mgmt_self param). Plan 3.1.1.",
      "source": "MASTER_PLAN 3.1.1; Chicago PM fee norm 7-10%",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "opex.utilities_owner_per_unit_mo": {
      "value": 55,
      "unit": "usd_per_unit_per_month",
      "owner": "Mo",
      "rationale": "Owner-paid common-area utilities (water/sewer/common electric/scavenger) for multifamily 2-4: ~$55/unit/mo. SFH tenant pays own -> 0. Plan 3.1.1.",
      "source": "MASTER_PLAN 3.1.1; Chicago 2-4 flat owner-utility survey",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "opex.hoa_default": {
      "value": 0,
      "unit": "usd_per_month",
      "owner": "Mo",
      "rationale": "HOA/condo-assessment default is 0; a per-deal parameter (condo only). Plan 3.1.1.",
      "source": "MASTER_PLAN 3.1.1",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "financing.rate_conventional": {
      "value": 7.0,
      "unit": "annual_pct",
      "owner": "Mo",
      "rationale": "Conventional investor 30yr fixed rate, 2026-07 vintage. Manual-override param + expiry review flag (rate feed). Plan 3.1.2.",
      "source": "MASTER_PLAN 3.1.2; 2026-07 investor rate sheet",
      "set_on": "2026-07-10",
      "expires": "2026-10-10",
      "review": "monthly",
      "rate_vintage": "2026-07",
      "manual_override": "financing_type/rate params override at call time"
    },
    "financing.rate_dscr": {
      "value": 7.4,
      "unit": "annual_pct",
      "owner": "Mo",
      "rationale": "DSCR-loan 30yr rate = conventional + ~0.4 spread, 2026-07 vintage. Plan 3.1.2.",
      "source": "MASTER_PLAN 3.1.2; 2026-07 DSCR lender sheet",
      "set_on": "2026-07-10",
      "expires": "2026-10-10",
      "review": "monthly",
      "rate_vintage": "2026-07",
      "manual_override": "financing_type/rate params override at call time"
    },
    "financing.rate_hard_money": {
      "value": 10.5,
      "unit": "annual_pct",
      "owner": "Mo",
      "rationale": "Hard-money bridge rate, 2026-07 vintage (interest-only, points separate). Plan 3.1.2.",
      "source": "MASTER_PLAN 3.1.2; 2026-07 Chicago HM lender sheet",
      "set_on": "2026-07-10",
      "expires": "2026-10-10",
      "review": "monthly",
      "rate_vintage": "2026-07",
      "manual_override": "financing_type/rate params override at call time"
    },
    "financing.rate_fha_oo": {
      "value": 6.75,
      "unit": "annual_pct",
      "owner": "Mo",
      "rationale": "FHA owner-occupant 30yr rate, 2026-07 vintage (runs ~0.25 below conventional). Used for house-hack PITI. Plan 3.1.2.",
      "source": "MASTER_PLAN 3.1.2; 2026-07 FHA rate sheet",
      "set_on": "2026-07-10",
      "expires": "2026-10-10",
      "review": "monthly",
      "rate_vintage": "2026-07",
      "manual_override": "financing_type/rate params override at call time"
    },
    "financing.ltv_conventional_investor": {
      "value": 0.75,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Conventional investor purchase LTV (range 0.75-0.80; 0.75 default drives the buy&hold debt service). Plan 3.1.2.",
      "source": "MASTER_PLAN 3.1.2",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "financing.ltv_dscr": {
      "value": 0.75,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "DSCR-loan LTV (also the refi LTV on ARV for BRRRR post-refi DSCR). Plan 3.1.2 / 3.2.2.",
      "source": "MASTER_PLAN 3.1.2",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "financing.dscr_min": {
      "value": 1.15,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Minimum DSCR a DSCR-loan will fund at. Also the max-loan-at-DSCR-1.15 solver target. Plan 3.1.2.",
      "source": "MASTER_PLAN 3.1.2",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "financing.hard_money_ltv_arv": {
      "value": 0.7,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Hard-money max advance = 70% of ARV. Plan 3.1.2.",
      "source": "MASTER_PLAN 3.1.2",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "financing.hard_money_points": {
      "value": 2,
      "unit": "points",
      "owner": "Mo",
      "rationale": "Hard-money origination points (2% of the financed amount, paid at close). Plan 3.1.2 / 3.2.1 holding.",
      "source": "MASTER_PLAN 3.1.2",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "financing.hard_money_term_mo": {
      "value": 12,
      "unit": "months",
      "owner": "Mo",
      "rationale": "Hard-money bridge term. Plan 3.1.2.",
      "source": "MASTER_PLAN 3.1.2",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "financing.hm_purchase_advance": {
      "value": 0.9,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Hard-money advance against purchase price for the holding-interest base (0.9 x Purchase outstanding). Plan 3.2.1.",
      "source": "MASTER_PLAN 3.2.1 (flip holding)",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "financing.hm_rehab_draw_avg": {
      "value": 0.5,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Average outstanding fraction of the rehab draw over the hold (rehab is drawn over time; ~50% average balance). Plan 3.2.1.",
      "source": "MASTER_PLAN 3.2.1 (flip holding)",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "financing.fha_down": {
      "value": 0.035,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "FHA owner-occupant minimum down payment (3.5%); loan = 96.5%. Plan 3.1.2 / 3.2.4.",
      "source": "MASTER_PLAN 3.1.2; FHA 203(b)",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "financing.fha_mip_upfront": {
      "value": 0.0175,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "FHA up-front mortgage-insurance premium (1.75% of the loan). Plan 3.1.2.",
      "source": "MASTER_PLAN 3.1.2; FHA MIP schedule",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "financing.fha_mip_annual": {
      "value": 0.0055,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "FHA annual mortgage-insurance premium (0.55% of loan / yr, billed monthly) in the PITI. Plan 3.1.2 / 3.2.4.",
      "source": "MASTER_PLAN 3.1.2; FHA MIP schedule",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "financing.conventional_oo_down": {
      "value": 0.05,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Conventional owner-occupant minimum down payment (5%) for the house-hack alternative. Plan 3.1.2.",
      "source": "MASTER_PLAN 3.1.2",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "flip.selling_agent_pct": {
      "value": 0.06,
      "unit": "ratio_of_arv",
      "owner": "Mo",
      "rationale": "Flip resale agent commission (6% of ARV). Plan 3.2.1 / Appendix B (6%+2% sell).",
      "source": "MASTER_PLAN Appendix B",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "flip.selling_closing_pct": {
      "value": 0.02,
      "unit": "ratio_of_arv",
      "owner": "Mo",
      "rationale": "Flip resale closing costs (transfer stamps, title, attorney) = 2% of ARV. Plan 3.2.1 / Appendix B.",
      "source": "MASTER_PLAN Appendix B; IL/Chicago transfer-tax + title",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "flip.buying_closing_pct": {
      "value": 0.015,
      "unit": "ratio_of_purchase",
      "owner": "Mo",
      "rationale": "Acquisition closing costs (title, attorney, inspection, lender) = 1.5% of purchase. Plan 3.2.1 / Appendix B (Buy(closing)).",
      "source": "MASTER_PLAN Appendix B",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "flip.hold_months_fast": {
      "value": 4,
      "unit": "months",
      "owner": "Mo",
      "rationale": "Marketing/sale time in a FAST submarket (top DOM-speed percentile) added to rehab duration for flip holding. Plan 3.2.1.",
      "source": "MASTER_PLAN 3.2.1 (DOM table)",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "flip.hold_months_mid": {
      "value": 6,
      "unit": "months",
      "owner": "Mo",
      "rationale": "Marketing/sale time in a MID-velocity submarket. Plan 3.2.1.",
      "source": "MASTER_PLAN 3.2.1 (DOM table)",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "flip.hold_months_slow": {
      "value": 9,
      "unit": "months",
      "owner": "Mo",
      "rationale": "Marketing/sale time in a SLOW/low-velocity submarket. Plan 3.2.1.",
      "source": "MASTER_PLAN 3.2.1 (DOM table)",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "flip.dom_fast_pct": {
      "value": 66,
      "unit": "percentile",
      "owner": "Mo",
      "rationale": "Tract DOM-speed percentile at/above which sale time = fast (4mo). Plan 3.2.1.",
      "source": "MASTER_PLAN 3.2.1",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "flip.dom_slow_pct": {
      "value": 33,
      "unit": "percentile",
      "owner": "Mo",
      "rationale": "Tract DOM-speed percentile below which sale time = slow (9mo); between = mid (6mo). Plan 3.2.1.",
      "source": "MASTER_PLAN 3.2.1",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "flip.scope_duration_mo": {
      "value": {
        "cosmetic": 1,
        "moderate": 2.5,
        "gut": 5,
        "structural": 8
      },
      "unit": "months",
      "owner": "Mo",
      "rationale": "Rehab construction duration by scope, added to submarket DOM for total flip holding months. Plan 3.2.1.",
      "source": "MASTER_PLAN 3.2.1 (rehab-scope duration)",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "flip.margin_score_full_pct": {
      "value": 0.2,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Flip margin (flip_net/ARV) that maps to a full 100 margin score; 0% -> 0, linear clamp. Plan 3.2.1 / Appendix B.",
      "source": "MASTER_PLAN Appendix B (margin 0->0, 20%->100)",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "flip.weights": {
      "value": {
        "margin": 0.5,
        "velocity": 0.3,
        "trend": 0.2
      },
      "unit": "weights",
      "owner": "Mo",
      "rationale": "Flip composite weights: 0.5 gross-margin score + 0.3 DOM/s2l velocity + 0.2 12mo yoy trend. User-adjustable +-0.15, normalized; gates never disableable. Plan 3.2.1 / 3.3.4 / Appendix B.",
      "source": "MASTER_PLAN Appendix B (Plan A weights)",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "brrrr.ratio_full_threshold": {
      "value": 0.7,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "70%-rule: (Purchase+Rehab)/ARV <= 0.70 scores a full 100 on the capital-efficiency component. Plan 3.2.2 / Appendix B.",
      "source": "MASTER_PLAN Appendix B (Plan A 70% rule)",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "brrrr.ratio_decay_k": {
      "value": 12,
      "unit": "rate",
      "owner": "Mo",
      "rationale": "Exponential-decay constant for ratio_score above 0.70: score = 100*exp(-12*(ratio-0.70)), clamped [0,100] (continuous at 0.70; ~55 at 0.75, ~30 at 0.80). Plan 3.2.2 / Appendix B.",
      "source": "MASTER_PLAN Appendix B (exp decay)",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "brrrr.dscr_anchors": {
      "value": {
        "1.0": 40,
        "1.25": 80,
        "1.5": 100
      },
      "unit": "piecewise",
      "owner": "Mo",
      "rationale": "Post-refi DSCR -> dscr_score piecewise anchors: DSCR 1.0->40, 1.25->80, 1.5->100 (linear between; extends below 1.0 to 0 at ~0.75; >=1.5 -> 100). Plan 3.2.2.",
      "source": "MASTER_PLAN 3.2.2",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "brrrr.refi_ltv": {
      "value": 0.75,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Cash-out refinance LTV on ARV for post-refi DSCR + capital-recycled metrics. Plan 3.2.2 / Appendix B.",
      "source": "MASTER_PLAN Appendix B (P&I on 0.75*ARV)",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "brrrr.refi_closing_pct": {
      "value": 0.02,
      "unit": "ratio_of_refi_loan",
      "owner": "Mo",
      "rationale": "Scenario reserve for lender, title, recording, appraisal, and related refinance closing costs. Deducted from gross refinance proceeds before cash-left-in and capital-recycled calculations; users must replace it with a lender quote before funding.",
      "source": "Public-beta underwriting policy assumption; validate against realized lender closing disclosures",
      "set_on": "2026-07-14",
      "expires": "2026-10-14",
      "review": "quarterly"
    },
    "brrrr.seasoning_months": {
      "value": 3,
      "unit": "months",
      "owner": "Mo",
      "rationale": "Refi seasoning window added to rehab duration for BRRRR holding-cost (bridge before the cash-out refi). Plan 3.2.2.",
      "source": "MASTER_PLAN 3.2.2",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "brrrr.weights": {
      "value": {
        "ratio": 0.6,
        "dscr": 0.4
      },
      "unit": "weights",
      "owner": "Mo",
      "rationale": "BRRRR composite weights: 0.6 capital-efficiency (70% rule) + 0.4 post-refi DSCR. User-adjustable +-0.15, normalized; gates never disableable. Plan 3.2.2 / 3.3.4 / Appendix B.",
      "source": "MASTER_PLAN Appendix B",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "hold.coc_anchors": {
      "value": {
        "0": 0,
        "0.08": 70,
        "0.12": 100
      },
      "unit": "piecewise",
      "owner": "Mo",
      "rationale": "Cash-on-cash -> coc_score piecewise anchors: 0%->0, 8%->70, 12%->100 (linear between; >=12% -> 100). Plan 3.2.3.",
      "source": "MASTER_PLAN 3.2.3",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "hold.weights": {
      "value": {
        "coc": 0.7,
        "risk": 0.3
      },
      "unit": "weights",
      "owner": "Mo",
      "rationale": "Buy&hold composite weights: 0.7 true cash-on-cash + 0.3 risk overlay (100 - risk_score, from the separate riskFlags engine; risk stays separate, overlaid only here). User-adjustable +-0.15. Plan 3.2.3 / 3.3.4.",
      "source": "MASTER_PLAN 3.2.3",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "hold.ltv": {
      "value": 0.75,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Buy&hold conventional purchase LTV (debt service on 0.75*Purchase; all-in cash = 0.25 down + closing + rehab). Plan 3.2.3 / Appendix B.",
      "source": "MASTER_PLAN Appendix B (conventional 75LTV)",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "house_hack.fha_self_sufficiency_frac": {
      "value": 0.75,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "FHA 3-4 unit self-sufficiency test: 75% of gross market rent (ALL units incl owner's) must cover full PITI, else INELIGIBLE (lending rule; a flag, never a score haircut). Owner unit excluded from the net-cost revenue math but included in this gross-rent test. Plan 3.2.4.",
      "source": "MASTER_PLAN 3.2.4; HUD 4000.1 FHA self-sufficiency",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "house_hack.cost_ratio_anchors": {
      "value": {
        "0": 95,
        "1": 40,
        "1.5": 0
      },
      "unit": "piecewise",
      "owner": "Mo",
      "rationale": "House-hack score vs renting a comparable (tract 2BR SAFMR): net_housing_cost/comparable_rent = 0 -> 95 (<=0 climbs to 100), == market rent (1.0) -> 40, >= 1.5x -> 0. Plan 3.2.4.",
      "source": "MASTER_PLAN 3.2.4",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "scoring.gate_ceiling": {
      "value": 40,
      "unit": "score",
      "owner": "Mo",
      "rationale": "Hard-gate ceiling: flip composite capped <=40 when flip_net(ask)<0; brrrr+hold capped <=40 when market-rent DSCR<1.0. Applied to RAW composite before ranking AND to the displayed percentile, so a gated listing can never reach the top decile (INV-4). Supersedes the Phase-0 <=89 emergency clamp. Plan 3.3.1.",
      "source": "MASTER_PLAN 3.3.1 / INV-4",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "scoring.weight_band": {
      "value": 0.15,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "User strategy-weight guardrail: each component weight accepted within +-0.15 of its default, then normalized to sum 1. Gates are never user-disableable. Plan 3.3.4.",
      "source": "MASTER_PLAN 3.3.4",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "scoring.distribution_cache_ttl_ms": {
      "value": 600000,
      "unit": "milliseconds",
      "owner": "Mo",
      "rationale": "Per-isolate TTL (10 min) for the cached sorted per-strategy raw-composite distribution (from D1 active listings) used to percentile-rank on-demand single-property scores. Plan 3.3.2.",
      "source": "MASTER_PLAN 3.3.2",
      "set_on": "2026-07-10",
      "expires": "2027-07-10",
      "review": "quarterly"
    },
    "arv.index_appreciation_cap_per_year": {
      "value": 1.08,
      "unit": "ratio_per_year",
      "owner": "Mo",
      "rationale": "V3-0.3 time-index cap: per-year appreciation used to index a comp sale to today is capped at 8%/yr COMPOUNDED (1.08^years). Live incident: an uncapped ZIP-index ratio of 1.375 turned a $405k sale into a $556,931 'comp'. 8%/yr is above Chicagoland's long-run HPI (~4-5%/yr FHFA Cook County) but below bubble-year spikes, so genuine appreciation passes and data artifacts don't.",
      "source": "DEVELOPMENT_PLAN_V3 0.3; FHFA HPI Cook County long-run band",
      "set_on": "2026-07-12",
      "expires": "2027-07-12",
      "review": "quarterly"
    },
    "arv.index_factor_total_cap": {
      "value": 1.3,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "V3-0.3: hard ceiling on the TOTAL time-index factor applied to any comp, regardless of source (ZIP price index or 3.5%/yr fallback). No comp may be marked up more than +30% for time. Ground-truth suite asserts no fixture comp carries a factor above this.",
      "source": "DEVELOPMENT_PLAN_V3 0.3 (audit consensus item 3)",
      "set_on": "2026-07-12",
      "expires": "2027-07-12",
      "review": "quarterly"
    },
    "arv.index_factor_total_floor": {
      "value": 0.75,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "V3-0.3: hard floor on the total time-index factor (was 0.6). A comp is never marked DOWN more than -25% for time — deeper declines are treated as evidence problems (dispersion/arms-length), not indexing.",
      "source": "DEVELOPMENT_PLAN_V3 0.3",
      "set_on": "2026-07-12",
      "expires": "2027-07-12",
      "review": "quarterly"
    },
    "comp.gla_band_pct": {
      "value": 0.2,
      "unit": "fraction",
      "owner": "Mo",
      "rationale": "V3-1.4 comp policy v2: when the subject GLA is known, comps outside +/-20% GLA are rejected with reason 'gla_band'. Appraisal-practice bracketing band widened from the audit's +/-15% proposal to +/-20% to keep thin Chicago strata viable; unknown-GLA comps pass through (graceful degradation).",
      "source": "DEVELOPMENT_PLAN_V3 1.4",
      "set_on": "2026-07-12",
      "expires": "2027-07-12",
      "review": "quarterly"
    },
    "comp.beds_band": {
      "value": 1,
      "unit": "beds",
      "owner": "Mo",
      "rationale": "V3-1.4: when subject and comp bedroom counts are both known, comps beyond +/-1 bed are rejected with reason 'beds_band'. Corpus RPC rows carry no beds field yet -> filter degrades gracefully (noted in fallback_chain).",
      "source": "DEVELOPMENT_PLAN_V3 1.4",
      "set_on": "2026-07-12",
      "expires": "2027-07-12",
      "review": "quarterly"
    },
    "comp.ppsf_mad_k": {
      "value": 3.0,
      "unit": "mad_multiples",
      "owner": "Mo",
      "rationale": "V3-1.4: robust outlier trim — comps whose log($/sqft) sits more than 3.0x the median-absolute-deviation from the stratum median are rejected with reason 'ppsf_outlier_mad'. Applies when subject sqft is known and >=5 sqft-bearing comps exist; the 0.35 IQR price-dispersion gate remains either way.",
      "source": "DEVELOPMENT_PLAN_V3 1.4 (IAAO robust-screen practice)",
      "set_on": "2026-07-12",
      "expires": "2027-07-12",
      "review": "quarterly"
    },
    "comp.expansion_ladder": {
      "value": [
        {
          "radius_mi": 0.5,
          "days": 180
        },
        {
          "radius_mi": 0.75,
          "days": 270
        },
        {
          "radius_mi": 1.0,
          "days": 365
        }
      ],
      "unit": "steps",
      "owner": "Mo",
      "rationale": "V3-1.4 expansion ladder: comp search starts at 0.5mi/180d and widens to 0.75mi/270d then 1.0mi/365d ONLY when the tighter step has <3 renovated-stratum comps. Time-indexing is mandatory at every step. Comps carrying only a sale_year (corpus) get +365d window slack; sale_date comps (Socrata/Lake) are exact.",
      "source": "DEVELOPMENT_PLAN_V3 1.4",
      "set_on": "2026-07-12",
      "expires": "2027-07-12",
      "review": "quarterly"
    },
    "comp.ladder_step_conf_penalty": {
      "value": 8,
      "unit": "confidence_points",
      "owner": "Mo",
      "rationale": "V3-1.4: each ladder expansion step beyond the first subtracts 8 confidence points — wider/staler evidence must read as less certain.",
      "source": "DEVELOPMENT_PLAN_V3 1.4",
      "set_on": "2026-07-12",
      "expires": "2027-07-12",
      "review": "quarterly"
    },
    "comp.min_comps_point_display": {
      "value": 5,
      "unit": "comps",
      "owner": "Mo",
      "rationale": "V3-1.4: a PUBLIC point estimate requires >=5 qualifying comps. With 3-4 comps the value carries range_only:true + warning point_display_thin_comps — surfaces show the low-high range, not the point.",
      "source": "DEVELOPMENT_PLAN_V3 1.4 (suppression ladder)",
      "set_on": "2026-07-12",
      "expires": "2027-07-12",
      "review": "quarterly"
    },
    "comp.target_comps": {
      "value": 8,
      "unit": "comps",
      "owner": "Mo",
      "rationale": "V3-1.4: the similarity-weighted median is taken over the top 8 comps (target band 5-8).",
      "source": "DEVELOPMENT_PLAN_V3 1.4",
      "set_on": "2026-07-12",
      "expires": "2027-07-12",
      "review": "quarterly"
    },
    "comp.max_comps": {
      "value": 12,
      "unit": "comps",
      "owner": "Mo",
      "rationale": "V3-1.4: at most 12 comps are kept/served per valuation (highest-similarity first).",
      "source": "DEVELOPMENT_PLAN_V3 1.4",
      "set_on": "2026-07-12",
      "expires": "2027-07-12",
      "review": "quarterly"
    },
    "comp.rapid_resale_days": {
      "value": 90,
      "unit": "days",
      "owner": "Mo",
      "rationale": "V3-1.5 arms-length v2: a same-PIN resale within 90 days (sale_date precision) is wholesale/double-close noise — NEITHER leg is comp-eligible (reason 'rapid_resale_within_90d') and no flip-pair signal is recorded.",
      "source": "DEVELOPMENT_PLAN_V3 1.5",
      "set_on": "2026-07-12",
      "expires": "2027-07-12",
      "review": "quarterly"
    },
    "comp.min_sim_floor": {
      "value": 0.45,
      "unit": "fraction",
      "owner": "Mo",
      "rationale": "2026-07-17 Tier-1 ladder comp floor (live defect: ladder-similarity 0.02-0.11 junk — a $140k and a $1.275M sale beside $700k real comps — inflated dispersion and the conformal interval). The ladder similarity is a PRODUCT of per-factor discounts, so the floor is enforced on the per-factor GEOMETRIC MEAN similarity^(1/k) — the same scale as rankAndValueJS's MIN_SIM=0.45 P0-A guard; the same-tract 1.15 boost is credited OUTSIDE the root. A comp is ejected only when BOTH this floor fails AND the comp.min_sim_cliff_frac cliff fires; rejection reason 'similarity below floor (0.45)'. Floored comps surface in comps_rejected; survivors below the ladder minimum fall through to the existing thin-comps/suppression logic (no silent refill).",
      "source": "worker.js arvWaterfall + pipeline/comp_engine.py arv_waterfall (engine parity 2026-07-17)",
      "set_on": "2026-07-17",
      "expires": "2027-07-17",
      "review": "quarterly"
    },
    "comp.min_sim_cliff_frac": {
      "value": 0.2,
      "unit": "fraction",
      "owner": "Mo",
      "rationale": "Second leg of the 2026-07-17 dual gate: a floor-failing comp is ejected only when its RAW ladder similarity also sits under 0.2× the set-best raw similarity — the defect signature (heterogeneous junk dragging an otherwise-coherent set). A homogeneously thin set keeps its comps; ladder confidence penalties, the <5-comp range_only gate and the dispersion gate already price that in honestly.",
      "source": "worker.js arvWaterfall + pipeline/comp_engine.py arv_waterfall (engine parity 2026-07-17)",
      "set_on": "2026-07-17",
      "expires": "2027-07-17",
      "review": "quarterly"
    },
    "as_is.mixed_stratum_haircut": {
      "value": 0.95,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "V3-1.12 as-is symmetry: when the dated/distressed stratum is thin (<3), the basis relaxes once more to ALL non-renovated-classified comps (incl. condition 'unknown') at 1.0mi/48mo with a documented 5% haircut — unknown-condition pools skew above the true dated stratum. Basis labeled 'mixed_condition_haircut' + warning; still <3 -> null + 'as_is_thin_evidence'.",
      "source": "DEVELOPMENT_PLAN_V3 1.12",
      "set_on": "2026-07-12",
      "expires": "2027-07-12",
      "review": "quarterly"
    },
    "badge.max_ask_ratio": {
      "value": 0.9,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "V3-0.5 badge economics: the 'under our estimate' badge/verdict requires ask <= 0.90 x Tier-1 (comp-evidence) arv.value. Area estimates NEVER qualify — the badge fired 6/6 in the live audit because Tier-2 area numbers were treated as property ARVs.",
      "source": "DEVELOPMENT_PLAN_V3 0.5",
      "set_on": "2026-07-12",
      "expires": "2027-07-12",
      "review": "quarterly"
    },
    "badge.min_confidence": {
      "value": 55,
      "unit": "confidence_points",
      "owner": "Mo",
      "rationale": "V3-0.5: the under-estimate badge also requires Tier-1 ARV confidence >= 55 (the plan's '>= Medium confidence').",
      "source": "DEVELOPMENT_PLAN_V3 0.5",
      "set_on": "2026-07-12",
      "expires": "2027-07-12",
      "review": "quarterly"
    },
    "badge.max_badge_rate": {
      "value": 0.33,
      "unit": "fraction",
      "owner": "Mo",
      "rationale": "V3-0.5 rarity invariant: across the fixture listing set (tests/invariants.mjs INV-9) at most 1/3 of cards may carry the under-estimate badge. A badge that fires on most inventory is a defect, not a signal.",
      "source": "DEVELOPMENT_PLAN_V3 0.5",
      "set_on": "2026-07-12",
      "expires": "2027-07-12",
      "review": "quarterly"
    },
    "scoring.area_estimate_deal_score_cap": {
      "value": 65,
      "unit": "score_points",
      "owner": "Mo",
      "rationale": "V3-1.3 Tier-3 demotion: listings without a Tier-1 comp ARV (area-estimate or stale-label basis) have deal_score hard-capped at 65 at ingest AND at the rank pass, and serve score_basis 'area_estimate'. An area constant must never rank a specific property into the top decile.",
      "source": "DEVELOPMENT_PLAN_V3 1.3 + 0.7",
      "set_on": "2026-07-12",
      "expires": "2027-07-12",
      "review": "quarterly"
    },
    "arv.hedonic_deal_score_cap": {
      "value": 75,
      "unit": "score_points",
      "owner": "Mo",
      "rationale": "A hedonic tier-2 basis is property-specific but not comp-verified; it may rank above area estimates (cap 65) but never into the top quartile reserved for Tier-1 comp evidence. [V3-1.2]",
      "source": "DEVELOPMENT_PLAN_V3 1.2 wiring decision",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "arv.hedonic_disagreement_widen": {
      "value": 0.12,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "When |comp ARV - hedonic value| / mean exceeds 12%, the two approaches disagree materially; the served interval widens by the disagreement ratio and warning approaches_disagree fires. 12% mirrors the audit consensus threshold. [V3-1.2]",
      "source": "DEVELOPMENT_PLAN_V3 1.2 (audit consensus >12% disagreement gate)",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "arv.interval_coverage": {
      "value": 0.8,
      "unit": "probability",
      "owner": "Mo",
      "rationale": "Served ARV intervals are split-conformal 80% bands (calibration.json q80_lo/q80_hi per segment); measured out-of-fold coverage 0.77-0.85. [V3-2.1]",
      "source": "dist/data/calibration.json cal-v1-2026.07",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "arv.interval_z80": {
      "value": 1.2816,
      "unit": "z_score",
      "owner": "Mo",
      "rationale": "Two-sided 80% normal quantile; converts hedonic per-segment log-sigma into an 80% interval exp(+/- z*sigma) for tier-2 hedonic valuations (then widened to the calibration bounds envelope). [V3-1.2/2.1]",
      "source": "standard normal quantile",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "rent.sqft_elasticity": {
      "value": 0.3,
      "unit": "exponent",
      "owner": "Mo",
      "rationale": "Rent scales sublinearly with GLA: doubling size raises rent ~23% ((2)^0.30-1), consistent with hedonic rent literature (size elasticities 0.2-0.4). Kills the identical-rent-for-different-size defect class. [V3-3.1]",
      "source": "hedonic rent literature band; ZORI-vs-GLA cross-checks",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "rent.sqft_factor_floor": {
      "value": 0.75,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Clamp on the sqft elasticity factor - a tiny unit never rents below 75% of the segment-typical basis (fixed costs floor rents). [V3-3.1]",
      "source": "clamp policy",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "rent.sqft_factor_cap": {
      "value": 1.3,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Clamp on the sqft elasticity factor - oversized homes saturate; rent premiums above ~30% over typical need unit-level evidence, not a size curve. [V3-3.1]",
      "source": "clamp policy",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "rent.typical_sqft_sfh": {
      "value": 1500,
      "unit": "sqft",
      "owner": "Mo",
      "rationale": "Segment-typical SFH GLA for the elasticity denominator; Cook SFH median GLA ~1.4-1.6k sqft. hedonic.json hed-v1 carries no typical-sqft field, so this is registered here. [V3-3.1]",
      "source": "Cook Assessor parcel universe (corpus median)",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "rent.typical_sqft_mf2_4_unit": {
      "value": 1000,
      "unit": "sqft_per_unit",
      "owner": "Mo",
      "rationale": "Segment-typical PER-UNIT GLA in 2-4 unit stock; Chicago flats typically run 900-1,100 sqft/unit. hedonic.json carries no typical-sqft field. [V3-3.1]",
      "source": "Cook Assessor parcel universe (corpus median)",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "rent.safmr_blend_weight_max": {
      "value": 0.25,
      "unit": "weight",
      "owner": "Mo",
      "rationale": "SAFMR is a ~40th-percentile voucher payment standard, not market rent - it may contribute at most 25% of the blend when ZORI exists and otherwise serves only as the [0.85,1.6]x floor/ceiling bound (de-anchored; S8 arbitrage math keeps the raw SAFMR in rent.context). [V3-3.3]",
      "source": "HUD SAFMR methodology (40th pctile FMR); audit consensus #2",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "rent.condition_mult_distressed": {
      "value": 0.85,
      "unit": "multiplier",
      "owner": "Mo",
      "rationale": "As-is contract rent for distressed stock: un-renovated/distressed units typically rent 10-20% below stabilized; conservative midpoint 15% discount. [V3-3.2]",
      "source": "turn-cost & classifieds spreads (desk survey)",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "rent.condition_mult_dated": {
      "value": 0.93,
      "unit": "multiplier",
      "owner": "Mo",
      "rationale": "As-is contract rent for dated-but-habitable stock: typical 5-10% discount vs stabilized; midpoint 7%. [V3-3.2]",
      "source": "turn-cost & classifieds spreads (desk survey)",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "rent.condition_mult_renovated": {
      "value": 1.0,
      "unit": "multiplier",
      "owner": "Mo",
      "rationale": "Renovated/new stock rents at the stabilized market basis (no discount). [V3-3.2]",
      "source": "definitional",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "rent.stabilized_max_uplift": {
      "value": 1.5,
      "unit": "ratio",
      "owner": "Mo",
      "rationale": "Stabilized post-reno rent never exceeds 1.5x the as-is contract basis - the historical evidence bound retained from the audited 1.5x cap; renovation cannot invent rents beyond what the submarket evidences. [V3-3.3]",
      "source": "flip-pair rent deltas + prior engine bound (kept)",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "rent.interval_min_pct": {
      "value": 0.08,
      "unit": "fraction",
      "owner": "Mo",
      "rationale": "Rent bands never display tighter than +/-8% - rent models are not that precise even with dual-source evidence. [V3-3.6]",
      "source": "rent MdAPE floors in ZORI/SAFMR reconciliations",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "rent.interval_max_pct": {
      "value": 0.25,
      "unit": "fraction",
      "owner": "Mo",
      "rationale": "Rent bands cap at +/-25%; beyond that the number is context, not an estimate (and it flags). [V3-3.6]",
      "source": "display policy",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "rent.low_conf_threshold_pct": {
      "value": 0.24,
      "unit": "fraction",
      "owner": "Mo",
      "rationale": "A rent band wider than +/-24% -> rent_confidence 'low' + warning rent_model_uncertainty + risk flag; suppress-adjacent per V3-3.6. [V3-3.6]",
      "source": "DEVELOPMENT_PLAN_V3 3.6",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "tax.bor_appeal_reduction_pct": {
      "value": 0.1,
      "unit": "fraction",
      "owner": "Mo",
      "rationale": "Conservative default Board of Review appeal outcome: granted Cook residential reductions typically land 8-15% of AV; 10% is the conservative planning number. Savings = current bill x 10% (bill ~linear in AV under AV x level x equalizer x rate). [V3-3.8]",
      "source": "Cook BOR published outcome distributions (residential appeals)",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "tax.bor_appeal_locked_years": {
      "value": 3,
      "unit": "years",
      "owner": "Mo",
      "rationale": "A granted reduction generally holds until the next triennial reassessment in Cook (~3 years). Lake reassesses quadrennially; 3 years stays the conservative modeling horizon. [V3-3.8]",
      "source": "Cook triennial reassessment calendar",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "opex.compliance_reserve_chicago_per_unit_yr": {
      "value": 150,
      "unit": "usd_per_unit_yr",
      "owner": "Mo",
      "rationale": "Chicago RLTO compliance burden: security-deposit interest + annual summaries/notices, registration, attorney-fee exposure and admin time - conservatively $150/unit/yr for a small landlord. [V3-3.9]",
      "source": "Chicago RLTO (Mun. Code 5-12) obligations, desk estimate",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "opex.compliance_reserve_cook_suburb_per_unit_yr": {
      "value": 75,
      "unit": "usd_per_unit_yr",
      "owner": "Mo",
      "rationale": "Suburban Cook RTLO (2021) imposes a lighter subset of RLTO-style obligations - roughly half the Chicago admin burden. [V3-3.9]",
      "source": "Cook County RTLO (Ord. 21-0432)",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "opex.compliance_reserve_lake_per_unit_yr": {
      "value": 0,
      "unit": "usd_per_unit_yr",
      "owner": "Mo",
      "rationale": "Lake County has no county-level residential tenant-landlord ordinance; state-law basics are absorbed in management overhead. $0 keeps the line honest, not padded. [V3-3.9]",
      "source": "Lake County code review",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "alerts.trailing_percentile": {
      "value": 0.9,
      "unit": "fraction",
      "owner": "Mo",
      "rationale": "Telegram/profile alerts fire only above the trailing P90 of the live deal_score distribution — alerts stay rare-by-construction (top decile of what the model actually saw lately) instead of rotting on a fixed 65 as the inventory mix shifts. Effective floor = max(env ALERT_MIN_SCORE, trailing P90). [V3-2.11]",
      "source": "DEVELOPMENT_PLAN_V3 2.11 (fixed 65 -> trailing percentile)",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "alerts.trailing_window_days": {
      "value": 14,
      "unit": "days",
      "owner": "Mo",
      "rationale": "The trailing-percentile window: 14 days ~ two full ingest cycles of every coverage area (RentCast tight-rotation is 5 days/cycle) — long enough to be stable, short enough to track regime shifts. [V3-2.11]",
      "source": "DEVELOPMENT_PLAN_V3 2.11",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "digest.window_days": {
      "value": 7,
      "unit": "days",
      "owner": "Mo",
      "rationale": "Weekly digest looks back exactly one cron period (Mondays 14:00 UTC, '0 14 * * 1') so every new listing appears in exactly one digest — no gaps, no repeats. [V3-5.11]",
      "source": "DEVELOPMENT_PLAN_V3 5.11",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "digest.top_n": {
      "value": 10,
      "unit": "count",
      "owner": "Mo",
      "rationale": "Digest caps at the top 10 matches per strategy profile (ranked by the profile's own strategy score) — a scannable Telegram/webhook unit; the full set stays queryable via the API. [V3-5.11]",
      "source": "DEVELOPMENT_PLAN_V3 5.11",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "photo.streetview_size": {
      "value": "640x400",
      "unit": "pixels",
      "owner": "Mo",
      "rationale": "Street View Static frame served by /api/photo — 640px is the free-tier max width; the 8:5 crop fits the card layouts. Requested with source=outdoor so indoor/user panos never render as 'the property'. [V3-4.12]",
      "source": "Google Street View Static API limits + app card spec",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    },
    "photo.cache_ttl_days": {
      "value": 30,
      "unit": "days",
      "owner": "Mo",
      "rationale": "Photo responses carry Cache-Control 30d and (when the optional R2 PHOTOS binding is armed) persist in R2 for reuse — facades don't change weekly, and 30d keeps repeat views inside the free Street View quota (300/day key cap). [V3-4.12]",
      "source": "DEVELOPMENT_PLAN_V3 4.12 (D2 track) + GCP key quota",
      "set_on": "2026-07-12",
      "expires": "2027-01-12",
      "review": "quarterly"
    }
  }
}
