{
  "schema": "DAT008_LAB_MODEL_CONTRACT_v1",
  "fixture": "documentation_catalog_fts",
  "objective": "Build and falsify one bounded PostgreSQL full-text search pipeline and separate database mechanics from labelled relevance judgment.",
  "required_dimensions": [
    "config_normalization",
    "document_query_types",
    "query_parsers",
    "ranking_boundary",
    "gin_index",
    "search_evaluation"
  ],
  "starter_decisions_left_open": [
    "text_search_configuration",
    "title_body_weighting",
    "query_parser",
    "gin_index_decision",
    "acceptance_decision"
  ],
  "must_capture": [
    "normalized_document_vector",
    "parsed_query",
    "match_observation",
    "rank_observation",
    "labelled_relevance_comparison",
    "hard_negative_comparison",
    "index_definition",
    "explain_observation",
    "failure_probe",
    "runtime_binding",
    "runtime_receipt_provenance",
    "changed_context_transfer",
    "residual_limit",
    "cleanup_status"
  ],
  "must_not_claim": [
    "full_text_search_equals_semantic_search",
    "rank_is_ground_truth",
    "gin_must_be_used_by_planner",
    "default_config_is_automatically_correct",
    "runtime_evidence_without_execution"
  ],
  "safety": "disposable local PostgreSQL resources only; no production database or external service account",
  "runtime_execution_gate": {
    "runner": "learner/src/run_postgres.py",
    "confirmation_env": "MAKNOW_DAT008_CONFIRM_DISPOSABLE=YES",
    "database_url_env": "MAKNOW_DAT008_DATABASE_URL",
    "database_name_prefix": "maknow_dat008_",
    "host_class": "LOOPBACK_ONLY",
    "postgresql_major": "18",
    "dependency_installation_forbidden": true,
    "cleanup_required": true,
    "runtime_claim_requires": "real psql execution + evidence markers + cleanup success"
  }
}
