{
  "generatedAt": "2026-06-12T16:03:59.856Z",
  "success": true,
  "summary": {
    "confirmed": 21,
    "corroborated": 2,
    "unresolved": 4,
    "stale": 1,
    "contradicted": 0
  },
  "requiredRuleIds": [
    "squad_size",
    "position_counts",
    "valid_formations",
    "group_stage_budget",
    "knockout_budget",
    "nation_limits_by_stage",
    "transfer_allowances_by_stage",
    "group_stage_transfer_carryover",
    "extra_transfer_cost",
    "live_transfer_applicability",
    "captain_switching",
    "vice_captain_fallback",
    "manual_substitutions",
    "auto_sub_cancellation",
    "locked_unlocked_players",
    "scouting_bonus",
    "wildcard",
    "twelfth_man",
    "maximum_captain",
    "qualification_booster",
    "mystery_booster",
    "scoring_table",
    "penalty_misses_shootout_treatment",
    "appearance_scoring_interpretation",
    "third_place_final_round_packaging"
  ],
  "validatorRuleIds": [
    "squad_size",
    "position_counts",
    "valid_formations",
    "group_stage_budget",
    "knockout_budget",
    "nation_limits_by_stage",
    "transfer_allowances_by_stage",
    "group_stage_transfer_carryover",
    "extra_transfer_cost",
    "live_transfer_applicability",
    "captain_switching",
    "vice_captain_fallback",
    "manual_substitutions",
    "auto_sub_cancellation",
    "locked_unlocked_players",
    "wildcard",
    "twelfth_man",
    "maximum_captain",
    "qualification_booster",
    "mystery_booster"
  ],
  "errors": [],
  "entries": [
    {
      "ruleId": "squad_size",
      "category": "squad_structure",
      "currentRepoValue": 15,
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Official Team Creation text specifies a squad of 15 players.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "position_counts",
      "category": "squad_structure",
      "currentRepoValue": {
        "GK": 2,
        "DEF": 5,
        "MID": 5,
        "FWD": 3
      },
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Official Team Creation text lists all four position quotas.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "valid_formations",
      "category": "formation",
      "currentRepoValue": [
        "4-4-2",
        "4-3-3",
        "4-5-1",
        "3-4-3",
        "3-5-2",
        "5-4-1",
        "5-3-2"
      ],
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Official rules enumerate the seven legal formations.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "group_stage_budget",
      "category": "budget",
      "currentRepoValue": 100,
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Official rules state a starting team budget of $100m.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "knockout_budget",
      "category": "budget",
      "currentRepoValue": 105,
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Official rules state the budget increases by $5m when Round 3 locks and Round of 32 transfers open.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "nation_limits_by_stage",
      "category": "squad_structure",
      "currentRepoValue": {
        "group_stage": 3,
        "round_of_32": 3,
        "round_of_16": 4,
        "quarter_final": 5,
        "semi_final": 6,
        "final": 8
      },
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Official Team Creation table confirms each stage limit.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "transfer_allowances_by_stage",
      "category": "transfers",
      "currentRepoValue": {
        "pre_tournament": "unlimited",
        "before_md2": 2,
        "before_md3": 2,
        "before_round_of_32": "unlimited",
        "before_round_of_16": 4,
        "before_quarter_final": 4,
        "before_semi_final": 5,
        "before_final": 6
      },
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Official Transfers table matches the repository allowance ladder.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "group_stage_transfer_carryover",
      "category": "transfers",
      "currentRepoValue": 1,
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Official rules permit one carry within the group stage and explicitly prohibit MD3 carry into the unlimited Round of 32 window.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "extra_transfer_cost",
      "category": "transfers",
      "currentRepoValue": -3,
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Official rules deduct 3 points for each transfer above the free allocation.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "live_transfer_applicability",
      "category": "transfers",
      "currentRepoValue": "next_round",
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Official rules say live-round transfers affect only the next scheduled round.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "captain_switching",
      "category": "captaincy",
      "currentRepoValue": "previous captain completed; target yet to play",
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Official captaincy text confirms unlimited switches subject to rolling player locks.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "vice_captain_fallback",
      "category": "captaincy",
      "currentRepoValue": "vice doubles if captain plays zero minutes and no live team changes were made",
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Current official JSON resolves the fallback condition previously left on Rules Watch.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "docs/rules-watch.md",
        "src/rules/validateCaptaincy.ts",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "manual_substitutions",
      "category": "live_actions",
      "currentRepoValue": "valid formation; incoming unplayed; outgoing not live",
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Official substitution sections describe pre-lock and live-round eligibility.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "auto_sub_cancellation",
      "category": "live_actions",
      "currentRepoValue": true,
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Official text explicitly says a live substitution or captain/vice change cancels auto-subs.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "locked_unlocked_players",
      "category": "live_actions",
      "currentRepoValue": {
        "locked": "team currently playing",
        "unlocked": "team yet to play"
      },
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Official definitions are explicit; API matchStatus timing remains a separate source issue.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json",
        "docs/rules-watch.md",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "scouting_bonus",
      "category": "scoring",
      "currentRepoValue": {
        "pointsAwarded": 2,
        "minimumPoints": "more_than_4",
        "ownershipThresholdPercent": 5
      },
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Current official JSON confirms +2, more than 4 points and under 5% ownership.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json"
      ]
    },
    {
      "ruleId": "scouting_bonus_minimum_minutes",
      "category": "scoring",
      "currentRepoValue": "not enforced; removed from rules constants",
      "accessNote": "The 6 June research draft claimed a one-minute condition, but the current official help_pages.json text does not state it.",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "stale",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Do not enforce a Scouting Bonus minimum-minute condition until current official evidence states one.",
      "affectedFiles": [
        "docs/rules-watch.md",
        "docs/raw/rules-research-2026-06-06.md"
      ]
    },
    {
      "ruleId": "wildcard",
      "category": "boosters",
      "currentRepoValue": "unlimited transfers; unavailable for first group-stage match and Round of 32",
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Exact official wording is confirmed. Interpreting first match as the whole first fantasy round remains warning-only.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json",
        "docs/rules-watch.md",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "twelfth_man",
      "category": "boosters",
      "currentRepoValue": "one additional player outside squad; no budget/team restriction; cannot be substituted, captained or transferred",
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Current official JSON resolves the eligibility uncertainty.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "docs/rules-watch.md",
        "src/rules/validateBoosters.ts",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "maximum_captain",
      "category": "boosters",
      "currentRepoValue": "double points for highest-scoring starting XI player",
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Official booster text confirms automatic assignment within the starting XI.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "qualification_booster",
      "category": "boosters",
      "currentRepoValue": "+2 for starting XI player who progresses or wins final; must play at least 1 minute; captain bonus not doubled",
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Current official JSON resolves the appearance requirement.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "docs/rules-watch.md",
        "src/rules/validateBoosters.ts",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "mystery_booster",
      "category": "boosters",
      "currentRepoValue": "booster exists; exact effect unrevealed",
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "unresolved",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Official JSON says the effect will be revealed after Round 3 locks. Validators must warn and not model it.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "data/coach/rules.constants.json",
        "docs/rules-watch.md",
        "test/rules.test.ts"
      ]
    },
    {
      "ruleId": "scoring_table",
      "category": "scoring",
      "currentRepoValue": "position-specific table in docs/rules-bible.md",
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "confirmed",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Current official JSON contains the scoring table reproduced in the rules bible.",
      "affectedFiles": [
        "docs/rules-bible.md"
      ]
    },
    {
      "ruleId": "penalty_misses_shootout_treatment",
      "category": "scoring",
      "currentRepoValue": "penalty saves exclude shootouts; no penalty-miss row is stated",
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "unresolved",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Shootout exclusion for saves is confirmed. Absence of a penalty-miss row is not enough to invent a no-deduction rule.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "docs/rules-watch.md"
      ]
    },
    {
      "ruleId": "appearance_scoring_interpretation",
      "category": "scoring",
      "currentRepoValue": "official rows show +1 up to 60 and +1 at 60+; cumulative interpretation not enforced",
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "unresolved",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "The official table does not explicitly say whether the rows stack to +2 at 60 minutes.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "docs/rules-watch.md"
      ]
    },
    {
      "ruleId": "appearance_scoring_secondary_interpretation",
      "category": "third_party_interpretation",
      "currentRepoValue": "+2 total for reaching 60 minutes",
      "accessNote": "The 6 June research draft records agreement across Fantasy Football Scout, AllAboutFPL and Fantasy Football Hub; original deep-research citation IDs require URL revalidation.",
      "sourceType": "news_article",
      "sourceAuthority": "specialist_secondary",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "corroborated",
      "lastValidatedAt": "2026-06-06",
      "notes": "Strong secondary consensus, but still not promoted to a validator rule without explicit official clarification or observed scoring.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "docs/rules-watch.md",
        "docs/raw/rules-research-2026-06-06.md"
      ]
    },
    {
      "ruleId": "third_place_final_round_packaging",
      "category": "round_structure",
      "currentRepoValue": "unknown",
      "sourceUrl": "https://play.fifa.com/json/fantasy/help_pages.json",
      "sourceType": "api_json",
      "sourceAuthority": "official",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "unresolved",
      "lastValidatedAt": "2026-06-12T00:22:24.000Z",
      "notes": "Current official rules say Before the Final but do not explicitly package the third-place play-off.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "docs/rules-watch.md"
      ]
    },
    {
      "ruleId": "third_place_historical_interpretation",
      "category": "third_party_interpretation",
      "currentRepoValue": "likely included with final round based on 2022",
      "accessNote": "The 6 June research draft records historical 2022 behavior and secondary-guide interpretation; original citation IDs require URL revalidation.",
      "sourceType": "news_article",
      "sourceAuthority": "specialist_secondary",
      "sourceReadableByCodex": true,
      "sourceReadableByChatGPT": true,
      "humanReadableOnPhone": true,
      "evidenceStatus": "corroborated",
      "lastValidatedAt": "2026-06-06",
      "notes": "Historical precedent is a signal, not a confirmed 2026 rule.",
      "affectedFiles": [
        "docs/rules-bible.md",
        "docs/rules-watch.md",
        "docs/raw/rules-research-2026-06-06.md"
      ]
    }
  ]
}
