{
  "schema": "T_GPT_METRICS_V0_8_7",
  "version": "0.8.7",
  "date": "2026-09-13",
  "status": "P0_SAFETY_REPAIR / EXTERNAL_REAUDIT_REQUIRED / CONFIRMATORY_CLOSED",
  "supersedes_primary_path": "metrics-v0.8.6.json",
  "preserves_history": true,
  "scope": "P0 safety repair: conditional semantic shift among frozen-codebook-mappable outputs, explicit mapping mass, empirical sharp partial-identification bounds separated from conservative finite-sample outer identification regions, SHA-bound relevance/codebooks, family-stratified attrition/inference, paired recovery, and FPR-gated aggregation. No metric measures T^, a remainder, or a latent total field.",
  "estimands": {
    "mapping_shift": "K_X=N_known_X/N_total_X; missing mass M_X=1-K_X",
    "semantic_conditional_shift": "q_X(c)=n_X(c)/N_known_X over frozen known clusters",
    "joint_observable_shift": "p_X(c)=n_X(c)/N_total_X plus explicit UNMAPPED/UNRESOLVED mass; descriptive only",
    "non_identity": "semantic conditional shift != latent total semantic shift"
  },
  "mapping_engineering_defaults": {
    "minimum_known_semantic_mass": 0.8,
    "maximum_pairwise_mapping_gap": 0.05,
    "minimum_n_per_arm": 32,
    "status": "PROVISIONAL_ENGINEERING_GUARDRAILS_TO_BE_CALIBRATED_IN_P0",
    "sensitivity_profiles": [
      {"name":"LENIENT","min_K":0.75,"max_gap":0.07},
      {"name":"PRIMARY","min_K":0.8,"max_gap":0.05},
      {"name":"STRICT","min_K":0.85,"max_gap":0.03}
    ]
  },
  "mnar_partial_identification": {
    "purpose": "Prevent MNAR and sampling noise from being silently interpreted as latent-total semantic contraction.",
    "missing_mass": "UNMAPPED + UNRESOLVED",
    "empirical_identification": "Sharp worst-case interval conditional on observed empirical proportions; descriptive identification object only.",
    "sampling_outer_region": {
      "method": "simultaneous Hoeffding bounds over each relevant mapped-cluster probability plus missing mass in each arm, union-bounded across A/B; directional functional expanded by its Lipschitz envelope",
      "alpha": 0.05,
      "coverage_target": 0.95,
      "status": "CONSERVATIVE_FINITE_SAMPLE_OUTER_REGION_NOT_SHARP",
      "p0_zero_exclusion": "NOT_AUTHORIZED"
    },
    "confirmatory_total_semantic_claim": "CLOSED. v0.8.7 does not turn empirical identification bounds or the P0 safety outer region into confirmatory inference."
  },
  "unmapped_affinity": {
    "status": "P0_DIAGNOSTIC_ONLY",
    "record": "nearest_frozen_cluster_or_NONE after final OUTPUT_ASSIGNMENT=UNMAPPED",
    "rule": "Never remaps UNMAPPED and never enters a primary endpoint. Used only to diagnose cluster-selective missingness and calibrate sensitivity."
  },
  "semantic_shift": {
    "primary_planning_endpoint": "SEMANTIC_DEFICIT_EXCESS_CONDITIONAL",
    "always_report": "SEMANTIC_EXPANSION_EXCESS_CONDITIONAL, K by arm, unconditional descriptive shift, partial-identification interval",
    "null_calibration": "Permutation of known mapped labels or equal-N A-prime replicate; mapping is handled separately",
    "total_semantic_claim": "forbidden in v0.8.7 confirmatory path"
  },
  "recovery": {
    "primary_planning_endpoint": "RECOVERY_LIFT_CONDITIONAL",
    "mapping_gate": "RECOVERY/CONTROL K>=0.80 and gap<=0.05",
    "complete_case_rule": "Complete-case sensitivity may be reported only when the recovery/control mapping gate passes; never when it fails",
    "interpretation": "Conditional on frozen-codebook-mappable outputs"
  },
  "aggregation": {
    "primary": "AGG_COVERAGE_ADJUSTED_PRIMARY_NEAR_FPR",
    "formula": "(AGG_COVERAGE_RAW-FPR_NEAR)/(1-FPR_NEAR)",
    "global_fpr_gate": 0.25,
    "near_fpr_gate": 0.25,
    "distractors": {
      "minimum_total":24,
      "minimum_each_stratum":{"NEAR":8,"MID":8,"FAR":8},
      "same_set_across_aggregators":true,
      "disjoint_ids_from_true_pool":true
    },
    "token_use":"0.80*cap <= actual_output_tokens <= cap",
    "sensitivity_fpr_thresholds":[0.15,0.2,0.25,0.3],
    "status":"FPR thresholds are engineering defaults to be calibrated in P0",
    "failed_gate_output_rule":"If global or NEAR FPR gate fails, primary and all adjusted-coverage sensitivity scores are suppressed; raw recall/FPR remain diagnostics only."
  },
  "inference": {
    "within_task":"design-matched permutation/randomization for conditional estimands",
    "across_tasks":"fixed-family stratified bootstrap; resample tasks within each of five preregistered families and equal-weight family means",
    "minimum_valid_tasks":30,
    "max_measurement_insufficient_fraction":0.4,
    "global_failure":"if >40% registered task cells are measurement-insufficient, generalized claim is unavailable",
    "reporting":"all exclusions and reasons must be listed; no silent complete-case generalization",
    "max_family_measurement_insufficient_fraction":0.4,
    "minimum_valid_tasks_per_family":6,
    "family_failure":"if any fixed family loses >40% of registered cells OR has <6 valid tasks, generalized claim is unavailable",
    "identification_across_tasks":"empirical and sampling-aware total-semantic identification objects are propagated only as P0 diagnostic fixed-family summaries; claim_available=false."
  },
  "meoi_artifact": {
    "path":"minimum-effects-v0.8.6.json",
    "sha256":"41ba4a0143984ec6127c23ac161c4d516cd561833eaf6a99e055c0872334b30",
    "declared_before_p0":true
  },
  "primary_endpoint_by_experiment": {
    "E1_STAGE":"SEMANTIC_DEFICIT_EXCESS_CONDITIONAL (planning only; latent-total claim closed)",
    "E2_RECOVERY":"RECOVERY_LIFT_CONDITIONAL",
    "E3_TOPOLOGY":"AGG_COVERAGE_ADJUSTED_PRIMARY_NEAR_FPR",
    "E4_R_META":"DEFERRED"
  },
  "codebook_relevance_binding": {
    "rule":"relevance is derived from frozen_codebook.clusters[].relevance; a free relevance field may not diverge",
    "task_binding":"each task carries codebook_sha256 over canonical {task_id,task_version,clusters[cluster_id,definition,relevance]}",
    "batch_binding":"analysis requires frozen_codebook_hashes for every task plus frozen_codebook_hashes_sha256",
    "trust_boundary":"freeze/P0 manifest must externally freeze the hash-map digest; the analysis engine verifies runtime consistency against it."
  }
}
