{
  "schema_version": 1,
  "protocol_id": "current-ability-game-log-v1-2027",
  "model_id": "current_ability_game_log_v1",
  "season": 2027,
  "status": "registered-before-season",
  "purpose": "Grade immutable weekly forecasts against each player's next 20 and next 40 regular-season appearances.",
  "snapshot_rules": {
    "cadence": "weekly",
    "as_of_definition": "A snapshot may use only games played on or before its as-of date.",
    "future_definition": "Scoring begins with the player's first appearance after the snapshot as-of date.",
    "minimum_history_games": 10,
    "overwrite_allowed": false,
    "retuning_allowed": false
  },
  "targets": {
    "rate": "Possession-weighted context-neutral Raw BPM 2.0 proxy over the next N player appearances.",
    "minutes": "Average minutes per game over the next N player appearances.",
    "horizons": [20, 40]
  },
  "promotion_gates": {
    "minimum_scored_predictions": 250,
    "minimum_scored_snapshots": 3,
    "minimum_players_per_ranked_snapshot": 20,
    "minimum_mae_improvement_vs_season": 0.05,
    "minimum_mae_improvement_vs_trailing_20": 0.02,
    "maximum_snapshot_spearman_deficit_vs_season": 0.01,
    "maximum_absolute_bias": 0.5,
    "require_both_horizons": true
  },
  "guardrails": [
    "The model specification, coefficients, half-life, features, and gates are frozen before 2026-27 games.",
    "Official prediction snapshots are append-only and content-hashed.",
    "No player-specific overrides.",
    "No lineup evidence enters this candidate.",
    "A data-integrity repair must preserve the original snapshot and produce a separately identified replacement.",
    "Passing both horizons permits lineup-evidence research; it does not automatically replace the live Impact Rate."
  ]
}
