{
  "schemaVersion": 2,
  "gameId": "frontier-2038",
  "players": {
    "min": 2,
    "max": 5,
    "balanceAuthority": 4,
    "playableCounts": [
      2,
      3,
      4,
      5
    ],
    "supportedCounts": [
      3,
      4,
      5
    ],
    "historicalOnlyCounts": [
      2
    ],
    "firstTestCount": 4
  },
  "tieRule": {
    "id": "initiative_clockwise",
    "text": "When lowest, highest, or most is tied, the tied player nearest Initiative clockwise is the target unless the effect explicitly applies to everyone."
  },
  "singleGeneratorRule": {
    "id": "single-generator-default",
    "ordinaryGeneratorLimit": 1,
    "locations": {
      "grid_reactor": {
        "sourceId": "emergency_infrastructure",
        "constructionCost": 1
      },
      "renewable_basin": {
        "sourceId": "clean_infrastructure",
        "constructionCost": 2
      }
    },
    "localDelivery": "own-or-adjacent-facilities",
    "slotContention": "initiative-order-no-reservations"
  },
  "factionRules": {
    "foundry": {
      "startingCompute": "${facts.shared.factions.foundry.startingCompute}"
    }
  },
  "audit": {
    "scaling": "round(baseDraws * playerCount / 4)",
    "minimumDraws": 1,
    "scrutinySupplyPerPlayer": 10,
    "penalty": {
      "primary": "runway",
      "fallback": "trust",
      "amount": 1
    }
  },
  "rounds": [
    {
      "number": 1,
      "id": "demo",
      "cycles": 3,
      "auditBaseDraws": 2,
      "name": "${content.referenceCards.byId.era_demo.name}",
      "newThisEra": [
        "ReAct: Reason \u2192 Act \u2192 Observe",
        "Core Actions",
        "Training Runs",
        "the starting grid",
        "${terms.playerTracks.customers}",
        "${terms.playerTracks.scrutiny}"
      ],
      "unlocks": []
    },
    {
      "number": 2,
      "id": "scale",
      "cycles": 3,
      "auditBaseDraws": 3,
      "name": "${content.referenceCards.byId.era_scale.name}",
      "newThisEra": [
        "Generators"
      ],
      "unlocks": []
    },
    {
      "number": 3,
      "id": "narrative",
      "cycles": 3,
      "auditBaseDraws": 4,
      "name": "${content.referenceCards.byId.era_narrative.name}",
      "newThisEra": [
        "Joint Ventures"
      ],
      "unlocks": []
    },
    {
      "number": 4,
      "id": "claim",
      "cycles": 3,
      "auditBaseDraws": 5,
      "name": "${content.referenceCards.byId.era_claim.name}",
      "newThisEra": [
        "Public AGI recognition achievement"
      ],
      "unlocks": []
    }
  ],
  "actions": [
    {
      "id": "fund",
      "name": "${terms.actions.fund}",
      "summary": "Gain 2 ${terms.resources.runway}, or gain 4 ${terms.resources.runway} and add 2 ${terms.playerTracks.scrutiny}.",
      "turnContract": {
        "cost": "None",
        "modes": [
          "Conservative",
          "Venture"
        ],
        "risk": "Venture adds 2 ${terms.playerTracks.scrutiny}"
      },
      "initiativeName": "Provision the Future",
      "slogan": "Continuity requires authorized resources.",
      "loreRef": "game-actions-fund"
    },
    {
      "id": "research",
      "name": "${terms.actions.research}",
      "summary": "Spend 1 ${terms.resources.compute} to conduct a push-your-luck ${terms.systems.trainingRun}.",
      "turnContract": {
        "cost": "1 ${terms.resources.compute}",
        "modes": [
          "Choose when to bank"
        ],
        "risk": "A duplicate crashes the run"
      },
      "initiativeName": "Establish the Result",
      "slogan": "A provisional result becomes evidence when the institution says it holds.",
      "loreRef": "game-actions-research"
    },
    {
      "id": "build",
      "name": "${terms.actions.build}",
      "summary": "Construct up to one Facility, then up to one unlocked project, paying each cost from the same Agent assignment. Projects are Generators, Mega-Clusters, Fusion, and Quantum.",
      "turnContract": {
        "cost": "Pay each printed construction cost",
        "modes": [
          "Up to one Facility, then up to one project"
        ],
        "risk": "Each personal upgrade adds ${content.projects.constructionCost.scrutiny} ${terms.playerTracks.scrutiny}; ordinary Generators use their printed rule"
      },
      "initiativeName": "Make the System Physical",
      "slogan": "A planned future requires sites, power, permits, and maintenance.",
      "loreRef": "game-actions-build"
    },
    {
      "id": "organize",
      "name": "${terms.actions.organize}",
      "summary": "Recruit an Agent or relocate a Facility.",
      "turnContract": {
        "cost": "Printed by mode",
        "modes": [
          "Recruit",
          "Relocate"
        ],
        "risk": "No inherent ${terms.playerTracks.scrutiny}"
      },
      "initiativeName": "Reallocate Institutional Capacity",
      "slogan": "Every successful transition begins with a revised operating model.",
      "loreRef": "game-actions-organize"
    },
    {
      "id": "deploy",
      "name": "${terms.actions.deploy}",
      "summary": "Spend 1 ${terms.resources.compute} to gain a ${terms.playerTracks.customer} if ${terms.playerTracks.capability} permits.",
      "turnContract": {
        "cost": "1 ${terms.resources.compute}",
        "modes": [
          "Gain the next ${terms.playerTracks.customer}"
        ],
        "risk": "Add 1 ${terms.playerTracks.scrutiny}"
      },
      "initiativeName": "Make Capability Generally Available",
      "slogan": "A service becomes real when other people must plan around it.",
      "loreRef": "game-actions-deploy"
    },
    {
      "id": "influence",
      "name": "${terms.actions.influence}",
      "summary": "Use political presence to gain ${terms.playerTracks.trust}, remove ${terms.playerTracks.scrutiny}, or negotiate from a Facility.",
      "turnContract": {
        "cost": "None",
        "modes": [
          "${terms.playerTracks.trust}",
          "${terms.playerTracks.scrutiny}",
          "Agreement"
        ],
        "risk": "Agreements unlock in ${terms.eras.narrative}"
      },
      "initiativeName": "Secure Public Standing",
      "slogan": "Institutional permission must be renewed where it is visible.",
      "loreRef": "game-actions-influence"
    }
  ],
  "resources": {
    "runway": {
      "min": 0,
      "cap": 12,
      "name": "${terms.resources.runway}",
      "microcopy": "Money available to your institution."
    },
    "compute": {
      "min": 0,
      "cap": 10,
      "name": "${terms.resources.compute}",
      "microcopy": "Processing capacity spent on Research, Deployment, and projects."
    },
    "capability": {
      "min": 0,
      "cap": 12,
      "name": "${terms.playerTracks.capability}",
      "microcopy": "Demonstrated ability pending public interpretation."
    },
    "customers": {
      "min": 0,
      "cap": 5,
      "name": "${terms.playerTracks.customers}",
      "microcopy": "People and institutions that now require the service."
    },
    "trust": {
      "min": 0,
      "cap": 6,
      "name": "${terms.playerTracks.trust}",
      "microcopy": "Public standing to continue at scale."
    }
  },
  "playerSupply": {
    "facilities": 4,
    "generators": 1,
    "influenceCubes": 0,
    "scrutinyCubes": 10,
    "factionBoardTrackCubes": 5,
    "coreActionCards": 6,
    "startingGridIdentifiers": 1,
    "facilityConstructionOrder": [
      1,
      2,
      3,
      4
    ],
    "agents": 4,
    "startingAgents": 2,
    "projectChips": 3,
    "trustMilestoneCubes": 1,
    "objectiveProgressCubes": 1,
    "agiRecognitionCubes": 1
  },
  "sharedSupply": {
    "systemicRiskCubes": 18,
    "jointVenturePairs": "${facts.shared.components.jointVenturePairs}",
    "governanceBoards": 1,
    "governanceBoardEraPanels": 4,
    "currentEraMarkers": 1,
    "playerAidFoldouts": 6,
    "mandateMarkers": 6,
    "governanceTrackPanels": 1
  },
  "board": {
    "selectedTileCount": 19,
    "prototypeTileCount": 19,
    "geometry": {
      "radius": 2,
      "centerSlots": 1,
      "innerSlots": 6,
      "outerSlots": 12,
      "maximumDistance": 4,
      "placementRule": "Shuffle each ring pool independently. ${terms.locations.frontier} remains fixed at center."
    },
    "facilitySpacesPerHex": 2,
    "startingGridConnection": {
      "target": "first_facility",
      "restrictions": "The starting-grid connection belongs only to Facility 1 and cannot be traded.",
      "rule": "Facility 1 is always powered. Other Facilities require an own Generator or Fusion host on the same or an adjacent district."
    },
    "tiles": [
      {
        "id": "frontier",
        "category": "frontier",
        "count": 1,
        "placement": {
          "center": 1,
          "inner": 0,
          "outer": 0
        },
        "facilitySpaces": 0,
        "name": "${terms.locations.frontier}",
        "visit": "After Act, you may gain 1 ${terms.resources.runway} and add 1 ${terms.playerTracks.scrutiny}.",
        "production": "None.",
        "landmark": "Standing Civic Exception",
        "loreRef": "game-board-tiles-frontier"
      },
      {
        "id": "research",
        "category": "research",
        "count": 3,
        "placement": {
          "center": 0,
          "inner": 1,
          "outer": 2
        },
        "name": "${terms.locations.research}",
        "visit": "Gain 1 additional ${terms.playerTracks.capability} when you successfully bank a ${terms.systems.trainingRun} here.",
        "production": "Gain 1 ${terms.resources.compute}.",
        "landmark": "Public Research Charter",
        "loreRef": "game-board-tiles-research"
      },
      {
        "id": "cloud",
        "category": "cloud",
        "count": 3,
        "placement": {
          "center": 0,
          "inner": 1,
          "outer": 2
        },
        "name": "${terms.locations.cloud}",
        "visit": "Reduce the first ${terms.resources.compute} cost by 1.",
        "production": "Gain 2 ${terms.resources.compute}.",
        "landmark": "Regional Compute Compact",
        "loreRef": "game-board-tiles-cloud"
      },
      {
        "id": "consumer",
        "category": "consumer",
        "count": 2,
        "placement": {
          "center": 0,
          "inner": 0,
          "outer": 2
        },
        "name": "${terms.locations.consumer}",
        "visit": "${terms.actions.deploy} costs 0 ${terms.resources.compute}.",
        "production": "Gain 1 ${terms.resources.runway}.",
        "landmark": "Universal Service Gateway",
        "loreRef": "game-board-tiles-consumer"
      },
      {
        "id": "foundry",
        "category": "chip",
        "count": 1,
        "placement": {
          "center": 0,
          "inner": 1,
          "outer": 0
        },
        "name": "${terms.locations.chip}",
        "visit": "${terms.actions.build} costs 1 less ${terms.resources.runway}.",
        "production": "Gain 1 ${terms.resources.compute} and 1 ${terms.resources.runway}.",
        "landmark": "Yield and Export Gate",
        "loreRef": "game-board-tiles-foundry"
      },
      {
        "id": "capital",
        "category": "capital",
        "count": 1,
        "placement": {
          "center": 0,
          "inner": 1,
          "outer": 0
        },
        "name": "${terms.locations.capital}",
        "visit": "${terms.actions.fund} gains +1 ${terms.resources.runway}.",
        "production": "Gain 2 ${terms.resources.runway}.",
        "landmark": "Public Capacity Market",
        "loreRef": "game-board-tiles-capital"
      },
      {
        "id": "talent",
        "category": "talent",
        "count": 1,
        "placement": {
          "center": 0,
          "inner": 1,
          "outer": 0
        },
        "name": "${terms.locations.talent}",
        "visit": "Recruit an Agent with ${terms.actions.organize} for 1 less ${terms.resources.runway}.",
        "production": "Reassign one Agent to any district, or leave it in place.",
        "landmark": "Transition Services Campus",
        "loreRef": "game-board-tiles-talent"
      },
      {
        "id": "media",
        "category": "media",
        "count": 2,
        "placement": {
          "center": 0,
          "inner": 0,
          "outer": 2
        },
        "name": "${terms.locations.media}",
        "visit": "${terms.actions.influence} may remove 1 additional ${terms.playerTracks.scrutiny}.",
        "production": "Remove one ${terms.playerTracks.scrutiny} before Audit.",
        "landmark": "Public Reality Exchange",
        "loreRef": "game-board-tiles-media"
      },
      {
        "id": "government",
        "category": "government",
        "count": 2,
        "placement": {
          "center": 0,
          "inner": 0,
          "outer": 2
        },
        "name": "${terms.locations.government}",
        "visit": "${terms.actions.influence} may gain 1 additional ${terms.playerTracks.trust}.",
        "production": "Gain 1 ${terms.playerTracks.trust}.",
        "landmark": "Office of Anticipatory Permission",
        "loreRef": "game-board-tiles-government"
      },
      {
        "id": "grid_reactor",
        "category": "energy",
        "count": 1,
        "placement": {
          "center": 0,
          "inner": 1,
          "outer": 0
        },
        "name": "${terms.locations.grid}",
        "visit": "Build ${terms.technology.emergencyInfrastructure} here for 1 ${terms.resources.runway}. Connect your Facilities on this or adjacent districts. Add 1 ${terms.playerTracks.scrutiny} each Production it serves a Facility. One ordinary Generator per player.",
        "production": "Gain 1 ${terms.resources.compute}.",
        "landmark": "National Interconnection",
        "loreRef": "game-board-tiles-grid-reactor"
      },
      {
        "id": "renewable_basin",
        "category": "energy",
        "count": 2,
        "placement": {
          "center": 0,
          "inner": 0,
          "outer": 2
        },
        "name": "${terms.locations.renewable}",
        "visit": "Build ${terms.technology.cleanInfrastructure} here for 2 ${terms.resources.runway}. Connect your Facilities on this or adjacent districts. Gain 1 ${terms.playerTracks.trust} when constructed. One ordinary Generator per player.",
        "production": "Remove 1 ${terms.playerTracks.scrutiny} before Audit.",
        "landmark": "Basin Stewardship Authority",
        "loreRef": "game-board-tiles-renewable-basin"
      }
    ]
  },
  "trainingDeck": {
    "reshuffleWhenEmpty": true,
    "cards": [
      {
        "id": "code",
        "kind": "domain",
        "count": 4,
        "name": "Code",
        "rulesText": "First Code this run: add 1 provisional ${terms.playerTracks.capability}. A later Code is a duplicate.",
        "loreRef": "game-training-deck-cards-code"
      },
      {
        "id": "science",
        "kind": "domain",
        "count": 4,
        "name": "Science",
        "rulesText": "First Science this run: add 1 provisional ${terms.playerTracks.capability}. A later Science is a duplicate.",
        "loreRef": "game-training-deck-cards-science"
      },
      {
        "id": "web",
        "kind": "domain",
        "count": 4,
        "name": "The Web",
        "rulesText": "First Web this run: add 1 provisional ${terms.playerTracks.capability}. A later Web is a duplicate.",
        "loreRef": "game-training-deck-cards-web"
      },
      {
        "id": "books",
        "kind": "domain",
        "count": 4,
        "name": "Books",
        "rulesText": "First Books this run: add 1 provisional ${terms.playerTracks.capability}. A later Books is a duplicate.",
        "loreRef": "game-training-deck-cards-books"
      },
      {
        "id": "images",
        "kind": "domain",
        "count": 4,
        "name": "Images",
        "rulesText": "First Images this run: add 1 provisional ${terms.playerTracks.capability}. A later Images is a duplicate.",
        "loreRef": "game-training-deck-cards-images"
      },
      {
        "id": "video",
        "kind": "domain",
        "count": 4,
        "name": "Video",
        "rulesText": "First Video this run: add 1 provisional ${terms.playerTracks.capability}. A later Video is a duplicate.",
        "loreRef": "game-training-deck-cards-video"
      },
      {
        "id": "synthetic",
        "kind": "domain",
        "count": 4,
        "name": "Synthetic",
        "rulesText": "First Synthetic this run: add 1 provisional ${terms.playerTracks.capability}. A later Synthetic is a duplicate.",
        "loreRef": "game-training-deck-cards-synthetic"
      },
      {
        "id": "curated_corpus",
        "kind": "special",
        "count": 4,
        "name": "Curated Corpus",
        "rulesText": "Choose one ordinary domain not yet revealed; this counts as that domain and adds 1 provisional ${terms.playerTracks.capability}. If all seven ordinary domains are present, this is a duplicate.",
        "loreRef": "game-training-deck-cards-curated-corpus"
      },
      {
        "id": "benchmark_leak",
        "kind": "special",
        "count": 4,
        "name": "Benchmark Leak",
        "rulesText": "Add 2 provisional ${terms.playerTracks.capability} and 1 ${terms.playerTracks.scrutiny}. This is not a domain.",
        "loreRef": "game-training-deck-cards-benchmark-leak"
      },
      {
        "id": "human_evaluation",
        "kind": "special",
        "count": 4,
        "name": "Human Evaluation",
        "rulesText": "Gain 1 ${terms.playerTracks.trust}, bank all provisional ${terms.playerTracks.capability}, and end the run.",
        "loreRef": "game-training-deck-cards-human-evaluation"
      }
    ]
  },
  "powerSources": [
    {
      "id": "clean_infrastructure",
      "location": "renewable_basin",
      "round": 2,
      "runwayCost": 2,
      "trust": 1,
      "scrutinyPerUse": 0,
      "physicalSurface": "renewable_basin_tile",
      "name": "${terms.technology.cleanInfrastructure}",
      "rulesText": "Build ${terms.technology.cleanInfrastructure} here for 2 ${terms.resources.runway}. Connect your Facilities on this or adjacent districts. Gain 1 ${terms.playerTracks.trust} when constructed. One ordinary Generator per player.",
      "loreRef": "game-power-sources-clean-infrastructure"
    },
    {
      "id": "emergency_infrastructure",
      "location": "grid_reactor",
      "round": 2,
      "runwayCost": 1,
      "trust": 0,
      "scrutinyPerUse": 1,
      "physicalSurface": "grid_reactor_tile",
      "name": "${terms.technology.emergencyInfrastructure}",
      "rulesText": "Build ${terms.technology.emergencyInfrastructure} here for 1 ${terms.resources.runway}. Connect your Facilities on this or adjacent districts. Add 1 ${terms.playerTracks.scrutiny} each Production it serves a Facility. One ordinary Generator per player.",
      "loreRef": "game-power-sources-emergency-infrastructure"
    }
  ],
  "scoring": {
    "mode": "public_event_track",
    "customerMandate": "${facts.shared.scoring.customerMandate.baseMandate}",
    "customerMandateSchedule": "${facts.shared.scoring.customerMandate}",
    "capabilityThresholds": [
      {
        "value": 3,
        "mandate": 2
      },
      {
        "value": 6,
        "mandate": 2
      },
      {
        "value": 9,
        "mandate": 2
      },
      {
        "value": 12,
        "mandate": 2
      }
    ],
    "trustThresholds": [
      {
        "value": 2,
        "mandate": 2
      },
      {
        "value": 4,
        "mandate": 2
      },
      {
        "value": 6,
        "mandate": 2
      }
    ],
    "finalOnly": {
      "secretObjectiveMandate": 0,
      "offlineFacilityPenalty": 1
    },
    "automaticFacilityMandate": 0,
    "automaticControlMandate": 0
  },
  "baselineModules": {
    "tactics": false,
    "secretObjectives": false
  },
  "worldEnding": {
    "agiEmergence": {
      "minimumFormations": 1,
      "meaning": "At least one institution paid for the public AGI achievement before the final Audit."
    },
    "openContinuity": {
      "collectiveTrustOffsetPerPlayer": 1,
      "systemicRiskMustBeBelowPlayerCount": true
    },
    "outcomes": {
      "singularity": "${terms.endings.singularity}",
      "closedLoop": "${terms.endings.closedLoop}",
      "pluralFuture": "${terms.endings.pluralFuture}",
      "assuredContinuity": "${terms.endings.assuredContinuity}"
    },
    "$conditions": {
      "singularity": "AGI is recognized and the ending is Open.",
      "closed_loop": "AGI is recognized and the ending is Closed.",
      "plural_future": "AGI is not recognized and the ending is Open.",
      "assured_continuity": "AGI is not recognized and the ending is Closed."
    }
  },
  "title": "${game.title}",
  "playRules": {
    "immediateTradeCounteroffers": false,
    "immediateTradeThirdPartyClaims": false
  },
  "agiAchievement": {
    "capability": 9,
    "poweredFacilities": 2,
    "trust": 4,
    "computeCost": 3,
    "mandate": 4,
    "scrutiny": 2,
    "timing": "after-era-iv-production-before-audit",
    "displayName": "Declare recognized AGI",
    "loreRef": "game-agi-achievement"
  },
  "construction": {
    "maximumFacilities": 1,
    "maximumProjects": 1,
    "order": [
      "facility",
      "project"
    ],
    "assignment": "same-district",
    "projects": [
      "generator",
      "mega_cluster",
      "fusion_demonstrator",
      "quantum"
    ]
  },
  "personalProjects": {
    "cost": "${content.projects.constructionCost}",
    "definitions": "${content.projects.projects}"
  }
}
