{
  "acceptance_criteria": [
    "Every r in R_cal finishes or is explicit HOLD",
    "Diagnosis remains sealed",
    "PTSD nuclei remain excluded",
    "Original ENSG row order unchanged",
    "No AST_MEMBERSHIP_FREEZE",
    "No single privileged resolution declared as biological truth",
    "Admissible set size is not 0 or 1, or the report is HOLD",
    "IMPLEMENTATION_CHECK records Pegasus with registered kwargs (no Scanpy substitute, no live library defaults)",
    "If r=0.4 or r=2.4 is admissible, report RANGE_BOUNDARY_NOT_BRACKETED and do not claim a complete range",
    "If any required grid point is unfinished, calibration is HOLD/INCOMPLETE and does not claim a complete range",
    "marker_separability is HOLD_NOT_RUN unless a frozen public panel identity/hash was resolved before freeze"
  ],
  "approval_requirement": {
    "authorized_scientific_step": "P2_RESOLUTION_CALIBRATION",
    "channel": "existing trusted approval envelope; not this webpage",
    "required": true
  },
  "contract_body_sha256": "8353201ade216c8ef00c103c596f87889e67a1392780977fbf5c6d029b1467b9",
  "contract_frozen_at": "2026-09-22T15:48:03.338125Z",
  "excluded_scope": "Do not run clustering GO, annotation, unblind, DE, pathway, PTSD inclusion, P1 C2 copy, OPEN_01 auto-approval, production ENSG remapping, or scientific GO change. Do not use diagnosis, AST count-max, Channel balance, P1 concordance, 241/DEG, or Hwang ST2 AST fraction as selection targets. Do not use P1 8-gene panel. Do not open the restricted diagnosis asset. UMAP is sanity only and does not define identity. Do not execute archived frozen contracts.",
  "execution_location": "cloud",
  "expected_outputs": [
    "calibration_metrics.tsv (r, seed, n_clusters, size stats, modularity, Channel entropy, technical Cramer's V, over-fragmentation/collapse flags)",
    "pairwise_ari.tsv (seed ARI and adjacent-r ARI)",
    "marker_separability.tsv = HOLD_NOT_RUN (no frozen public panel identity in Record Core)",
    "IMPLEMENTATION_CHECK.json (Pegasus required; n_top=2000, batch=Channel, n_components=50, Harmony Channel, K=100)",
    "UNIVERSE_CHECK.json (n=625220, n_channels=70, PTSD=false, diagnosis_columns=none)",
    "CALIBRATION_REPORT.md (admissible range only if complete and bracketed; else HOLD/INCOMPLETE and/or RANGE_BOUNDARY_NOT_BRACKETED; no AST membership; no final r)"
  ],
  "frozen_contract_hash": "8353201ade216c8ef00c103c596f87889e67a1392780977fbf5c6d029b1467b9",
  "holds": [
    "OPEN_01 UNION_REMOVE remains unapproved; this task does not decide Round-1 merge",
    "Public class-marker panel has no frozen Record Core identity/hash; marker_separability = HOLD_NOT_RUN; do not search or substitute P1 panels",
    "G2 specimen HOLD remains; this task is nucleus-level geometry only; 70 Channels are not 70 verified specimens",
    "RNA gene identity ledger is audit-only; no remap",
    "CALIBRATION/CLUSTERING/ANNOTATION Record Core flags remain NOT_AUTHORIZED until a later approved execution actually records them",
    "CSR matrix is CLOUD_AUTHORITATIVE; execution must be on the registered cloud host after approval",
    "Previous frozen calibration contracts are archived and not executable on this runtime"
  ],
  "kind": "PRE_EXECUTION_REVIEW",
  "loop": "0.3.2-rc4",
  "not_a_commit": true,
  "not_a_scientific_result": true,
  "objective": "Determine a phenotype-blind Leiden resolution range and selection basis for later P2 clustering. This freeze is not execution approval.",
  "output_assets": [
    {
      "asset_id": "P2_CALIBRATION_METRICS",
      "filename": "calibration_metrics.tsv",
      "required": true,
      "role": "calibration_metrics"
    },
    {
      "asset_id": "P2_CALIBRATION_PAIRWISE_ARI",
      "filename": "pairwise_ari.tsv",
      "required": true,
      "role": "pairwise_ari"
    },
    {
      "asset_id": "P2_CALIBRATION_IMPLEMENTATION_CHECK",
      "filename": "IMPLEMENTATION_CHECK.json",
      "required": true,
      "role": "implementation_check"
    },
    {
      "asset_id": "P2_CALIBRATION_UNIVERSE_CHECK",
      "filename": "UNIVERSE_CHECK.json",
      "required": true,
      "role": "universe_check"
    },
    {
      "asset_id": "P2_CALIBRATION_REPORT",
      "filename": "CALIBRATION_REPORT.md",
      "required": true,
      "role": "calibration_report"
    },
    {
      "asset_id": "P2_CALIBRATION_MARKER_SEPARABILITY",
      "filename": "marker_separability.tsv",
      "required": false,
      "role": "marker_separability"
    }
  ],
  "policy_summary": "execution_location=cloud; network=cloud_registered_ssh_only; tools=python, pegasus",
  "project_id": "P2_HWANG",
  "recording_effects": {
    "minimum": [
      "task_receipt"
    ],
    "on_failure": [
      "task_receipt"
    ],
    "on_success": [
      "task_receipt",
      "asset_registry"
    ]
  },
  "resolved_logical_assets": [
    {
      "access_mode": "cloud_live_hash",
      "alias_zh": "P2 MDD+CON 聚类队列（625,220 / 70 Channels）",
      "asset_id": "P2_MDD_CON_CLUSTERING_COHORT_625220",
      "bytes": 21882716,
      "execution_location": "cloud",
      "execution_site": "SSH_CLOUD",
      "object_identity": null,
      "object_identity_status": "not_applicable",
      "path_withheld": true,
      "restricted": false,
      "restricted_class": "none",
      "role": "analysis_cohort",
      "selected_replica": "SSH_CLOUD",
      "sha256": "ffc9dcc707452e5b49ebd12132d3b2bff2143b1871bb59bbb1f45536bcd1e3f4",
      "status": "MATCH"
    },
    {
      "access_mode": "cloud_live_hash",
      "alias_zh": "P2 计数矩阵（只公布逻辑名与哈希）",
      "asset_id": "P2_CSR_COUNT_MATRIX",
      "bytes": 5948837770,
      "execution_location": "cloud",
      "execution_site": "SSH_CLOUD",
      "object_identity": null,
      "object_identity_status": "not_applicable",
      "path_withheld": true,
      "restricted": false,
      "restricted_class": "none",
      "role": "count_matrix_csr",
      "selected_replica": "SSH_CLOUD",
      "sha256": "79876eda346f3a6c325a2cb33de9f35cfc2d276018b79462bd749a957b279922",
      "status": "MATCH"
    },
    {
      "access_mode": "cloud_live_hash",
      "alias_zh": "P2_RNA_CELLNAMES",
      "asset_id": "P2_RNA_CELLNAMES",
      "bytes": 24319646,
      "execution_location": "cloud",
      "execution_site": "SSH_CLOUD",
      "object_identity": null,
      "object_identity_status": "not_applicable",
      "path_withheld": true,
      "restricted": false,
      "restricted_class": "none",
      "role": "cell_id_order",
      "selected_replica": "SSH_CLOUD",
      "sha256": "3d274bcc16ef0d57014e4c2a47bf47e7f83bdf579f2fc8d8be349c17a9b7a9ba",
      "status": "MATCH"
    },
    {
      "access_mode": "cloud_live_hash",
      "alias_zh": "P2_RNA_GENENAMES",
      "asset_id": "P2_RNA_GENENAMES",
      "bytes": 3271355,
      "execution_location": "cloud",
      "execution_site": "SSH_CLOUD",
      "object_identity": null,
      "object_identity_status": "not_applicable",
      "path_withheld": true,
      "restricted": false,
      "restricted_class": "none",
      "role": "gene_id_order",
      "selected_replica": "SSH_CLOUD",
      "sha256": "ba827830af502d16a9aa4dbc80a31bb61bc5b7ec440698171d78bfc5af1fee62",
      "status": "MATCH"
    }
  ],
  "review_snapshot_id": "rev-0e53d62a-aadd-4bd0-bfeb-a4d10aab656c-8353201ade21",
  "review_state": "APPROVED",
  "reviewed_contract_hash": "8353201ade216c8ef00c103c596f87889e67a1392780977fbf5c6d029b1467b9",
  "schema": "p2.contract_review_projection.v1",
  "scientific_go": false,
  "scientific_scope": "Accepted clustering universe = 625220 MDD+CON nuclei / 70 Channels. Canonical clustering implementation is Pegasus only; Worker may not substitute Scanpy. Registered Pegasus kwargs: robust genes; log-norm with counts retained; HVG n_top=2000 batch=Channel; pca n_components=50; Harmony attrs=Channel; neighbors K=100; Leiden r from R_cal only. UMAP is sanity only. Grid R_cal = [0.4, 0.6, 1.0, 1.2, 1.6, 1.8, 2.4] with seeds [0, 1, 2]. G3b operational set {0.6, 1.2, 1.8} is included; author Leiden resolution remains NOT_FOUND. Admissible range uses operational guardrails (collapse n_clusters<7; over-fragment n_clusters>80 or >25% clusters size<50 or seed-ARI median<0.70). If lowest r=0.4 or highest r=2.4 remains admissible, mark RANGE_BOUNDARY_NOT_BRACKETED and do not claim a complete admissible range; recommend a later grid-extension contract. If any required grid point is unfinished, report completed diagnostics only and mark the calibration HOLD/INCOMPLETE; do not claim a complete admissible range. Do not declare one biological true resolution. Do not assign class labels. Marker-panel gaps are diagnostic distributions only (no GAP_WEAK cutoff) and run only if a frozen public panel identity/hash is resolved; otherwise HOLD_NOT_RUN.",
  "scientific_step": "P2_RESOLUTION_CALIBRATION",
  "task_id": "0e53d62a-aadd-4bd0-bfeb-a4d10aab656c",
  "task_title": "P2 resolution calibration (phenotype-blind, MDD+CON 625220)",
  "test_only": false,
  "webpage_is_not_scientific_authorization": true
}
