{
  "access": {
    "game": {
      "owner": "owner_id",
      "scope": "private"
    },
    "chess_match_seat": {
      "owner": "actor",
      "scope": "private"
    },
    "chess_match_command": {
      "owner": "actor",
      "scope": "private"
    },
    "chess_match_open": {
      "owner": "actor",
      "scope": "private"
    },
    "chess_match_public": {
      "scope": "public"
    },
    "chess_presence_seat": {
      "owner": "actor",
      "scope": "private"
    },
    "chess_presence_command": {
      "owner": "actor",
      "scope": "private"
    },
    "chess_presence_public": {
      "scope": "public"
    },
    "chess_presence_lease": {
      "owner": "actor",
      "scope": "private"
    },
    "chess_challenge_seat": {
      "owner": "actor",
      "scope": "private"
    },
    "chess_challenge_command": {
      "owner": "actor",
      "scope": "private"
    },
    "chess_challenge_open": {
      "owner": "actor",
      "scope": "private"
    }
  },
  "app": "battlechess",
  "auth": {
    "providers": [
      "google"
    ],
    "required": false,
    "service": "/auth",
    "promote": true,
    "mode": "passkey"
  },
  "floors": {
    "touch": 24
  },
  "hostDom": {
    "battle": {
      "src": "shell/hatches/battle/battle.js",
      "note": "WebGL rendering, WebAssembly physics and engine, workers and Web Audio are beyond the terminal's markup; the hatch writes Game rows only by submitting the play screen's forms"
    }
  },
  "i18n": {
    "default": "en",
    "locales": {
      "en": {
        "path": "en"
      },
      "pt-BR": {
        "path": "pt-br"
      }
    }
  },
  "local": {
    "online": "tab",
    "intent": "tab",
    "player": "device",
    "lobby_tab": "tab"
  },
  "optional": {
    "intent": [
      {
        "name": "uci",
        "type": "string"
      },
      {
        "name": "opponent",
        "type": "string"
      },
      {
        "name": "opponent_label",
        "type": "string"
      },
      {
        "name": "depth",
        "type": "int32"
      },
      {
        "name": "start_fen",
        "type": "string"
      }
    ],
    "lobby_tab": [
      {
        "name": "answered",
        "type": "string"
      }
    ]
  },
  "read": {
    "chess_match_public": "lazy",
    "chess_presence_public": "lazy"
  },
  "server": true,
  "routes": [
    {
      "hatches": [
        "battle"
      ],
      "path": "/",
      "screen": "play",
      "nav": {
        "key": "nav_play",
        "label": "Bonk Chess"
      },
      "files": {
        "html": "shell/screens/play.html",
        "css": "shell/screens/play.css",
        "handlers": [
          "shell/handlers/board.js",
          "shell/handlers/lease.js",
          "shell/handlers/lobby.js"
        ],
        "adapters": [],
        "shared": []
      },
      "ssr": "spa",
      "states": [
        "loading",
        "empty",
        "populated"
      ]
    },
    {
      "path": "/table/:room",
      "screen": "table",
      "nav": {
        "key": "nav_table",
        "label": "A table · Bonk Chess"
      },
      "files": {
        "html": "shell/screens/table.html",
        "css": "shell/screens/table.css",
        "handlers": [
          "shell/handlers/table.js"
        ],
        "adapters": [],
        "shared": []
      },
      "ssr": "spa",
      "states": [
        "loading",
        "populated"
      ]
    },
    {
      "path": "/privacy",
      "screen": "privacy",
      "nav": {
        "key": "nav_privacy",
        "label": "Privacy · Bonk Chess"
      },
      "files": {
        "html": "shell/screens/privacy.html",
        "css": "shell/screens/privacy.css",
        "handlers": [],
        "adapters": [],
        "shared": []
      },
      "ssr": "spa",
      "states": [
        "populated"
      ]
    }
  ],
  "tables": [
    "chess_challenge_command",
    "chess_challenge_open",
    "chess_challenge_seat",
    "chess_match_command",
    "chess_match_open",
    "chess_match_public",
    "chess_match_seat",
    "chess_presence_command",
    "chess_presence_lease",
    "chess_presence_public",
    "chess_presence_seat",
    "game"
  ],
  "schema": {
    "game": {
      "durability": "offline",
      "fields": [
        {
          "name": "id",
          "pk": true,
          "type": "uuid",
          "required": true
        },
        {
          "enum": [
            "peasant",
            "squire",
            "page",
            "knight",
            "captain",
            "lord",
            "champion",
            "grandmaster",
            "human",
            "online"
          ],
          "name": "opponent",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMin": 1,
            "sizeMax": 60
          },
          "name": "opponent_label",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMin": 1,
            "sizeMax": 100
          },
          "name": "start_fen",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMin": 1,
            "sizeMax": 100
          },
          "name": "fen",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 3600,
            "regex": "^([a-h][1-8][a-h][1-8][qrbn]?( |$))*$"
          },
          "name": "moves",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "intMin": 0,
            "intMax": 600
          },
          "name": "fights",
          "type": "int32",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 120
          },
          "name": "summary",
          "type": "string",
          "required": true
        },
        {
          "enum": [
            "active",
            "finished"
          ],
          "name": "status",
          "type": "string",
          "required": true
        },
        {
          "enum": [
            "",
            "white",
            "black",
            "draw"
          ],
          "name": "result",
          "type": "string",
          "required": true
        },
        {
          "enum": [
            "",
            "checkmate",
            "stalemate",
            "fifty-move rule",
            "resignation",
            "agreement",
            "time",
            "abandoned"
          ],
          "name": "reason",
          "type": "string",
          "required": true
        },
        {
          "name": "created",
          "type": "timestamp",
          "required": true
        },
        {
          "name": "updated",
          "type": "timestamp",
          "required": true
        },
        {
          "defaulted": true,
          "name": "owner_id",
          "type": "uuid",
          "required": true
        }
      ]
    },
    "intent": {
      "durability": "tab",
      "fields": [
        {
          "bounds": {
            "sizeMax": 160
          },
          "name": "id",
          "pk": true,
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 36
          },
          "name": "game",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "intMin": 0,
            "intMax": 1200
          },
          "name": "ply",
          "type": "int32",
          "required": true
        },
        {
          "enum": [
            "move",
            "resign",
            "offer_draw",
            "accept_draw",
            "decline_draw"
          ],
          "name": "kind",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 5
          },
          "name": "uci",
          "type": "string",
          "required": false
        },
        {
          "bounds": {
            "sizeMax": 12
          },
          "name": "opponent",
          "type": "string",
          "required": false
        },
        {
          "bounds": {
            "sizeMax": 60
          },
          "name": "opponent_label",
          "type": "string",
          "required": false
        },
        {
          "bounds": {
            "intMin": 0,
            "intMax": 20
          },
          "name": "depth",
          "type": "int32",
          "required": false
        },
        {
          "bounds": {
            "sizeMax": 100
          },
          "name": "start_fen",
          "type": "string",
          "required": false
        },
        {
          "name": "at",
          "type": "timestamp",
          "required": true
        }
      ]
    },
    "online": {
      "durability": "tab",
      "fields": [
        {
          "enum": [
            "the"
          ],
          "name": "id",
          "pk": true,
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 36
          },
          "name": "room",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 36
          },
          "name": "game",
          "type": "string",
          "required": true
        },
        {
          "enum": [
            "",
            "white",
            "black"
          ],
          "name": "seat",
          "type": "string",
          "required": true
        },
        {
          "enum": [
            "",
            "waiting",
            "playing",
            "finished"
          ],
          "name": "phase",
          "type": "string",
          "required": true
        },
        {
          "enum": [
            "",
            "white",
            "black"
          ],
          "name": "turn",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 5
          },
          "name": "clock",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "intMin": 0
          },
          "name": "white_ms",
          "type": "int64",
          "required": true
        },
        {
          "bounds": {
            "intMin": 0
          },
          "name": "black_ms",
          "type": "int64",
          "required": true
        },
        {
          "bounds": {
            "intMin": 0
          },
          "name": "revision",
          "type": "int64",
          "required": true
        },
        {
          "enum": [
            "",
            "white",
            "black"
          ],
          "name": "draw_offer",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 32
          },
          "name": "white_name",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 32
          },
          "name": "black_name",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 80
          },
          "name": "actions",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 40
          },
          "name": "note",
          "type": "string",
          "required": true
        }
      ]
    },
    "lobby_tab": {
      "durability": "tab",
      "fields": [
        {
          "enum": [
            "the"
          ],
          "name": "id",
          "pk": true,
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 36
          },
          "name": "lease",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 36
          },
          "name": "me",
          "type": "string",
          "required": true
        },
        {
          "enum": [
            "",
            "show",
            "hide"
          ],
          "name": "shown",
          "type": "string",
          "required": true
        },
        {
          "enum": [
            "none",
            "1+0",
            "3+2",
            "5+0",
            "10+0",
            "15+10"
          ],
          "name": "clock",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 36
          },
          "name": "table",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 40
          },
          "name": "note",
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 36
          },
          "name": "answered",
          "type": "string",
          "required": false
        }
      ]
    },
    "player": {
      "durability": "device",
      "fields": [
        {
          "enum": [
            "you"
          ],
          "name": "id",
          "pk": true,
          "type": "string",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 32
          },
          "name": "handle",
          "type": "string",
          "required": true
        }
      ]
    },
    "chess_match_seat": {
      "durability": "live",
      "fields": [
        {
          "bounds": {
            "sizeMax": 64
          },
          "name": "id",
          "pk": true,
          "type": "text",
          "required": true
        },
        {
          "name": "instance_id",
          "type": "uuid",
          "required": true
        },
        {
          "name": "actor",
          "type": "uuid",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 16
          },
          "name": "seat",
          "type": "text",
          "required": true
        },
        {
          "name": "revision",
          "type": "bigint",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 16
          },
          "name": "phase",
          "type": "text",
          "required": true
        },
        {
          "bounds": {
            "kind": "object",
            "fields": {
              "actions": {
                "kind": "array",
                "maxItems": 6,
                "items": {
                  "kind": "string",
                  "enumValues": [
                    "move",
                    "resign",
                    "offer_draw",
                    "accept_draw",
                    "decline_draw",
                    "sign"
                  ]
                }
              },
              "base_ms": {
                "kind": "integer",
                "intMin": 0,
                "intMax": 10800000
              },
              "black_ms": {
                "kind": "integer",
                "intMin": 0,
                "intMax": 10800000
              },
              "black_name": {
                "kind": "string",
                "sizeMax": 32
              },
              "clock": {
                "kind": "string",
                "enumValues": [
                  "none",
                  "1+0",
                  "3+2",
                  "5+0",
                  "10+0",
                  "15+10"
                ]
              },
              "deadline": {
                "kind": "integer",
                "intMin": 0,
                "intMax": 9007199254740991
              },
              "draw_offer": {
                "kind": "string",
                "enumValues": [
                  "",
                  "white",
                  "black"
                ]
              },
              "fen": {
                "kind": "string",
                "sizeMax": 100
              },
              "inc_ms": {
                "kind": "integer",
                "intMin": 0,
                "intMax": 10800000
              },
              "joined": {
                "kind": "array",
                "maxItems": 2,
                "items": {
                  "kind": "string",
                  "enumValues": [
                    "white",
                    "black"
                  ]
                }
              },
              "moved_at": {
                "kind": "integer",
                "intMin": 0,
                "intMax": 9007199254740991
              },
              "moves": {
                "kind": "string",
                "sizeMax": 3600
              },
              "phase": {
                "kind": "string",
                "enumValues": [
                  "waiting",
                  "playing",
                  "finished"
                ]
              },
              "reason": {
                "kind": "string",
                "enumValues": [
                  "",
                  "checkmate",
                  "stalemate",
                  "fifty-move rule",
                  "resignation",
                  "agreement",
                  "time",
                  "abandoned"
                ]
              },
              "result": {
                "kind": "string",
                "enumValues": [
                  "",
                  "white",
                  "black",
                  "draw"
                ]
              },
              "seat": {
                "kind": "string",
                "enumValues": [
                  "white",
                  "black"
                ]
              },
              "seats": {
                "kind": "array",
                "maxItems": 2,
                "items": {
                  "kind": "string",
                  "enumValues": [
                    "white",
                    "black"
                  ]
                }
              },
              "start_fen": {
                "kind": "string",
                "sizeMax": 100
              },
              "turn": {
                "kind": "string",
                "enumValues": [
                  "white",
                  "black"
                ]
              },
              "white_ms": {
                "kind": "integer",
                "intMin": 0,
                "intMax": 10800000
              },
              "white_name": {
                "kind": "string",
                "sizeMax": 32
              }
            }
          },
          "name": "view",
          "type": "json",
          "required": true
        }
      ]
    },
    "chess_match_command": {
      "durability": "live",
      "fields": [
        {
          "bounds": {
            "sizeMax": 128
          },
          "name": "id",
          "pk": true,
          "type": "text",
          "required": true
        },
        {
          "name": "instance_id",
          "type": "uuid",
          "required": true
        },
        {
          "defaulted": true,
          "name": "actor",
          "type": "uuid",
          "required": true
        },
        {
          "bounds": {
            "kind": "object",
            "fields": {
              "event": {
                "kind": "object",
                "fields": {
                  "kind": {
                    "kind": "string",
                    "enumValues": [
                      "accept_draw",
                      "decline_draw",
                      "move",
                      "offer_draw",
                      "resign",
                      "sign"
                    ]
                  },
                  "payload": {
                    "kind": "object"
                  }
                }
              },
              "expected_revision": {
                "kind": "string",
                "sizeMax": 20
              },
              "version": {
                "kind": "integer",
                "intMin": 1,
                "intMax": 9007199254740991
              }
            }
          },
          "name": "request",
          "type": "json",
          "required": true
        },
        {
          "name": "revision",
          "type": "bigint",
          "required": false
        },
        {
          "enum": [
            "",
            "accepted",
            "rejected"
          ],
          "name": "outcome",
          "type": "text",
          "required": false
        },
        {
          "bounds": {
            "sizeMax": 64
          },
          "name": "reason",
          "type": "text",
          "required": false
        }
      ]
    },
    "chess_match_open": {
      "durability": "live",
      "fields": [
        {
          "bounds": {
            "sizeMax": 128
          },
          "name": "id",
          "pk": true,
          "type": "text",
          "required": true
        },
        {
          "name": "instance_id",
          "type": "uuid",
          "required": true
        },
        {
          "defaulted": true,
          "name": "actor",
          "type": "uuid",
          "required": true
        },
        {
          "enum": [
            "create",
            "join"
          ],
          "name": "kind",
          "type": "text",
          "required": true
        },
        {
          "name": "input",
          "type": "json",
          "required": true
        },
        {
          "enum": [
            "",
            "accepted",
            "rejected"
          ],
          "name": "outcome",
          "type": "text",
          "required": false
        },
        {
          "bounds": {
            "sizeMax": 64
          },
          "name": "reason",
          "type": "text",
          "required": false
        }
      ]
    },
    "chess_match_public": {
      "durability": "live",
      "fields": [
        {
          "bounds": {
            "sizeMax": 36
          },
          "name": "id",
          "pk": true,
          "type": "text",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 32
          },
          "name": "white_name",
          "type": "text",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 5
          },
          "name": "clock",
          "type": "text",
          "required": true
        }
      ]
    },
    "chess_presence_seat": {
      "durability": "live",
      "fields": [
        {
          "bounds": {
            "sizeMax": 64
          },
          "name": "id",
          "pk": true,
          "type": "text",
          "required": true
        },
        {
          "name": "instance_id",
          "type": "uuid",
          "required": true
        },
        {
          "name": "actor",
          "type": "uuid",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 16
          },
          "name": "seat",
          "type": "text",
          "required": true
        },
        {
          "name": "revision",
          "type": "bigint",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 16
          },
          "name": "phase",
          "type": "text",
          "required": true
        },
        {
          "bounds": {
            "kind": "object",
            "fields": {
              "leases": {
                "kind": "array",
                "maxItems": 16,
                "items": {
                  "kind": "object",
                  "fields": {
                    "id": {
                      "kind": "string",
                      "sizeMax": 36
                    },
                    "until": {
                      "kind": "integer",
                      "intMin": 0,
                      "intMax": 9007199254740991
                    }
                  }
                }
              },
              "name": {
                "kind": "string",
                "sizeMax": 32
              },
              "phase": {
                "kind": "string",
                "enumValues": [
                  "hidden",
                  "visible"
                ]
              },
              "until": {
                "kind": "integer",
                "intMin": 0,
                "intMax": 9007199254740991
              }
            }
          },
          "name": "view",
          "type": "json",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 32
          },
          "name": "name",
          "type": "text",
          "required": false
        }
      ]
    },
    "chess_presence_command": {
      "durability": "live",
      "fields": [
        {
          "bounds": {
            "sizeMax": 128
          },
          "name": "id",
          "pk": true,
          "type": "text",
          "required": true
        },
        {
          "name": "instance_id",
          "type": "uuid",
          "required": true
        },
        {
          "defaulted": true,
          "name": "actor",
          "type": "uuid",
          "required": true
        },
        {
          "bounds": {
            "kind": "object",
            "fields": {
              "event": {
                "kind": "object",
                "fields": {
                  "kind": {
                    "kind": "string",
                    "enumValues": [
                      "hide",
                      "show"
                    ]
                  },
                  "payload": {
                    "kind": "object"
                  }
                }
              },
              "expected_revision": {
                "kind": "string",
                "sizeMax": 20
              },
              "version": {
                "kind": "integer",
                "intMin": 1,
                "intMax": 9007199254740991
              }
            }
          },
          "name": "request",
          "type": "json",
          "required": true
        },
        {
          "name": "revision",
          "type": "bigint",
          "required": false
        },
        {
          "enum": [
            "",
            "accepted",
            "rejected"
          ],
          "name": "outcome",
          "type": "text",
          "required": false
        },
        {
          "bounds": {
            "sizeMax": 64
          },
          "name": "reason",
          "type": "text",
          "required": false
        }
      ]
    },
    "chess_presence_public": {
      "durability": "live",
      "fields": [
        {
          "bounds": {
            "sizeMax": 36
          },
          "name": "id",
          "pk": true,
          "type": "text",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 32
          },
          "name": "name",
          "type": "text",
          "required": true
        }
      ]
    },
    "chess_presence_lease": {
      "durability": "live",
      "fields": [
        {
          "bounds": {
            "sizeMin": 36,
            "sizeMax": 36
          },
          "name": "id",
          "pk": true,
          "type": "text",
          "required": true
        },
        {
          "defaulted": true,
          "name": "actor",
          "type": "uuid",
          "required": true
        },
        {
          "bounds": {
            "intMin": 0
          },
          "name": "beat",
          "type": "int",
          "required": true
        }
      ]
    },
    "chess_challenge_seat": {
      "durability": "live",
      "fields": [
        {
          "bounds": {
            "sizeMax": 64
          },
          "name": "id",
          "pk": true,
          "type": "text",
          "required": true
        },
        {
          "name": "instance_id",
          "type": "uuid",
          "required": true
        },
        {
          "name": "actor",
          "type": "uuid",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 16
          },
          "name": "seat",
          "type": "text",
          "required": true
        },
        {
          "name": "revision",
          "type": "bigint",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 16
          },
          "name": "phase",
          "type": "text",
          "required": true
        },
        {
          "bounds": {
            "kind": "object",
            "fields": {
              "clock": {
                "kind": "string",
                "enumValues": [
                  "none",
                  "1+0",
                  "3+2",
                  "5+0",
                  "10+0",
                  "15+10"
                ]
              },
              "deadline": {
                "kind": "integer",
                "intMin": 0,
                "intMax": 9007199254740991
              },
              "inviter": {
                "kind": "string",
                "sizeMax": 36
              },
              "inviter_name": {
                "kind": "string",
                "sizeMax": 32
              },
              "phase": {
                "kind": "string",
                "enumValues": [
                  "offered",
                  "accepted",
                  "declined",
                  "cancelled",
                  "expired"
                ]
              },
              "room": {
                "kind": "string",
                "sizeMax": 36
              },
              "target": {
                "kind": "string",
                "sizeMax": 36
              },
              "target_name": {
                "kind": "string",
                "sizeMax": 32
              }
            }
          },
          "name": "view",
          "type": "json",
          "required": true
        },
        {
          "bounds": {
            "sizeMax": 32
          },
          "name": "inviter_name",
          "type": "text",
          "required": false
        },
        {
          "bounds": {
            "sizeMax": 32
          },
          "name": "target_name",
          "type": "text",
          "required": false
        },
        {
          "bounds": {
            "sizeMax": 5
          },
          "name": "clock",
          "type": "text",
          "required": false
        },
        {
          "bounds": {
            "sizeMax": 36
          },
          "name": "room",
          "type": "text",
          "required": false
        }
      ]
    },
    "chess_challenge_command": {
      "durability": "live",
      "fields": [
        {
          "bounds": {
            "sizeMax": 128
          },
          "name": "id",
          "pk": true,
          "type": "text",
          "required": true
        },
        {
          "name": "instance_id",
          "type": "uuid",
          "required": true
        },
        {
          "defaulted": true,
          "name": "actor",
          "type": "uuid",
          "required": true
        },
        {
          "bounds": {
            "kind": "object",
            "fields": {
              "event": {
                "kind": "object",
                "fields": {
                  "kind": {
                    "kind": "string",
                    "enumValues": [
                      "accept",
                      "cancel",
                      "decline"
                    ]
                  },
                  "payload": {
                    "kind": "object"
                  }
                }
              },
              "expected_revision": {
                "kind": "string",
                "sizeMax": 20
              },
              "version": {
                "kind": "integer",
                "intMin": 1,
                "intMax": 9007199254740991
              }
            }
          },
          "name": "request",
          "type": "json",
          "required": true
        },
        {
          "name": "revision",
          "type": "bigint",
          "required": false
        },
        {
          "enum": [
            "",
            "accepted",
            "rejected"
          ],
          "name": "outcome",
          "type": "text",
          "required": false
        },
        {
          "bounds": {
            "sizeMax": 64
          },
          "name": "reason",
          "type": "text",
          "required": false
        }
      ]
    },
    "chess_challenge_open": {
      "durability": "live",
      "fields": [
        {
          "bounds": {
            "sizeMax": 128
          },
          "name": "id",
          "pk": true,
          "type": "text",
          "required": true
        },
        {
          "name": "instance_id",
          "type": "uuid",
          "required": true
        },
        {
          "defaulted": true,
          "name": "actor",
          "type": "uuid",
          "required": true
        },
        {
          "enum": [
            "create",
            "join"
          ],
          "name": "kind",
          "type": "text",
          "required": true
        },
        {
          "name": "input",
          "type": "json",
          "required": true
        },
        {
          "enum": [
            "",
            "accepted",
            "rejected"
          ],
          "name": "outcome",
          "type": "text",
          "required": false
        },
        {
          "bounds": {
            "sizeMax": 64
          },
          "name": "reason",
          "type": "text",
          "required": false
        }
      ]
    }
  },
  "types": {
    "types": {
      "string": {
        "pg": "text",
        "column": "plain",
        "subset": true,
        "base": [
          "text",
          "varchar",
          "bpchar",
          "tsvector"
        ],
        "json": "string",
        "refuse": "\\x00",
        "order": "text",
        "beyond": [
          "scalar-values"
        ]
      },
      "bool": {
        "pg": "boolean",
        "column": "plain",
        "subset": true,
        "base": [
          "bool",
          "boolean"
        ],
        "json": "boolean",
        "order": "boolean",
        "beyond": []
      },
      "int32": {
        "pg": "integer",
        "column": "plain",
        "subset": true,
        "base": [
          "int2",
          "int4",
          "integer",
          "smallint"
        ],
        "json": "number",
        "min": -2147483648,
        "max": 2147483647,
        "order": "number",
        "beyond": []
      },
      "int64": {
        "pg": "bigint",
        "column": "domain",
        "subset": false,
        "sql": "portable_int64",
        "base": [
          "int8",
          "bigint"
        ],
        "json": "string",
        "pattern": "^(0|-?[1-9][0-9]*)$",
        "order": "integer",
        "beyond": [
          "int64-range"
        ]
      },
      "double": {
        "pg": "double precision",
        "column": "checked",
        "subset": true,
        "base": [
          "float4",
          "float8",
          "double precision",
          "real"
        ],
        "json": "number",
        "order": "number",
        "beyond": []
      },
      "bytes": {
        "pg": "bytea",
        "column": "domain",
        "subset": false,
        "sql": "portable_bytes",
        "base": [
          "bytea"
        ],
        "json": "string",
        "pattern": "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$",
        "order": "none",
        "beyond": []
      },
      "uuid": {
        "pg": "uuid",
        "column": "plain",
        "subset": true,
        "base": [
          "uuid"
        ],
        "json": "string",
        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
        "order": "text",
        "beyond": []
      },
      "timestamp": {
        "pg": "timestamptz",
        "column": "domain",
        "subset": false,
        "sql": "portable_timestamp",
        "base": [
          "timestamptz",
          "timestamp with time zone"
        ],
        "json": "string",
        "pattern": "^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\\.[0-9]{6}Z$",
        "order": "text",
        "beyond": [
          "calendar"
        ]
      },
      "duration": {
        "pg": "interval",
        "column": "domain",
        "subset": false,
        "sql": "portable_duration",
        "base": [
          "interval"
        ],
        "json": "string",
        "pattern": "^PT(0|[1-9][0-9]*)(\\.[0-9]{0,5}[1-9])?S$",
        "order": "duration",
        "beyond": [
          "duration-range"
        ]
      },
      "decimal": {
        "pg": "numeric",
        "column": "domain",
        "subset": false,
        "base": [
          "numeric",
          "decimal"
        ],
        "json": "string",
        "pattern": "^(0|-?[1-9][0-9]*|-?(0|[1-9][0-9]*)\\.[0-9]*[1-9])$",
        "order": "decimal",
        "beyond": [
          "decimal-profile"
        ]
      },
      "date": {
        "pg": "date",
        "column": "checked",
        "subset": true,
        "base": [
          "date"
        ],
        "json": "string",
        "pattern": "^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$",
        "order": "text",
        "beyond": [
          "calendar"
        ]
      },
      "time": {
        "pg": "time(6)",
        "column": "domain",
        "subset": false,
        "sql": "portable_time",
        "base": [
          "time",
          "time without time zone"
        ],
        "json": "string",
        "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\\.[0-9]{6}$",
        "order": "text",
        "beyond": []
      },
      "timezone": {
        "pg": "text",
        "column": "checked",
        "subset": true,
        "base": [
          "text"
        ],
        "json": "string",
        "pattern": "^[A-Za-z0-9+_/-]+$",
        "order": "none",
        "beyond": [
          "tzdb"
        ]
      },
      "json": {
        "pg": "json",
        "column": "checked",
        "subset": false,
        "base": [
          "json",
          "jsonb"
        ],
        "json": "value",
        "order": "none",
        "beyond": [
          "scalar-values",
          "finite-numbers"
        ]
      },
      "geojson": {
        "pg": "json",
        "column": "checked",
        "subset": false,
        "base": [
          "json",
          "jsonb",
          "geometry",
          "geography"
        ],
        "json": "value",
        "order": "none",
        "beyond": [
          "scalar-values",
          "finite-numbers",
          "ring-closure"
        ]
      }
    },
    "aliases": {
      "text": "string",
      "int": "int32",
      "bigint": "int64",
      "timestamptz": "timestamp",
      "tsvector": "string"
    }
  },
  "carriers": {
    "types": {
      "string": {
        "pg": "text",
        "column": "plain",
        "subset": true,
        "base": [
          "text",
          "varchar",
          "bpchar",
          "tsvector"
        ],
        "json": "string",
        "refuse": "\\x00",
        "order": "text",
        "beyond": [
          "scalar-values"
        ]
      },
      "bool": {
        "pg": "boolean",
        "column": "plain",
        "subset": true,
        "base": [
          "bool",
          "boolean"
        ],
        "json": "boolean",
        "order": "boolean",
        "beyond": []
      },
      "int32": {
        "pg": "integer",
        "column": "plain",
        "subset": true,
        "base": [
          "int2",
          "int4",
          "integer",
          "smallint"
        ],
        "json": "number",
        "min": -2147483648,
        "max": 2147483647,
        "order": "number",
        "beyond": []
      },
      "int64": {
        "pg": "bigint",
        "column": "domain",
        "subset": false,
        "sql": "portable_int64",
        "base": [
          "int8",
          "bigint"
        ],
        "json": "string",
        "pattern": "^(0|-?[1-9][0-9]*)$",
        "order": "integer",
        "beyond": [
          "int64-range"
        ]
      },
      "double": {
        "pg": "double precision",
        "column": "checked",
        "subset": true,
        "base": [
          "float4",
          "float8",
          "double precision",
          "real"
        ],
        "json": "number",
        "order": "number",
        "beyond": []
      },
      "bytes": {
        "pg": "bytea",
        "column": "domain",
        "subset": false,
        "sql": "portable_bytes",
        "base": [
          "bytea"
        ],
        "json": "string",
        "pattern": "^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$",
        "order": "none",
        "beyond": []
      },
      "uuid": {
        "pg": "uuid",
        "column": "plain",
        "subset": true,
        "base": [
          "uuid"
        ],
        "json": "string",
        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
        "order": "text",
        "beyond": []
      },
      "timestamp": {
        "pg": "timestamptz",
        "column": "domain",
        "subset": false,
        "sql": "portable_timestamp",
        "base": [
          "timestamptz",
          "timestamp with time zone"
        ],
        "json": "string",
        "pattern": "^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\\.[0-9]{6}Z$",
        "order": "text",
        "beyond": [
          "calendar"
        ]
      },
      "duration": {
        "pg": "interval",
        "column": "domain",
        "subset": false,
        "sql": "portable_duration",
        "base": [
          "interval"
        ],
        "json": "string",
        "pattern": "^PT(0|[1-9][0-9]*)(\\.[0-9]{0,5}[1-9])?S$",
        "order": "duration",
        "beyond": [
          "duration-range"
        ]
      },
      "decimal": {
        "pg": "numeric",
        "column": "domain",
        "subset": false,
        "base": [
          "numeric",
          "decimal"
        ],
        "json": "string",
        "pattern": "^(0|-?[1-9][0-9]*|-?(0|[1-9][0-9]*)\\.[0-9]*[1-9])$",
        "order": "decimal",
        "beyond": [
          "decimal-profile"
        ]
      },
      "date": {
        "pg": "date",
        "column": "checked",
        "subset": true,
        "base": [
          "date"
        ],
        "json": "string",
        "pattern": "^(000[1-9]|00[1-9][0-9]|0[1-9][0-9]{2}|[1-9][0-9]{3})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$",
        "order": "text",
        "beyond": [
          "calendar"
        ]
      },
      "time": {
        "pg": "time(6)",
        "column": "domain",
        "subset": false,
        "sql": "portable_time",
        "base": [
          "time",
          "time without time zone"
        ],
        "json": "string",
        "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\\.[0-9]{6}$",
        "order": "text",
        "beyond": []
      },
      "timezone": {
        "pg": "text",
        "column": "checked",
        "subset": true,
        "base": [
          "text"
        ],
        "json": "string",
        "pattern": "^[A-Za-z0-9+_/-]+$",
        "order": "none",
        "beyond": [
          "tzdb"
        ]
      },
      "json": {
        "pg": "json",
        "column": "checked",
        "subset": false,
        "base": [
          "json",
          "jsonb"
        ],
        "json": "value",
        "order": "none",
        "beyond": [
          "scalar-values",
          "finite-numbers"
        ]
      },
      "geojson": {
        "pg": "json",
        "column": "checked",
        "subset": false,
        "base": [
          "json",
          "jsonb",
          "geometry",
          "geography"
        ],
        "json": "value",
        "order": "none",
        "beyond": [
          "scalar-values",
          "finite-numbers",
          "ring-closure"
        ]
      }
    },
    "aliases": {
      "text": "string",
      "int": "int32",
      "bigint": "int64",
      "timestamptz": "timestamp",
      "tsvector": "string"
    }
  },
  "migrations": [
    "services/database/migrations/000_extensions.sql",
    "services/database/migrations/001_roles.sql",
    "services/database/migrations/002_grants.sql",
    "services/database/migrations/004_types.sql",
    "services/database/migrations/005_create_tables.sql",
    "services/database/migrations/006_policies.sql",
    "services/database/migrations/007_txid.sql",
    "services/database/migrations/008_publication.sql",
    "services/database/migrations/016_mecha_actors.sql"
  ],
  "pipelines": []
}
