{
  "rooms/$roomId": {
    "tier": "checkpointed",
    "fields": { "createdBy": "String!", "playerA": "String!", "playerB": "String!", "status": "String" },
    "rules": {
      "read": "@user.id != null && (@user.id == @data.playerA || @user.id == @data.playerB)",
      "create": "@user.id != null && @newData.createdBy == @user.id && (@newData.playerA == @user.id || @newData.playerB == @user.id)",
      "update": "false",
      "delete": "@user.id != null && @data.createdBy == @user.id"
    },
    "session": {
      "live": {
        "module": "strategy_game",
        "everyMs": 50,
        "maxLifetimeSec": 1800,
        "snapshotEveryTicks": 20
      },
      "intentRule": "@user.id != null && (@user.id == @data.playerA || @user.id == @data.playerB)"
    }
  },
  "rooms/$roomId/view/$userId": {
    "tier": "ephemeral",
    "fields": { "stateJson": "String" },
    "rules": {
      "read": "$userId == @user.id",
      "create": "false",
      "update": "false",
      "delete": "false"
    }
  }
}
