{
  "contract": "conceptual-join-plan-v1",
  "status": "design_only",
  "execution_enabled": false,
  "required": ["question", "source_revisions", "source_grains", "target_grain", "key_mapping", "crosswalk_versions", "period_alignment", "population_alignment", "cardinality", "aggregation_order", "missingness_policy", "reuse_compatibility", "query_cost_limit", "validation_receipt"],
  "cardinality": ["one_to_one", "one_to_many", "many_to_many_with_explicit_bridge"],
  "checks": [
    "Verify uniqueness on the declared key before each join",
    "Resolve identifier and geography vintage changes using a versioned crosswalk",
    "Measure unmatched keys and explain exclusions",
    "Compare pre-join and post-join row counts and totals",
    "Aggregate each source to the intended grain before joining where necessary",
    "Prevent double counting from many-to-many fanout",
    "Do not multiply unrelated population rates into a synthetic outcome",
    "Keep estimates, observations and projections distinct",
    "Preserve suppression and missingness instead of zero-filling",
    "Dry-run query cost and require a bounded execution budget",
    "Check access, reuse terms and sensitive-data boundaries independently"
  ],
  "boundary": "Conceptual keys are not verified database column names. This contract authorizes no query, ingestion, provider call, publication or personal-data collection."
}
