{
  "concept": "7D",
  "title": "Pre-change report delivery baseline",
  "captured_at": "2026-09-21",
  "method": "Static source audit plus existing report renderer regression fixtures; no RF request was rerun for this audit.",
  "current_generation_path": {
    "builder": "frontend-react/src/utils/reportExport.js:buildPlanningReport",
    "markdown": "renderMarkdownReport -> downloadMarkdownReport -> Blob/object URL download",
    "html": "renderHtmlReport -> printable HTML document",
    "print_pdf": "renderPrintableReport -> window.open -> window.print",
    "durable_metadata": "buildReportDomainBinding(project) only; no ReportDefinition persisted for exports",
    "durable_bytes": "none"
  },
  "representative_cases": [
    {
      "id": "saved-canonical-2.6ghz-simulation",
      "scenario": "Saved ProjectV2 scenario with a 2.6 GHz single-cell snapshot",
      "sections": ["executive_summary", "rf_result", "planning_map", "coverage_gaps", "rf_configuration", "data_methodology"],
      "live_state_dependencies": ["settings", "selectedTower", "simulation", "coverageGaps", "map-derived current result"],
      "scenario_identity": "active project/scenario name when present",
      "scenario_revision_identity": "current scenario revision is available only through live domain binding",
      "run_identity": "not required and not persisted with the export",
      "formats": ["markdown", "html", "print/pdf via browser"],
      "timestamp": "render-time local timestamp",
      "bytes_and_hash": "not recorded",
      "destination": "user download or browser print dialog"
    },
    {
      "id": "saved-28ghz-simulation",
      "scenario": "Saved ProjectV2 scenario with 28 GHz RF result",
      "sections": ["executive_summary", "rf_result", "planning_map", "coverage_gaps", "rf_configuration", "data_methodology"],
      "live_state_dependencies": ["settings", "selectedTower", "simulation", "coverageGaps", "selected map/ray state indirectly used for current result"],
      "scenario_identity": "active project/scenario name",
      "scenario_revision_identity": "not embedded into generated bytes",
      "run_identity": "not required",
      "formats": ["markdown", "html", "print/pdf via browser"],
      "timestamp": "render-time local timestamp",
      "bytes_and_hash": "not recorded",
      "destination": "user download or browser print dialog"
    },
    {
      "id": "interference-radio-quality",
      "scenario": "Current interference/radio-quality analysis",
      "sections": ["executive_summary", "interference_and_radio_quality", "rf_configuration", "data_methodology"],
      "live_state_dependencies": ["interferenceAnalysis", "current selected cells", "current settings", "current project metadata"],
      "scenario_identity": "active project/scenario name",
      "scenario_revision_identity": "not required by export",
      "run_identity": "not persisted with export",
      "formats": ["markdown", "html", "print/pdf via browser"],
      "timestamp": "render-time local timestamp",
      "bytes_and_hash": "not recorded",
      "destination": "user download or browser print dialog"
    },
    {
      "id": "optimization-with-pareto",
      "scenario": "Network optimization response with baseline and Pareto frontier",
      "sections": ["executive_summary", "recommended_solution", "baseline_comparison", "optimization_tradeoffs", "rf_configuration", "data_methodology"],
      "live_state_dependencies": ["networkOptimization", "selectedNetworkTowers", "optimizationConfig", "selected Pareto state", "project metadata"],
      "scenario_identity": "active project/scenario name",
      "scenario_revision_identity": "live binding may expose current revision, but output does not freeze it",
      "run_identity": "optimization_run_id may appear in a table but is not a source binding",
      "formats": ["markdown", "html", "print/pdf via browser"],
      "timestamp": "render-time local timestamp",
      "bytes_and_hash": "not recorded",
      "destination": "user download or browser print dialog"
    },
    {
      "id": "baseline-vs-optimized",
      "scenario": "Current before/after comparison for an optimization result",
      "sections": ["executive_summary", "baseline_comparison", "recommended_solution", "evaluated_cell_changes"],
      "live_state_dependencies": ["comparison", "networkOptimization", "cellExplanation cache", "selected/current solution state"],
      "scenario_identity": "active project/scenario name",
      "scenario_revision_identity": "not frozen in a generated artifact",
      "run_identity": "not a durable multi-run relation",
      "formats": ["markdown", "html", "print/pdf via browser"],
      "timestamp": "render-time local timestamp",
      "bytes_and_hash": "not recorded",
      "destination": "user download or browser print dialog"
    }
  ],
  "baseline_findings": [
    "The report renderer already has a shared report model for Markdown and printable HTML, but the delivery path does not persist bytes.",
    "Current export is reconstructible from mutable React state rather than an explicit historical ScenarioRevision plus Run source.",
    "A report can show an optimization run identifier without making that Run the authoritative source for every section.",
    "There is no immutable artifact identity, content hash, availability status, corruption handling, or later-download path.",
    "The current report path does not silently rerun RF itself, but historical reconstruction was not available as an explicit product workflow."
  ],
  "validation_debt_before_change": {
    "command": "python3 docs/validate_docs.py",
    "result": "blocked: active python3 did not provide yaml",
    "documented_dependency": "docs/requirements.txt pins PyYAML 6.0.3",
    "resolution_used_for_7d": "temporary virtual environment using the documented hashed lockfile; repository dependency policy unchanged"
  }
}
