{
  "format": "emberscope_build_structure_public/v1",
  "source_schema_version": "emberscope_build_structure/v1",
  "graph_id": "emberscope-static-site-build-v1",
  "title": "EmberScope static-site build structure",
  "summary": "Source files, deterministic renderers, generated website artifacts, and the GitHub Actions deploy path for the EmberScope static site.",
  "source_hash_sha256": "09f890fa0c45cc4bae5272abf402f3044fff244e0eafe80062fabeeaec3cfb64",
  "nodes": [
    {
      "id": "todo_md",
      "lane": "source",
      "label": "RFS TODO",
      "path": "projects/rural-fire-service-camera/TODO.md",
      "summary": "Tracked project task table and RFS bookkeeping."
    },
    {
      "id": "diary_md",
      "lane": "source",
      "label": "Daily diary",
      "path": "projects/rural-fire-service-camera/daily-diary/*.md",
      "summary": "Dated automation-progress notes for the public work diary."
    },
    {
      "id": "design_spec",
      "lane": "source",
      "label": "Design source spec",
      "path": "projects/rural-fire-service-camera/designs/emberscope-starter-freeform.v1.json",
      "summary": "Component-level optical source of truth for the earlier starter-freeform packaging study."
    },
    {
      "id": "optimized_design_spec",
      "lane": "source",
      "label": "Optimized design spec",
      "path": "projects/rural-fire-service-camera/designs/emberscope-four-mirror-optimized.v1.json",
      "summary": "Canonical optimized four-mirror prescription, the current optical design of record."
    },
    {
      "id": "multi_mirror_sources",
      "lane": "source",
      "label": "Architecture seeds",
      "path": "telescope_explorer/src/architecture.py",
      "summary": "Four-, five-, six-, and seven-mirror seed builders plus shared trace primitives."
    },
    {
      "id": "build_structure_spec",
      "lane": "source",
      "label": "Build graph spec",
      "path": "projects/rural-fire-service-camera/build-structure.v1.json",
      "summary": "This build-map data source."
    },
    {
      "id": "static_site_source",
      "lane": "source",
      "label": "Static site tree",
      "path": "site/",
      "summary": "Hand-authored pages, styles, images, and generated site artifacts before final packaging."
    },
    {
      "id": "todo_renderer",
      "lane": "program",
      "label": "render_todo_page.py",
      "path": "projects/rural-fire-service-camera/scripts/render_todo_page.py",
      "summary": "Renders TODO.md into an internal HTML status page."
    },
    {
      "id": "diary_renderer",
      "lane": "program",
      "label": "render_diary_feed.py",
      "path": "projects/rural-fire-service-camera/scripts/render_diary_feed.py",
      "summary": "Builds the work diary page and RSS/feed XML files."
    },
    {
      "id": "design_renderer",
      "lane": "program",
      "label": "rfs_design_source_of_truth.py",
      "path": "projects/rural-fire-service-camera/scripts/rfs_design_source_of_truth.py",
      "summary": "Exports source-hashed design, validation, CAD, Blender, layout, and review-package files."
    },
    {
      "id": "optimized_design_exporter",
      "lane": "program",
      "label": "rfs_optimized_design_exports.py",
      "path": "projects/rural-fire-service-camera/scripts/rfs_optimized_design_exports.py",
      "summary": "Re-traces the optimized prescription and exports its layout SVG, CAD, Blender geometry/scene, validation gates, and manifest."
    },
    {
      "id": "blender_site_renderer",
      "lane": "program",
      "label": "render_blender_site_assets.sh",
      "path": "scripts/render_blender_site_assets.sh",
      "summary": "Runs Blender headless to render the site-facing optimized-train PNGs from the generated geometry and scene."
    },
    {
      "id": "multi_mirror_renderer",
      "lane": "program",
      "label": "rfs_multi_mirror_candidate_checkpoint.py",
      "path": "projects/rural-fire-service-camera/scripts/rfs_multi_mirror_candidate_checkpoint.py",
      "summary": "Regenerates the superseded multi-mirror screening-history checkpoint and CSV/JSON artifacts."
    },
    {
      "id": "fleet_coverage_renderer",
      "lane": "program",
      "label": "rfs_fleet_coverage_model.py",
      "path": "projects/rural-fire-service-camera/scripts/rfs_fleet_coverage_model.py",
      "summary": "Recalculates per-drone fixed-wing coverage and payload cost from the current optics assumptions."
    },
    {
      "id": "coverage_sizing_renderer",
      "lane": "program",
      "label": "rfs_coverage_sizing_grid.py",
      "path": "projects/rural-fire-service-camera/scripts/rfs_coverage_sizing_grid.py",
      "summary": "Converts per-drone coverage into target-area, payload-count, and max-unit-cost decision thresholds."
    },
    {
      "id": "cots_payload_renderer",
      "lane": "program",
      "label": "rfs_cots_payload_screen.py",
      "path": "projects/rural-fire-service-camera/scripts/rfs_cots_payload_screen.py",
      "summary": "Screens COTS and camera-only payload paths against the 3 cm target, one-hour-revisit, and quote-ceiling gates."
    },
    {
      "id": "cots_quote_renderer",
      "lane": "program",
      "label": "rfs_cots_quote_packet.py",
      "path": "projects/rural-fire-service-camera/scripts/rfs_cots_quote_packet.py",
      "summary": "Turns the COTS payload screen into quote-request fields, candidate priority, and acceptance gates for RFS-011."
    },
    {
      "id": "cots_quote_comparison_renderer",
      "lane": "program",
      "label": "rfs_cots_quote_comparison.py",
      "path": "projects/rural-fire-service-camera/scripts/rfs_cots_quote_comparison.py",
      "summary": "Turns the COTS quote packet into a quote-comparison register, hard-stop scorecard, and decision rules for RFS-011."
    },
    {
      "id": "requirements_closeout_renderer",
      "lane": "program",
      "label": "rfs_requirements_closeout_checklist.py",
      "path": "projects/rural-fire-service-camera/scripts/rfs_requirements_closeout_checklist.py",
      "summary": "Combines the mission, coverage, and COTS evidence into an RFS-011 stakeholder closeout checklist."
    },
    {
      "id": "requirements_answer_renderer",
      "lane": "program",
      "label": "rfs_requirements_answer_pack.py",
      "path": "projects/rural-fire-service-camera/scripts/rfs_requirements_answer_pack.py",
      "summary": "Turns the RFS-011 closeout decisions into a stakeholder answer sheet with selectable options and evidence links."
    },
    {
      "id": "requirements_signoff_renderer",
      "lane": "program",
      "label": "rfs_requirements_signoff_matrix.py",
      "path": "projects/rural-fire-service-camera/scripts/rfs_requirements_signoff_matrix.py",
      "summary": "Maps likely RFS-011 stakeholder answer sets to closeout readiness, COTS quote work, prescription restart, or replanning."
    },
    {
      "id": "requirements_evidence_ledger_renderer",
      "lane": "program",
      "label": "rfs_requirements_evidence_ledger.py",
      "path": "projects/rural-fire-service-camera/scripts/rfs_requirements_evidence_ledger.py",
      "summary": "Joins RFS-011 stakeholder answer fields and COTS quote score gates into a current evidence intake ledger."
    },
    {
      "id": "build_structure_renderer",
      "lane": "program",
      "label": "render_build_structure.py",
      "path": "projects/rural-fire-service-camera/scripts/render_build_structure.py",
      "summary": "Turns this build-graph source into the public SVG and JSON build-map artifacts."
    },
    {
      "id": "static_builder",
      "lane": "program",
      "label": "build_static_site.sh",
      "path": "scripts/build_static_site.sh",
      "summary": "Runs the renderers, copies site/ into dist/, and writes build.json."
    },
    {
      "id": "todo_page",
      "lane": "output",
      "label": "Internal TODO HTML",
      "path": "site/rfs-todo.html",
      "summary": "Generated local/internal task page. It is intentionally removed from public dist/."
    },
    {
      "id": "diary_outputs",
      "lane": "output",
      "label": "Diary + feeds",
      "path": "site/diary.html, site/rss.xml, site/feed.xml",
      "summary": "Public work diary page and subscription feeds."
    },
    {
      "id": "design_source_outputs",
      "lane": "output",
      "label": "Design-source artifacts",
      "path": "site/assets/rfs/design-source/*",
      "summary": "Source JSON, validation gates, layout SVG, Blender payload/script, CAD, and manifest."
    },
    {
      "id": "blender_render_outputs",
      "lane": "output",
      "label": "Blender render PNGs",
      "path": "site/assets/rfs/four-mirror-train-*.png",
      "summary": "Hero, side, and top PNG renders regenerated during the raksasa deploy build."
    },
    {
      "id": "review_package_outputs",
      "lane": "output",
      "label": "Review-package artifacts",
      "path": "site/assets/rfs/review-package/*",
      "summary": "Stakeholder-facing source-derived review manifest, CAD, layout, Blender, metrics, and prescription files."
    },
    {
      "id": "multi_mirror_outputs",
      "lane": "output",
      "label": "Multi-mirror checkpoint",
      "path": "site/multi-mirror-candidates.html, site/assets/rfs/multi-mirror/*",
      "summary": "Public checkpoint page plus branch metrics, focus sweeps, and prescription-step CSV/JSON files."
    },
    {
      "id": "fleet_coverage_outputs",
      "lane": "output",
      "label": "Payload capability page",
      "path": "site/fleet-coverage.html, site/assets/rfs/fleet-coverage.json",
      "summary": "Public per-drone fixed-wing coverage, altitude, platform, and payload-cost artifact."
    },
    {
      "id": "coverage_sizing_outputs",
      "lane": "output",
      "label": "Coverage sizing grid",
      "path": "site/coverage-sizing-grid.html, site/assets/rfs/coverage-sizing-grid.json",
      "summary": "Public RFS-011 grid translating target area into payload count and unit-cost thresholds."
    },
    {
      "id": "cots_payload_outputs",
      "lane": "output",
      "label": "COTS payload screen",
      "path": "site/cots-fleet-screen.html, site/assets/rfs/cots-fleet-screen.json",
      "summary": "Public RFS-011 screen for COTS physics, raw-data, integration, and quote gates."
    },
    {
      "id": "cots_quote_outputs",
      "lane": "output",
      "label": "COTS quote packet",
      "path": "site/cots-quote-packet.html, site/assets/rfs/cots-quote-packet.json",
      "summary": "Public RFS-011 packet for vendor quote fields, evidence gates, and candidate quote order."
    },
    {
      "id": "cots_quote_comparison_outputs",
      "lane": "output",
      "label": "COTS quote comparison",
      "path": "site/cots-quote-comparison.html, site/assets/rfs/cots-quote-comparison.json",
      "summary": "Public RFS-011 register for scoring returned COTS quotes against hard stops, weighted gates, and branch decisions."
    },
    {
      "id": "requirements_closeout_outputs",
      "lane": "output",
      "label": "Requirements closeout checklist",
      "path": "site/requirements-closeout.html, site/assets/rfs/requirements-closeout.json",
      "summary": "Public RFS-011 checklist naming locked decisions, open stakeholder asks, and closeout criteria."
    },
    {
      "id": "requirements_answer_outputs",
      "lane": "output",
      "label": "Requirements answer pack",
      "path": "site/requirements-answer-pack.html, site/assets/rfs/requirements-answer-pack.json",
      "summary": "Public RFS-011 answer sheet for recording target area, altitude, payload branch, airframe class, and sign-off authority."
    },
    {
      "id": "requirements_signoff_outputs",
      "lane": "output",
      "label": "Requirements sign-off matrix",
      "path": "site/requirements-signoff-matrix.html, site/assets/rfs/requirements-signoff-matrix.json",
      "summary": "Public RFS-011 matrix mapping answer patterns to closeout, procurement, optics, and replan consequences."
    },
    {
      "id": "requirements_evidence_ledger_outputs",
      "lane": "output",
      "label": "Requirements evidence ledger",
      "path": "site/requirements-evidence-ledger.html, site/assets/rfs/requirements-evidence-ledger.json",
      "summary": "Public RFS-011 ledger tracking missing stakeholder decisions, vendor quote evidence, validation samples, and final sign-off."
    },
    {
      "id": "build_structure_outputs",
      "lane": "output",
      "label": "Build-map artifacts",
      "path": "site/assets/rfs/build-structure/*",
      "summary": "Public SVG visualization and JSON graph data for this build structure section."
    },
    {
      "id": "dist_package",
      "lane": "output",
      "label": "Deployable dist/",
      "path": "dist/",
      "summary": "Final static-site directory, including build.json, that the deployment job uploads."
    },
    {
      "id": "deploy_workflow",
      "lane": "deploy",
      "label": "Deploy EmberScope",
      "path": ".github/workflows/deploy.yml",
      "summary": "GitHub Actions workflow on the raksasa self-hosted runner."
    },
    {
      "id": "merah_site",
      "lane": "deploy",
      "label": "merah web root",
      "path": "https://emberscope.symmachus.org/",
      "summary": "Public EmberScope static site served after the workflow rsyncs dist/ to merah."
    }
  ],
  "edges": [
    {
      "from": "todo_md",
      "to": "todo_renderer",
      "label": "parse table"
    },
    {
      "from": "todo_renderer",
      "to": "todo_page",
      "label": "write HTML"
    },
    {
      "from": "diary_md",
      "to": "diary_renderer",
      "label": "parse markdown"
    },
    {
      "from": "diary_renderer",
      "to": "diary_outputs",
      "label": "write page + feeds"
    },
    {
      "from": "design_spec",
      "to": "design_renderer",
      "label": "source hash"
    },
    {
      "from": "design_renderer",
      "to": "design_source_outputs",
      "label": "export"
    },
    {
      "from": "design_renderer",
      "to": "review_package_outputs",
      "label": "compat package"
    },
    {
      "from": "optimized_design_spec",
      "to": "optimized_design_exporter",
      "label": "source hash"
    },
    {
      "from": "optimized_design_exporter",
      "to": "design_source_outputs",
      "label": "export"
    },
    {
      "from": "optimized_design_exporter",
      "to": "blender_site_renderer",
      "label": "geometry"
    },
    {
      "from": "static_builder",
      "to": "optimized_design_exporter",
      "label": "run"
    },
    {
      "from": "static_builder",
      "to": "blender_site_renderer",
      "label": "raksasa flag"
    },
    {
      "from": "blender_site_renderer",
      "to": "blender_render_outputs",
      "label": "render PNGs"
    },
    {
      "from": "multi_mirror_sources",
      "to": "multi_mirror_renderer",
      "label": "seed traces"
    },
    {
      "from": "multi_mirror_renderer",
      "to": "multi_mirror_outputs",
      "label": "metrics"
    },
    {
      "from": "fleet_coverage_renderer",
      "to": "fleet_coverage_outputs",
      "label": "coverage"
    },
    {
      "from": "fleet_coverage_renderer",
      "to": "coverage_sizing_renderer",
      "label": "model inputs"
    },
    {
      "from": "coverage_sizing_renderer",
      "to": "coverage_sizing_outputs",
      "label": "decision grid"
    },
    {
      "from": "fleet_coverage_renderer",
      "to": "cots_payload_renderer",
      "label": "budget + coverage math"
    },
    {
      "from": "cots_payload_renderer",
      "to": "cots_payload_outputs",
      "label": "screen"
    },
    {
      "from": "cots_payload_renderer",
      "to": "cots_quote_renderer",
      "label": "screen rows"
    },
    {
      "from": "cots_quote_renderer",
      "to": "cots_quote_outputs",
      "label": "quote packet"
    },
    {
      "from": "cots_quote_renderer",
      "to": "cots_quote_comparison_renderer",
      "label": "quote packet"
    },
    {
      "from": "cots_quote_comparison_renderer",
      "to": "cots_quote_comparison_outputs",
      "label": "scorecard"
    },
    {
      "from": "coverage_sizing_renderer",
      "to": "requirements_closeout_renderer",
      "label": "decision grid"
    },
    {
      "from": "cots_payload_renderer",
      "to": "requirements_closeout_renderer",
      "label": "quote gate"
    },
    {
      "from": "requirements_closeout_renderer",
      "to": "requirements_closeout_outputs",
      "label": "checklist"
    },
    {
      "from": "requirements_closeout_renderer",
      "to": "requirements_answer_renderer",
      "label": "open decisions"
    },
    {
      "from": "coverage_sizing_renderer",
      "to": "requirements_answer_renderer",
      "label": "answer options"
    },
    {
      "from": "cots_payload_renderer",
      "to": "requirements_answer_renderer",
      "label": "quote options"
    },
    {
      "from": "requirements_answer_renderer",
      "to": "requirements_answer_outputs",
      "label": "answer sheet"
    },
    {
      "from": "requirements_answer_renderer",
      "to": "requirements_signoff_renderer",
      "label": "answer sets"
    },
    {
      "from": "requirements_signoff_renderer",
      "to": "requirements_signoff_outputs",
      "label": "readiness matrix"
    },
    {
      "from": "requirements_answer_renderer",
      "to": "requirements_evidence_ledger_renderer",
      "label": "answer fields"
    },
    {
      "from": "requirements_signoff_renderer",
      "to": "requirements_evidence_ledger_renderer",
      "label": "closeout scenarios"
    },
    {
      "from": "cots_quote_comparison_renderer",
      "to": "requirements_evidence_ledger_renderer",
      "label": "score gates"
    },
    {
      "from": "requirements_evidence_ledger_renderer",
      "to": "requirements_evidence_ledger_outputs",
      "label": "intake ledger"
    },
    {
      "from": "build_structure_spec",
      "to": "build_structure_renderer",
      "label": "graph data"
    },
    {
      "from": "build_structure_renderer",
      "to": "build_structure_outputs",
      "label": "SVG + JSON"
    },
    {
      "from": "static_builder",
      "to": "todo_renderer",
      "label": "run"
    },
    {
      "from": "static_builder",
      "to": "diary_renderer",
      "label": "run"
    },
    {
      "from": "static_builder",
      "to": "multi_mirror_renderer",
      "label": "run"
    },
    {
      "from": "static_builder",
      "to": "fleet_coverage_renderer",
      "label": "run"
    },
    {
      "from": "static_builder",
      "to": "coverage_sizing_renderer",
      "label": "run"
    },
    {
      "from": "static_builder",
      "to": "cots_payload_renderer",
      "label": "run"
    },
    {
      "from": "static_builder",
      "to": "cots_quote_renderer",
      "label": "run"
    },
    {
      "from": "static_builder",
      "to": "cots_quote_comparison_renderer",
      "label": "run"
    },
    {
      "from": "static_builder",
      "to": "requirements_closeout_renderer",
      "label": "run"
    },
    {
      "from": "static_builder",
      "to": "requirements_answer_renderer",
      "label": "run"
    },
    {
      "from": "static_builder",
      "to": "requirements_signoff_renderer",
      "label": "run"
    },
    {
      "from": "static_builder",
      "to": "requirements_evidence_ledger_renderer",
      "label": "run"
    },
    {
      "from": "static_builder",
      "to": "design_renderer",
      "label": "run"
    },
    {
      "from": "static_builder",
      "to": "build_structure_renderer",
      "label": "run"
    },
    {
      "from": "static_site_source",
      "to": "static_builder",
      "label": "copy"
    },
    {
      "from": "blender_render_outputs",
      "to": "dist_package",
      "label": "copy"
    },
    {
      "from": "static_builder",
      "to": "dist_package",
      "label": "package"
    },
    {
      "from": "dist_package",
      "to": "deploy_workflow",
      "label": "artifact tree"
    },
    {
      "from": "deploy_workflow",
      "to": "merah_site",
      "label": "rsync + verify"
    }
  ]
}
