{
  "audit": "fraud_screening",
  "case_id": "fraud-screening-post-authorisation-dispute",
  "evidence_bundle": {
    "ablation_contrast": {
      "conclusion": "The legitimate feature has the larger ablation delta, yet Hindsight clears it.",
      "leaked_feature": 0.21,
      "safe_exceeds_leaked_by": 0.03,
      "safe_feature": 0.24
    },
    "audit_config": {
      "available_column": "available_at",
      "name": "fraud_screening",
      "post_outcome_table": "disputes_after_authorisation",
      "prediction_column": "prediction_time",
      "remediation_sql": "examples/fraud_screening_remediation.sql",
      "scenario": "scenarios/fraud_screening/scenario.json",
      "subject": "leaked",
      "synthetic": true,
      "target_urn": null,
      "transformation_sql": "examples/fraud_screening_leaky.sql"
    },
    "case_id": "fraud-screening-post-authorisation-dispute",
    "checks": {
      "no_catalog_mutation_without_approval": true,
      "point_in_time_confirmation_passed": false,
      "proposed_remediation_verifies_safe": true,
      "safe_control_cleared": true,
      "transformation_violation_proven": true
    },
    "confirmation_route": "deterministic_sql_time_proof",
    "demo_disclosures": [
      "The deterministic example and point-in-time recording are independent confirmation routes for the same planted defect mechanism.",
      "The planted leak is total by construction, so observed AUC 1.000000 is expected; real-world leakage can be subtler.",
      "The 50% majority-loss threshold is a visible demo policy, not a universal scientific constant, and it cannot confirm leakage without directional post-outcome lineage plus an availability-time violation."
    ],
    "exit_code": 3,
    "point_in_time_verdict": "high_confidence",
    "release_decision": "block",
    "remediation": {
      "path": "examples/fraud_screening_remediation.sql",
      "sha256": "553c4efe262374dc95bf31755aaab021b89001c6da171d724300962198ae4fb7",
      "verification": {
        "available_column": "available_at",
        "cutoff_predicates": [
          "evt.available_at <= src.prediction_time"
        ],
        "exit_code": 0,
        "post_outcome_table": "disputes_after_authorisation",
        "prediction_column": "prediction_time",
        "reason": "A directional availability cutoff protects the post-outcome source.",
        "referenced_tables": [
          "disputes_after_authorisation",
          "transactions_at_decision_time"
        ],
        "status": "safe"
      }
    },
    "schema_version": 1,
    "sql_verification": {
      "available_column": "available_at",
      "cutoff_predicates": [],
      "exit_code": 3,
      "post_outcome_table": "disputes_after_authorisation",
      "prediction_column": "prediction_time",
      "reason": "The post-outcome source is referenced, but no directional available_at <= prediction_time cutoff was found. The transformation does not reference available_at.",
      "referenced_tables": [
        "disputes_after_authorisation",
        "transactions_at_decision_time"
      ],
      "status": "violation"
    },
    "trace": [
      {
        "reason": "The post-outcome source is referenced, but no directional available_at <= prediction_time cutoff was found. The transformation does not reference available_at.",
        "status": "violation",
        "step": "transformation_verification"
      },
      {
        "excluded_post_cutoff_records": 4000,
        "status": "failed",
        "step": "point_in_time_reconstruction"
      },
      {
        "reason": "The transformation joins a post-outcome source with no availability cutoff, which proves post-cutoff information entered the feature.",
        "status": "confirmed",
        "step": "deterministic_verdict"
      },
      {
        "ablation_delta": 0.279669,
        "status": "clear_for_release",
        "step": "safe_control"
      },
      {
        "status": "awaiting_human_approval",
        "step": "writeback"
      }
    ],
    "validation": {
      "checks": {
        "leaked_feature_advantage_collapsed": false,
        "post_cutoff_records_were_excluded": true,
        "safe_feature_advantage_persisted": true,
        "safe_feature_has_large_ablation_delta": true,
        "safe_feature_is_point_in_time_stable": true
      },
      "config_sha256": "f2867a2b76cbde50878d23531df04943e51bda759c6edad795490a881593ea73",
      "evidence_context": {
        "decision_node": "transactions_at_decision_time.prediction_time",
        "leakage_available_offset_days": 9,
        "leakage_case_id": "fraud-screening-post-authorisation-dispute",
        "leakage_feature_name": "disputes_on_account",
        "leakage_feature_urn": "urn:li:schemaField:(hindsight.fraud_feature_pipeline,disputes_on_account)",
        "leakage_lineage_path": [
          "disputes_after_authorisation.dispute_filed_at",
          "fraud_feature_pipeline.disputes_on_account"
        ],
        "leakage_model_urn": "urn:li:mlModel:(urn:li:dataPlatform:mlflow,hindsight.fraud_screening_v1_leaky,PROD)",
        "safe_available_offset_days": -1,
        "safe_case_id": "fraud-screening-account-age-safe-control",
        "safe_feature_name": "account_age_days",
        "safe_feature_urn": "urn:li:schemaField:(hindsight.account_history_point_in_time,account_age_days)",
        "safe_lineage_path": [
          "account_history_point_in_time.account_age_days",
          "fraud_feature_pipeline_safe.account_age_days"
        ],
        "safe_model_urn": "urn:li:mlModel:(urn:li:dataPlatform:mlflow,hindsight.fraud_screening_v2_safe,PROD)"
      },
      "leakage_case": {
        "advantage_retained": 0.518765,
        "baseline_auc": 0.643189,
        "collapsed": false,
        "observed_advantage": 0.356811,
        "observed_auc": 1.0,
        "point_in_time_advantage": 0.185101,
        "point_in_time_auc": 0.82829
      },
      "reconstruction": {
        "cutoff_predicate": "available_at <= prediction_time",
        "engine": "duckdb",
        "excluded_post_cutoff_records": 4000,
        "input": {
          "adapter": "frozen_generator"
        }
      },
      "rows": 4000,
      "runtime_seconds": 0.08066,
      "safe_control": {
        "advantage_retained": 1.0,
        "baseline_auc": 0.643189,
        "collapsed": false,
        "observed_advantage": 0.279669,
        "observed_auc": 0.922858,
        "point_in_time_advantage": 0.279669,
        "point_in_time_auc": 0.922858
      },
      "scenario": "fraud_at_authorisation",
      "schema_version": 1,
      "seed": 20260729,
      "status": "failed",
      "verdicts": {
        "leakage_case": {
          "case_id": "fraud-screening-post-authorisation-dispute",
          "evidence": {
            "ablation_delta": 0.356811,
            "deterministic_cutoff_proof": false,
            "lineage_path": [
              "disputes_after_authorisation.dispute_filed_at",
              "fraud_feature_pipeline.disputes_on_account"
            ],
            "point_in_time_advantage_collapsed": false,
            "prediction_time": "2026-01-10T09:00:00+00:00",
            "source_available_at": "2026-01-19T09:00:00+00:00",
            "source_kind": "post_outcome"
          },
          "exit_code": 3,
          "reasons": [
            "Directional outcome lineage and an availability-time violation are established."
          ],
          "verdict": "high_confidence"
        },
        "safe_control": {
          "case_id": "fraud-screening-account-age-safe-control",
          "evidence": {
            "ablation_delta": 0.279669,
            "deterministic_cutoff_proof": false,
            "lineage_path": [
              "account_history_point_in_time.account_age_days",
              "fraud_feature_pipeline_safe.account_age_days"
            ],
            "point_in_time_advantage_collapsed": false,
            "prediction_time": "2026-01-10T09:00:00+00:00",
            "source_available_at": "2026-01-09T09:00:00+00:00",
            "source_kind": "pre_outcome"
          },
          "exit_code": 0,
          "reasons": [
            "No directional post-outcome availability violation was established."
          ],
          "verdict": "clear_for_release"
        }
      }
    },
    "verdict": "confirmed",
    "writeback": {
      "mutation_performed": false,
      "planned_types": [
        "field_tag",
        "structured_property",
        "audit_document",
        "active_incident"
      ],
      "status": "awaiting_human_approval"
    }
  },
  "evidence_sha256": "9794f0c3613345488566584cf40b7cc8abc35cbc8e99c2b194b72993804503a7",
  "exit_code": 3,
  "publication": null,
  "published": false,
  "release_decision": "block",
  "rows": 4000,
  "run_id": "20260729T044318-0be937",
  "runtime_seconds": 0.08066,
  "scenario": "fraud_screening",
  "schema_version": 2,
  "started_at": "2026-07-29T04:43:18.670066+00:00",
  "target_urn": null,
  "verdict": "confirmed"
}