{
  "schema_version": "jp-election-analysis-graph-page.v1",
  "generated_at": "2026-06-13T13:05:14Z",
  "family_id": "graph",
  "page_id": "graph-family-standalone",
  "preferred_source_release_version": "2026-05-04-v051",
  "page": {
    "title": "JP Election Graph Family",
    "subtitle": "Standalone skeleton page for packet-driven graph analysis routes.",
    "route_path": "/graph.html",
    "status_class": "ready",
    "summary": "Municipality graph contract is verified first, while prefecture and national aggregate scope stay explicit so stale families are not silently rebuilt in the browser."
  },
  "page_assets": {
    "graph_page_path": "/analysis/graph-family/latest/graph-page.json",
    "selector_index_path": "/analysis/graph-family/latest/municipality-selector.json",
    "prefecture_stats_dir_path": "/analysis/graph-family/latest/prefecture-stats/by-prefecture",
    "prefecture_party_votes_dir_path": "/analysis/graph-family/latest/prefecture-party-votes/by-prefecture",
    "national_stats_path": "/analysis/graph-family/latest/national-stats.csv",
    "national_party_votes_path": "/analysis/graph-family/latest/national-party-votes.csv"
  },
  "contract": {
    "seed_spec_path": "specs/data-contracts/jp-election-db/schema/analysis-family-pipeline.md",
    "ratchet_rule": "resolve -> verify-authority -> build-family-packet -> compose-page -> mirror",
    "renderer_boundary": "Frontends read the graph-family packet and declared public keys only. They do not rebuild aggregate CSV families in-browser."
  },
  "frontends": {
    "current_adapters": [
      "lit-browser-shell"
    ],
    "planned_adapters": [
      "google-ai-studio",
      "external-frontend-adapter"
    ],
    "packet_transport": "json"
  },
  "expected_election_set_keys": [
    "20090830_hr",
    "20100711_hc",
    "20121216_hr",
    "20130721_hc",
    "20141214_hr",
    "20160710_hc",
    "20171022_hr",
    "20190721_hc",
    "20211031_hr",
    "20220710_hc",
    "20241027_hr",
    "20250720_hc",
    "20260208_hr"
  ],
  "datasets": [
    {
      "role": "selector_index",
      "dataset_id": "jp-election-db.derived-shape.indexes",
      "family": "indexes",
      "dataset": "municipality-selector",
      "source_release_version": "2026-05-04-v051",
      "source_layer": "Layer 3 Derived Shape",
      "current_yaml_public_key": "products/jp-election/derived/shape/indexes/municipality-selector/current.yaml",
      "entry_public_key": "products/jp-election/derived/shape/indexes/municipality-selector/latest/municipality-selector.json",
      "notes": "UI selector index for municipality graph routing and search."
    },
    {
      "role": "municipality_graph_catalog",
      "dataset_id": "jp-election-db.derived-shape.graph",
      "family": "graph",
      "dataset": "municipality-series",
      "source_release_version": "2026-05-04-v051",
      "source_layer": "Layer 3 Derived Shape",
      "current_yaml_public_key": "products/jp-election/derived/shape/graph/municipality-series/current.yaml",
      "entry_public_key": "products/jp-election/derived/shape/graph/municipality-series/latest/catalog.json",
      "notes": "Graph-ready municipality payloads for UI route-level rendering."
    },
    {
      "role": "municipality_stats",
      "dataset_id": "jp-election-db.derived-extraction-data",
      "family": "municipality-series",
      "dataset": "stats",
      "source_release_version": "2026-05-04-v051",
      "source_layer": "Layer 2 Release Facts",
      "current_yaml_public_key": "products/jp-election/derived/extraction/municipality-series/stats/current.yaml",
      "entry_public_key": "products/jp-election/derived/extraction/municipality-series/stats/latest/nationwide.csv",
      "notes": "User-facing municipality statistics series built deterministically from Layer 2 by-election facts. Designated-city ward rows are rolled up to parent-city selectors only when no exact parent selector row exists."
    },
    {
      "role": "municipality_party_votes",
      "dataset_id": "jp-election-db.derived-extraction-data",
      "family": "municipality-series",
      "dataset": "party-votes",
      "source_release_version": "2026-05-04-v051",
      "source_layer": "Layer 2 Release Facts",
      "current_yaml_public_key": "products/jp-election/derived/extraction/municipality-series/party-votes/current.yaml",
      "entry_public_key": "products/jp-election/derived/extraction/municipality-series/party-votes/latest/nationwide.csv",
      "notes": "User-facing municipality party-vote series built deterministically from Layer 2 by-election facts. Designated-city ward rows are rolled up to parent-city selectors only when no exact parent selector row exists."
    },
    {
      "role": "prefecture_stats",
      "dataset_id": "jp-election-db.derived-extraction-data",
      "family": "prefecture-series",
      "dataset": "stats",
      "source_release_version": "2026-05-04-v051",
      "source_layer": "Layer 2 Release Facts",
      "current_yaml_public_key": "products/jp-election/derived/extraction/prefecture-series/stats/current.yaml",
      "entry_public_key": "products/jp-election/derived/extraction/prefecture-series/stats/latest/nationwide.csv",
      "notes": "Non-canonical prefecture statistics series built deterministically from Layer 2 by-election facts."
    },
    {
      "role": "prefecture_party_votes",
      "dataset_id": "jp-election-db.derived-extraction-data",
      "family": "prefecture-series",
      "dataset": "party-votes",
      "source_release_version": "2026-05-04-v051",
      "source_layer": "Layer 2 Release Facts",
      "current_yaml_public_key": "products/jp-election/derived/extraction/prefecture-series/party-votes/current.yaml",
      "entry_public_key": "products/jp-election/derived/extraction/prefecture-series/party-votes/latest/nationwide.csv",
      "notes": "Non-canonical prefecture party-vote series built deterministically from Layer 2 by-election facts."
    },
    {
      "role": "national_party_votes",
      "dataset_id": "jp-election-db.derived-extraction-data",
      "family": "party-series",
      "dataset": "national-votes",
      "source_release_version": "2026-05-04-v051",
      "source_layer": "Layer 2 Release Facts",
      "current_yaml_public_key": "products/jp-election/derived/extraction/party-series/national-votes/current.yaml",
      "entry_public_key": "products/jp-election/derived/extraction/party-series/national-votes/latest/nationwide.csv",
      "notes": "Non-canonical national party-vote series built deterministically from Layer 2 by-election facts."
    }
  ],
  "scopes": [
    {
      "scope_id": "municipality",
      "status": "ready",
      "source_release_version": "2026-05-04-v051",
      "current_yaml_public_keys": [
        "products/jp-election/derived/shape/indexes/municipality-selector/current.yaml",
        "products/jp-election/derived/shape/graph/municipality-series/current.yaml",
        "products/jp-election/derived/extraction/municipality-series/stats/current.yaml",
        "products/jp-election/derived/extraction/municipality-series/party-votes/current.yaml"
      ],
      "entry_public_keys": [
        "products/jp-election/derived/shape/indexes/municipality-selector/latest/municipality-selector.json",
        "products/jp-election/derived/shape/graph/municipality-series/latest/catalog.json",
        "products/jp-election/derived/extraction/municipality-series/stats/latest/nationwide.csv",
        "products/jp-election/derived/extraction/municipality-series/party-votes/latest/nationwide.csv"
      ],
      "missing_election_set_keys": [],
      "notes": "Municipality graph packets can be rendered from packet-driven sources without in-browser CSV reconstruction."
    },
    {
      "scope_id": "prefecture",
      "status": "ready",
      "source_release_version": "2026-05-04-v051",
      "current_yaml_public_keys": [
        "products/jp-election/derived/extraction/prefecture-series/stats/current.yaml",
        "products/jp-election/derived/extraction/prefecture-series/party-votes/current.yaml"
      ],
      "entry_public_keys": [
        "products/jp-election/derived/extraction/prefecture-series/stats/latest/nationwide.csv",
        "products/jp-election/derived/extraction/prefecture-series/party-votes/latest/nationwide.csv"
      ],
      "missing_election_set_keys": [],
      "notes": "Prefecture scope matches municipality release coverage and can be referenced by future graph adapters."
    },
    {
      "scope_id": "national",
      "status": "ready",
      "source_release_version": "2026-05-04-v051",
      "current_yaml_public_keys": [
        "products/jp-election/derived/extraction/party-series/national-votes/current.yaml"
      ],
      "entry_public_keys": [
        "products/jp-election/derived/extraction/party-series/national-votes/latest/nationwide.csv"
      ],
      "missing_election_set_keys": [],
      "notes": "National aggregate scope is kept explicit so future frontends read a stable packet rather than rebuilding nationwide series in-browser."
    }
  ],
  "warnings": [],
  "repair_actions": [],
  "stages": [
    {
      "stage_id": "M1",
      "label": "resolve-current",
      "status": "pass",
      "detail": "Resolved shape and derived current.yaml entrypoints for municipality, prefecture, and national scopes."
    },
    {
      "stage_id": "M2",
      "label": "verify-municipality-core",
      "status": "pass",
      "detail": "Municipality selector/shape/derived are aligned on 2026-05-04-v051."
    },
    {
      "stage_id": "M3",
      "label": "verify-aggregate-coverage",
      "status": "pass",
      "detail": "Prefecture and national aggregate families match municipality expected election coverage."
    },
    {
      "stage_id": "M4",
      "label": "compose-page-packet",
      "status": "pass",
      "detail": "Composed standalone graph page packet for packet-driven frontend shells."
    },
    {
      "stage_id": "M5",
      "label": "mirror-public-site",
      "status": "pass",
      "detail": "Mirrored latest graph-family packet plus selector/aggregate assets into projects/jp-election-db/public-site/public/analysis/graph-family."
    }
  ]
}
