{
  "schema": 2,
  "generated_at": "2026-10-16T10:06:12Z",
  "how_to_use": [
    "This file is the live state of the project. Read it before starting anything, and read it again before you push.",
    "Every milestone is open to anyone, the maintainer's own sessions and outside contributors alike, in any phase and any order, and nobody needs anyone's permission to take one. Nothing is held or reserved.",
    "Status 'open' means every dependency is built. 'waiting' means one is not: it can still be taken, by building what it rests on in the same pull request or by taking that dependency first. 'building' means somebody has an open pull request or claim for it, listed under claims: you may still work on it, but say so on their pull request first, so the two combine rather than collide.",
    "Start one by opening a draft pull request from a branch named milestone/<id>-<short-name>, which is also what lets CI accept a change under src/. The board picks that up by itself, and a pull request from any other branch counts too when its title starts with the milestone's id.",
    "A milestone is finished only when every acceptance check in its phase file is ticked with the evidence that proved it. A check you cannot run stays unticked and is named in the pull request.",
    "A milestone carrying next_after is waiting on exactly that one milestone, the quickest way to free it. One carrying started already has work landed, and says what is left.",
    "The prompt for your own assistant is at https://github.com/Justchicoo/Project-Ambrose/blob/main/contrib/AI-MILESTONES-HERE.md, and the rules it is held to are at https://github.com/Justchicoo/Project-Ambrose/blob/main/doc/MILESTONE-TRACK.md."
  ],
  "links": {
    "repository": "https://github.com/Justchicoo/Project-Ambrose",
    "milestone_track": "https://github.com/Justchicoo/Project-Ambrose/blob/main/doc/MILESTONE-TRACK.md",
    "contributor_track": "https://github.com/Justchicoo/Project-Ambrose/blob/main/doc/CONTRIBUTOR-TRACK.md",
    "prompt": "https://github.com/Justchicoo/Project-Ambrose/blob/main/contrib/AI-MILESTONES-HERE.md",
    "claim": "https://github.com/Justchicoo/Project-Ambrose/issues/new?template=claim_milestone.yml",
    "discord": "https://discord.gg/Dx6ACDUj6N",
    "state": "https://justchicoo.github.io/Project-Ambrose/state.json"
  },
  "progress": {
    "schema": 1,
    "milestones": {
      "done": 161,
      "total": 473,
      "percent": 34.0
    },
    "checks": {
      "done": 1288,
      "total": 2920,
      "percent": 44.1
    },
    "game": {
      "label": "Game server",
      "phases": [
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16
      ],
      "milestones": {
        "done": 136,
        "total": 287,
        "percent": 47.4
      },
      "checks": {
        "done": 1086,
        "total": 1807,
        "percent": 60.1
      }
    },
    "panel": {
      "label": "Panel",
      "phases": [
        17
      ],
      "milestones": {
        "done": 25,
        "total": 186,
        "percent": 13.4
      },
      "checks": {
        "done": 202,
        "total": 1113,
        "percent": 18.1
      }
    },
    "contributor_track": {
      "merged": 94,
      "open": 56
    },
    "phases": [
      {
        "phase": 1,
        "title": "Foundations to first handshake",
        "milestones_done": 22,
        "milestones_total": 22,
        "checks_done": 197,
        "checks_total": 197
      },
      {
        "phase": 2,
        "title": "Log in to character select",
        "milestones_done": 15,
        "milestones_total": 15,
        "checks_done": 119,
        "checks_total": 119
      },
      {
        "phase": 3,
        "title": "Create list and delete a wizard",
        "milestones_done": 27,
        "milestones_total": 28,
        "checks_done": 171,
        "checks_total": 178
      },
      {
        "phase": 4,
        "title": "A wizard stands in ravenwood",
        "milestones_done": 16,
        "milestones_total": 16,
        "checks_done": 127,
        "checks_total": 127
      },
      {
        "phase": 5,
        "title": "The zone comes alive for one player",
        "milestones_done": 8,
        "milestones_total": 8,
        "checks_done": 57,
        "checks_total": 57
      },
      {
        "phase": 6,
        "title": "Other players are visible",
        "milestones_done": 18,
        "milestones_total": 18,
        "checks_done": 139,
        "checks_total": 139
      },
      {
        "phase": 7,
        "title": "An npc offers a quest",
        "milestones_done": 6,
        "milestones_total": 13,
        "checks_done": 67,
        "checks_total": 88
      },
      {
        "phase": 8,
        "title": "The wizard grows vitals xp spells backpack and gear",
        "milestones_done": 9,
        "milestones_total": 14,
        "checks_done": 73,
        "checks_total": 101
      },
      {
        "phase": 9,
        "title": "A duel completes",
        "milestones_done": 5,
        "milestones_total": 12,
        "checks_done": 37,
        "checks_total": 83
      },
      {
        "phase": 10,
        "title": "Play the wizard city opening quests",
        "milestones_done": 1,
        "milestones_total": 22,
        "checks_done": 35,
        "checks_total": 151
      },
      {
        "phase": 11,
        "title": "Real combat",
        "milestones_done": 0,
        "milestones_total": 25,
        "checks_done": 0,
        "checks_total": 130
      },
      {
        "phase": 12,
        "title": "Social wizards instances and realms",
        "milestones_done": 4,
        "milestones_total": 23,
        "checks_done": 28,
        "checks_total": 139
      },
      {
        "phase": 13,
        "title": "Pets cantrips crafting and minigames",
        "milestones_done": 0,
        "milestones_total": 21,
        "checks_done": 0,
        "checks_total": 95
      },
      {
        "phase": 14,
        "title": "Dungeons tutorial and pvp",
        "milestones_done": 0,
        "milestones_total": 16,
        "checks_done": 0,
        "checks_total": 55
      },
      {
        "phase": 15,
        "title": "Housing gardening and fishing",
        "milestones_done": 0,
        "milestones_total": 21,
        "checks_done": 0,
        "checks_total": 68
      },
      {
        "phase": 16,
        "title": "Patch server and tooling ownership",
        "milestones_done": 5,
        "milestones_total": 13,
        "checks_done": 36,
        "checks_total": 80
      },
      {
        "phase": 17,
        "title": "Operations console admin api dashboard and metrics",
        "milestones_done": 25,
        "milestones_total": 186,
        "checks_done": 202,
        "checks_total": 1113
      }
    ],
    "card": "d33ba41a7a"
  },
  "contributor_track": {
    "open": 56,
    "merged": 94
  },
  "other_open_work": [
    {
      "number": 296,
      "title": "F-55: document CharacterNames.xml table fields",
      "who": "Rayoray12",
      "kind": "the contributor track",
      "url": "https://github.com/Justchicoo/Project-Ambrose/pull/296",
      "branch": "contrib/f-55-character-name-xml-tables-v3",
      "updated": "2026-10-14",
      "draft": false
    },
    {
      "number": 295,
      "title": "F-64: NPCServices.xml service table under root class hash 0x32a408e1",
      "who": "Rayoray12",
      "kind": "the contributor track",
      "url": "https://github.com/Justchicoo/Project-Ambrose/pull/295",
      "branch": "contrib/f-64-npcservices-xml-v3",
      "updated": "2026-10-14",
      "draft": false
    },
    {
      "number": 294,
      "title": "F-51: launcher client run leaves retail install unchanged",
      "who": "Rayoray12",
      "kind": "the contributor track",
      "url": "https://github.com/Justchicoo/Project-Ambrose/pull/294",
      "branch": "contrib/f-51-launcher-client-run-v3",
      "updated": "2026-10-14",
      "draft": false
    },
    {
      "number": 271,
      "title": "Dynamods: send a mod's state with it and honour m_bShowsObject",
      "who": "Justchicoo",
      "kind": "something else",
      "url": "https://github.com/Justchicoo/Project-Ambrose/pull/271",
      "branch": "claude/dynamod-investigation-6xqjkj",
      "updated": "2026-10-14",
      "draft": false
    },
    {
      "number": 248,
      "title": "F-49: revision files observation on r806919 install",
      "who": "Rayoray12",
      "kind": "something else",
      "url": "https://github.com/Justchicoo/Project-Ambrose/pull/248",
      "branch": "research/f-49-revision-files-web-install",
      "updated": "2026-10-13",
      "draft": false
    },
    {
      "number": 242,
      "title": "F-48: client config keys inventory (config.xml + preferences.xml)",
      "who": "Rayoray12",
      "kind": "something else",
      "url": "https://github.com/Justchicoo/Project-Ambrose/pull/242",
      "branch": "research/f-48-client-config-keys",
      "updated": "2026-10-13",
      "draft": false
    },
    {
      "number": 183,
      "title": "F-67: Spiral Door is a generic TeleportProximityBehaviorTemplate (template id 84113)",
      "who": "Rayoray12",
      "kind": "something else",
      "url": "https://github.com/Justchicoo/Project-Ambrose/pull/183",
      "branch": "research/f-67-spiral-door-v2",
      "updated": "2026-10-13",
      "draft": false
    }
  ],
  "counts": {
    "landed": 161,
    "building": 25,
    "open": 20,
    "waiting": 267
  },
  "phases": [
    {
      "phase": 1,
      "milestones": 22,
      "landed": 22,
      "open": 0,
      "building": 0,
      "waiting": 0
    },
    {
      "phase": 2,
      "milestones": 15,
      "landed": 15,
      "open": 0,
      "building": 0,
      "waiting": 0
    },
    {
      "phase": 3,
      "milestones": 28,
      "landed": 27,
      "open": 0,
      "building": 0,
      "waiting": 1
    },
    {
      "phase": 4,
      "milestones": 16,
      "landed": 16,
      "open": 0,
      "building": 0,
      "waiting": 0
    },
    {
      "phase": 5,
      "milestones": 8,
      "landed": 8,
      "open": 0,
      "building": 0,
      "waiting": 0
    },
    {
      "phase": 6,
      "milestones": 18,
      "landed": 18,
      "open": 0,
      "building": 0,
      "waiting": 0
    },
    {
      "phase": 7,
      "milestones": 13,
      "landed": 6,
      "open": 0,
      "building": 2,
      "waiting": 5
    },
    {
      "phase": 8,
      "milestones": 14,
      "landed": 9,
      "open": 1,
      "building": 1,
      "waiting": 3
    },
    {
      "phase": 9,
      "milestones": 12,
      "landed": 5,
      "open": 0,
      "building": 1,
      "waiting": 6
    },
    {
      "phase": 10,
      "milestones": 22,
      "landed": 1,
      "open": 3,
      "building": 1,
      "waiting": 17
    },
    {
      "phase": 11,
      "milestones": 25,
      "landed": 0,
      "open": 0,
      "building": 2,
      "waiting": 23
    },
    {
      "phase": 12,
      "milestones": 23,
      "landed": 4,
      "open": 4,
      "building": 2,
      "waiting": 13
    },
    {
      "phase": 13,
      "milestones": 21,
      "landed": 0,
      "open": 1,
      "building": 1,
      "waiting": 19
    },
    {
      "phase": 14,
      "milestones": 16,
      "landed": 0,
      "open": 0,
      "building": 0,
      "waiting": 16
    },
    {
      "phase": 15,
      "milestones": 21,
      "landed": 0,
      "open": 0,
      "building": 0,
      "waiting": 21
    },
    {
      "phase": 16,
      "milestones": 13,
      "landed": 5,
      "open": 3,
      "building": 0,
      "waiting": 5
    },
    {
      "phase": 17,
      "milestones": 186,
      "landed": 25,
      "open": 8,
      "building": 15,
      "waiting": 138
    }
  ],
  "milestones": [
    {
      "id": "1.01",
      "title": "Toolchain hello (FND-1)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "S",
      "depends_on": [],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/1.01-<short-name>"
    },
    {
      "id": "1.02",
      "title": "Unit test harness (FND-2)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "S",
      "depends_on": [
        "1.01"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/1.02-<short-name>"
    },
    {
      "id": "1.03",
      "title": "Codestyle checker (FND-3)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "M",
      "depends_on": [
        "1.01"
      ],
      "checks_total": 10,
      "checks_done": 10,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/1.03-<short-name>"
    },
    {
      "id": "1.04",
      "title": "CI pipeline (FND-4)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "M",
      "depends_on": [
        "1.02",
        "1.03"
      ],
      "checks_total": 9,
      "checks_done": 9,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/1.04-<short-name>"
    },
    {
      "id": "1.05",
      "title": "common/Utilities (FND-5)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "S",
      "depends_on": [
        "1.02"
      ],
      "checks_total": 9,
      "checks_done": 9,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 5,
      "checks_left": 0,
      "branch": "milestone/1.05-<short-name>"
    },
    {
      "id": "1.06",
      "title": "ByteBuffer and DML primitives (FND-6 + NET-1)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "S",
      "depends_on": [
        "1.05"
      ],
      "checks_total": 14,
      "checks_done": 14,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/1.06-<short-name>"
    },
    {
      "id": "1.07",
      "title": "BitReader/BitWriter (OBJ-1 + FND-6)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "S",
      "depends_on": [
        "1.05"
      ],
      "checks_total": 13,
      "checks_done": 13,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/1.07-<short-name>"
    },
    {
      "id": "1.08",
      "title": "UTF-8/UTF-16, Base64, Hex (FND-6)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "S",
      "depends_on": [
        "1.05"
      ],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/1.08-<short-name>"
    },
    {
      "id": "1.09",
      "title": "ConfigMgr (FND-9)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "M",
      "depends_on": [
        "1.05"
      ],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/1.09-<short-name>"
    },
    {
      "id": "1.10",
      "title": "Logging (FND-10)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "M",
      "depends_on": [
        "1.09"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 7,
      "checks_left": 0,
      "branch": "milestone/1.10-<short-name>"
    },
    {
      "id": "1.11",
      "title": "Threading and Asio wrappers (FND-11)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "M",
      "depends_on": [
        "1.05"
      ],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/1.11-<short-name>"
    },
    {
      "id": "1.12",
      "title": "Crypto basics: SHA-256/512, CRC32 both variants, CSPRNG (FND-7 + PAT-2 Crc32)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "S",
      "depends_on": [
        "1.06"
      ],
      "checks_total": 12,
      "checks_done": 12,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 6,
      "checks_left": 0,
      "branch": "milestone/1.12-<short-name>"
    },
    {
      "id": "1.13",
      "title": "zlib Compression and KIWAD archive reader (new DAT-1; FND-8 zlib, PAT-2 KiwadHeader)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "M",
      "depends_on": [
        "1.12",
        "1.10"
      ],
      "checks_total": 15,
      "checks_done": 15,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 7,
      "checks_left": 0,
      "branch": "milestone/1.13-<short-name>"
    },
    {
      "id": "1.14",
      "title": "Message definition model and ordinal rules (NET-2)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "M",
      "depends_on": [
        "1.06",
        "1.13"
      ],
      "checks_total": 9,
      "checks_done": 9,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/1.14-<short-name>"
    },
    {
      "id": "1.15",
      "title": "Runtime message registry and declarations (NET-3)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "M",
      "depends_on": [
        "1.14"
      ],
      "checks_total": 10,
      "checks_done": 10,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/1.15-<short-name>"
    },
    {
      "id": "1.16",
      "title": "Dynamic messages and round-trip suite (NET-4)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "S",
      "depends_on": [
        "1.15"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 4,
      "checks_left": 0,
      "branch": "milestone/1.16-<short-name>"
    },
    {
      "id": "1.17",
      "title": "KI frame codec and reassembler (NET-5)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "M",
      "depends_on": [
        "1.06"
      ],
      "checks_total": 10,
      "checks_done": 10,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/1.17-<short-name>"
    },
    {
      "id": "1.18",
      "title": "Control messages and capture verification (NET-6)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "S",
      "depends_on": [
        "1.17"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/1.18-<short-name>"
    },
    {
      "id": "1.19",
      "title": "Async socket layer and SocketMgr (NET-7)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "M",
      "depends_on": [
        "1.17",
        "1.11",
        "1.10"
      ],
      "checks_total": 9,
      "checks_done": 9,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 5,
      "checks_left": 0,
      "branch": "milestone/1.19-<short-name>"
    },
    {
      "id": "1.20",
      "title": "App skeletons (FND-12)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "S",
      "depends_on": [
        "1.10",
        "1.11"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 4,
      "checks_left": 0,
      "branch": "milestone/1.20-<short-name>"
    },
    {
      "id": "1.21",
      "title": "Patch-free dev path documented (PAT-1)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "S",
      "depends_on": [
        "1.19"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/1.21-<short-name>"
    },
    {
      "id": "1.22",
      "title": "Session handshake and keep-alive (NET-8)",
      "phase": 1,
      "file": "doc/roadmap/phase-01-foundations-to-first-handshake.md",
      "size": "M",
      "depends_on": [
        "1.18",
        "1.19",
        "1.20",
        "1.16",
        "1.21"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/1.22-<short-name>"
    },
    {
      "id": "2.01",
      "title": "MySQLConnection and raw queries (FND-13)",
      "phase": 2,
      "file": "doc/roadmap/phase-02-log-in-to-character-select.md",
      "size": "M",
      "depends_on": [
        "1.10"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/2.01-<short-name>"
    },
    {
      "id": "2.02",
      "title": "Prepared statements (FND-14)",
      "phase": 2,
      "file": "doc/roadmap/phase-02-log-in-to-character-select.md",
      "size": "M",
      "depends_on": [
        "2.01"
      ],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/2.02-<short-name>"
    },
    {
      "id": "2.03",
      "title": "DatabaseWorkerPool (FND-15)",
      "phase": 2,
      "file": "doc/roadmap/phase-02-log-in-to-character-select.md",
      "size": "M",
      "depends_on": [
        "2.02",
        "1.11"
      ],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/2.03-<short-name>"
    },
    {
      "id": "2.04",
      "title": "Transactions, QueryCallback, DatabaseLoader (FND-16)",
      "phase": 2,
      "file": "doc/roadmap/phase-02-log-in-to-character-select.md",
      "size": "M",
      "depends_on": [
        "2.03"
      ],
      "checks_total": 10,
      "checks_done": 10,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/2.04-<short-name>"
    },
    {
      "id": "2.05",
      "title": "Updater: AutoSetup and base populate (FND-17 part 1)",
      "phase": 2,
      "file": "doc/roadmap/phase-02-log-in-to-character-select.md",
      "size": "M",
      "depends_on": [
        "2.04",
        "1.12"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/2.05-<short-name>"
    },
    {
      "id": "2.06",
      "title": "Updater: dated update application (FND-17 part 2)",
      "phase": 2,
      "file": "doc/roadmap/phase-02-log-in-to-character-select.md",
      "size": "M",
      "depends_on": [
        "2.05"
      ],
      "checks_total": 9,
      "checks_done": 9,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 6,
      "checks_left": 0,
      "branch": "milestone/2.06-<short-name>"
    },
    {
      "id": "2.07",
      "title": "dbimport (FND-20)",
      "phase": 2,
      "file": "doc/roadmap/phase-02-log-in-to-character-select.md",
      "size": "S",
      "depends_on": [
        "2.06"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 9,
      "checks_left": 0,
      "branch": "milestone/2.07-<short-name>"
    },
    {
      "id": "2.08",
      "title": "Pools wired into apps, DB appender (FND-21)",
      "phase": 2,
      "file": "doc/roadmap/phase-02-log-in-to-character-select.md",
      "size": "S",
      "depends_on": [
        "1.20",
        "2.07"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 7,
      "checks_left": 0,
      "branch": "milestone/2.08-<short-name>"
    },
    {
      "id": "2.09",
      "title": "Dispatch table, session states, LOGIN table (NET-9 + LOG-1)",
      "phase": 2,
      "file": "doc/roadmap/phase-02-log-in-to-character-select.md",
      "size": "M",
      "depends_on": [
        "1.22",
        "1.16"
      ],
      "checks_total": 14,
      "checks_done": 14,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 9,
      "checks_left": 0,
      "branch": "milestone/2.09-<short-name>"
    },
    {
      "id": "2.10",
      "title": "Outbound send API and base messages (NET-10)",
      "phase": 2,
      "file": "doc/roadmap/phase-02-log-in-to-character-select.md",
      "size": "S",
      "depends_on": [
        "2.09"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/2.10-<short-name>"
    },
    {
      "id": "2.11",
      "title": "Twofish-256 OFB (FND-8 + LOG-3 cipher)",
      "phase": 2,
      "file": "doc/roadmap/phase-02-log-in-to-character-select.md",
      "size": "M",
      "depends_on": [
        "1.12"
      ],
      "checks_total": 11,
      "checks_done": 11,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/2.11-<short-name>"
    },
    {
      "id": "2.12",
      "title": "Rec1, ClientKey1, PassKey3, session keys (LOG-3)",
      "phase": 2,
      "file": "doc/roadmap/phase-02-log-in-to-character-select.md",
      "size": "S",
      "depends_on": [
        "2.11",
        "1.08"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/2.12-<short-name>"
    },
    {
      "id": "2.13",
      "title": "db_login schema, AccountMgr, console account create (LOG-2)",
      "phase": 2,
      "file": "doc/roadmap/phase-02-log-in-to-character-select.md",
      "size": "M",
      "depends_on": [
        "2.08"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 9,
      "checks_left": 0,
      "branch": "milestone/2.13-<short-name>"
    },
    {
      "id": "2.14",
      "title": "Authentication: AUTHEN_V3 -> AUTHEN_RSP + ADMIT_IND (LOG-4)",
      "phase": 2,
      "file": "doc/roadmap/phase-02-log-in-to-character-select.md",
      "size": "M",
      "depends_on": [
        "2.09",
        "2.10",
        "2.12",
        "2.13"
      ],
      "checks_total": 10,
      "checks_done": 10,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 6,
      "checks_left": 0,
      "branch": "milestone/2.14-<short-name>"
    },
    {
      "id": "2.15",
      "title": "Login AFK timeout and shutdown notice (LOG-14)",
      "phase": 2,
      "file": "doc/roadmap/phase-02-log-in-to-character-select.md",
      "size": "S",
      "depends_on": [
        "2.14"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/2.15-<short-name>"
    },
    {
      "id": "3.01",
      "title": "KI string hash and property hash (OBJ-2, absorbs LOG-7 StringId)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "S",
      "depends_on": [
        "1.01"
      ],
      "checks_total": 11,
      "checks_done": 11,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/3.01-<short-name>"
    },
    {
      "id": "3.02",
      "title": "SerializerBinary blob envelope (OBJ-3)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "S",
      "depends_on": [
        "1.07",
        "1.13"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/3.02-<short-name>"
    },
    {
      "id": "3.03",
      "title": "Type dump loader and TypeRegistry (OBJ-4)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "M",
      "depends_on": [
        "3.01"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 6,
      "checks_left": 0,
      "branch": "milestone/3.03-<short-name>"
    },
    {
      "id": "3.04",
      "title": "Dynamic property object model (OBJ-5)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "M",
      "depends_on": [
        "3.03"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 4,
      "checks_left": 0,
      "branch": "milestone/3.04-<short-name>"
    },
    {
      "id": "3.05",
      "title": "Compact network codec (OBJ-8)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "M",
      "depends_on": [
        "3.04",
        "3.02"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 4,
      "checks_left": 0,
      "branch": "milestone/3.05-<short-name>"
    },
    {
      "id": "3.06",
      "title": "Hostile-input hardening and fuzzing (OBJ-19)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "S",
      "depends_on": [
        "3.05"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/3.06-<short-name>"
    },
    {
      "id": "3.07",
      "title": "Typed wrappers over dynamic objects (OBJ-10)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "M",
      "depends_on": [
        "3.04"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/3.07-<short-name>"
    },
    {
      "id": "3.08",
      "title": "db_characters schema, CharacterRepository, GuidGenerator (LOG-5)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "M",
      "depends_on": [
        "2.08"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/3.08-<short-name>"
    },
    {
      "id": "3.09",
      "title": "Character list (LOG-6)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "M",
      "depends_on": [
        "2.14",
        "3.08",
        "3.05"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/3.09-<short-name>"
    },
    {
      "id": "3.10",
      "title": "Versionable decode core (OBJ-6 part 1)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "M",
      "depends_on": [
        "3.04",
        "3.02"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/3.10-<short-name>"
    },
    {
      "id": "3.11",
      "title": "BINd files, bindecode CLI, corpus sweep (OBJ-6 part 2)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "M",
      "depends_on": [
        "3.10",
        "1.13"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 9,
      "checks_left": 0,
      "branch": "milestone/3.11-<short-name>"
    },
    {
      "id": "3.12",
      "title": "Text XML ObjectProperty reader (OBJ-13)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "S",
      "depends_on": [
        "3.04",
        "1.13"
      ],
      "checks_total": 4,
      "checks_done": 4,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/3.12-<short-name>"
    },
    {
      "id": "3.13",
      "title": "Locale .lang loader and localetool (OBJ-14 + QST-1)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "S",
      "depends_on": [
        "1.08",
        "1.13"
      ],
      "checks_total": 10,
      "checks_done": 10,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 6,
      "checks_left": 0,
      "branch": "milestone/3.13-<short-name>"
    },
    {
      "id": "3.14",
      "title": "Name tables and creation config extractor (LOG-7)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "M",
      "depends_on": [
        "3.11",
        "3.12",
        "3.13",
        "2.07"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/3.14-<short-name>"
    },
    {
      "id": "3.15",
      "title": "CreationInfo decode and validation (LOG-8 part 1)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "M",
      "depends_on": [
        "3.09",
        "3.14",
        "3.06"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/3.15-<short-name>"
    },
    {
      "id": "3.16",
      "title": "Character creation persist and real-client flow (LOG-8 part 2)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "M",
      "depends_on": [
        "3.15"
      ],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/3.16-<short-name>"
    },
    {
      "id": "3.17",
      "title": "Character deletion (LOG-9)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "S",
      "depends_on": [
        "3.09"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/3.17-<short-name>"
    },
    {
      "id": "3.18",
      "title": "Updater part 2: rehash, rename, dead refs, pending, modules (FND-18)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "M",
      "depends_on": [
        "2.06"
      ],
      "checks_total": 9,
      "checks_done": 9,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/3.18-<short-name>"
    },
    {
      "id": "3.19",
      "title": "CI pending SQL promotion and SQL validation (FND-19)",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "S",
      "depends_on": [
        "1.04",
        "3.18",
        "2.07"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 0,
      "checks_left": 0,
      "branch": "milestone/3.19-<short-name>"
    },
    {
      "id": "3.20",
      "title": "Find client data on the user's machine and guided setup",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "M",
      "depends_on": [
        "3.13",
        "3.14",
        "1.08",
        "2.07"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/3.20-<short-name>"
    },
    {
      "id": "3.21",
      "title": "Type data from the user's own client program",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "L",
      "depends_on": [
        "3.03",
        "3.20",
        "1.13"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/3.21-<short-name>"
    },
    {
      "id": "3.22",
      "title": "Automatic first-run setup",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "M",
      "depends_on": [
        "3.21"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 6,
      "checks_left": 0,
      "branch": "milestone/3.22-<short-name>"
    },
    {
      "id": "3.23",
      "title": "Keep up with KingsIsle's client revisions",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "M",
      "depends_on": [
        "3.22"
      ],
      "checks_total": 4,
      "checks_done": 4,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/3.23-<short-name>"
    },
    {
      "id": "3.24",
      "title": "Drive the retail client in tests",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "L",
      "depends_on": [
        "3.25",
        "2.14"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/3.24-<short-name>"
    },
    {
      "id": "3.25",
      "title": "Ambrose client launcher",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "L",
      "depends_on": [
        "3.22",
        "1.21"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 4,
      "checks_left": 0,
      "branch": "milestone/3.25-<short-name>"
    },
    {
      "id": "3.26",
      "title": "Launcher window",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "L",
      "depends_on": [
        "3.25",
        "1.04",
        "17.73"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/3.26-<short-name>"
    },
    {
      "id": "3.27",
      "title": "Launcher as its own app",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "M",
      "depends_on": [
        "3.26",
        "17.105",
        "17.183",
        "17.184"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.105",
        "17.183",
        "17.184"
      ],
      "status": "waiting",
      "note": "waiting on 17.105, 17.183, 17.184",
      "unlocks": 1,
      "checks_left": 7,
      "branch": "milestone/3.27-<short-name>"
    },
    {
      "id": "3.28",
      "title": "A type dump from any client, not only the two we tried",
      "phase": 3,
      "file": "doc/roadmap/phase-03-create-list-and-delete-a-wizard.md",
      "size": "M",
      "depends_on": [
        "3.21"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 0,
      "checks_left": 0,
      "branch": "milestone/3.28-<short-name>"
    },
    {
      "id": "4.01",
      "title": "sWorld tick, GameSession, ScriptMgr hooks and AddSC loaders (new core)",
      "phase": 4,
      "file": "doc/roadmap/phase-04-a-wizard-stands-in-ravenwood.md",
      "size": "M",
      "depends_on": [
        "2.09",
        "2.08"
      ],
      "checks_total": 3,
      "checks_done": 3,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 8,
      "checks_left": 0,
      "branch": "milestone/4.01-<short-name>"
    },
    {
      "id": "4.02",
      "title": "CommandMgr and security levels, console first (new; WIZ-5 core)",
      "phase": 4,
      "file": "doc/roadmap/phase-04-a-wizard-stands-in-ravenwood.md",
      "size": "M",
      "depends_on": [
        "4.01",
        "2.13"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 6,
      "checks_left": 0,
      "branch": "milestone/4.02-<short-name>"
    },
    {
      "id": "4.03",
      "title": "Realm registry and heartbeat (LOG-10)",
      "phase": 4,
      "file": "doc/roadmap/phase-04-a-wizard-stands-in-ravenwood.md",
      "size": "M",
      "depends_on": [
        "2.13",
        "4.01"
      ],
      "checks_total": 4,
      "checks_done": 4,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/4.03-<short-name>"
    },
    {
      "id": "4.04",
      "title": "World wire math and LocationString (WLD-1 + LOG-11 LocationString)",
      "phase": 4,
      "file": "doc/roadmap/phase-04-a-wizard-stands-in-ravenwood.md",
      "size": "S",
      "depends_on": [
        "1.14"
      ],
      "checks_total": 11,
      "checks_done": 11,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/4.04-<short-name>"
    },
    {
      "id": "4.05",
      "title": "Character select and login key (LOG-11)",
      "phase": 4,
      "file": "doc/roadmap/phase-04-a-wizard-stands-in-ravenwood.md",
      "size": "M",
      "depends_on": [
        "3.09",
        "4.03",
        "4.04"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/4.05-<short-name>"
    },
    {
      "id": "4.06",
      "title": "Login-to-game handoff transport (NET-13)",
      "phase": 4,
      "file": "doc/roadmap/phase-04-a-wizard-stands-in-ravenwood.md",
      "size": "S",
      "depends_on": [
        "4.05",
        "2.10"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/4.06-<short-name>"
    },
    {
      "id": "4.07",
      "title": "Gameserver login key validation (LOG-12)",
      "phase": 4,
      "file": "doc/roadmap/phase-04-a-wizard-stands-in-ravenwood.md",
      "size": "S",
      "depends_on": [
        "4.06"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/4.07-<short-name>"
    },
    {
      "id": "4.08",
      "title": "Zone extractor part 1: WizZoneData (WLD-2 + QST-4 zone objects)",
      "phase": 4,
      "file": "doc/roadmap/phase-04-a-wizard-stands-in-ravenwood.md",
      "size": "M",
      "depends_on": [
        "3.11",
        "2.07"
      ],
      "checks_total": 12,
      "checks_done": 12,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/4.08-<short-name>"
    },
    {
      "id": "4.09",
      "title": "sZoneMgr and reload (WLD-4)",
      "phase": 4,
      "file": "doc/roadmap/phase-04-a-wizard-stands-in-ravenwood.md",
      "size": "S",
      "depends_on": [
        "4.08",
        "4.02",
        "4.15"
      ],
      "checks_total": 9,
      "checks_done": 9,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 4,
      "checks_left": 0,
      "branch": "milestone/4.09-<short-name>"
    },
    {
      "id": "4.10",
      "title": "Maps, instances, mobile ids, GID service (WLD-5)",
      "phase": 4,
      "file": "doc/roadmap/phase-04-a-wizard-stands-in-ravenwood.md",
      "size": "M",
      "depends_on": [
        "4.09",
        "4.01"
      ],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/4.10-<short-name>"
    },
    {
      "id": "4.11",
      "title": "CoreObject serializer and client-object builder (OBJ-9 + WLD-6)",
      "phase": 4,
      "file": "doc/roadmap/phase-04-a-wizard-stands-in-ravenwood.md",
      "size": "M",
      "depends_on": [
        "3.05",
        "3.07"
      ],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/4.11-<short-name>"
    },
    {
      "id": "4.12",
      "title": "Wizard service skeleton and login chatter (WIZ-1, without wizbang broadcast)",
      "phase": 4,
      "file": "doc/roadmap/phase-04-a-wizard-stands-in-ravenwood.md",
      "size": "S",
      "depends_on": [
        "2.09",
        "4.01"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/4.12-<short-name>"
    },
    {
      "id": "4.13",
      "title": "Attach handler server side (WLD-7 part 1)",
      "phase": 4,
      "file": "doc/roadmap/phase-04-a-wizard-stands-in-ravenwood.md",
      "size": "M",
      "depends_on": [
        "4.07",
        "4.10",
        "4.04"
      ],
      "checks_total": 9,
      "checks_done": 9,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/4.13-<short-name>"
    },
    {
      "id": "4.14",
      "title": "LOGINCOMPLETE and standing in zone (WLD-7 part 2 + WLD-8 CLIENTZONED)",
      "phase": 4,
      "file": "doc/roadmap/phase-04-a-wizard-stands-in-ravenwood.md",
      "size": "M",
      "depends_on": [
        "4.13",
        "4.11",
        "4.12"
      ],
      "checks_total": 11,
      "checks_done": 11,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/4.14-<short-name>"
    },
    {
      "id": "4.15",
      "title": "Reload framework and reload commands",
      "phase": 4,
      "file": "doc/roadmap/phase-04-a-wizard-stands-in-ravenwood.md",
      "size": "M",
      "depends_on": [
        "4.01",
        "4.02",
        "1.10"
      ],
      "checks_total": 12,
      "checks_done": 12,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 40,
      "checks_left": 0,
      "branch": "milestone/4.15-<short-name>"
    },
    {
      "id": "4.16",
      "title": "Live settings registry",
      "phase": 4,
      "file": "doc/roadmap/phase-04-a-wizard-stands-in-ravenwood.md",
      "size": "M",
      "depends_on": [
        "4.15",
        "2.08",
        "2.13"
      ],
      "checks_total": 12,
      "checks_done": 12,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 49,
      "checks_left": 0,
      "branch": "milestone/4.16-<short-name>"
    },
    {
      "id": "5.01",
      "title": "Template manifest and template store (OBJ-16, new DAT-2)",
      "phase": 5,
      "file": "doc/roadmap/phase-05-the-zone-comes-alive-for-one-player.md",
      "size": "M",
      "depends_on": [
        "3.11",
        "3.07",
        "4.15"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 6,
      "checks_left": 0,
      "branch": "milestone/5.01-<short-name>"
    },
    {
      "id": "5.02",
      "title": "Static zone objects appear (WLD-8)",
      "phase": 5,
      "file": "doc/roadmap/phase-05-the-zone-comes-alive-for-one-player.md",
      "size": "M",
      "depends_on": [
        "4.14",
        "5.01"
      ],
      "checks_total": 9,
      "checks_done": 9,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 5,
      "checks_left": 0,
      "branch": "milestone/5.02-<short-name>"
    },
    {
      "id": "5.03",
      "title": "Own movement tracking and persistence (WLD-9)",
      "phase": 5,
      "file": "doc/roadmap/phase-05-the-zone-comes-alive-for-one-player.md",
      "size": "S",
      "depends_on": [
        "4.14",
        "4.16"
      ],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 6,
      "checks_left": 0,
      "branch": "milestone/5.03-<short-name>"
    },
    {
      "id": "5.04",
      "title": "Level, school and stat-config extractor (WIZ-2)",
      "phase": 5,
      "file": "doc/roadmap/phase-05-the-zone-comes-alive-for-one-player.md",
      "size": "M",
      "depends_on": [
        "3.11",
        "2.07",
        "4.01",
        "4.15"
      ],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 4,
      "checks_left": 0,
      "branch": "milestone/5.04-<short-name>"
    },
    {
      "id": "5.05",
      "title": "Character state and player-object stats (WIZ-3)",
      "phase": 5,
      "file": "doc/roadmap/phase-05-the-zone-comes-alive-for-one-player.md",
      "size": "M",
      "depends_on": [
        "5.04",
        "4.11",
        "3.16",
        "4.16"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 8,
      "checks_left": 0,
      "branch": "milestone/5.05-<short-name>"
    },
    {
      "id": "5.06",
      "title": "Return to character select (LOG-13)",
      "phase": 5,
      "file": "doc/roadmap/phase-05-the-zone-comes-alive-for-one-player.md",
      "size": "M",
      "depends_on": [
        "2.14",
        "4.07",
        "5.03",
        "4.16"
      ],
      "checks_total": 9,
      "checks_done": 9,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 0,
      "checks_left": 0,
      "branch": "milestone/5.06-<short-name>"
    },
    {
      "id": "5.07",
      "title": "Binary type-registry cache (OBJ-15)",
      "phase": 5,
      "file": "doc/roadmap/phase-05-the-zone-comes-alive-for-one-player.md",
      "size": "S",
      "depends_on": [
        "3.03"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 0,
      "checks_left": 0,
      "branch": "milestone/5.07-<short-name>"
    },
    {
      "id": "5.08",
      "title": "Installer (FND-22)",
      "phase": 5,
      "file": "doc/roadmap/phase-05-the-zone-comes-alive-for-one-player.md",
      "size": "S",
      "depends_on": [
        "2.08"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 0,
      "checks_left": 0,
      "branch": "milestone/5.08-<short-name>"
    },
    {
      "id": "6.01",
      "title": "Whole-zone player broadcast (WLD-10)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "M",
      "depends_on": [
        "5.02",
        "5.03",
        "5.05",
        "4.16"
      ],
      "checks_total": 10,
      "checks_done": 10,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 10,
      "checks_left": 0,
      "branch": "milestone/6.01-<short-name>"
    },
    {
      "id": "6.02",
      "title": "PLAYERWIZBANG broadcast (WIZ-1 remainder)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "S",
      "depends_on": [
        "6.01"
      ],
      "checks_total": 4,
      "checks_done": 4,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 0,
      "checks_left": 0,
      "branch": "milestone/6.02-<short-name>"
    },
    {
      "id": "6.03",
      "title": "Say chat, quick chat, core emotes (WIZ-4)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "M",
      "depends_on": [
        "6.01",
        "4.02",
        "4.15",
        "4.16"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/6.03-<short-name>"
    },
    {
      "id": "6.04",
      "title": "GM commands in chat (WIZ-5 remainder)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "M",
      "depends_on": [
        "6.03",
        "5.01",
        "4.16"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 7,
      "checks_left": 0,
      "branch": "milestone/6.04-<short-name>"
    },
    {
      "id": "6.05",
      "title": "GM account, ban, character commands (LOG-17)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "M",
      "depends_on": [
        "6.04",
        "3.17",
        "4.15"
      ],
      "checks_total": 10,
      "checks_done": 10,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/6.05-<short-name>"
    },
    {
      "id": "6.06",
      "title": "Same-zone teleport and cs_tele (WLD-12)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "S",
      "depends_on": [
        "6.01",
        "4.02",
        "4.15"
      ],
      "checks_total": 9,
      "checks_done": 9,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/6.06-<short-name>"
    },
    {
      "id": "6.07",
      "title": "Cross-zone transfer via MSG_SERVERTRANSFER (WLD-13)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "M",
      "depends_on": [
        "6.06",
        "4.13"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 4,
      "checks_left": 0,
      "branch": "milestone/6.07-<short-name>"
    },
    {
      "id": "6.08",
      "title": "Logout, link-dead, AFK, shutdown (WLD-20)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "M",
      "depends_on": [
        "6.01",
        "4.16"
      ],
      "checks_total": 9,
      "checks_done": 9,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/6.08-<short-name>"
    },
    {
      "id": "6.09",
      "title": "Schema probe for classes missing from the dump (OBJ-11)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "M",
      "depends_on": [
        "3.11"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/6.09-<short-name>"
    },
    {
      "id": "6.10",
      "title": "Supplemental server-side schemas (OBJ-12)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "S",
      "depends_on": [
        "6.09",
        "3.03",
        "4.15"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 4,
      "checks_left": 0,
      "branch": "milestone/6.10-<short-name>"
    },
    {
      "id": "6.11",
      "title": "Trigger/volume schemas and zone WAD sweep (WLD-3 part 1 + OBJ-18)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "M",
      "depends_on": [
        "6.10"
      ],
      "checks_total": 9,
      "checks_done": 9,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/6.11-<short-name>"
    },
    {
      "id": "6.12",
      "title": "Volume/trigger extraction to world rows (WLD-3 part 2)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "M",
      "depends_on": [
        "6.11",
        "4.08"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/6.12-<short-name>"
    },
    {
      "id": "6.13",
      "title": "Volumes and walk-in trigger events (WLD-14)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "M",
      "depends_on": [
        "6.12",
        "5.03",
        "4.01",
        "4.15"
      ],
      "checks_total": 10,
      "checks_done": 10,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/6.13-<short-name>"
    },
    {
      "id": "6.14",
      "title": "Zone doors table and walk-in transfers (WLD-15)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "M",
      "depends_on": [
        "6.07",
        "6.13",
        "4.15"
      ],
      "checks_total": 9,
      "checks_done": 9,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 5,
      "checks_left": 0,
      "branch": "milestone/6.14-<short-name>"
    },
    {
      "id": "6.15",
      "title": "AOI grid and visibility sets, unit level (WLD-11 part 1)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "M",
      "depends_on": [
        "6.01",
        "4.16"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/6.15-<short-name>"
    },
    {
      "id": "6.16",
      "title": "AOI in the real client (WLD-11 part 2)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "M",
      "depends_on": [
        "6.15"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 6,
      "checks_left": 0,
      "branch": "milestone/6.16-<short-name>"
    },
    {
      "id": "6.17",
      "title": "Network hardening (NET-11)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "M",
      "depends_on": [
        "2.09",
        "4.16"
      ],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 0,
      "checks_left": 0,
      "branch": "milestone/6.17-<short-name>"
    },
    {
      "id": "6.18",
      "title": "Packet log, diagnostics, network hooks (NET-12)",
      "phase": 6,
      "file": "doc/roadmap/phase-06-other-players-are-visible.md",
      "size": "S",
      "depends_on": [
        "2.09",
        "4.02",
        "4.16"
      ],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 0,
      "checks_left": 0,
      "branch": "milestone/6.18-<short-name>"
    },
    {
      "id": "7.01",
      "title": "Object template extractor (OBJ-17 + QST-3)",
      "phase": 7,
      "file": "doc/roadmap/phase-07-an-npc-offers-a-quest.md",
      "size": "M",
      "depends_on": [
        "5.01",
        "6.10",
        "2.07"
      ],
      "checks_total": 9,
      "checks_done": 9,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 4,
      "checks_left": 0,
      "branch": "milestone/7.01-<short-name>"
    },
    {
      "id": "7.02",
      "title": "Quest/dialog/madlib model and blob encoders (QST-2)",
      "phase": 7,
      "file": "doc/roadmap/phase-07-an-npc-offers-a-quest.md",
      "size": "M",
      "depends_on": [
        "3.05",
        "3.02"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/7.02-<short-name>"
    },
    {
      "id": "7.03",
      "title": "Quest schema, sQuestMgr, validator (QST-5)",
      "phase": 7,
      "file": "doc/roadmap/phase-07-an-npc-offers-a-quest.md",
      "size": "M",
      "depends_on": [
        "7.02",
        "7.01",
        "3.13",
        "4.15"
      ],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/7.03-<short-name>"
    },
    {
      "id": "7.04",
      "title": "Requirement engine v1 (QST-6)",
      "phase": 7,
      "file": "doc/roadmap/phase-07-an-npc-offers-a-quest.md",
      "size": "M",
      "depends_on": [
        "7.03",
        "5.05",
        "4.15"
      ],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 6,
      "checks_left": 0,
      "branch": "milestone/7.04-<short-name>",
      "claim": {
        "who": "MeruneFleuruwu",
        "url": "https://github.com/Justchicoo/Project-Ambrose/issues/124",
        "kind": "a claim",
        "number": 124,
        "since": "2026-10-08",
        "updated": "2026-10-08",
        "stale": false
      },
      "claims": [
        {
          "who": "MeruneFleuruwu",
          "url": "https://github.com/Justchicoo/Project-Ambrose/issues/124",
          "kind": "a claim",
          "number": 124,
          "since": "2026-10-08",
          "updated": "2026-10-08",
          "stale": false
        }
      ]
    },
    {
      "id": "7.05",
      "title": "Quest authoring toolchain (QST-22)",
      "phase": 7,
      "file": "doc/roadmap/phase-07-an-npc-offers-a-quest.md",
      "size": "M",
      "depends_on": [
        "7.03",
        "4.08",
        "3.13"
      ],
      "checks_total": 7,
      "checks_done": 2,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "Kokoita has a pull request",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/7.05-<short-name>",
      "claim": {
        "who": "Kokoita",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/246",
        "kind": "a pull request",
        "number": 246,
        "since": "2026-10-13",
        "updated": "2026-10-13",
        "stale": false
      },
      "claims": [
        {
          "who": "Kokoita",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/246",
          "kind": "a pull request",
          "number": 246,
          "since": "2026-10-13",
          "updated": "2026-10-13",
          "stale": false
        }
      ]
    },
    {
      "id": "7.06",
      "title": "Character quest persistence and registry (QST-7)",
      "phase": 7,
      "file": "doc/roadmap/phase-07-an-npc-offers-a-quest.md",
      "size": "M",
      "depends_on": [
        "7.03",
        "3.08"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/7.06-<short-name>"
    },
    {
      "id": "7.07",
      "title": "NPC service menu (QST-8)",
      "phase": 7,
      "file": "doc/roadmap/phase-07-an-npc-offers-a-quest.md",
      "size": "M",
      "depends_on": [
        "5.02",
        "6.13",
        "7.02",
        "7.01",
        "4.16"
      ],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 6,
      "checks_left": 0,
      "branch": "milestone/7.07-<short-name>"
    },
    {
      "id": "7.08",
      "title": "Wizbang indicators (QST-9)",
      "phase": 7,
      "file": "doc/roadmap/phase-07-an-npc-offers-a-quest.md",
      "size": "S",
      "depends_on": [
        "7.07",
        "7.04",
        "7.06",
        "4.16"
      ],
      "checks_total": 6,
      "checks_done": 2,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "Kokoita has a pull request",
      "unlocks": 1,
      "checks_left": 4,
      "branch": "milestone/7.08-<short-name>",
      "started": {
        "by": "the maintainer's world session",
        "sent_as": "on main",
        "left": "Started on 2026-10-14 with two of three checks: the '?' outranks the '!', which outranks none, and an NPC with no option shows neither marker nor prompt. Left: the real-client check that the '!' goes within a second of accepting"
      },
      "claim": {
        "who": "Kokoita",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/253",
        "kind": "a pull request",
        "number": 253,
        "since": "2026-10-13",
        "updated": "2026-10-14",
        "stale": false
      },
      "claims": [
        {
          "who": "Kokoita",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/253",
          "kind": "a pull request",
          "number": 253,
          "since": "2026-10-13",
          "updated": "2026-10-14",
          "stale": false
        }
      ]
    },
    {
      "id": "7.09",
      "title": "Quest offer (QST-10)",
      "phase": 7,
      "file": "doc/roadmap/phase-07-an-npc-offers-a-quest.md",
      "size": "M",
      "depends_on": [
        "7.08"
      ],
      "checks_total": 6,
      "checks_done": 4,
      "done": false,
      "missing": [
        "7.08"
      ],
      "status": "waiting",
      "note": "waiting on 7.08",
      "unlocks": 1,
      "checks_left": 2,
      "branch": "milestone/7.09-<short-name>",
      "started": {
        "by": "the maintainer's world session",
        "sent_as": "on main",
        "left": "Landed on 2026-10-13 with two of three checks: the quest offer cache, the Prep option from the first Prep actor, MSG_ACTORDIALOG and MSG_QUESTOFFER sent as bare objects, and Merle Ambrose's enrollment quest WC-MAIN-C01-001, whose Prep lines and offer window real-client runs showed. Left: the real-client check's rewards (10.08), the '!' that stays after a decline (7.08), and a side quest that is not Mainline to decline, since the client hides Decline on a Mainline offer"
      },
      "next_after": "7.08"
    },
    {
      "id": "7.10",
      "title": "Accept quest and quest book sync (QST-11)",
      "phase": 7,
      "file": "doc/roadmap/phase-07-an-npc-offers-a-quest.md",
      "size": "M",
      "depends_on": [
        "7.09"
      ],
      "checks_total": 6,
      "checks_done": 2,
      "done": false,
      "missing": [
        "7.09"
      ],
      "status": "waiting",
      "note": "waiting on 7.09",
      "unlocks": 1,
      "checks_left": 4,
      "branch": "milestone/7.10-<short-name>",
      "started": {
        "by": "the maintainer's world session",
        "sent_as": "on main",
        "left": "Started on 2026-10-14 with one of three checks: an accepted quest is added with its start goals and shown with MSG_SENDQUEST and MSG_SENDGOAL, the book is resent at every login, and MSG_REMOVEQUEST takes a dropped quest out. Left: the two real-client checks, the quest book and helper for 'To Ravenwood!' and a relog keeping progress"
      },
      "next_after": "7.09"
    },
    {
      "id": "7.11",
      "title": "Goal logic engine and completion (QST-12)",
      "phase": 7,
      "file": "doc/roadmap/phase-07-an-npc-offers-a-quest.md",
      "size": "M",
      "depends_on": [
        "7.10"
      ],
      "checks_total": 6,
      "checks_done": 4,
      "done": false,
      "missing": [
        "7.10"
      ],
      "status": "waiting",
      "note": "waiting on 7.10",
      "unlocks": 3,
      "checks_left": 2,
      "branch": "milestone/7.11-<short-name>",
      "started": {
        "by": "the maintainer's world session",
        "sent_as": "on main",
        "left": "Started on 2026-10-14 with two of three checks: goal logic (linear, AND, OR with a required count, school-gated goals skipped) and the COMPLETEGOAL, COMPLETEQUEST, REMOVEQUEST order. Left: the real-client check, the goal-complete popup, the next goal in the helper and the quest-complete banner"
      },
      "next_after": "7.10"
    },
    {
      "id": "7.12",
      "title": "Persona goals (QST-13)",
      "phase": 7,
      "file": "doc/roadmap/phase-07-an-npc-offers-a-quest.md",
      "size": "M",
      "depends_on": [
        "7.11"
      ],
      "checks_total": 6,
      "checks_done": 4,
      "done": false,
      "missing": [
        "7.11"
      ],
      "status": "waiting",
      "note": "waiting on 7.11",
      "unlocks": 2,
      "checks_left": 2,
      "branch": "milestone/7.12-<short-name>",
      "started": {
        "by": "the maintainer's world session",
        "sent_as": "on main",
        "left": "Started on 2026-10-14 with two of three checks: persona goals bind by object name and are listed and completed at the NPC, and MSG_COMPLETEPERSONA is checked. Left: the real-client check, the '?', the completion lines and the follow-up offer"
      },
      "next_after": "7.11"
    },
    {
      "id": "7.13",
      "title": "Actor dialog lifecycle and dialog review (QST-14)",
      "phase": 7,
      "file": "doc/roadmap/phase-07-an-npc-offers-a-quest.md",
      "size": "M",
      "depends_on": [
        "7.12"
      ],
      "checks_total": 6,
      "checks_done": 4,
      "done": false,
      "missing": [
        "7.12"
      ],
      "status": "waiting",
      "note": "waiting on 7.12",
      "unlocks": 1,
      "checks_left": 2,
      "branch": "milestone/7.13-<short-name>",
      "started": {
        "by": "the maintainer's world session",
        "sent_as": "on main",
        "left": "Started on 2026-10-14 with two of three checks: dialog lines are filtered by their requirements, and an entry event fires OnDialogEvent once. Left: the real-client check of the Start, review and underway dialogs"
      },
      "next_after": "7.12"
    },
    {
      "id": "8.01",
      "title": "Live vitals, gold, potions (WIZ-6)",
      "phase": 8,
      "file": "doc/roadmap/phase-08-the-wizard-grows-vitals-xp-spells-backpack-and-gear.md",
      "size": "M",
      "depends_on": [
        "5.05",
        "6.04",
        "4.16"
      ],
      "checks_total": 12,
      "checks_done": 12,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/8.01-<short-name>"
    },
    {
      "id": "8.02",
      "title": "Experience and level-up (WIZ-7)",
      "phase": 8,
      "file": "doc/roadmap/phase-08-the-wizard-grows-vitals-xp-spells-backpack-and-gear.md",
      "size": "M",
      "depends_on": [
        "8.01",
        "4.16"
      ],
      "checks_total": 9,
      "checks_done": 7,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "Kokoita has a draft pull request",
      "unlocks": 4,
      "checks_left": 2,
      "branch": "milestone/8.02-<short-name>",
      "started": {
        "by": "the maintainer's world session",
        "sent_as": "[#267](https://github.com/Justchicoo/Project-Ambrose/pull/267)",
        "left": "Landed on 2026-10-14 with 3 of 4 checks: experience grants pass through Rate.XP.Quest or Rate.XP.Kill, carry a wizard up levels with each level's training points and full health and mana, send what is past the cap or a locked level to overflow, and save level and experience under their own revision, with MSG_LOCKLEVEL handled and `.character xp` and `.character level` working. Left: the real-client check, the level-up effect seen by a second client"
      },
      "claim": {
        "who": "Kokoita",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/281",
        "kind": "a draft pull request",
        "number": 281,
        "since": "2026-10-14",
        "updated": "2026-10-14",
        "stale": false
      },
      "claims": [
        {
          "who": "Kokoita",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/281",
          "kind": "a draft pull request",
          "number": 281,
          "since": "2026-10-14",
          "updated": "2026-10-14",
          "stale": false
        }
      ]
    },
    {
      "id": "8.03",
      "title": "School and secondary school (WIZ-8)",
      "phase": 8,
      "file": "doc/roadmap/phase-08-the-wizard-grows-vitals-xp-spells-backpack-and-gear.md",
      "size": "M",
      "depends_on": [
        "8.02",
        "7.07"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "8.02"
      ],
      "status": "waiting",
      "note": "waiting on 8.02",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/8.03-<short-name>",
      "next_after": "8.02"
    },
    {
      "id": "8.04",
      "title": "SpellMgr: spell templates (CMB-2 spells + WIZ-9 extractor)",
      "phase": 8,
      "file": "doc/roadmap/phase-08-the-wizard-grows-vitals-xp-spells-backpack-and-gear.md",
      "size": "M",
      "depends_on": [
        "5.01",
        "3.11",
        "4.15"
      ],
      "checks_total": 12,
      "checks_done": 12,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/8.04-<short-name>"
    },
    {
      "id": "8.05",
      "title": "Spellbook (WIZ-9)",
      "phase": 8,
      "file": "doc/roadmap/phase-08-the-wizard-grows-vitals-xp-spells-backpack-and-gear.md",
      "size": "M",
      "depends_on": [
        "8.04",
        "5.05"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 5,
      "checks_left": 0,
      "branch": "milestone/8.05-<short-name>"
    },
    {
      "id": "8.06",
      "title": "Item template extractor, core rows (WIZ-10 part 1)",
      "phase": 8,
      "file": "doc/roadmap/phase-08-the-wizard-grows-vitals-xp-spells-backpack-and-gear.md",
      "size": "M",
      "depends_on": [
        "7.01",
        "4.15"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/8.06-<short-name>"
    },
    {
      "id": "8.07",
      "title": "Item requirements, effects and set bonuses (WIZ-10 part 2)",
      "phase": 8,
      "file": "doc/roadmap/phase-08-the-wizard-grows-vitals-xp-spells-backpack-and-gear.md",
      "size": "M",
      "depends_on": [
        "8.06",
        "6.10"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/8.07-<short-name>"
    },
    {
      "id": "8.08",
      "title": "Backpack: item instances, add/remove/trash (WIZ-11 part 1)",
      "phase": 8,
      "file": "doc/roadmap/phase-08-the-wizard-grows-vitals-xp-spells-backpack-and-gear.md",
      "size": "M",
      "depends_on": [
        "8.06",
        "6.04",
        "4.16"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 4,
      "checks_left": 0,
      "branch": "milestone/8.08-<short-name>"
    },
    {
      "id": "8.09",
      "title": "Backpack: stacks, locks, overflow (WIZ-11 part 2)",
      "phase": 8,
      "file": "doc/roadmap/phase-08-the-wizard-grows-vitals-xp-spells-backpack-and-gear.md",
      "size": "M",
      "depends_on": [
        "8.08"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 8,
      "checks_left": 0,
      "branch": "milestone/8.09-<short-name>"
    },
    {
      "id": "8.10",
      "title": "Equip and unequip (WIZ-12)",
      "phase": 8,
      "file": "doc/roadmap/phase-08-the-wizard-grows-vitals-xp-spells-backpack-and-gear.md",
      "size": "M",
      "depends_on": [
        "8.09",
        "8.07",
        "7.04",
        "6.01"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 6,
      "checks_left": 0,
      "branch": "milestone/8.10-<short-name>"
    },
    {
      "id": "8.11",
      "title": "Decks (WIZ-14)",
      "phase": 8,
      "file": "doc/roadmap/phase-08-the-wizard-grows-vitals-xp-spells-backpack-and-gear.md",
      "size": "M",
      "depends_on": [
        "8.05",
        "8.10"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 2,
      "checks_left": 6,
      "branch": "milestone/8.11-<short-name>"
    },
    {
      "id": "8.12",
      "title": "Treasure cards (WIZ-15)",
      "phase": 8,
      "file": "doc/roadmap/phase-08-the-wizard-grows-vitals-xp-spells-backpack-and-gear.md",
      "size": "M",
      "depends_on": [
        "8.11"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "8.11"
      ],
      "status": "waiting",
      "note": "waiting on 8.11",
      "unlocks": 2,
      "checks_left": 6,
      "branch": "milestone/8.12-<short-name>",
      "next_after": "8.11"
    },
    {
      "id": "8.13",
      "title": "Spell training at trainers (WIZ-16)",
      "phase": 8,
      "file": "doc/roadmap/phase-08-the-wizard-grows-vitals-xp-spells-backpack-and-gear.md",
      "size": "M",
      "depends_on": [
        "8.05",
        "8.02",
        "7.07",
        "4.15",
        "4.16"
      ],
      "checks_total": 8,
      "checks_done": 0,
      "done": false,
      "missing": [
        "8.02"
      ],
      "status": "waiting",
      "note": "waiting on 8.02",
      "unlocks": 1,
      "checks_left": 8,
      "branch": "milestone/8.13-<short-name>",
      "next_after": "8.02"
    },
    {
      "id": "8.14",
      "title": "Versionable BINd encoder, byte-exact (OBJ-7)",
      "phase": 8,
      "file": "doc/roadmap/phase-08-the-wizard-grows-vitals-xp-spells-backpack-and-gear.md",
      "size": "M",
      "depends_on": [
        "3.11"
      ],
      "checks_total": 4,
      "checks_done": 4,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/8.14-<short-name>"
    },
    {
      "id": "9.01",
      "title": "WizCombat protocol surface and stubs (CMB-1)",
      "phase": 9,
      "file": "doc/roadmap/phase-09-a-duel-completes.md",
      "size": "S",
      "depends_on": [
        "2.09",
        "1.16"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/9.01-<short-name>"
    },
    {
      "id": "9.02",
      "title": "SigilMgr (CMB-2 sigils)",
      "phase": 9,
      "file": "doc/roadmap/phase-09-a-duel-completes.md",
      "size": "S",
      "depends_on": [
        "5.01",
        "4.15"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/9.02-<short-name>",
      "claim": {
        "who": "MeruneFleuruwu",
        "url": "https://github.com/Justchicoo/Project-Ambrose/issues/78",
        "kind": "a claim",
        "number": 78,
        "since": "2026-10-06",
        "updated": "2026-10-06",
        "stale": false
      },
      "claims": [
        {
          "who": "MeruneFleuruwu",
          "url": "https://github.com/Justchicoo/Project-Ambrose/issues/78",
          "kind": "a claim",
          "number": 78,
          "since": "2026-10-06",
          "updated": "2026-10-06",
          "stale": false
        }
      ]
    },
    {
      "id": "9.03",
      "title": "Shared GameEffect framework (new; breaks the WIZ-13/CMB cycle)",
      "phase": 9,
      "file": "doc/roadmap/phase-09-a-duel-completes.md",
      "size": "M",
      "depends_on": [
        "6.01"
      ],
      "checks_total": 4,
      "checks_done": 4,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/9.03-<short-name>"
    },
    {
      "id": "9.04",
      "title": "Spawners and runtime spawn/despawn (WLD-18, without paths; QST-4 SpawnExtractor)",
      "phase": 9,
      "file": "doc/roadmap/phase-09-a-duel-completes.md",
      "size": "M",
      "depends_on": [
        "6.13",
        "6.16",
        "6.10",
        "4.15",
        "4.16"
      ],
      "checks_total": 12,
      "checks_done": 12,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/9.04-<short-name>"
    },
    {
      "id": "9.05",
      "title": "Duel instance and sigil placement (CMB-3)",
      "phase": 9,
      "file": "doc/roadmap/phase-09-a-duel-completes.md",
      "size": "M",
      "depends_on": [
        "9.01",
        "9.02",
        "9.04",
        "8.04",
        "5.05"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/9.05-<short-name>"
    },
    {
      "id": "9.06",
      "title": "Round state machine, pass-only (CMB-4)",
      "phase": 9,
      "file": "doc/roadmap/phase-09-a-duel-completes.md",
      "size": "M",
      "depends_on": [
        "9.05",
        "4.16"
      ],
      "checks_total": 9,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "Justchicoo has a draft pull request",
      "unlocks": 1,
      "checks_left": 9,
      "branch": "milestone/9.06-<short-name>",
      "claim": {
        "who": "Justchicoo",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/211",
        "kind": "a draft pull request",
        "number": 211,
        "since": "2026-10-11",
        "updated": "2026-10-15",
        "stale": false
      },
      "claims": [
        {
          "who": "Justchicoo",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/211",
          "kind": "a draft pull request",
          "number": 211,
          "since": "2026-10-11",
          "updated": "2026-10-15",
          "stale": false
        }
      ]
    },
    {
      "id": "9.07",
      "title": "Play deck and hand (CMB-5)",
      "phase": 9,
      "file": "doc/roadmap/phase-09-a-duel-completes.md",
      "size": "S",
      "depends_on": [
        "9.06",
        "8.11"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "9.06",
        "8.11"
      ],
      "status": "waiting",
      "note": "waiting on 9.06, 8.11",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/9.07-<short-name>"
    },
    {
      "id": "9.08",
      "title": "Single-target damage cast (CMB-6)",
      "phase": 9,
      "file": "doc/roadmap/phase-09-a-duel-completes.md",
      "size": "M",
      "depends_on": [
        "9.07"
      ],
      "checks_total": 8,
      "checks_done": 0,
      "done": false,
      "missing": [
        "9.07"
      ],
      "status": "waiting",
      "note": "waiting on 9.07",
      "unlocks": 1,
      "checks_left": 8,
      "branch": "milestone/9.08-<short-name>",
      "next_after": "9.07"
    },
    {
      "id": "9.09",
      "title": "Victory and teardown (CMB-7)",
      "phase": 9,
      "file": "doc/roadmap/phase-09-a-duel-completes.md",
      "size": "S",
      "depends_on": [
        "9.08",
        "9.03"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "9.08"
      ],
      "status": "waiting",
      "note": "waiting on 9.08",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/9.09-<short-name>",
      "next_after": "9.08"
    },
    {
      "id": "9.10",
      "title": "Aggro start and minimal creature AI (CMB-8 part 1)",
      "phase": 9,
      "file": "doc/roadmap/phase-09-a-duel-completes.md",
      "size": "M",
      "depends_on": [
        "9.09"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "9.09"
      ],
      "status": "waiting",
      "note": "waiting on 9.09",
      "unlocks": 3,
      "checks_left": 6,
      "branch": "milestone/9.10-<short-name>",
      "next_after": "9.09"
    },
    {
      "id": "9.11",
      "title": "Player defeat and HP persistence (CMB-8 part 2)",
      "phase": 9,
      "file": "doc/roadmap/phase-09-a-duel-completes.md",
      "size": "M",
      "depends_on": [
        "9.10",
        "8.01"
      ],
      "checks_total": 8,
      "checks_done": 0,
      "done": false,
      "missing": [
        "9.10"
      ],
      "status": "waiting",
      "note": "waiting on 9.10",
      "unlocks": 3,
      "checks_left": 8,
      "branch": "milestone/9.11-<short-name>",
      "next_after": "9.10"
    },
    {
      "id": "9.12",
      "title": "Flee, disconnect, logout in combat (CMB-9)",
      "phase": 9,
      "file": "doc/roadmap/phase-09-a-duel-completes.md",
      "size": "S",
      "depends_on": [
        "9.11",
        "6.08"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "9.11"
      ],
      "status": "waiting",
      "note": "waiting on 9.11",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/9.12-<short-name>",
      "next_after": "9.11"
    },
    {
      "id": "10.01",
      "title": "Results engine v1 (QST-15)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "7.11",
        "7.04",
        "6.14",
        "9.04"
      ],
      "checks_total": 6,
      "checks_done": 2,
      "done": false,
      "missing": [
        "7.11"
      ],
      "status": "waiting",
      "note": "waiting on 7.11",
      "unlocks": 9,
      "checks_left": 4,
      "branch": "milestone/10.01-<short-name>",
      "started": {
        "by": "the maintainer's Dynamod and game systems sessions",
        "sent_as": "on main",
        "left": "Started on 2026-10-13 with one of three checks: a completed quest goal publishes its GoalComplete event into its wizard's zone triggers. The results runner followed on 2026-10-13: zone triggers run their results in order through the handlers each system registers. Cinematics followed on 2026-10-14: ResWait, ResPostEvent and ResStartStagedCinematic (MSG_STARTSTAGEDCINEMATIC). A quest's ResTeleport followed on 2026-10-14: its destination zone and place move the wizard, and a quest's start results run when it is accepted. Unicorn Way followed on 2026-10-14: Merle Ambrose's first quest teleports the wizard to Unicorn Way on accepting and plays its Start dialog there, and To Ravenwood! waits for it. Left: skipping a gated result, and ResTeleport from a quest's results"
      },
      "next_after": "7.11"
    },
    {
      "id": "10.02",
      "title": "Waypoint goals (QST-16)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "S",
      "depends_on": [
        "10.01"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "10.01"
      ],
      "status": "waiting",
      "note": "waiting on 10.01",
      "unlocks": 1,
      "checks_left": 4,
      "branch": "milestone/10.02-<short-name>",
      "next_after": "10.01"
    },
    {
      "id": "10.03",
      "title": "Object states (WLD-19 part 1)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "6.16",
        "10.01"
      ],
      "checks_total": 5,
      "checks_done": 4,
      "done": false,
      "missing": [
        "10.01"
      ],
      "status": "waiting",
      "note": "waiting on 10.01",
      "unlocks": 3,
      "checks_left": 1,
      "branch": "milestone/10.03-<short-name>",
      "started": {
        "by": "the maintainer's Dynamod session",
        "sent_as": "on main",
        "left": "Started on 2026-10-13; four of five checks: each wizard keeps its own Dynamods, one per zone and tag, saved in character_dynamod, made by the ResAddDynaMod results of the zone triggers it fires, a gated trigger firing only for a wizard who meets its requirements; its client is loaded with the zone's mods once it has its object and told of each change, a mod's tagged objects are shown or hidden for that wizard alone and enter the mod's state, and a quest result's ResRemoveDynaMod takes a mod away by tag. The real-client checks passed on 2026-10-14: the Unicorn Way gate swings open for that wizard alone and stays open after a relog and a zone change. Left: the unit check on quest-template mods and m_existBeyondQuest, which waits on quest data, start states and LEAVESTATE"
      },
      "next_after": "10.01"
    },
    {
      "id": "10.04",
      "title": "Requirement-gated visibility (WLD-19 part 2)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "10.03"
      ],
      "checks_total": 5,
      "checks_done": 2,
      "done": false,
      "missing": [
        "10.03"
      ],
      "status": "waiting",
      "note": "waiting on 10.03",
      "unlocks": 2,
      "checks_left": 3,
      "branch": "milestone/10.04-<short-name>",
      "started": {
        "by": "the maintainer's world session",
        "sent_as": "on main",
        "left": "Started on 2026-10-13 with two of four checks: each placed object's spawn requirements decode from the zone data into a requirement tree, each wizard is shown only the objects its quests, goals, registry, level and school qualify it for, and when its progress moves only the objects whose answer changed are sent, with `.quest` commands to move a wizard's progress by hand. Left: the real-client checks, a quest-gated NPC appearing without a relog (a requirement type the evaluator does not know yet, such as ReqIsQuest, hides its object) and the Unicorn Way gate, whose open state is a DynaMod and comes with 10.03"
      },
      "next_after": "10.03"
    },
    {
      "id": "10.05",
      "title": "Usage and scavenge goals (QST-17)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "10.04",
        "7.07"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "10.04"
      ],
      "status": "waiting",
      "note": "waiting on 10.04",
      "unlocks": 1,
      "checks_left": 4,
      "branch": "milestone/10.05-<short-name>",
      "next_after": "10.04"
    },
    {
      "id": "10.06",
      "title": "Bounty goals (QST-18)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "10.01",
        "9.11"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "10.01",
        "9.11"
      ],
      "status": "waiting",
      "note": "waiting on 10.01, 9.11",
      "unlocks": 2,
      "checks_left": 6,
      "branch": "milestone/10.06-<short-name>"
    },
    {
      "id": "10.07",
      "title": "LootMgr core (QST-19 + CMB-20 merged)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "8.09",
        "2.07",
        "4.15",
        "4.16"
      ],
      "checks_total": 8,
      "checks_done": 6,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 4,
      "checks_left": 2,
      "branch": "milestone/10.07-<short-name>"
    },
    {
      "id": "10.08",
      "title": "Quest rewards (QST-19)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "10.07",
        "10.01",
        "8.02",
        "8.05"
      ],
      "checks_total": 5,
      "checks_done": 1,
      "done": false,
      "missing": [
        "10.07",
        "10.01",
        "8.02"
      ],
      "status": "waiting",
      "note": "waiting on 10.07, 10.01, 8.02",
      "unlocks": 3,
      "checks_left": 4,
      "branch": "milestone/10.08-<short-name>",
      "started": {
        "by": "the maintainer's world session",
        "sent_as": "on main",
        "left": "Started on 2026-10-14 with one of two checks: a quest's ResAddGold and ResAddMagicXP results give gold and experience through the live Rate.Gold.Quest and Rate.XP.Quest, the offer window previews them scaled and MSG_LOOT shows what was given. Left: item and spell rewards (ResItemLoot, ResAddSpell, with 10.07's loot tables) and the real-client check, the reward popup with gold, experience and an item and a Fire wizard's spell popup"
      }
    },
    {
      "id": "10.09",
      "title": "Duel rewards and drop tables (CMB-19 + CMB-20)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "10.07",
        "9.11",
        "10.06"
      ],
      "checks_total": 9,
      "checks_done": 0,
      "done": false,
      "missing": [
        "10.07",
        "9.11",
        "10.06"
      ],
      "status": "waiting",
      "note": "waiting on 10.07, 9.11, 10.06",
      "unlocks": 2,
      "checks_left": 9,
      "branch": "milestone/10.09-<short-name>"
    },
    {
      "id": "10.10",
      "title": "Gold vendors (EXT-1 + QST-20 + WIZ-24 gold)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "7.07",
        "8.09",
        "8.01",
        "4.15",
        "4.16"
      ],
      "checks_total": 14,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 7,
      "checks_left": 14,
      "branch": "milestone/10.10-<short-name>"
    },
    {
      "id": "10.11",
      "title": "Potion shop and wisps (EXT-2 + WIZ-24 potions)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "S",
      "depends_on": [
        "10.10"
      ],
      "checks_total": 10,
      "checks_done": 0,
      "done": false,
      "missing": [
        "10.10"
      ],
      "status": "waiting",
      "note": "waiting on 10.10",
      "unlocks": 1,
      "checks_left": 10,
      "branch": "milestone/10.11-<short-name>",
      "next_after": "10.10"
    },
    {
      "id": "10.12",
      "title": "Treasure card vendor (EXT-6 + WIZ-24 TC)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "S",
      "depends_on": [
        "10.10",
        "8.12"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "10.10",
        "8.12"
      ],
      "status": "waiting",
      "note": "waiting on 10.10, 8.12",
      "unlocks": 1,
      "checks_left": 7,
      "branch": "milestone/10.12-<short-name>"
    },
    {
      "id": "10.13",
      "title": "Teleporters, Spiral Door, Go Home (WLD-16)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "6.14",
        "7.04",
        "9.03",
        "4.15",
        "4.16"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "MeruneFleuruwu has a draft pull request",
      "unlocks": 1,
      "checks_left": 7,
      "branch": "milestone/10.13-<short-name>",
      "claim": {
        "who": "MeruneFleuruwu",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/218",
        "kind": "a draft pull request",
        "number": 218,
        "since": "2026-10-11",
        "updated": "2026-10-11",
        "stale": false
      },
      "claims": [
        {
          "who": "MeruneFleuruwu",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/218",
          "kind": "a draft pull request",
          "number": 218,
          "since": "2026-10-11",
          "updated": "2026-10-11",
          "stale": false
        }
      ]
    },
    {
      "id": "10.14",
      "title": "Path-walking NPCs (WLD-17)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "6.16",
        "6.12",
        "4.15"
      ],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/10.14-<short-name>",
      "claim": {
        "who": "MeruneFleuruwu",
        "url": "https://github.com/Justchicoo/Project-Ambrose/issues/111",
        "kind": "a claim",
        "number": 111,
        "since": "2026-10-07",
        "updated": "2026-10-07",
        "stale": false
      },
      "claims": [
        {
          "who": "MeruneFleuruwu",
          "url": "https://github.com/Justchicoo/Project-Ambrose/issues/111",
          "kind": "a claim",
          "number": 111,
          "since": "2026-10-07",
          "updated": "2026-10-07",
          "stale": false
        }
      ]
    },
    {
      "id": "10.15",
      "title": "Content hot reload (QST-21)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "7.12",
        "10.08",
        "10.10",
        "10.09",
        "10.11",
        "10.12",
        "10.13",
        "10.14",
        "8.13",
        "4.15"
      ],
      "checks_total": 8,
      "checks_done": 0,
      "done": false,
      "missing": [
        "7.12",
        "10.08",
        "10.10",
        "10.09",
        "10.11",
        "10.12",
        "10.13",
        "8.13"
      ],
      "status": "waiting",
      "note": "waiting on 7.12, 10.08, 10.10, 10.09, 10.11, 10.12, 10.13, 8.13",
      "unlocks": 0,
      "checks_left": 8,
      "branch": "milestone/10.15-<short-name>"
    },
    {
      "id": "10.16",
      "title": "Wizard City chain authoring and automated test (QST-23 part 1)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "7.05",
        "7.13",
        "10.02",
        "10.05",
        "10.06",
        "10.08"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "7.05",
        "7.13",
        "10.02",
        "10.05",
        "10.06",
        "10.08"
      ],
      "status": "waiting",
      "note": "waiting on 7.05, 7.13, 10.02, 10.05, 10.06, 10.08",
      "unlocks": 1,
      "checks_left": 3,
      "branch": "milestone/10.16-<short-name>"
    },
    {
      "id": "10.17",
      "title": "Wizard City chain real-client playthrough (QST-23 part 2)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "10.16",
        "10.03"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "10.16",
        "10.03"
      ],
      "status": "waiting",
      "note": "waiting on 10.16, 10.03",
      "unlocks": 1,
      "checks_left": 3,
      "branch": "milestone/10.17-<short-name>"
    },
    {
      "id": "10.18",
      "title": "Quest helper extras (QST-24)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "7.11",
        "7.06"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "7.11"
      ],
      "status": "waiting",
      "note": "waiting on 7.11",
      "unlocks": 0,
      "checks_left": 4,
      "branch": "milestone/10.18-<short-name>",
      "next_after": "7.11"
    },
    {
      "id": "10.19",
      "title": "Path actions (WLD-17 part 2)",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "10.14"
      ],
      "checks_total": 8,
      "checks_done": 6,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 0,
      "checks_left": 2,
      "branch": "milestone/10.19-<short-name>",
      "started": {
        "by": "the maintainer's game systems session",
        "sent_as": "[#252](https://github.com/Justchicoo/Project-Ambrose/pull/252)",
        "left": "Landed on 2026-10-13 with 3 of 4 checks: walkers run the path actions their templates key to their nodes, and `client template --holding` finds the templates that carry a class. Left: the real-client check, a walker such as KT-Shopkepper-Ambient-Walker playing its emote at its node and walking on, seen the same on two clients"
      }
    },
    {
      "id": "10.20",
      "title": "Zone tokens",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "10.01",
        "7.04"
      ],
      "checks_total": 10,
      "checks_done": 6,
      "done": false,
      "missing": [
        "10.01"
      ],
      "status": "waiting",
      "note": "waiting on 10.01",
      "unlocks": 0,
      "checks_left": 4,
      "branch": "milestone/10.20-<short-name>",
      "started": {
        "by": "the maintainer's game systems session",
        "sent_as": "on main",
        "left": "Started on 2026-10-14 with three of five checks: each zone's ZoneTokenBoolean and ZoneTokenCount tokens load from zone_object.token_container, a container that does not read is refused whole, trigger results change a wizard's or its instance's token, ReqZoneToken gates on it, and the client is sent MSG_AddZoneToken, MSG_ModifyZoneToken and MSG_RemoveZoneToken as they change. Left: saving a wizard's own tokens with its character and the real-client objective tracker check"
      },
      "next_after": "10.01"
    },
    {
      "id": "10.21",
      "title": "Interactive world objects",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "M",
      "depends_on": [
        "10.01",
        "10.03",
        "10.04",
        "10.07",
        "13.04"
      ],
      "checks_total": 9,
      "checks_done": 0,
      "done": false,
      "missing": [
        "10.01",
        "10.03",
        "10.04",
        "10.07",
        "13.04"
      ],
      "status": "waiting",
      "note": "waiting on 10.01, 10.03, 10.04, 10.07, 13.04",
      "unlocks": 0,
      "checks_left": 9,
      "branch": "milestone/10.21-<short-name>"
    },
    {
      "id": "10.22",
      "title": "Lua script host",
      "phase": 10,
      "file": "doc/roadmap/phase-10-play-the-wizard-city-opening-quests.md",
      "size": "L",
      "depends_on": [
        "10.01",
        "6.16"
      ],
      "checks_total": 8,
      "checks_done": 0,
      "done": false,
      "missing": [
        "10.01"
      ],
      "status": "waiting",
      "note": "waiting on 10.01",
      "unlocks": 0,
      "checks_left": 8,
      "branch": "milestone/10.22-<short-name>",
      "next_after": "10.01"
    },
    {
      "id": "11.01",
      "title": "Multi-participant duels (CMB-10)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "9.12",
        "4.15",
        "4.16"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "9.12"
      ],
      "status": "waiting",
      "note": "waiting on 9.12",
      "unlocks": 2,
      "checks_left": 7,
      "branch": "milestone/11.01-<short-name>",
      "next_after": "9.12"
    },
    {
      "id": "11.02",
      "title": "StatCalculator and equip effects (WIZ-13 part 1)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "8.10",
        "9.03",
        "5.04"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "MeruneFleuruwu has a claim",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/11.02-<short-name>",
      "claim": {
        "who": "MeruneFleuruwu",
        "url": "https://github.com/Justchicoo/Project-Ambrose/issues/243",
        "kind": "a claim",
        "number": 243,
        "since": "2026-10-13",
        "updated": "2026-10-13",
        "stale": false
      },
      "claims": [
        {
          "who": "MeruneFleuruwu",
          "url": "https://github.com/Justchicoo/Project-Ambrose/issues/243",
          "kind": "a claim",
          "number": 243,
          "since": "2026-10-13",
          "updated": "2026-10-13",
          "stale": false
        }
      ]
    },
    {
      "id": "11.03",
      "title": "Set bonuses and rating conversions (WIZ-13 part 2)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.02",
        "4.15"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.02"
      ],
      "status": "waiting",
      "note": "waiting on 11.02",
      "unlocks": 3,
      "checks_left": 6,
      "branch": "milestone/11.03-<short-name>",
      "next_after": "11.02"
    },
    {
      "id": "11.04",
      "title": "Combat stats and pip rules (CMB-11)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.01",
        "11.03",
        "4.15"
      ],
      "checks_total": 8,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.01",
        "11.03"
      ],
      "status": "waiting",
      "note": "waiting on 11.01, 11.03",
      "unlocks": 1,
      "checks_left": 8,
      "branch": "milestone/11.04-<short-name>"
    },
    {
      "id": "11.05",
      "title": "DamageCalc and limit curves (CMB-12 part 1)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.04",
        "4.16"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.04"
      ],
      "status": "waiting",
      "note": "waiting on 11.04",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/11.05-<short-name>",
      "next_after": "11.04"
    },
    {
      "id": "11.06",
      "title": "Crit, block and SETST parity (CMB-12 part 2)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.05"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.05"
      ],
      "status": "waiting",
      "note": "waiting on 11.05",
      "unlocks": 2,
      "checks_left": 7,
      "branch": "milestone/11.06-<short-name>",
      "next_after": "11.05"
    },
    {
      "id": "11.07",
      "title": "Blades and traps (CMB-13 part 1)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.06"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.06"
      ],
      "status": "waiting",
      "note": "waiting on 11.06",
      "unlocks": 1,
      "checks_left": 7,
      "branch": "milestone/11.07-<short-name>",
      "next_after": "11.06"
    },
    {
      "id": "11.08",
      "title": "Shields, absorbs, max damage (CMB-13 part 2)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.07"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.07"
      ],
      "status": "waiting",
      "note": "waiting on 11.07",
      "unlocks": 2,
      "checks_left": 5,
      "branch": "milestone/11.08-<short-name>",
      "next_after": "11.07"
    },
    {
      "id": "11.09",
      "title": "Heals, over-time, accuracy, dispels (CMB-14)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.08"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.08"
      ],
      "status": "waiting",
      "note": "waiting on 11.08",
      "unlocks": 2,
      "checks_left": 6,
      "branch": "milestone/11.09-<short-name>",
      "next_after": "11.08"
    },
    {
      "id": "11.10",
      "title": "Team targets and AoE (CMB-15 part 1)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.09"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.09"
      ],
      "status": "waiting",
      "note": "waiting on 11.09",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/11.10-<short-name>",
      "next_after": "11.09"
    },
    {
      "id": "11.11",
      "title": "Compound, conditional, X-pip spells (CMB-15 part 2)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.10",
        "7.04"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.10"
      ],
      "status": "waiting",
      "note": "waiting on 11.10",
      "unlocks": 3,
      "checks_left": 5,
      "branch": "milestone/11.11-<short-name>",
      "next_after": "11.10"
    },
    {
      "id": "11.12",
      "title": "Stun and pip manipulation (CMB-16 part 1)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.11"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.11"
      ],
      "status": "waiting",
      "note": "waiting on 11.11",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/11.12-<short-name>",
      "next_after": "11.11"
    },
    {
      "id": "11.13",
      "title": "Removal, push, steal, swap, auras (CMB-16 part 2)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.12"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.12"
      ],
      "status": "waiting",
      "note": "waiting on 11.12",
      "unlocks": 2,
      "checks_left": 4,
      "branch": "milestone/11.13-<short-name>",
      "next_after": "11.12"
    },
    {
      "id": "11.14",
      "title": "Creature deck tables and loader (CMB-18 part 1)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "9.10",
        "2.07",
        "4.15",
        "4.16"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "9.10"
      ],
      "status": "building",
      "note": "Justchicoo has a draft pull request",
      "unlocks": 1,
      "checks_left": 7,
      "branch": "milestone/11.14-<short-name>",
      "claim": {
        "who": "Justchicoo",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/209",
        "kind": "a draft pull request",
        "number": 209,
        "since": "2026-10-11",
        "updated": "2026-10-11",
        "stale": false
      },
      "claims": [
        {
          "who": "Justchicoo",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/209",
          "kind": "a draft pull request",
          "number": 209,
          "since": "2026-10-11",
          "updated": "2026-10-11",
          "stale": false
        }
      ]
    },
    {
      "id": "11.15",
      "title": "Weighted creature AI (CMB-18 part 2)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.14",
        "11.11"
      ],
      "checks_total": 9,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.14",
        "11.11"
      ],
      "status": "waiting",
      "note": "waiting on 11.14, 11.11",
      "unlocks": 3,
      "checks_left": 9,
      "branch": "milestone/11.15-<short-name>"
    },
    {
      "id": "11.16",
      "title": "Treasure cards, item cards, enchantments in combat (CMB-21)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.08",
        "8.12"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.08",
        "8.12"
      ],
      "status": "waiting",
      "note": "waiting on 11.08, 8.12",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/11.16-<short-name>"
    },
    {
      "id": "11.17",
      "title": "Minions (CMB-22)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.15"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.15"
      ],
      "status": "waiting",
      "note": "waiting on 11.15",
      "unlocks": 0,
      "checks_left": 4,
      "branch": "milestone/11.17-<short-name>",
      "next_after": "11.15"
    },
    {
      "id": "11.18",
      "title": "Timers, AFK, pause, spectators (CMB-23)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.01",
        "4.16"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.01"
      ],
      "status": "waiting",
      "note": "waiting on 11.01",
      "unlocks": 1,
      "checks_left": 7,
      "branch": "milestone/11.18-<short-name>",
      "next_after": "11.01"
    },
    {
      "id": "11.19",
      "title": "Polymorph (CMB-17 part 1)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.13"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.13"
      ],
      "status": "waiting",
      "note": "waiting on 11.13",
      "unlocks": 2,
      "checks_left": 4,
      "branch": "milestone/11.19-<short-name>",
      "next_after": "11.13"
    },
    {
      "id": "11.20",
      "title": "Mind control, confusion, taunt, cloaked effects (CMB-17 part 2)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.19"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.19"
      ],
      "status": "waiting",
      "note": "waiting on 11.19",
      "unlocks": 1,
      "checks_left": 3,
      "branch": "milestone/11.20-<short-name>",
      "next_after": "11.19"
    },
    {
      "id": "11.21",
      "title": "Duel modifiers and battlefield effects (CMB-24 part 1)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.20",
        "11.15"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.20",
        "11.15"
      ],
      "status": "waiting",
      "note": "waiting on 11.20, 11.15",
      "unlocks": 1,
      "checks_left": 3,
      "branch": "milestone/11.21-<short-name>"
    },
    {
      "id": "11.22",
      "title": "Combat triggers and sigil spells (CMB-24 part 2)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.21"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.21"
      ],
      "status": "waiting",
      "note": "waiting on 11.21",
      "unlocks": 0,
      "checks_left": 3,
      "branch": "milestone/11.22-<short-name>",
      "next_after": "11.21"
    },
    {
      "id": "11.23",
      "title": "Shadow pips and backlash (CMB-25 part 1)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.13",
        "4.16"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.13"
      ],
      "status": "waiting",
      "note": "waiting on 11.13",
      "unlocks": 2,
      "checks_left": 4,
      "branch": "milestone/11.23-<short-name>",
      "next_after": "11.13"
    },
    {
      "id": "11.24",
      "title": "Shadow pacts and shadow creatures (CMB-25 part 2)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.23"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.23"
      ],
      "status": "waiting",
      "note": "waiting on 11.23",
      "unlocks": 0,
      "checks_left": 3,
      "branch": "milestone/11.24-<short-name>",
      "next_after": "11.23"
    },
    {
      "id": "11.25",
      "title": "Archmastery school pips and tiered spells (CMB-25 part 3)",
      "phase": 11,
      "file": "doc/roadmap/phase-11-real-combat.md",
      "size": "M",
      "depends_on": [
        "11.23"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.23"
      ],
      "status": "waiting",
      "note": "waiting on 11.23",
      "unlocks": 0,
      "checks_left": 3,
      "branch": "milestone/11.25-<short-name>",
      "next_after": "11.23"
    },
    {
      "id": "12.01",
      "title": "Friends (WIZ-17 part 1)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "M",
      "depends_on": [
        "6.03",
        "5.05",
        "4.16"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 4,
      "checks_left": 0,
      "branch": "milestone/12.01-<short-name>"
    },
    {
      "id": "12.02",
      "title": "Ignore list (WIZ-17 part 2)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "S",
      "depends_on": [
        "12.01"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/12.02-<short-name>"
    },
    {
      "id": "12.03",
      "title": "Whispers and inspect (WIZ-18)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "M",
      "depends_on": [
        "12.02",
        "11.03"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.03"
      ],
      "status": "waiting",
      "note": "waiting on 11.03",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/12.03-<short-name>",
      "next_after": "11.03"
    },
    {
      "id": "12.04",
      "title": "Groups: invite, join, leave (WIZ-19 part 1)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "M",
      "depends_on": [
        "12.01",
        "8.02",
        "4.16"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "8.02"
      ],
      "status": "waiting",
      "note": "waiting on 8.02",
      "unlocks": 1,
      "checks_left": 7,
      "branch": "milestone/12.04-<short-name>",
      "next_after": "8.02"
    },
    {
      "id": "12.05",
      "title": "Groups: updates, member zones, channel chat, leader (WIZ-19 part 2)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "M",
      "depends_on": [
        "12.04"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "12.04"
      ],
      "status": "waiting",
      "note": "waiting on 12.04",
      "unlocks": 2,
      "checks_left": 5,
      "branch": "milestone/12.05-<short-name>",
      "next_after": "12.04"
    },
    {
      "id": "12.06",
      "title": "Privacy, friendly player, teleport to friend (WIZ-20)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "M",
      "depends_on": [
        "12.01",
        "6.07"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 1,
      "checks_left": 4,
      "branch": "milestone/12.06-<short-name>"
    },
    {
      "id": "12.07",
      "title": "Chat moderation (WIZ-21)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "M",
      "depends_on": [
        "6.04",
        "4.15"
      ],
      "checks_total": 9,
      "checks_done": 9,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/12.07-<short-name>"
    },
    {
      "id": "12.08",
      "title": "Badges and titles (WIZ-22)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "M",
      "depends_on": [
        "6.04",
        "10.01",
        "4.15"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "10.01"
      ],
      "status": "waiting",
      "note": "waiting on 10.01",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/12.08-<short-name>",
      "next_after": "10.01"
    },
    {
      "id": "12.09",
      "title": "Bank and shared bank (WIZ-23)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "M",
      "depends_on": [
        "8.09",
        "4.16"
      ],
      "checks_total": 8,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "MeruneFleuruwu has a pull request",
      "unlocks": 1,
      "checks_left": 8,
      "branch": "milestone/12.09-<short-name>",
      "claim": {
        "who": "MeruneFleuruwu",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/224",
        "kind": "a pull request",
        "number": 224,
        "since": "2026-10-12",
        "updated": "2026-10-13",
        "stale": false
      },
      "claims": [
        {
          "who": "MeruneFleuruwu",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/224",
          "kind": "a pull request",
          "number": 224,
          "since": "2026-10-12",
          "updated": "2026-10-13",
          "stale": false
        }
      ]
    },
    {
      "id": "12.10",
      "title": "Player trade (WIZ-25)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "M",
      "depends_on": [
        "8.09",
        "12.06"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "12.06"
      ],
      "status": "waiting",
      "note": "waiting on 12.06",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/12.10-<short-name>",
      "next_after": "12.06"
    },
    {
      "id": "12.11",
      "title": "Dye shop (EXT-3 + WIZ-26 dye)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "S",
      "depends_on": [
        "10.10",
        "8.10",
        "4.15"
      ],
      "checks_total": 8,
      "checks_done": 0,
      "done": false,
      "missing": [
        "10.10"
      ],
      "status": "waiting",
      "note": "waiting on 10.10",
      "unlocks": 1,
      "checks_left": 8,
      "branch": "milestone/12.11-<short-name>",
      "next_after": "10.10"
    },
    {
      "id": "12.12",
      "title": "Stitching (EXT-4 + WIZ-26 stitch)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "S",
      "depends_on": [
        "12.11",
        "4.16"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "12.11"
      ],
      "status": "waiting",
      "note": "waiting on 12.11",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/12.12-<short-name>",
      "next_after": "12.11"
    },
    {
      "id": "12.13",
      "title": "Equipment sets (WIZ-26 part)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "M",
      "depends_on": [
        "8.10"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 0,
      "checks_left": 4,
      "branch": "milestone/12.13-<short-name>"
    },
    {
      "id": "12.14",
      "title": "Custom emotes and pet rename (WIZ-26 part)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "M",
      "depends_on": [
        "6.03",
        "5.05",
        "8.08"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 0,
      "checks_left": 3,
      "branch": "milestone/12.14-<short-name>",
      "started": {
        "by": "Kokoita",
        "sent_as": "[#50](https://github.com/Justchicoo/Project-Ambrose/pull/50)",
        "left": "Landed on 2026-10-06 with no check yet: the purchased emote and teleport-effect masks are saved with the character and sent in MSG_UPDATECUSTOMEMOTES, the custom-emote catalog is read from ObjectData/Emotes, and both radial emote messages are shown only for an animation the wizard owns and the install lists. Left: the wheel's pages, whose slots name emote items the wizard holds and so wait on 8.08's item instances; the line checked against the emote; handler tests that fail when the ownership check is removed; and the real-client check"
      }
    },
    {
      "id": "12.15",
      "title": "Crowns balance and crown services (EXT-7)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "S",
      "depends_on": [
        "10.10",
        "2.13",
        "4.16"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "10.10"
      ],
      "status": "waiting",
      "note": "waiting on 10.10",
      "unlocks": 3,
      "checks_left": 6,
      "branch": "milestone/12.15-<short-name>",
      "next_after": "10.10"
    },
    {
      "id": "12.16",
      "title": "Bazaar (EXT-5)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "M",
      "depends_on": [
        "10.10",
        "12.09",
        "4.15",
        "4.16"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "10.10",
        "12.09"
      ],
      "status": "waiting",
      "note": "waiting on 10.10, 12.09",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/12.16-<short-name>"
    },
    {
      "id": "12.17",
      "title": "Public instances by capacity (WLD-22 part 1)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "M",
      "depends_on": [
        "6.14",
        "4.15",
        "4.16"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 2,
      "checks_left": 6,
      "branch": "milestone/12.17-<short-name>"
    },
    {
      "id": "12.18",
      "title": "Private dungeon instances (WLD-22 part 2)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "M",
      "depends_on": [
        "12.17",
        "12.05"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "12.17",
        "12.05"
      ],
      "status": "waiting",
      "note": "waiting on 12.17, 12.05",
      "unlocks": 3,
      "checks_left": 6,
      "branch": "milestone/12.18-<short-name>"
    },
    {
      "id": "12.19",
      "title": "Realm and instance picker (LOG-16 part 1 + WLD-22 part 3)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "M",
      "depends_on": [
        "12.17",
        "4.03"
      ],
      "checks_total": 8,
      "checks_done": 0,
      "done": false,
      "missing": [
        "12.17"
      ],
      "status": "waiting",
      "note": "waiting on 12.17",
      "unlocks": 1,
      "checks_left": 8,
      "branch": "milestone/12.19-<short-name>",
      "next_after": "12.17"
    },
    {
      "id": "12.20",
      "title": "Realm transfer (LOG-16 part 2)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "M",
      "depends_on": [
        "12.19",
        "6.07"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "12.19"
      ],
      "status": "waiting",
      "note": "waiting on 12.19",
      "unlocks": 0,
      "checks_left": 3,
      "branch": "milestone/12.20-<short-name>",
      "next_after": "12.19"
    },
    {
      "id": "12.21",
      "title": "Admission queue (LOG-15)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "M",
      "depends_on": [
        "4.05",
        "2.15",
        "4.16"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/12.21-<short-name>",
      "claim": {
        "who": "MeruneFleuruwu",
        "url": "https://github.com/Justchicoo/Project-Ambrose/issues/128",
        "kind": "a claim",
        "number": 128,
        "since": "2026-10-09",
        "updated": "2026-10-09",
        "stale": false
      },
      "claims": [
        {
          "who": "MeruneFleuruwu",
          "url": "https://github.com/Justchicoo/Project-Ambrose/issues/128",
          "kind": "a claim",
          "number": 128,
          "since": "2026-10-09",
          "updated": "2026-10-09",
          "stale": false
        }
      ]
    },
    {
      "id": "12.22",
      "title": "Same-connection zone transfer spike (WLD-21)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "S",
      "depends_on": [
        "6.07",
        "4.16"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "Rayoray12 has a draft pull request",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/12.22-<short-name>",
      "claim": {
        "who": "Rayoray12",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/306",
        "kind": "a draft pull request",
        "number": 306,
        "since": "2026-10-15",
        "updated": "2026-10-15",
        "stale": false
      },
      "claims": [
        {
          "who": "Rayoray12",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/306",
          "kind": "a draft pull request",
          "number": 306,
          "since": "2026-10-15",
          "updated": "2026-10-15",
          "stale": false
        }
      ]
    },
    {
      "id": "12.23",
      "title": "MoveBehavior/Physics observation and speed validation (WLD-23)",
      "phase": 12,
      "file": "doc/roadmap/phase-12-social-wizards-instances-and-realms.md",
      "size": "S",
      "depends_on": [
        "5.03",
        "11.03",
        "4.16"
      ],
      "checks_total": 8,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.03"
      ],
      "status": "waiting",
      "note": "waiting on 11.03",
      "unlocks": 0,
      "checks_left": 8,
      "branch": "milestone/12.23-<short-name>",
      "next_after": "11.03"
    },
    {
      "id": "13.01",
      "title": "Pet core (EXT-10)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "8.10",
        "6.16",
        "4.16"
      ],
      "checks_total": 15,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "MeruneFleuruwu has a draft pull request",
      "unlocks": 5,
      "checks_left": 15,
      "branch": "milestone/13.01-<short-name>",
      "claim": {
        "who": "MeruneFleuruwu",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/226",
        "kind": "a draft pull request",
        "number": 226,
        "since": "2026-10-12",
        "updated": "2026-10-14",
        "stale": false
      },
      "claims": [
        {
          "who": "MeruneFleuruwu",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/226",
          "kind": "a draft pull request",
          "number": 226,
          "since": "2026-10-12",
          "updated": "2026-10-14",
          "stale": false
        }
      ]
    },
    {
      "id": "13.02",
      "title": "Pet snacks, level, talents, rename (EXT-11)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "13.01"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.01"
      ],
      "status": "waiting",
      "note": "waiting on 13.01",
      "unlocks": 3,
      "checks_left": 5,
      "branch": "milestone/13.02-<short-name>",
      "next_after": "13.01"
    },
    {
      "id": "13.03",
      "title": "Pets in combat (CMB-26 + EXT-22)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "13.02",
        "11.11"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.02",
        "11.11"
      ],
      "status": "waiting",
      "note": "waiting on 13.02, 11.11",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/13.03-<short-name>"
    },
    {
      "id": "13.04",
      "title": "Cantrips casting and XP (EXT-12)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "13.01",
        "8.05"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.01"
      ],
      "status": "waiting",
      "note": "waiting on 13.01",
      "unlocks": 3,
      "checks_left": 4,
      "branch": "milestone/13.04-<short-name>",
      "next_after": "13.01"
    },
    {
      "id": "13.05",
      "title": "Cantrips advanced (EXT-13)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "13.04",
        "9.10"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.04",
        "9.10"
      ],
      "status": "waiting",
      "note": "waiting on 13.04, 9.10",
      "unlocks": 0,
      "checks_left": 4,
      "branch": "milestone/13.05-<short-name>"
    },
    {
      "id": "13.06",
      "title": "Reagents and recipes (EXT-14)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "8.09",
        "7.07",
        "9.04",
        "4.15",
        "4.16"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/13.06-<short-name>"
    },
    {
      "id": "13.07",
      "title": "Crafting (EXT-15)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "13.06"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.06"
      ],
      "status": "waiting",
      "note": "waiting on 13.06",
      "unlocks": 1,
      "checks_left": 4,
      "branch": "milestone/13.07-<short-name>",
      "next_after": "13.06"
    },
    {
      "id": "13.08",
      "title": "Minigame kiosk and client-process framework (EXT-16 part 1)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "12.18",
        "1.16"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "12.18"
      ],
      "status": "waiting",
      "note": "waiting on 12.18",
      "unlocks": 2,
      "checks_left": 3,
      "branch": "milestone/13.08-<short-name>",
      "next_after": "12.18"
    },
    {
      "id": "13.09",
      "title": "Concentration end to end (EXT-16 part 2)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "13.08"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.08"
      ],
      "status": "waiting",
      "note": "waiting on 13.08",
      "unlocks": 2,
      "checks_left": 4,
      "branch": "milestone/13.09-<short-name>",
      "next_after": "13.08"
    },
    {
      "id": "13.10",
      "title": "Remaining simple minigames (EXT-17)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "S",
      "depends_on": [
        "13.09",
        "4.15"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.09"
      ],
      "status": "waiting",
      "note": "waiting on 13.09",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/13.10-<short-name>",
      "next_after": "13.09"
    },
    {
      "id": "13.11",
      "title": "Sorcery Stones state machine (EXT-18 part 1)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "13.09"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.09"
      ],
      "status": "waiting",
      "note": "waiting on 13.09",
      "unlocks": 1,
      "checks_left": 3,
      "branch": "milestone/13.11-<short-name>",
      "next_after": "13.09"
    },
    {
      "id": "13.12",
      "title": "Sorcery Stones handlers and client (EXT-18 part 2)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "13.11"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.11"
      ],
      "status": "waiting",
      "note": "waiting on 13.11",
      "unlocks": 0,
      "checks_left": 3,
      "branch": "milestone/13.12-<short-name>",
      "next_after": "13.11"
    },
    {
      "id": "13.13",
      "title": "Pet games: dance (EXT-19 part 1)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "13.02",
        "13.08"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.02",
        "13.08"
      ],
      "status": "waiting",
      "note": "waiting on 13.02, 13.08",
      "unlocks": 2,
      "checks_left": 4,
      "branch": "milestone/13.13-<short-name>"
    },
    {
      "id": "13.14",
      "title": "Pet games: maze and jump (EXT-19 part 2)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "13.13"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.13"
      ],
      "status": "waiting",
      "note": "waiting on 13.13",
      "unlocks": 0,
      "checks_left": 3,
      "branch": "milestone/13.14-<short-name>",
      "next_after": "13.13"
    },
    {
      "id": "13.15",
      "title": "Hatch session (EXT-20 part 1)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "13.02",
        "12.10",
        "4.16"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.02",
        "12.10"
      ],
      "status": "waiting",
      "note": "waiting on 13.02, 12.10",
      "unlocks": 1,
      "checks_left": 3,
      "branch": "milestone/13.15-<short-name>"
    },
    {
      "id": "13.16",
      "title": "Egg incubation and inheritance (EXT-20 part 2)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "13.15",
        "13.07"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.15",
        "13.07"
      ],
      "status": "waiting",
      "note": "waiting on 13.15, 13.07",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/13.16-<short-name>"
    },
    {
      "id": "13.17",
      "title": "Pet morphing (EXT-21)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "S",
      "depends_on": [
        "13.16"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.16"
      ],
      "status": "waiting",
      "note": "waiting on 13.16",
      "unlocks": 0,
      "checks_left": 4,
      "branch": "milestone/13.17-<short-name>",
      "next_after": "13.16"
    },
    {
      "id": "13.18",
      "title": "Crown shop list (EXT-8 part 1)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "12.15",
        "7.01",
        "4.15"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "12.15"
      ],
      "status": "waiting",
      "note": "waiting on 12.15",
      "unlocks": 1,
      "checks_left": 3,
      "branch": "milestone/13.18-<short-name>",
      "next_after": "12.15"
    },
    {
      "id": "13.19",
      "title": "Crown shop segments (EXT-8 part 2)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "13.18"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.18"
      ],
      "status": "waiting",
      "note": "waiting on 13.18",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/13.19-<short-name>",
      "next_after": "13.18"
    },
    {
      "id": "13.20",
      "title": "Crown purchases, gifts, access passes (EXT-9)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "M",
      "depends_on": [
        "13.19",
        "6.14",
        "4.16"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.19"
      ],
      "status": "waiting",
      "note": "waiting on 13.19",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/13.20-<short-name>",
      "next_after": "13.19"
    },
    {
      "id": "13.21",
      "title": "Paid loot rolls (EXT-44)",
      "phase": 13,
      "file": "doc/roadmap/phase-13-pets-cantrips-crafting-and-minigames.md",
      "size": "S",
      "depends_on": [
        "12.15",
        "10.09"
      ],
      "checks_total": 2,
      "checks_done": 0,
      "done": false,
      "missing": [
        "12.15",
        "10.09"
      ],
      "status": "waiting",
      "note": "waiting on 12.15, 10.09",
      "unlocks": 0,
      "checks_left": 2,
      "branch": "milestone/13.21-<short-name>"
    },
    {
      "id": "14.01",
      "title": "Dungeon sigils and zone timers (EXT-23)",
      "phase": 14,
      "file": "doc/roadmap/phase-14-dungeons-tutorial-and-pvp.md",
      "size": "M",
      "depends_on": [
        "12.18",
        "12.05",
        "10.01",
        "4.15",
        "4.16"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "12.18",
        "12.05",
        "10.01"
      ],
      "status": "waiting",
      "note": "waiting on 12.18, 12.05, 10.01",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/14.01-<short-name>"
    },
    {
      "id": "14.02",
      "title": "Tutorial manager (EXT-24)",
      "phase": 14,
      "file": "doc/roadmap/phase-14-dungeons-tutorial-and-pvp.md",
      "size": "M",
      "depends_on": [
        "10.17",
        "3.16",
        "8.10"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "10.17"
      ],
      "status": "waiting",
      "note": "waiting on 10.17",
      "unlocks": 1,
      "checks_left": 4,
      "branch": "milestone/14.02-<short-name>",
      "next_after": "10.17"
    },
    {
      "id": "14.03",
      "title": "Scripted tutorial duel (CMB-28)",
      "phase": 14,
      "file": "doc/roadmap/phase-14-dungeons-tutorial-and-pvp.md",
      "size": "M",
      "depends_on": [
        "14.02",
        "11.09"
      ],
      "checks_total": 2,
      "checks_done": 0,
      "done": false,
      "missing": [
        "14.02",
        "11.09"
      ],
      "status": "waiting",
      "note": "waiting on 14.02, 11.09",
      "unlocks": 0,
      "checks_left": 2,
      "branch": "milestone/14.03-<short-name>"
    },
    {
      "id": "14.04",
      "title": "PvP scalars and restrictions (CMB-27 part 1)",
      "phase": 14,
      "file": "doc/roadmap/phase-14-dungeons-tutorial-and-pvp.md",
      "size": "M",
      "depends_on": [
        "11.06",
        "11.18"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "11.06",
        "11.18"
      ],
      "status": "waiting",
      "note": "waiting on 11.06, 11.18",
      "unlocks": 1,
      "checks_left": 3,
      "branch": "milestone/14.04-<short-name>"
    },
    {
      "id": "14.05",
      "title": "Alternating turns (CMB-27 part 2)",
      "phase": 14,
      "file": "doc/roadmap/phase-14-dungeons-tutorial-and-pvp.md",
      "size": "M",
      "depends_on": [
        "14.04"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "14.04"
      ],
      "status": "waiting",
      "note": "waiting on 14.04",
      "unlocks": 1,
      "checks_left": 4,
      "branch": "milestone/14.05-<short-name>",
      "next_after": "14.04"
    },
    {
      "id": "14.06",
      "title": "PvP queue and brackets (EXT-34 part 1)",
      "phase": 14,
      "file": "doc/roadmap/phase-14-dungeons-tutorial-and-pvp.md",
      "size": "M",
      "depends_on": [
        "14.05",
        "14.01",
        "4.16"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "14.05",
        "14.01"
      ],
      "status": "waiting",
      "note": "waiting on 14.05, 14.01",
      "unlocks": 1,
      "checks_left": 4,
      "branch": "milestone/14.06-<short-name>"
    },
    {
      "id": "14.07",
      "title": "Ready check and arena match (EXT-34 part 2)",
      "phase": 14,
      "file": "doc/roadmap/phase-14-dungeons-tutorial-and-pvp.md",
      "size": "M",
      "depends_on": [
        "14.06"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "14.06"
      ],
      "status": "waiting",
      "note": "waiting on 14.06",
      "unlocks": 2,
      "checks_left": 4,
      "branch": "milestone/14.07-<short-name>",
      "next_after": "14.06"
    },
    {
      "id": "14.08",
      "title": "Ratings, tickets, leaderboards, daily PvP (EXT-35)",
      "phase": 14,
      "file": "doc/roadmap/phase-14-dungeons-tutorial-and-pvp.md",
      "size": "M",
      "depends_on": [
        "14.07",
        "10.10",
        "4.15"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "14.07",
        "10.10"
      ],
      "status": "waiting",
      "note": "waiting on 14.07, 10.10",
      "unlocks": 2,
      "checks_left": 5,
      "branch": "milestone/14.08-<short-name>"
    },
    {
      "id": "14.09",
      "title": "Tournament scheduler and brackets (EXT-36 part 1)",
      "phase": 14,
      "file": "doc/roadmap/phase-14-dungeons-tutorial-and-pvp.md",
      "size": "M",
      "depends_on": [
        "14.08",
        "4.15"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "14.08"
      ],
      "status": "waiting",
      "note": "waiting on 14.08",
      "unlocks": 1,
      "checks_left": 4,
      "branch": "milestone/14.09-<short-name>",
      "next_after": "14.08"
    },
    {
      "id": "14.10",
      "title": "Tournament credits and rewards (EXT-36 part 2)",
      "phase": 14,
      "file": "doc/roadmap/phase-14-dungeons-tutorial-and-pvp.md",
      "size": "M",
      "depends_on": [
        "14.09"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "14.09"
      ],
      "status": "waiting",
      "note": "waiting on 14.09",
      "unlocks": 0,
      "checks_left": 3,
      "branch": "milestone/14.10-<short-name>",
      "next_after": "14.09"
    },
    {
      "id": "14.11",
      "title": "Derby race simulation (EXT-37 part 1)",
      "phase": 14,
      "file": "doc/roadmap/phase-14-dungeons-tutorial-and-pvp.md",
      "size": "M",
      "depends_on": [
        "13.13",
        "14.07"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.13",
        "14.07"
      ],
      "status": "waiting",
      "note": "waiting on 13.13, 14.07",
      "unlocks": 1,
      "checks_left": 3,
      "branch": "milestone/14.11-<short-name>"
    },
    {
      "id": "14.12",
      "title": "Derby laps and results (EXT-37 part 2)",
      "phase": 14,
      "file": "doc/roadmap/phase-14-dungeons-tutorial-and-pvp.md",
      "size": "M",
      "depends_on": [
        "14.11"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "14.11"
      ],
      "status": "waiting",
      "note": "waiting on 14.11",
      "unlocks": 1,
      "checks_left": 3,
      "branch": "milestone/14.12-<short-name>",
      "next_after": "14.11"
    },
    {
      "id": "14.13",
      "title": "Derby abilities and cheers (EXT-38)",
      "phase": 14,
      "file": "doc/roadmap/phase-14-dungeons-tutorial-and-pvp.md",
      "size": "M",
      "depends_on": [
        "14.12"
      ],
      "checks_total": 2,
      "checks_done": 0,
      "done": false,
      "missing": [
        "14.12"
      ],
      "status": "waiting",
      "note": "waiting on 14.12",
      "unlocks": 0,
      "checks_left": 2,
      "branch": "milestone/14.13-<short-name>",
      "next_after": "14.12"
    },
    {
      "id": "14.14",
      "title": "Battlegrounds RE spike (EXT-39 part 1)",
      "phase": 14,
      "file": "doc/roadmap/phase-14-dungeons-tutorial-and-pvp.md",
      "size": "M",
      "depends_on": [
        "14.08",
        "11.19"
      ],
      "checks_total": 2,
      "checks_done": 0,
      "done": false,
      "missing": [
        "14.08",
        "11.19"
      ],
      "status": "waiting",
      "note": "waiting on 14.08, 11.19",
      "unlocks": 1,
      "checks_left": 2,
      "branch": "milestone/14.14-<short-name>"
    },
    {
      "id": "14.15",
      "title": "Battleground sigil, polymorph, POI scoring (EXT-39 part 2)",
      "phase": 14,
      "file": "doc/roadmap/phase-14-dungeons-tutorial-and-pvp.md",
      "size": "L",
      "depends_on": [
        "14.14"
      ],
      "checks_total": 2,
      "checks_done": 0,
      "done": false,
      "missing": [
        "14.14"
      ],
      "status": "waiting",
      "note": "waiting on 14.14",
      "unlocks": 0,
      "checks_left": 2,
      "branch": "milestone/14.15-<short-name>",
      "next_after": "14.14"
    },
    {
      "id": "14.16",
      "title": "Daily assignments (EXT-43)",
      "phase": 14,
      "file": "doc/roadmap/phase-14-dungeons-tutorial-and-pvp.md",
      "size": "M",
      "depends_on": [
        "10.08",
        "4.16"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "10.08"
      ],
      "status": "waiting",
      "note": "waiting on 10.08",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/14.16-<short-name>",
      "next_after": "10.08"
    },
    {
      "id": "15.01",
      "title": "Own and enter a house (EXT-25)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "12.18",
        "8.09"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "12.18"
      ],
      "status": "waiting",
      "note": "waiting on 12.18",
      "unlocks": 1,
      "checks_left": 4,
      "branch": "milestone/15.01-<short-name>",
      "next_after": "12.18"
    },
    {
      "id": "15.02",
      "title": "Furniture placement and persistence (EXT-26 part 1)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.01",
        "8.14",
        "4.16"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.01"
      ],
      "status": "waiting",
      "note": "waiting on 15.01",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/15.02-<short-name>",
      "next_after": "15.01"
    },
    {
      "id": "15.03",
      "title": "Visitor patches, pickup-all, blobs (EXT-26 part 2)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.02"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.02"
      ],
      "status": "waiting",
      "note": "waiting on 15.02",
      "unlocks": 5,
      "checks_left": 3,
      "branch": "milestone/15.03-<short-name>",
      "next_after": "15.02"
    },
    {
      "id": "15.04",
      "title": "Attic (EXT-27 part 1)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.03"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.03"
      ],
      "status": "waiting",
      "note": "waiting on 15.03",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/15.04-<short-name>",
      "next_after": "15.03"
    },
    {
      "id": "15.05",
      "title": "Vaults (EXT-27 part 2)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.04"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.04"
      ],
      "status": "waiting",
      "note": "waiting on 15.04",
      "unlocks": 0,
      "checks_left": 4,
      "branch": "milestone/15.05-<short-name>",
      "next_after": "15.04"
    },
    {
      "id": "15.06",
      "title": "Decor surfaces, tint, signs (EXT-28 part 1)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.03"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.03"
      ],
      "status": "waiting",
      "note": "waiting on 15.03",
      "unlocks": 1,
      "checks_left": 3,
      "branch": "milestone/15.06-<short-name>",
      "next_after": "15.03"
    },
    {
      "id": "15.07",
      "title": "Teleporters, music, mannequins, housing pets (EXT-28 part 2)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.06",
        "13.01"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.06",
        "13.01"
      ],
      "status": "waiting",
      "note": "waiting on 15.06, 13.01",
      "unlocks": 3,
      "checks_left": 4,
      "branch": "milestone/15.07-<short-name>"
    },
    {
      "id": "15.08",
      "title": "Island space and trains (EXT-29)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.03",
        "12.15"
      ],
      "checks_total": 2,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.03",
        "12.15"
      ],
      "status": "waiting",
      "note": "waiting on 15.03, 12.15",
      "unlocks": 0,
      "checks_left": 2,
      "branch": "milestone/15.08-<short-name>"
    },
    {
      "id": "15.09",
      "title": "Garden plant lifecycle (EXT-30 part 1)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.03"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.03"
      ],
      "status": "waiting",
      "note": "waiting on 15.03",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/15.09-<short-name>",
      "next_after": "15.03"
    },
    {
      "id": "15.10",
      "title": "Garden harvest and XP (EXT-30 part 2)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.09",
        "10.07"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.09",
        "10.07"
      ],
      "status": "waiting",
      "note": "waiting on 15.09, 10.07",
      "unlocks": 1,
      "checks_left": 4,
      "branch": "milestone/15.10-<short-name>"
    },
    {
      "id": "15.11",
      "title": "Gardening spells (EXT-31)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.10",
        "13.01"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.10",
        "13.01"
      ],
      "status": "waiting",
      "note": "waiting on 15.10, 13.01",
      "unlocks": 0,
      "checks_left": 4,
      "branch": "milestone/15.11-<short-name>"
    },
    {
      "id": "15.12",
      "title": "Fish populations and casting (EXT-32 part 1)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "6.16",
        "8.09",
        "13.01",
        "4.16"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "13.01"
      ],
      "status": "waiting",
      "note": "waiting on 13.01",
      "unlocks": 1,
      "checks_left": 4,
      "branch": "milestone/15.12-<short-name>",
      "next_after": "13.01"
    },
    {
      "id": "15.13",
      "title": "Catching and fishing XP (EXT-32 part 2)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.12"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.12"
      ],
      "status": "waiting",
      "note": "waiting on 15.12",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/15.13-<short-name>",
      "next_after": "15.12"
    },
    {
      "id": "15.14",
      "title": "Fishing spells, aquariums, selling, tournaments (EXT-33)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.13",
        "15.03"
      ],
      "checks_total": 2,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.13",
        "15.03"
      ],
      "status": "waiting",
      "note": "waiting on 15.13, 15.03",
      "unlocks": 0,
      "checks_left": 2,
      "branch": "milestone/15.14-<short-name>"
    },
    {
      "id": "15.15",
      "title": "Castle tours publish and visit (EXT-40 part 1)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.07",
        "12.01"
      ],
      "checks_total": 2,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.07"
      ],
      "status": "waiting",
      "note": "waiting on 15.07",
      "unlocks": 1,
      "checks_left": 2,
      "branch": "milestone/15.15-<short-name>",
      "next_after": "15.07"
    },
    {
      "id": "15.16",
      "title": "Castle tours ratings and hall of fame (EXT-40 part 2)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.15"
      ],
      "checks_total": 2,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.15"
      ],
      "status": "waiting",
      "note": "waiting on 15.15",
      "unlocks": 0,
      "checks_left": 2,
      "branch": "milestone/15.16-<short-name>",
      "next_after": "15.15"
    },
    {
      "id": "15.17",
      "title": "Castle magic RE spike and persistence (EXT-41 part 1)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.07",
        "13.04"
      ],
      "checks_total": 2,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.07",
        "13.04"
      ],
      "status": "waiting",
      "note": "waiting on 15.07, 13.04",
      "unlocks": 1,
      "checks_left": 2,
      "branch": "milestone/15.17-<short-name>"
    },
    {
      "id": "15.18",
      "title": "Castle magic runtime (EXT-41 part 2)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.17"
      ],
      "checks_total": 2,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.17"
      ],
      "status": "waiting",
      "note": "waiting on 15.17",
      "unlocks": 2,
      "checks_left": 2,
      "branch": "milestone/15.18-<short-name>",
      "next_after": "15.17"
    },
    {
      "id": "15.19",
      "title": "Monster magic (EXT-42 part 1)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.18",
        "11.15"
      ],
      "checks_total": 2,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.18",
        "11.15"
      ],
      "status": "waiting",
      "note": "waiting on 15.18, 11.15",
      "unlocks": 0,
      "checks_left": 2,
      "branch": "milestone/15.19-<short-name>"
    },
    {
      "id": "15.20",
      "title": "Housing games (EXT-42 part 2)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.18"
      ],
      "checks_total": 2,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.18"
      ],
      "status": "waiting",
      "note": "waiting on 15.18",
      "unlocks": 0,
      "checks_left": 2,
      "branch": "milestone/15.20-<short-name>",
      "next_after": "15.18"
    },
    {
      "id": "15.21",
      "title": "Interactive music (EXT-42 part 3)",
      "phase": 15,
      "file": "doc/roadmap/phase-15-housing-gardening-and-fishing.md",
      "size": "M",
      "depends_on": [
        "15.07"
      ],
      "checks_total": 2,
      "checks_done": 0,
      "done": false,
      "missing": [
        "15.07"
      ],
      "status": "waiting",
      "note": "waiting on 15.07",
      "unlocks": 0,
      "checks_left": 2,
      "branch": "milestone/15.21-<short-name>",
      "next_after": "15.07"
    },
    {
      "id": "16.01",
      "title": "FileBinary table codec (PAT-3)",
      "phase": 16,
      "file": "doc/roadmap/phase-16-patch-server-and-tooling-ownership.md",
      "size": "S",
      "depends_on": [
        "1.14",
        "1.13"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/16.01-<short-name>"
    },
    {
      "id": "16.02",
      "title": "LatestFileList model and XML (PAT-4)",
      "phase": 16,
      "file": "doc/roadmap/phase-16-patch-server-and-tooling-ownership.md",
      "size": "S",
      "depends_on": [
        "16.01"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/16.02-<short-name>"
    },
    {
      "id": "16.03",
      "title": "Install scanner manifest generator (PAT-5)",
      "phase": 16,
      "file": "doc/roadmap/phase-16-patch-server-and-tooling-ownership.md",
      "size": "M",
      "depends_on": [
        "16.02",
        "1.12"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/16.03-<short-name>"
    },
    {
      "id": "16.04",
      "title": "patchserver TCP service 8 (PAT-6)",
      "phase": 16,
      "file": "doc/roadmap/phase-16-patch-server-and-tooling-ownership.md",
      "size": "M",
      "depends_on": [
        "16.03",
        "2.09"
      ],
      "checks_total": 9,
      "checks_done": 8,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 2,
      "checks_left": 1,
      "branch": "milestone/16.04-<short-name>",
      "started": {
        "by": "the maintainer's server session",
        "sent_as": "[#205](https://github.com/Justchicoo/Project-Ambrose/pull/205)",
        "left": "Landed on 2026-10-10 with 4 of 5 checks: the patch server answers MSG_LATEST_FILE_LIST_V2 and v1 with the size, client CRC and time of the LatestFileList.bin under Patch.OutputDir and a list URL naming its revision folder, a probe that never accepts the session is answered, a bad manifest on reload keeps the old one serving, and a port change rebinds live. Left: the reply for an unsupported locale, which waits on 16.06's client test"
      }
    },
    {
      "id": "16.05",
      "title": "HTTP file service with Range (PAT-7)",
      "phase": 16,
      "file": "doc/roadmap/phase-16-patch-server-and-tooling-ownership.md",
      "size": "M",
      "depends_on": [
        "16.03",
        "1.19"
      ],
      "checks_total": 10,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 2,
      "checks_left": 10,
      "branch": "milestone/16.05-<short-name>"
    },
    {
      "id": "16.06",
      "title": "Real-client no-op patch and repair (PAT-8)",
      "phase": 16,
      "file": "doc/roadmap/phase-16-patch-server-and-tooling-ownership.md",
      "size": "M",
      "depends_on": [
        "16.04",
        "16.05",
        "1.21"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "16.04",
        "16.05"
      ],
      "status": "waiting",
      "note": "waiting on 16.04, 16.05",
      "unlocks": 2,
      "checks_left": 7,
      "branch": "milestone/16.06-<short-name>"
    },
    {
      "id": "16.07",
      "title": "Login/game patching switches (PAT-9)",
      "phase": 16,
      "file": "doc/roadmap/phase-16-patch-server-and-tooling-ownership.md",
      "size": "S",
      "depends_on": [
        "2.14",
        "4.14",
        "4.16"
      ],
      "checks_total": 8,
      "checks_done": 8,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/16.07-<short-name>"
    },
    {
      "id": "16.08",
      "title": "MSG_NEXT_VERSION and patch hardening (PAT-11)",
      "phase": 16,
      "file": "doc/roadmap/phase-16-patch-server-and-tooling-ownership.md",
      "size": "S",
      "depends_on": [
        "16.04",
        "16.05"
      ],
      "checks_total": 9,
      "checks_done": 0,
      "done": false,
      "missing": [
        "16.04",
        "16.05"
      ],
      "status": "waiting",
      "note": "waiting on 16.04, 16.05",
      "unlocks": 2,
      "checks_left": 9,
      "branch": "milestone/16.08-<short-name>"
    },
    {
      "id": "16.09",
      "title": "DOWNLOADPACKAGE format RE (PAT-10 part 1)",
      "phase": 16,
      "file": "doc/roadmap/phase-16-patch-server-and-tooling-ownership.md",
      "size": "M",
      "depends_on": [
        "16.06",
        "16.07"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "16.06"
      ],
      "status": "waiting",
      "note": "waiting on 16.06",
      "unlocks": 1,
      "checks_left": 3,
      "branch": "milestone/16.09-<short-name>",
      "next_after": "16.06"
    },
    {
      "id": "16.10",
      "title": "In-game package streaming (PAT-10 part 2)",
      "phase": 16,
      "file": "doc/roadmap/phase-16-patch-server-and-tooling-ownership.md",
      "size": "M",
      "depends_on": [
        "16.09",
        "6.14"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [
        "16.09"
      ],
      "status": "waiting",
      "note": "waiting on 16.09",
      "unlocks": 0,
      "checks_left": 3,
      "branch": "milestone/16.10-<short-name>",
      "next_after": "16.09"
    },
    {
      "id": "16.11",
      "title": "Project-owned type dumper spike (OBJ-20 part 1)",
      "phase": 16,
      "file": "doc/roadmap/phase-16-patch-server-and-tooling-ownership.md",
      "size": "M",
      "depends_on": [
        "3.03"
      ],
      "checks_total": 3,
      "checks_done": 3,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 1,
      "checks_left": 0,
      "branch": "milestone/16.11-<short-name>",
      "claim": {
        "who": "MeruneFleuruwu",
        "url": "https://github.com/Justchicoo/Project-Ambrose/issues/126",
        "kind": "a claim",
        "number": 126,
        "since": "2026-10-08",
        "updated": "2026-10-08",
        "stale": false
      },
      "claims": [
        {
          "who": "MeruneFleuruwu",
          "url": "https://github.com/Justchicoo/Project-Ambrose/issues/126",
          "kind": "a claim",
          "number": 126,
          "since": "2026-10-08",
          "updated": "2026-10-08",
          "stale": false
        }
      ]
    },
    {
      "id": "16.12",
      "title": "Type dump v2 emission and validator (OBJ-20 part 2)",
      "phase": 16,
      "file": "doc/roadmap/phase-16-patch-server-and-tooling-ownership.md",
      "size": "M",
      "depends_on": [
        "16.11",
        "3.01"
      ],
      "checks_total": 3,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 0,
      "checks_left": 3,
      "branch": "milestone/16.12-<short-name>"
    },
    {
      "id": "16.13",
      "title": "Player launcher that patches from Ambrose (new)",
      "phase": 16,
      "file": "doc/roadmap/phase-16-patch-server-and-tooling-ownership.md",
      "size": "M",
      "depends_on": [
        "16.06",
        "16.08",
        "3.27"
      ],
      "checks_total": 8,
      "checks_done": 0,
      "done": false,
      "missing": [
        "16.06",
        "16.08",
        "3.27"
      ],
      "status": "waiting",
      "note": "waiting on 16.06, 16.08, 3.27",
      "unlocks": 0,
      "checks_left": 8,
      "branch": "milestone/16.13-<short-name>"
    },
    {
      "id": "17.01",
      "title": "Server console: colored logs and a command prompt",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "1.10",
        "1.20"
      ],
      "checks_total": 5,
      "checks_done": 4,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 3,
      "checks_left": 1,
      "branch": "milestone/17.01-<short-name>",
      "started": {
        "by": "the maintainer's server session, then Kokoita",
        "sent_as": "on main, [#122](https://github.com/Justchicoo/Project-Ambrose/pull/122)",
        "left": "Landed on 2026-10-09 with four of five checks, #122 adding what the last check's run records. Left: the Dev-gated check, one unredirected console on Windows and one on Linux each showing an `ERROR` line red and a `WARN` line yellow, and nothing else left to build"
      }
    },
    {
      "id": "17.02",
      "title": "Admin API listener and authentication",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "1.09",
        "1.12",
        "1.19",
        "1.20"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 6,
      "checks_left": 0,
      "branch": "milestone/17.02-<short-name>"
    },
    {
      "id": "17.03",
      "title": "Status API",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.02",
        "1.22"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 4,
      "checks_left": 0,
      "branch": "milestone/17.03-<short-name>"
    },
    {
      "id": "17.04",
      "title": "Live log stream",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.02",
        "1.10"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 8,
      "checks_left": 0,
      "branch": "milestone/17.04-<short-name>"
    },
    {
      "id": "17.05",
      "title": "Remote command console with audit log",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.01",
        "17.02",
        "4.02"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [
        "17.01"
      ],
      "status": "landed",
      "note": "",
      "unlocks": 8,
      "checks_left": 0,
      "branch": "milestone/17.05-<short-name>"
    },
    {
      "id": "17.06",
      "title": "Dashboard app and overview page",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.03",
        "17.73"
      ],
      "checks_total": 10,
      "checks_done": 10,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 16,
      "checks_left": 0,
      "branch": "milestone/17.06-<short-name>"
    },
    {
      "id": "17.07",
      "title": "Dashboard log viewer and command console pages",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.04",
        "17.05",
        "17.06"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 3,
      "checks_left": 0,
      "branch": "milestone/17.07-<short-name>"
    },
    {
      "id": "17.08",
      "title": "Process control, config, and database pages",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.06",
        "2.06"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 12,
      "checks_left": 0,
      "branch": "milestone/17.08-<short-name>"
    },
    {
      "id": "17.09",
      "title": "Metrics registry and Prometheus endpoint",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.02"
      ],
      "checks_total": 3,
      "checks_done": 3,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 4,
      "checks_left": 0,
      "branch": "milestone/17.09-<short-name>"
    },
    {
      "id": "17.10",
      "title": "Grafana dashboards and operations guide",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.09"
      ],
      "checks_total": 2,
      "checks_done": 2,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 0,
      "checks_left": 0,
      "branch": "milestone/17.10-<short-name>"
    },
    {
      "id": "17.11",
      "title": "Terminal dashboard mode",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.03",
        "17.04",
        "17.73"
      ],
      "checks_total": 2,
      "checks_done": 2,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 0,
      "checks_left": 0,
      "branch": "milestone/17.11-<short-name>"
    },
    {
      "id": "17.12",
      "title": "Settings and reload admin API",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.02",
        "17.04",
        "17.05",
        "4.16"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 9,
      "checks_left": 0,
      "branch": "milestone/17.12-<short-name>"
    },
    {
      "id": "17.13",
      "title": "Dashboard settings editor and reload page",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.06",
        "17.12"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 7,
      "checks_left": 0,
      "branch": "milestone/17.13-<short-name>"
    },
    {
      "id": "17.14",
      "title": "Panel listener, TLS, sessions and the audit store",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.08",
        "1.12",
        "1.19"
      ],
      "checks_total": 9,
      "checks_done": 9,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 22,
      "checks_left": 0,
      "branch": "milestone/17.14-<short-name>"
    },
    {
      "id": "17.15",
      "title": "Schedules with in-game countdowns",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.05",
        "17.27",
        "17.48",
        "2.15",
        "6.01",
        "6.04"
      ],
      "checks_total": 8,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.27"
      ],
      "status": "waiting",
      "note": "waiting on 17.27",
      "unlocks": 17,
      "checks_left": 8,
      "branch": "milestone/17.15-<short-name>",
      "next_after": "17.27"
    },
    {
      "id": "17.16",
      "title": "Backups: consistent dumps and verified archives",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.08",
        "17.27",
        "17.48",
        "2.06",
        "5.03"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.27"
      ],
      "status": "waiting",
      "note": "waiting on 17.27",
      "unlocks": 16,
      "checks_left": 7,
      "branch": "milestone/17.16-<short-name>",
      "next_after": "17.27"
    },
    {
      "id": "17.17",
      "title": "One-click updates and rollback",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.16",
        "17.51",
        "17.52",
        "3.23"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.16",
        "17.51",
        "17.52"
      ],
      "status": "waiting",
      "note": "waiting on 17.16, 17.51, 17.52",
      "unlocks": 9,
      "checks_left": 6,
      "branch": "milestone/17.17-<short-name>"
    },
    {
      "id": "17.18",
      "title": "File roots, the path jail and browsing",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.12",
        "17.48"
      ],
      "checks_total": 8,
      "checks_done": 7,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 10,
      "checks_left": 1,
      "branch": "milestone/17.18-<short-name>",
      "started": {
        "by": "the maintainer's panel session",
        "sent_as": "on main",
        "left": "Landed on 2026-09-27 with seven of eight checks. Left: check 2's share path, which 17.39 adds; its download path is refused for the client and data roots since 17.54 (#118)"
      }
    },
    {
      "id": "17.19",
      "title": "Built-in resource graphs",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.03",
        "17.06",
        "17.09"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 17,
      "checks_left": 0,
      "branch": "milestone/17.19-<short-name>"
    },
    {
      "id": "17.20",
      "title": "Client data and revisions page",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.06",
        "3.23"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "Rayoray12 has a pull request",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.20-<short-name>",
      "claim": {
        "who": "Rayoray12",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/215",
        "kind": "a pull request",
        "number": 215,
        "since": "2026-10-11",
        "updated": "2026-10-13",
        "stale": false
      },
      "claims": [
        {
          "who": "Rayoray12",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/215",
          "kind": "a pull request",
          "number": 215,
          "since": "2026-10-11",
          "updated": "2026-10-13",
          "stale": false
        }
      ]
    },
    {
      "id": "17.21",
      "title": "Accounts and bans pages",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.05",
        "17.48",
        "17.49",
        "2.13"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "Rayoray12 has a pull request",
      "unlocks": 8,
      "checks_left": 7,
      "branch": "milestone/17.21-<short-name>",
      "started": {
        "by": "Kokoita",
        "sent_as": "[#120](https://github.com/Justchicoo/Project-Ambrose/pull/120)",
        "left": "Landed on 2026-10-09 with 0 of 7 checks: the login console's `ban ip`, `ban machine`, `unban ip` and `unban machine`, writing the `ip_banned` and `machine_banned` rows through AccountMgr as 6.05's chat commands do, with a hexadecimal MachineID, a duration or perm, and tests of their usage and validation without a database. Left: the accounts and bans pages, their routes, permissions and audit, the panel password reset, the top-bar search, and all seven checks"
      },
      "claim": {
        "who": "Rayoray12",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/228",
        "kind": "a pull request",
        "number": 228,
        "since": "2026-10-12",
        "updated": "2026-10-13",
        "stale": false
      },
      "claims": [
        {
          "who": "Rayoray12",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/228",
          "kind": "a pull request",
          "number": 228,
          "since": "2026-10-12",
          "updated": "2026-10-13",
          "stale": false
        }
      ]
    },
    {
      "id": "17.22",
      "title": "Nodes: one panel for servers on several machines",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.26",
        "17.28",
        "17.29",
        "17.32",
        "17.49"
      ],
      "checks_total": 8,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.28",
        "17.29",
        "17.32"
      ],
      "status": "waiting",
      "note": "waiting on 17.28, 17.29, 17.32",
      "unlocks": 11,
      "checks_left": 8,
      "branch": "milestone/17.22-<short-name>"
    },
    {
      "id": "17.23",
      "title": "Operating system services, Docker image and Pterodactyl egg",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.08"
      ],
      "checks_total": 5,
      "checks_done": 2,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 5,
      "checks_left": 3,
      "branch": "milestone/17.23-<short-name>",
      "started": {
        "by": "MeruneFleuruwu",
        "sent_as": "[#9](https://github.com/Justchicoo/Project-Ambrose/pull/9)",
        "left": "Landed on 2026-09-25 with the Compose and time zone checks earned, after review added the type extractor and the SQL to the image and the egg, Python to their build, a health check that probes the login port and a .dockerignore. Left: the three Dev-gated checks, a reboot after `--install-service` on Windows and on Linux and the two Pterodactyl ones, which the maintainer runs on their own machines"
      }
    },
    {
      "id": "17.24",
      "title": "Desktop control app: hosting a game on this computer",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.08",
        "17.181",
        "3.22",
        "3.25"
      ],
      "checks_total": 9,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.181"
      ],
      "status": "waiting",
      "note": "waiting on 17.181",
      "unlocks": 9,
      "checks_left": 9,
      "branch": "milestone/17.24-<short-name>",
      "next_after": "17.181"
    },
    {
      "id": "17.25",
      "title": "Activity log pages",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.05",
        "17.49"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "Rayoray12 has a pull request",
      "unlocks": 16,
      "checks_left": 7,
      "branch": "milestone/17.25-<short-name>",
      "claim": {
        "who": "Rayoray12",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/213",
        "kind": "a pull request",
        "number": 213,
        "since": "2026-10-11",
        "updated": "2026-10-13",
        "stale": false
      },
      "claims": [
        {
          "who": "Rayoray12",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/213",
          "kind": "a pull request",
          "number": 213,
          "since": "2026-10-11",
          "updated": "2026-10-13",
          "stale": false
        }
      ]
    },
    {
      "id": "17.26",
      "title": "Panel event socket: envelope, tickets and generated types",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.04",
        "17.12",
        "17.48"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 13,
      "checks_left": 0,
      "branch": "milestone/17.26-<short-name>"
    },
    {
      "id": "17.27",
      "title": "App states, operation locks and power targets",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.08",
        "17.26"
      ],
      "checks_total": 7,
      "checks_done": 1,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "Rayoray12 has a pull request",
      "unlocks": 10,
      "checks_left": 6,
      "branch": "milestone/17.27-<short-name>",
      "started": {
        "by": "Kokoita",
        "sent_as": "[#117](https://github.com/Justchicoo/Project-Ambrose/pull/117)",
        "left": "Landed on 2026-10-09 with 1 of 7 checks: kill during a stuck stop records a requested exit, not a crash (SupervisorTest.KillingAnAppStuckStoppingRecordsARequestedExit), and the automatic restart wait reported as the `backoff` state, which the servers, console and overview pages show as starting again. Left: the per-app and stack locks with the restore 409, protected hours with the owner override, power targets and stack ordering, `POST /api/panel/power` with an operation id, progress events and audit, disable and enable, the protected states and their pages, and the crash loop state, so six checks"
      },
      "claim": {
        "who": "Rayoray12",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/216",
        "kind": "a pull request",
        "number": 216,
        "since": "2026-10-11",
        "updated": "2026-10-13",
        "stale": false
      },
      "claims": [
        {
          "who": "Rayoray12",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/216",
          "kind": "a pull request",
          "number": 216,
          "since": "2026-10-11",
          "updated": "2026-10-13",
          "stale": false
        }
      ]
    },
    {
      "id": "17.28",
      "title": "Launch and startup settings",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.08",
        "17.13",
        "17.48"
      ],
      "checks_total": 5,
      "checks_done": 3,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "Rayoray12 has a pull request",
      "unlocks": 7,
      "checks_left": 2,
      "branch": "milestone/17.28-<short-name>",
      "started": {
        "by": "Rayoray12",
        "sent_as": "[#230](https://github.com/Justchicoo/Project-Ambrose/pull/230)",
        "left": "Landed on 2026-10-13 with 3 of 5 checks: per-app launch settings in the panel store with secret environment sealed under the keyring, the build, working folder, timeouts, restart policy with backoff and crash-loop limit, autostart, priority and opt-in memory and CPU limits resolved into each launch, overrides passed as --set, and the /launch page and routes under launch.read and launch.edit, audited as panel:launch.changed. Left: check 3, a test that launches an app with a Rate.Drop.Item override and sees the settings API report the key locked and refuse a live edit naming the command-line override layer; check 4, an app past its memory limit recorded as out of memory"
      },
      "claim": {
        "who": "Rayoray12",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/293",
        "kind": "a pull request",
        "number": 293,
        "since": "2026-10-14",
        "updated": "2026-10-14",
        "stale": false
      },
      "claims": [
        {
          "who": "Rayoray12",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/293",
          "kind": "a pull request",
          "number": 293,
          "since": "2026-10-14",
          "updated": "2026-10-14",
          "stale": false
        }
      ]
    },
    {
      "id": "17.29",
      "title": "Port allocations and listen addresses",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.28"
      ],
      "checks_total": 5,
      "checks_done": 3,
      "done": false,
      "missing": [
        "17.28"
      ],
      "status": "waiting",
      "note": "waiting on 17.28",
      "unlocks": 7,
      "checks_left": 2,
      "branch": "milestone/17.29-<short-name>",
      "started": {
        "by": "Rayoray12",
        "sent_as": "[#221](https://github.com/Justchicoo/Project-Ambrose/pull/221)",
        "left": "Landed on 2026-10-13 with 3 of 5 checks: allocations per node seeded from the shipped defaults, each port proven free by binding it, ranges up to 1000, deletion of an assigned allocation refused on every path, the per-node pool, the network page, and the gameserver, loginserver and patch server checking and live-applying their listen address and port. Left: a test that moves a running gameserver's WorldServerPort to a free port and to a held one (check 2), and a listener proven serving on an IPv6 address (check 4)"
      },
      "next_after": "17.28"
    },
    {
      "id": "17.30",
      "title": "Database hosts and credential rotation",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.08",
        "17.47",
        "17.48",
        "2.08",
        "4.16"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.47"
      ],
      "status": "waiting",
      "note": "waiting on 17.47",
      "unlocks": 6,
      "checks_left": 5,
      "branch": "milestone/17.30-<short-name>",
      "next_after": "17.47"
    },
    {
      "id": "17.31",
      "title": "Realms and zones pages",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.06",
        "17.26",
        "17.48",
        "17.175",
        "4.03",
        "4.09"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.175"
      ],
      "status": "waiting",
      "note": "waiting on 17.175",
      "unlocks": 3,
      "checks_left": 6,
      "branch": "milestone/17.31-<short-name>",
      "next_after": "17.175"
    },
    {
      "id": "17.32",
      "title": "Realm maintenance mode",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.15",
        "17.31",
        "4.05",
        "6.01",
        "6.05"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.15",
        "17.31"
      ],
      "status": "waiting",
      "note": "waiting on 17.15, 17.31",
      "unlocks": 2,
      "checks_left": 5,
      "branch": "milestone/17.32-<short-name>"
    },
    {
      "id": "17.33",
      "title": "Announcements and timed game events",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.12",
        "17.15",
        "6.01",
        "6.04"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.15"
      ],
      "status": "waiting",
      "note": "waiting on 17.15",
      "unlocks": 2,
      "checks_left": 5,
      "branch": "milestone/17.33-<short-name>",
      "next_after": "17.15"
    },
    {
      "id": "17.34",
      "title": "World database edits page",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.13",
        "17.25",
        "17.173",
        "4.15"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.25",
        "17.173"
      ],
      "status": "waiting",
      "note": "waiting on 17.25, 17.173",
      "unlocks": 2,
      "checks_left": 6,
      "branch": "milestone/17.34-<short-name>"
    },
    {
      "id": "17.35",
      "title": "Panel settings: general, mail and security",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.14",
        "17.48"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 9,
      "checks_left": 0,
      "branch": "milestone/17.35-<short-name>"
    },
    {
      "id": "17.36",
      "title": "Personal API keys",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.48",
        "17.25"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [
        "17.25"
      ],
      "status": "landed",
      "note": "",
      "unlocks": 11,
      "checks_left": 0,
      "branch": "milestone/17.36-<short-name>"
    },
    {
      "id": "17.37",
      "title": "Invites and the grant editor",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.48",
        "17.25"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [
        "17.25"
      ],
      "status": "landed",
      "note": "",
      "unlocks": 7,
      "checks_left": 0,
      "branch": "milestone/17.37-<short-name>"
    },
    {
      "id": "17.38",
      "title": "Account page: profile, security, sessions and game account link",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.47",
        "17.35"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.47"
      ],
      "status": "waiting",
      "note": "waiting on 17.47",
      "unlocks": 8,
      "checks_left": 6,
      "branch": "milestone/17.38-<short-name>",
      "next_after": "17.47"
    },
    {
      "id": "17.39",
      "title": "File manager archives, search and log follow",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.18",
        "17.54",
        "17.26"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.18",
        "17.54"
      ],
      "status": "waiting",
      "note": "waiting on 17.18, 17.54",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.39-<short-name>"
    },
    {
      "id": "17.40",
      "title": "Opt-in SFTP access",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.54",
        "17.38"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.54",
        "17.38"
      ],
      "status": "waiting",
      "note": "waiting on 17.54, 17.38",
      "unlocks": 2,
      "checks_left": 5,
      "branch": "milestone/17.40-<short-name>"
    },
    {
      "id": "17.41",
      "title": "Opt-in remote file pull",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.54"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.54"
      ],
      "status": "waiting",
      "note": "waiting on 17.54",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/17.41-<short-name>",
      "next_after": "17.54"
    },
    {
      "id": "17.42",
      "title": "Moving an app or realm between nodes",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.22",
        "17.27",
        "17.51"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.22",
        "17.27",
        "17.51"
      ],
      "status": "waiting",
      "note": "waiting on 17.22, 17.27, 17.51",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/17.42-<short-name>"
    },
    {
      "id": "17.43",
      "title": "S3-compatible backup storage and catalog repair",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.16"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.16"
      ],
      "status": "waiting",
      "note": "waiting on 17.16",
      "unlocks": 5,
      "checks_left": 5,
      "branch": "milestone/17.43-<short-name>",
      "next_after": "17.16"
    },
    {
      "id": "17.44",
      "title": "Player-aware schedule conditions and rolling restarts",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.15",
        "17.31"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.15",
        "17.31"
      ],
      "status": "waiting",
      "note": "waiting on 17.15, 17.31",
      "unlocks": 4,
      "checks_left": 4,
      "branch": "milestone/17.44-<short-name>"
    },
    {
      "id": "17.45",
      "title": "Opt-in security keys and passkeys",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.38"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.38"
      ],
      "status": "waiting",
      "note": "waiting on 17.38",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/17.45-<short-name>",
      "next_after": "17.38"
    },
    {
      "id": "17.46",
      "title": "Panel users, password policy and sign-in",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.14",
        "2.13"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 7,
      "checks_left": 0,
      "branch": "milestone/17.46-<short-name>"
    },
    {
      "id": "17.47",
      "title": "Two-factor sign-in, recovery codes and required enrollment",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.46"
      ],
      "checks_total": 5,
      "checks_done": 4,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "Rayoray12 has a draft pull request",
      "unlocks": 16,
      "checks_left": 1,
      "branch": "milestone/17.47-<short-name>",
      "started": {
        "by": "the maintainer's panel session, then Kokoita",
        "sent_as": "on main, [#170](https://github.com/Justchicoo/Project-Ambrose/pull/170)",
        "left": "Landed on 2026-09-27 with four of five checks; #170 makes the panel's own bearer token answer 403 `two_factor_required` under the requirement as well. Left: the API-key half of check 2, now that 17.36's keys exist: a test that a key whose owner the requirement covers without two-factor answers 403 `two_factor_required`, beside PanelTwoFactorTest"
      },
      "claim": {
        "who": "Rayoray12",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/305",
        "kind": "a draft pull request",
        "number": 305,
        "since": "2026-10-15",
        "updated": "2026-10-15",
        "stale": false
      },
      "claims": [
        {
          "who": "Rayoray12",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/305",
          "kind": "a draft pull request",
          "number": 305,
          "since": "2026-10-15",
          "updated": "2026-10-15",
          "stale": false
        }
      ]
    },
    {
      "id": "17.48",
      "title": "Permission catalog, roles and grants",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.05",
        "17.46"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 36,
      "checks_left": 0,
      "branch": "milestone/17.48-<short-name>"
    },
    {
      "id": "17.49",
      "title": "Panel audit scope, app relay and command history",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.05",
        "17.48"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 11,
      "checks_left": 0,
      "branch": "milestone/17.49-<short-name>"
    },
    {
      "id": "17.50",
      "title": "Panel users, roles and grants pages",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.48",
        "17.49"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "Rayoray12 has a pull request",
      "unlocks": 3,
      "checks_left": 6,
      "branch": "milestone/17.50-<short-name>",
      "claim": {
        "who": "Rayoray12",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/214",
        "kind": "a pull request",
        "number": 214,
        "since": "2026-10-11",
        "updated": "2026-10-13",
        "stale": false
      },
      "claims": [
        {
          "who": "Rayoray12",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/214",
          "kind": "a pull request",
          "number": 214,
          "since": "2026-10-11",
          "updated": "2026-10-13",
          "stale": false
        }
      ]
    },
    {
      "id": "17.51",
      "title": "Backup restore with staging swap and rollback",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.16",
        "17.27",
        "2.06"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.16",
        "17.27"
      ],
      "status": "waiting",
      "note": "waiting on 17.16, 17.27",
      "unlocks": 9,
      "checks_left": 7,
      "branch": "milestone/17.51-<short-name>"
    },
    {
      "id": "17.52",
      "title": "Backup retention, pins and audited downloads",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.16",
        "17.47"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.16",
        "17.47"
      ],
      "status": "waiting",
      "note": "waiting on 17.16, 17.47",
      "unlocks": 6,
      "checks_left": 5,
      "branch": "milestone/17.52-<short-name>"
    },
    {
      "id": "17.53",
      "title": "File editor with validated saves and version history",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.18"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.18"
      ],
      "status": "waiting",
      "note": "waiting on 17.18",
      "unlocks": 4,
      "checks_left": 5,
      "branch": "milestone/17.53-<short-name>",
      "next_after": "17.18"
    },
    {
      "id": "17.54",
      "title": "File uploads, downloads and batch operations",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.18"
      ],
      "checks_total": 5,
      "checks_done": 4,
      "done": false,
      "missing": [
        "17.18"
      ],
      "status": "waiting",
      "note": "waiting on 17.18",
      "unlocks": 5,
      "checks_left": 1,
      "branch": "milestone/17.54-<short-name>",
      "started": {
        "by": "Kokoita",
        "sent_as": "[#118](https://github.com/Justchicoo/Project-Ambrose/pull/118)",
        "left": "Landed on 2026-10-09 with 4 of 5 checks: a viewer downloads but cannot upload or move, a batch with one refused entry changes nothing, a ranged download matches the whole file, and a move into the install root is refused by its policy. Left: the upload limit enforced while the body streams in, which needs a body reader through the admin listener and router"
      },
      "next_after": "17.18"
    },
    {
      "id": "17.55",
      "title": "Trash, purge, new files and folders, and permission toggles",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.54"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.54"
      ],
      "status": "waiting",
      "note": "waiting on 17.54",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/17.55-<short-name>",
      "next_after": "17.54"
    },
    {
      "id": "17.56",
      "title": "Operator-defined file roots",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.18"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.18"
      ],
      "status": "waiting",
      "note": "waiting on 17.18",
      "unlocks": 0,
      "checks_left": 4,
      "branch": "milestone/17.56-<short-name>",
      "next_after": "17.18"
    },
    {
      "id": "17.57",
      "title": "Socket subscriptions and live permission filtering",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.26",
        "17.48"
      ],
      "checks_total": 5,
      "checks_done": 1,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "Rayoray12 has a draft pull request",
      "unlocks": 4,
      "checks_left": 4,
      "branch": "milestone/17.57-<short-name>",
      "started": {
        "by": "Rayoray12",
        "sent_as": "[#227](https://github.com/Justchicoo/Project-Ambrose/pull/227)",
        "left": "Landed on 2026-10-13 with 1 of 5 checks: subscribe and unsubscribe over the 17.26 envelope with route-style scope answers, each message re-checked against the caller's current permissions, a once-a-second refilter closing a subscription whose permission is gone and the socket with 4403 when none is left, an ended session closed with 4401, and session.expiring 60 seconds before the idle or absolute end. Left: tests for removing console.read (waits on a served logs stream), an ended session closing only that user's sockets, session.expiring arriving and the page refreshing to keep the socket, and a grant added while open; the page's renew and sign-in-again"
      },
      "claim": {
        "who": "Rayoray12",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/304",
        "kind": "a draft pull request",
        "number": 304,
        "since": "2026-10-15",
        "updated": "2026-10-15",
        "stale": false
      },
      "claims": [
        {
          "who": "Rayoray12",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/304",
          "kind": "a draft pull request",
          "number": 304,
          "since": "2026-10-15",
          "updated": "2026-10-15",
          "stale": false
        }
      ]
    },
    {
      "id": "17.58",
      "title": "Socket limits, fan-out and one live page pipeline",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.57",
        "17.07",
        "17.13"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.57"
      ],
      "status": "waiting",
      "note": "waiting on 17.57",
      "unlocks": 2,
      "checks_left": 6,
      "branch": "milestone/17.58-<short-name>",
      "next_after": "17.57"
    },
    {
      "id": "17.59",
      "title": "Pre-start checks and restart confirmation",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.27",
        "3.22"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.27"
      ],
      "status": "waiting",
      "note": "waiting on 17.27",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/17.59-<short-name>",
      "next_after": "17.27"
    },
    {
      "id": "17.60",
      "title": "Exit classification, backoff and crash records",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.27",
        "17.28"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.27",
        "17.28"
      ],
      "status": "building",
      "note": "Rayoray12 has a pull request",
      "unlocks": 8,
      "checks_left": 5,
      "branch": "milestone/17.60-<short-name>",
      "claim": {
        "who": "Rayoray12",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/222",
        "kind": "a pull request",
        "number": 222,
        "since": "2026-10-11",
        "updated": "2026-10-13",
        "stale": false
      },
      "claims": [
        {
          "who": "Rayoray12",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/222",
          "kind": "a pull request",
          "number": 222,
          "since": "2026-10-11",
          "updated": "2026-10-13",
          "stale": false
        }
      ]
    },
    {
      "id": "17.61",
      "title": "Reconciling stale online and session rows after a crash",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.60",
        "4.07",
        "2.13"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.60"
      ],
      "status": "waiting",
      "note": "waiting on 17.60",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/17.61-<short-name>",
      "next_after": "17.60"
    },
    {
      "id": "17.62",
      "title": "Player account registration and password recovery",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.35",
        "2.13"
      ],
      "checks_total": 7,
      "checks_done": 1,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 1,
      "checks_left": 6,
      "branch": "milestone/17.62-<short-name>",
      "started": {
        "by": "Kokoita",
        "sent_as": "[#173](https://github.com/Justchicoo/Project-Ambrose/pull/173)",
        "left": "Landed on 2026-10-13 with 1 of 7 checks: the registration, verification and reset routes answer 404 until `Panel.Registration.Enable`; tokens are hashed, single-use and expiring; mail is capped per address per day; `Login.RequireVerifiedEmail` gates sign-in; a reset relays a kick to running gameservers; and an operator registrations page is behind `accounts.read` and `accounts.registration`. Left: tests for the identical answer for unknown and known emails, the reset token's single use and expiry with `account_session` deleted and the live session kicked, ten registrations a minute throttled and then a captcha, a game account at level 0 with no panel user, the registrations page's audited resend and block with 403 for `accounts.read` alone, and the Dev-gated retail sign-in"
      }
    },
    {
      "id": "17.63",
      "title": "Moderation queue, chat search and mute history",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.21",
        "17.25",
        "17.177",
        "12.07"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.21",
        "17.25",
        "17.177"
      ],
      "status": "waiting",
      "note": "waiting on 17.21, 17.25, 17.177",
      "unlocks": 1,
      "checks_left": 6,
      "branch": "milestone/17.63-<short-name>"
    },
    {
      "id": "17.64",
      "title": "Installation maintenance mode",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.12",
        "17.14",
        "2.14"
      ],
      "checks_total": 5,
      "checks_done": 4,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 2,
      "checks_left": 1,
      "branch": "milestone/17.64-<short-name>",
      "started": {
        "by": "Rayoray12",
        "sent_as": "[#123](https://github.com/Justchicoo/Project-Ambrose/pull/123), [#181](https://github.com/Justchicoo/Project-Ambrose/pull/181)",
        "left": "4 of 5 checks. The panel's audited banner, enter and leave control and `/api/panel/maintenance` routes keep who, why, when and the window in the panel store, and MSG_USER_VALIDATE is refused below the bypass level. Left: publishing the window on 17.70's page (#185 is open for it), the 17.15 schedule task that enters and leaves maintenance, and the Dev-gated check that the retail client shows the maintenance reason"
      }
    },
    {
      "id": "17.65",
      "title": "Patch server operations: manifest, revisions and signing key",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.14",
        "17.47",
        "17.48",
        "16.03",
        "16.08"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.47",
        "16.08"
      ],
      "status": "waiting",
      "note": "waiting on 17.47, 16.08",
      "unlocks": 3,
      "checks_left": 6,
      "branch": "milestone/17.65-<short-name>"
    },
    {
      "id": "17.66",
      "title": "Dashboard localization",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.06",
        "17.35",
        "17.38"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.38"
      ],
      "status": "building",
      "note": "Rayoray12 has a pull request",
      "unlocks": 1,
      "checks_left": 4,
      "branch": "milestone/17.66-<short-name>",
      "claim": {
        "who": "Rayoray12",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/184",
        "kind": "a pull request",
        "number": 184,
        "since": "2026-10-10",
        "updated": "2026-10-13",
        "stale": false
      },
      "claims": [
        {
          "who": "Rayoray12",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/184",
          "kind": "a pull request",
          "number": 184,
          "since": "2026-10-10",
          "updated": "2026-10-13",
          "stale": false
        }
      ]
    },
    {
      "id": "17.67",
      "title": "Alerts, notifications and acknowledgement",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.15",
        "17.16",
        "17.19",
        "17.35",
        "17.60"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.15",
        "17.16",
        "17.60"
      ],
      "status": "waiting",
      "note": "waiting on 17.15, 17.16, 17.60",
      "unlocks": 25,
      "checks_left": 6,
      "branch": "milestone/17.67-<short-name>"
    },
    {
      "id": "17.68",
      "title": "Schedules page and run history",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.15",
        "17.26",
        "17.44"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.15",
        "17.44"
      ],
      "status": "waiting",
      "note": "waiting on 17.15, 17.44",
      "unlocks": 2,
      "checks_left": 7,
      "branch": "milestone/17.68-<short-name>"
    },
    {
      "id": "17.69",
      "title": "Game operations analytics",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.19",
        "17.21",
        "2.08"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.21"
      ],
      "status": "waiting",
      "note": "waiting on 17.21",
      "unlocks": 4,
      "checks_left": 5,
      "branch": "milestone/17.69-<short-name>",
      "next_after": "17.21"
    },
    {
      "id": "17.70",
      "title": "Public status and scheduled downtime page",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.14",
        "17.19",
        "17.64"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.64"
      ],
      "status": "building",
      "note": "Rayoray12 has a pull request",
      "unlocks": 2,
      "checks_left": 5,
      "branch": "milestone/17.70-<short-name>",
      "claim": {
        "who": "Rayoray12",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/185",
        "kind": "a pull request",
        "number": 185,
        "since": "2026-10-10",
        "updated": "2026-10-13",
        "stale": false
      },
      "claims": [
        {
          "who": "Rayoray12",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/185",
          "kind": "a pull request",
          "number": 185,
          "since": "2026-10-10",
          "updated": "2026-10-13",
          "stale": false
        }
      ]
    },
    {
      "id": "17.71",
      "title": "Admission queue control",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.19",
        "17.31",
        "12.21"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.31"
      ],
      "status": "waiting",
      "note": "waiting on 17.31",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/17.71-<short-name>",
      "next_after": "17.31"
    },
    {
      "id": "17.72",
      "title": "Opt-in backup archive encryption",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.43",
        "17.47",
        "17.51",
        "17.52"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.43",
        "17.47",
        "17.51",
        "17.52"
      ],
      "status": "waiting",
      "note": "waiting on 17.43, 17.47, 17.51, 17.52",
      "unlocks": 5,
      "checks_left": 4,
      "branch": "milestone/17.72-<short-name>"
    },
    {
      "id": "17.73",
      "title": "Design system: tokens, components and the gallery",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "1.02",
        "1.03"
      ],
      "checks_total": 15,
      "checks_done": 15,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 8,
      "checks_left": 0,
      "branch": "milestone/17.73-<short-name>"
    },
    {
      "id": "17.74",
      "title": "Console log line: columns, parts and per-part color",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.01"
      ],
      "checks_total": 5,
      "checks_done": 4,
      "done": false,
      "missing": [
        "17.01"
      ],
      "status": "waiting",
      "note": "waiting on 17.01",
      "unlocks": 3,
      "checks_left": 1,
      "branch": "milestone/17.74-<short-name>",
      "started": {
        "by": "the maintainer's server session",
        "sent_as": "on main",
        "left": "One Dev-gated check, on the same console and terminal as 17.01"
      },
      "next_after": "17.01"
    },
    {
      "id": "17.75",
      "title": "Console color conventions and the color depth ladder",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.74"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.74"
      ],
      "status": "waiting",
      "note": "waiting on 17.74",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/17.75-<short-name>",
      "next_after": "17.74"
    },
    {
      "id": "17.76",
      "title": "Value runs inside a log message",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.04",
        "17.74"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.74"
      ],
      "status": "waiting",
      "note": "waiting on 17.74",
      "unlocks": 2,
      "checks_left": 7,
      "branch": "milestone/17.76-<short-name>",
      "next_after": "17.74"
    },
    {
      "id": "17.77",
      "title": "Console wrapping, hanging indent and the record cap",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.01",
        "17.74"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.01",
        "17.74"
      ],
      "status": "waiting",
      "note": "waiting on 17.01, 17.74",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/17.77-<short-name>"
    },
    {
      "id": "17.78",
      "title": "Event overlays on every graph",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.19",
        "17.25",
        "17.49"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.25"
      ],
      "status": "waiting",
      "note": "waiting on 17.25",
      "unlocks": 5,
      "checks_left": 6,
      "branch": "milestone/17.78-<short-name>",
      "next_after": "17.25"
    },
    {
      "id": "17.79",
      "title": "Correlate a window",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.19",
        "17.78"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.78"
      ],
      "status": "waiting",
      "note": "waiting on 17.78",
      "unlocks": 2,
      "checks_left": 5,
      "branch": "milestone/17.79-<short-name>",
      "next_after": "17.78"
    },
    {
      "id": "17.80",
      "title": "Log search over history with facets",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.04",
        "17.07",
        "17.14",
        "17.76"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.76"
      ],
      "status": "waiting",
      "note": "waiting on 17.76",
      "unlocks": 6,
      "checks_left": 6,
      "branch": "milestone/17.80-<short-name>",
      "next_after": "17.76"
    },
    {
      "id": "17.81",
      "title": "Synthetic login probe and end-to-end health checks",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.15",
        "17.19",
        "17.67",
        "3.24"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.15",
        "17.67"
      ],
      "status": "waiting",
      "note": "waiting on 17.15, 17.67",
      "unlocks": 7,
      "checks_left": 6,
      "branch": "milestone/17.81-<short-name>"
    },
    {
      "id": "17.82",
      "title": "Installation health checks with fixes",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.03",
        "17.06",
        "17.16",
        "17.47"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.16",
        "17.47"
      ],
      "status": "waiting",
      "note": "waiting on 17.16, 17.47",
      "unlocks": 9,
      "checks_left": 5,
      "branch": "milestone/17.82-<short-name>"
    },
    {
      "id": "17.83",
      "title": "Crash dumps, symbolization and grouping",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.18",
        "17.60"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.18",
        "17.60"
      ],
      "status": "waiting",
      "note": "waiting on 17.18, 17.60",
      "unlocks": 5,
      "checks_left": 6,
      "branch": "milestone/17.83-<short-name>"
    },
    {
      "id": "17.84",
      "title": "Support bundle",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.08",
        "17.18",
        "17.60"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.18",
        "17.60"
      ],
      "status": "waiting",
      "note": "waiting on 17.18, 17.60",
      "unlocks": 2,
      "checks_left": 5,
      "branch": "milestone/17.84-<short-name>"
    },
    {
      "id": "17.85",
      "title": "Alert grouping, inhibition and silences",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.22",
        "17.67"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.22",
        "17.67"
      ],
      "status": "waiting",
      "note": "waiting on 17.22, 17.67",
      "unlocks": 2,
      "checks_left": 6,
      "branch": "milestone/17.85-<short-name>"
    },
    {
      "id": "17.86",
      "title": "Notification routing, preferences and delivery test",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.38",
        "17.48",
        "17.67"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.38",
        "17.67"
      ],
      "status": "waiting",
      "note": "waiting on 17.38, 17.67",
      "unlocks": 15,
      "checks_left": 6,
      "branch": "milestone/17.86-<short-name>"
    },
    {
      "id": "17.87",
      "title": "Event-triggered automation",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.15",
        "17.26",
        "17.60",
        "17.67"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.15",
        "17.60",
        "17.67"
      ],
      "status": "waiting",
      "note": "waiting on 17.15, 17.60, 17.67",
      "unlocks": 3,
      "checks_left": 6,
      "branch": "milestone/17.87-<short-name>"
    },
    {
      "id": "17.88",
      "title": "Command palette and keyboard-first operation",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.06",
        "17.21",
        "17.48",
        "17.73"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.21"
      ],
      "status": "waiting",
      "note": "waiting on 17.21",
      "unlocks": 4,
      "checks_left": 5,
      "branch": "milestone/17.88-<short-name>",
      "next_after": "17.21"
    },
    {
      "id": "17.89",
      "title": "Kill switches",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.12",
        "17.13",
        "17.27"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.27"
      ],
      "status": "waiting",
      "note": "waiting on 17.27",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/17.89-<short-name>",
      "next_after": "17.27"
    },
    {
      "id": "17.90",
      "title": "Slow query and database health page",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.08",
        "17.09",
        "17.30"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.30"
      ],
      "status": "waiting",
      "note": "waiting on 17.30",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/17.90-<short-name>",
      "next_after": "17.30"
    },
    {
      "id": "17.91",
      "title": "Tick breakdown and on-demand profiles",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.09",
        "17.19"
      ],
      "checks_total": 5,
      "checks_done": 3,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 1,
      "checks_left": 2,
      "branch": "milestone/17.91-<short-name>",
      "started": {
        "by": "MeruneFleuruwu",
        "sent_as": "[#14](https://github.com/Justchicoo/Project-Ambrose/pull/14)",
        "left": "Landed on 2026-09-29 with checks 1, 3 and 5 earned, after review timed 6.01's movement relay as its own subsystem. Left: a benchmark showing the accumulators cost nothing measurable while no profile runs (check 2), and a tick alert naming the subsystem (check 4), which waits for 17.67's alert rules"
      }
    },
    {
      "id": "17.92",
      "title": "Per-session network quality and the player inspector",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.19",
        "17.80",
        "17.175",
        "17.177"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.80",
        "17.175",
        "17.177"
      ],
      "status": "waiting",
      "note": "waiting on 17.80, 17.175, 17.177",
      "unlocks": 1,
      "checks_left": 6,
      "branch": "milestone/17.92-<short-name>"
    },
    {
      "id": "17.93",
      "title": "Tamper-evident audit chain and audit streaming",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.14",
        "17.49"
      ],
      "checks_total": 5,
      "checks_done": 5,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 0,
      "checks_left": 0,
      "branch": "milestone/17.93-<short-name>"
    },
    {
      "id": "17.94",
      "title": "Uptime history and incident timeline",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.70",
        "17.81"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.70",
        "17.81"
      ],
      "status": "building",
      "note": "Rayoray12 has a pull request",
      "unlocks": 4,
      "checks_left": 4,
      "branch": "milestone/17.94-<short-name>",
      "claim": {
        "who": "Rayoray12",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/193",
        "kind": "a pull request",
        "number": 193,
        "since": "2026-10-10",
        "updated": "2026-10-13",
        "stale": false
      },
      "claims": [
        {
          "who": "Rayoray12",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/193",
          "kind": "a pull request",
          "number": 193,
          "since": "2026-10-10",
          "updated": "2026-10-13",
          "stale": false
        }
      ]
    },
    {
      "id": "17.95",
      "title": "Character point-in-time restore and undelete",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.16",
        "17.51",
        "17.177",
        "3.17"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.16",
        "17.51",
        "17.177"
      ],
      "status": "waiting",
      "note": "waiting on 17.16, 17.51, 17.177",
      "unlocks": 1,
      "checks_left": 7,
      "branch": "milestone/17.95-<short-name>"
    },
    {
      "id": "17.96",
      "title": "Operations calendar",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.15",
        "17.32",
        "17.33",
        "17.64",
        "17.68"
      ],
      "checks_total": 5,
      "checks_done": 1,
      "done": false,
      "missing": [
        "17.15",
        "17.32",
        "17.33",
        "17.64",
        "17.68"
      ],
      "status": "building",
      "note": "Rayoray12 has a claim",
      "unlocks": 4,
      "checks_left": 4,
      "branch": "milestone/17.96-<short-name>",
      "started": {
        "by": "Rayoray12",
        "sent_as": "[#231](https://github.com/Justchicoo/Project-Ambrose/pull/231)",
        "left": "Landed on 2026-10-13 with 1 of 5 checks: GET /api/ops/calendar under status.read merging the four sources, installation maintenance read live from 17.64's record, conflicts where a player-facing entry runs across a disruptive one, entries filtered by each source's permission, and the week and month Operations calendar page with the operator's zone and the server's offset. Left: checks 1, 2, 3 and 5, which wait on the schedules (17.15), timed game events (17.33) and realm maintenance (17.32) sources registering providers; the game events source's permission is a placeholder until 17.33 names it"
      },
      "claim": {
        "who": "Rayoray12",
        "url": "https://github.com/Justchicoo/Project-Ambrose/issues/190",
        "kind": "a claim",
        "number": 190,
        "since": "2026-10-10",
        "updated": "2026-10-10",
        "stale": false
      },
      "claims": [
        {
          "who": "Rayoray12",
          "url": "https://github.com/Justchicoo/Project-Ambrose/issues/190",
          "kind": "a claim",
          "number": 190,
          "since": "2026-10-10",
          "updated": "2026-10-10",
          "stale": false
        }
      ]
    },
    {
      "id": "17.97",
      "title": "Daily operations digest",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.67",
        "17.69",
        "17.86"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.67",
        "17.69",
        "17.86"
      ],
      "status": "waiting",
      "note": "waiting on 17.67, 17.69, 17.86",
      "unlocks": 4,
      "checks_left": 4,
      "branch": "milestone/17.97-<short-name>"
    },
    {
      "id": "17.98",
      "title": "Capacity forecasts and the weekly load heatmap",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.19",
        "17.44",
        "17.69"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.44",
        "17.69"
      ],
      "status": "waiting",
      "note": "waiting on 17.44, 17.69",
      "unlocks": 2,
      "checks_left": 5,
      "branch": "milestone/17.98-<short-name>"
    },
    {
      "id": "17.99",
      "title": "Declarative installation file with diff and apply",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.12",
        "17.28",
        "17.29",
        "17.36",
        "17.48"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.28",
        "17.29"
      ],
      "status": "waiting",
      "note": "waiting on 17.28, 17.29",
      "unlocks": 8,
      "checks_left": 6,
      "branch": "milestone/17.99-<short-name>"
    },
    {
      "id": "17.100",
      "title": "ambrosectl: one command line over the panel API",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.36",
        "17.48",
        "17.99"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.99"
      ],
      "status": "waiting",
      "note": "waiting on 17.99",
      "unlocks": 2,
      "checks_left": 6,
      "branch": "milestone/17.100-<short-name>",
      "next_after": "17.99"
    },
    {
      "id": "17.101",
      "title": "Content packs: install, version and uninstall",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.18",
        "17.34",
        "17.65"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.18",
        "17.34",
        "17.65"
      ],
      "status": "waiting",
      "note": "waiting on 17.18, 17.34, 17.65",
      "unlocks": 1,
      "checks_left": 7,
      "branch": "milestone/17.101-<short-name>"
    },
    {
      "id": "17.102",
      "title": "Outbound event webhooks",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.26",
        "17.67"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.67"
      ],
      "status": "waiting",
      "note": "waiting on 17.67",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/17.102-<short-name>",
      "next_after": "17.67"
    },
    {
      "id": "17.103",
      "title": "Item and currency ledger with anomaly rules",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.25",
        "17.69",
        "8.08"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.25",
        "17.69"
      ],
      "status": "waiting",
      "note": "waiting on 17.25, 17.69",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.103-<short-name>"
    },
    {
      "id": "17.104",
      "title": "Compensation grants and mass mail",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.21",
        "17.33",
        "17.69",
        "8.08"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.21",
        "17.33",
        "17.69"
      ],
      "status": "waiting",
      "note": "waiting on 17.21, 17.33, 17.69",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.104-<short-name>"
    },
    {
      "id": "17.105",
      "title": "Releases: the panel program and the launcher as downloadable builds",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.14",
        "17.24",
        "17.183"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.24",
        "17.183"
      ],
      "status": "waiting",
      "note": "waiting on 17.24, 17.183",
      "unlocks": 8,
      "checks_left": 6,
      "branch": "milestone/17.105-<short-name>"
    },
    {
      "id": "17.106",
      "title": "Error reports: source locations, grouping and a report file",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.04",
        "17.08",
        "17.14"
      ],
      "checks_total": 6,
      "checks_done": 6,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 5,
      "checks_left": 0,
      "branch": "milestone/17.106-<short-name>"
    },
    {
      "id": "17.107",
      "title": "A value in a log line is a place you can go",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.07",
        "17.76",
        "17.106"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.76"
      ],
      "status": "waiting",
      "note": "waiting on 17.76",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.107-<short-name>",
      "next_after": "17.76"
    },
    {
      "id": "17.108",
      "title": "A panel nobody has to click past a warning to use",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.14",
        "17.181"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.181"
      ],
      "status": "waiting",
      "note": "waiting on 17.181",
      "unlocks": 3,
      "checks_left": 6,
      "branch": "milestone/17.108-<short-name>",
      "next_after": "17.181"
    },
    {
      "id": "17.109",
      "title": "Plugins: what one is, and the tab that installs it",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.101",
        "17.48",
        "17.18"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.101",
        "17.18"
      ],
      "status": "waiting",
      "note": "waiting on 17.101, 17.18",
      "unlocks": 2,
      "checks_left": 7,
      "branch": "milestone/17.109-<short-name>"
    },
    {
      "id": "17.110",
      "title": "A panel tool runs without being trusted",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.109"
      ],
      "checks_total": 9,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.109"
      ],
      "status": "waiting",
      "note": "waiting on 17.109",
      "unlocks": 2,
      "checks_left": 9,
      "branch": "milestone/17.110-<short-name>",
      "next_after": "17.109"
    },
    {
      "id": "17.111",
      "title": "Plugins ship with the panel, from this repository",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.109",
        "17.110",
        "17.105"
      ],
      "checks_total": 9,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.109",
        "17.110",
        "17.105"
      ],
      "status": "waiting",
      "note": "waiting on 17.109, 17.110, 17.105",
      "unlocks": 0,
      "checks_left": 9,
      "branch": "milestone/17.111-<short-name>"
    },
    {
      "id": "17.112",
      "title": "Tomes: templates for realms, apps and companion services",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.27",
        "17.28",
        "17.29",
        "17.30",
        "17.99"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.27",
        "17.28",
        "17.29",
        "17.30",
        "17.99"
      ],
      "status": "waiting",
      "note": "waiting on 17.27, 17.28, 17.29, 17.30, 17.99",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.112-<short-name>"
    },
    {
      "id": "17.113",
      "title": "Hang detection and watchdogs at every layer",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.22",
        "17.23",
        "17.24",
        "17.27",
        "17.60",
        "17.67",
        "17.83"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.22",
        "17.23",
        "17.24",
        "17.27",
        "17.60",
        "17.67",
        "17.83"
      ],
      "status": "waiting",
      "note": "waiting on 17.22, 17.23, 17.24, 17.27, 17.60, 17.67, 17.83",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.113-<short-name>"
    },
    {
      "id": "17.114",
      "title": "Host awareness: sleep, OS updates, shutdown and the clock",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.15",
        "17.22",
        "17.23",
        "17.24",
        "17.60",
        "17.78",
        "17.82",
        "17.94",
        "17.98"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.15",
        "17.22",
        "17.23",
        "17.24",
        "17.60",
        "17.78",
        "17.82",
        "17.94",
        "17.98"
      ],
      "status": "waiting",
      "note": "waiting on 17.15, 17.22, 17.23, 17.24, 17.60, 17.78, 17.82, 17.94, 17.98",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.114-<short-name>"
    },
    {
      "id": "17.115",
      "title": "Runbooks on alerts, findings and crash groups",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.53",
        "17.67",
        "17.82",
        "17.83",
        "17.86",
        "17.88"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.53",
        "17.67",
        "17.82",
        "17.83",
        "17.86",
        "17.88"
      ],
      "status": "waiting",
      "note": "waiting on 17.53, 17.67, 17.82, 17.83, 17.86, 17.88",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.115-<short-name>"
    },
    {
      "id": "17.116",
      "title": "Restore drills and update rehearsals",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.16",
        "17.17",
        "17.29",
        "17.43",
        "17.51",
        "17.67",
        "17.81",
        "17.82"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.16",
        "17.17",
        "17.29",
        "17.43",
        "17.51",
        "17.67",
        "17.81",
        "17.82"
      ],
      "status": "waiting",
      "note": "waiting on 17.16, 17.17, 17.29, 17.43, 17.51, 17.67, 17.81, 17.82",
      "unlocks": 1,
      "checks_left": 7,
      "branch": "milestone/17.116-<short-name>"
    },
    {
      "id": "17.117",
      "title": "Panel store durability: checks, snapshots and freeing space",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.14",
        "17.16",
        "17.18",
        "17.19",
        "17.43",
        "17.72",
        "17.80"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.16",
        "17.18",
        "17.43",
        "17.72",
        "17.80"
      ],
      "status": "waiting",
      "note": "waiting on 17.16, 17.18, 17.43, 17.72, 17.80",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.117-<short-name>"
    },
    {
      "id": "17.118",
      "title": "Drift watch: config, installed files and schema",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.08",
        "17.12",
        "17.17",
        "17.22",
        "17.67",
        "17.99",
        "17.105",
        "2.06"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.17",
        "17.22",
        "17.67",
        "17.99",
        "17.105"
      ],
      "status": "waiting",
      "note": "waiting on 17.17, 17.22, 17.67, 17.99, 17.105",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.118-<short-name>"
    },
    {
      "id": "17.119",
      "title": "Drive and host health: SMART, latency, pressure and limits",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.19",
        "17.22",
        "17.67",
        "17.82"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.22",
        "17.67",
        "17.82"
      ],
      "status": "waiting",
      "note": "waiting on 17.22, 17.67, 17.82",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.119-<short-name>"
    },
    {
      "id": "17.120",
      "title": "Release health, bake window and canary realm",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.17",
        "17.19",
        "17.44",
        "17.52",
        "17.60",
        "17.81",
        "17.83",
        "17.106"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.17",
        "17.44",
        "17.52",
        "17.60",
        "17.81",
        "17.83"
      ],
      "status": "waiting",
      "note": "waiting on 17.17, 17.44, 17.52, 17.60, 17.81, 17.83",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.120-<short-name>"
    },
    {
      "id": "17.121",
      "title": "Request tracing and the service map",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.04",
        "17.49",
        "17.80",
        "17.81",
        "17.90",
        "17.91",
        "17.92"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.80",
        "17.81",
        "17.90",
        "17.91",
        "17.92"
      ],
      "status": "waiting",
      "note": "waiting on 17.80, 17.81, 17.90, 17.91, 17.92",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.121-<short-name>"
    },
    {
      "id": "17.122",
      "title": "Service level objectives and error budgets",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.17",
        "17.19",
        "17.44",
        "17.67",
        "17.81",
        "17.86",
        "17.94",
        "17.96"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.17",
        "17.44",
        "17.67",
        "17.81",
        "17.86",
        "17.94",
        "17.96"
      ],
      "status": "waiting",
      "note": "waiting on 17.17, 17.44, 17.67, 17.81, 17.86, 17.94, 17.96",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.122-<short-name>"
    },
    {
      "id": "17.123",
      "title": "Reachability from the internet: router, firewall and an outside probe",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.22",
        "17.23",
        "17.24",
        "17.29",
        "17.81"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.22",
        "17.23",
        "17.24",
        "17.29",
        "17.81"
      ],
      "status": "waiting",
      "note": "waiting on 17.22, 17.23, 17.24, 17.29, 17.81",
      "unlocks": 1,
      "checks_left": 7,
      "branch": "milestone/17.123-<short-name>"
    },
    {
      "id": "17.124",
      "title": "Backup copies to disks, shares and SFTP, with a 3-2-1 check",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.16",
        "17.40",
        "17.43",
        "17.52",
        "17.72",
        "17.82"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.16",
        "17.40",
        "17.43",
        "17.52",
        "17.72",
        "17.82"
      ],
      "status": "waiting",
      "note": "waiting on 17.16, 17.40, 17.43, 17.52, 17.72, 17.82",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.124-<short-name>"
    },
    {
      "id": "17.125",
      "title": "Moving the whole installation to a new machine",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.16",
        "17.22",
        "17.24",
        "17.46",
        "17.51",
        "17.72",
        "17.99",
        "3.22"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.16",
        "17.22",
        "17.24",
        "17.51",
        "17.72",
        "17.99"
      ],
      "status": "waiting",
      "note": "waiting on 17.16, 17.22, 17.24, 17.51, 17.72, 17.99",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.125-<short-name>"
    },
    {
      "id": "17.126",
      "title": "Point-in-time recovery from binary logs",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.16",
        "17.24",
        "17.30",
        "17.43",
        "17.51",
        "17.67",
        "17.72",
        "17.78"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.16",
        "17.24",
        "17.30",
        "17.43",
        "17.51",
        "17.67",
        "17.72",
        "17.78"
      ],
      "status": "waiting",
      "note": "waiting on 17.16, 17.24, 17.30, 17.43, 17.51, 17.67, 17.72, 17.78",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.126-<short-name>"
    },
    {
      "id": "17.127",
      "title": "Dynamic DNS and DNS-01 certificates",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.14",
        "17.35",
        "17.108"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.108"
      ],
      "status": "waiting",
      "note": "waiting on 17.108",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.127-<short-name>",
      "next_after": "17.108"
    },
    {
      "id": "17.128",
      "title": "Reverse proxy configs and the forwarded-header check",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.14",
        "17.26",
        "17.35"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "Rayoray12 has a pull request",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/17.128-<short-name>",
      "claim": {
        "who": "Rayoray12",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/229",
        "kind": "a pull request",
        "number": 229,
        "since": "2026-10-12",
        "updated": "2026-10-13",
        "stale": false
      },
      "claims": [
        {
          "who": "Rayoray12",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/229",
          "kind": "a pull request",
          "number": 229,
          "since": "2026-10-12",
          "updated": "2026-10-13",
          "stale": false
        }
      ]
    },
    {
      "id": "17.129",
      "title": "Staging copies and pull request previews",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.16",
        "17.17",
        "17.29",
        "17.30",
        "17.34",
        "17.51",
        "17.99",
        "17.116",
        "3.24"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.16",
        "17.17",
        "17.29",
        "17.30",
        "17.34",
        "17.51",
        "17.99",
        "17.116"
      ],
      "status": "waiting",
      "note": "waiting on 17.16, 17.17, 17.29, 17.30, 17.34, 17.51, 17.99, 17.116",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.129-<short-name>"
    },
    {
      "id": "17.130",
      "title": "Usage accounting: transfer, energy and cost",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.19",
        "17.22",
        "17.25",
        "17.65",
        "17.67"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.22",
        "17.25",
        "17.65",
        "17.67"
      ],
      "status": "waiting",
      "note": "waiting on 17.22, 17.25, 17.65, 17.67",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.130-<short-name>"
    },
    {
      "id": "17.131",
      "title": "Host security audit",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.14",
        "17.23",
        "17.29",
        "17.30",
        "17.82",
        "17.123"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.23",
        "17.29",
        "17.30",
        "17.82",
        "17.123"
      ],
      "status": "waiting",
      "note": "waiting on 17.23, 17.29, 17.30, 17.82, 17.123",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.131-<short-name>"
    },
    {
      "id": "17.132",
      "title": "New sign-in notices and stolen-session signals",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.14",
        "17.35",
        "17.36",
        "17.38",
        "17.46",
        "17.47",
        "17.86"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.38",
        "17.47",
        "17.86"
      ],
      "status": "waiting",
      "note": "waiting on 17.38, 17.47, 17.86",
      "unlocks": 1,
      "checks_left": 7,
      "branch": "milestone/17.132-<short-name>"
    },
    {
      "id": "17.133",
      "title": "Sign-in with OIDC, Discord or GitHub",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.35",
        "17.38",
        "17.46",
        "17.47",
        "17.48",
        "17.50",
        "17.86"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.38",
        "17.47",
        "17.50",
        "17.86"
      ],
      "status": "waiting",
      "note": "waiting on 17.38, 17.47, 17.50, 17.86",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.133-<short-name>"
    },
    {
      "id": "17.134",
      "title": "Access reviews and the who-can explorer",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.15",
        "17.25",
        "17.36",
        "17.37",
        "17.48",
        "17.50",
        "17.86"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.15",
        "17.25",
        "17.50",
        "17.86"
      ],
      "status": "waiting",
      "note": "waiting on 17.15, 17.25, 17.50, 17.86",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.134-<short-name>"
    },
    {
      "id": "17.135",
      "title": "Compromise response: canary credentials and lockdown",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.16",
        "17.22",
        "17.25",
        "17.36",
        "17.37",
        "17.47",
        "17.52",
        "17.67",
        "17.84",
        "17.87",
        "17.99",
        "17.140"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.16",
        "17.22",
        "17.25",
        "17.47",
        "17.52",
        "17.67",
        "17.84",
        "17.87",
        "17.99",
        "17.140"
      ],
      "status": "waiting",
      "note": "waiting on 17.16, 17.22, 17.25, 17.47, 17.52, 17.67, 17.84, 17.87, 17.99, 17.140",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.135-<short-name>"
    },
    {
      "id": "17.136",
      "title": "Expiring grants, just-in-time elevation and break-glass",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.37",
        "17.47",
        "17.48",
        "17.50",
        "17.57",
        "17.86"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.47",
        "17.50",
        "17.57",
        "17.86"
      ],
      "status": "waiting",
      "note": "waiting on 17.47, 17.50, 17.57, 17.86",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.136-<short-name>"
    },
    {
      "id": "17.137",
      "title": "Installed components and security advisories",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.17",
        "17.67",
        "17.82",
        "17.97",
        "17.105"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.17",
        "17.67",
        "17.82",
        "17.97",
        "17.105"
      ],
      "status": "waiting",
      "note": "waiting on 17.17, 17.67, 17.82, 17.97, 17.105",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.137-<short-name>"
    },
    {
      "id": "17.138",
      "title": "Network access rules and the address ban list",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.14",
        "17.36",
        "17.40",
        "17.46",
        "17.47",
        "17.48",
        "17.132",
        "6.05"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.40",
        "17.47",
        "17.132"
      ],
      "status": "waiting",
      "note": "waiting on 17.40, 17.47, 17.132",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.138-<short-name>"
    },
    {
      "id": "17.139",
      "title": "Player privacy requests: export, erasure and retention",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.21",
        "17.25",
        "17.47",
        "17.51",
        "17.52",
        "17.62",
        "17.63",
        "17.80",
        "17.95"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.21",
        "17.25",
        "17.47",
        "17.51",
        "17.52",
        "17.62",
        "17.63",
        "17.80",
        "17.95"
      ],
      "status": "waiting",
      "note": "waiting on 17.21, 17.25, 17.47, 17.51, 17.52, 17.62, 17.63, 17.80, 17.95",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.139-<short-name>"
    },
    {
      "id": "17.140",
      "title": "Secrets inventory and key rotation",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.02",
        "17.22",
        "17.28",
        "17.30",
        "17.36",
        "17.47",
        "17.65",
        "17.67",
        "17.72"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.22",
        "17.28",
        "17.30",
        "17.47",
        "17.65",
        "17.67",
        "17.72"
      ],
      "status": "waiting",
      "note": "waiting on 17.22, 17.28, 17.30, 17.47, 17.65, 17.67, 17.72",
      "unlocks": 1,
      "checks_left": 7,
      "branch": "milestone/17.140-<short-name>"
    },
    {
      "id": "17.141",
      "title": "Two-person approval and change requests",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.25",
        "17.37",
        "17.47",
        "17.48",
        "17.49",
        "17.53",
        "17.86"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.25",
        "17.47",
        "17.53",
        "17.86"
      ],
      "status": "waiting",
      "note": "waiting on 17.25, 17.47, 17.53, 17.86",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.141-<short-name>"
    },
    {
      "id": "17.142",
      "title": "Discord bot: commands, alert buttons and live status",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.26",
        "17.36",
        "17.38",
        "17.48",
        "17.49",
        "17.67",
        "17.85",
        "17.86"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.38",
        "17.67",
        "17.85",
        "17.86"
      ],
      "status": "waiting",
      "note": "waiting on 17.38, 17.67, 17.85, 17.86",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.142-<short-name>"
    },
    {
      "id": "17.143",
      "title": "Crash and error groups linked to issues and fix releases",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.17",
        "17.83",
        "17.105",
        "17.106"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.17",
        "17.83",
        "17.105"
      ],
      "status": "waiting",
      "note": "waiting on 17.17, 17.83, 17.105",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.143-<short-name>"
    },
    {
      "id": "17.144",
      "title": "Feature flags with targeting and staged rollout",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.12",
        "17.67",
        "17.81",
        "17.83",
        "17.106",
        "4.16"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.67",
        "17.81",
        "17.83"
      ],
      "status": "waiting",
      "note": "waiting on 17.67, 17.81, 17.83",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.144-<short-name>"
    },
    {
      "id": "17.145",
      "title": "MCP server for AI assistants",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.36",
        "17.48",
        "17.80",
        "17.84",
        "17.100",
        "17.106"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.80",
        "17.84",
        "17.100"
      ],
      "status": "waiting",
      "note": "waiting on 17.80, 17.84, 17.100",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.145-<short-name>"
    },
    {
      "id": "17.146",
      "title": "OpenAPI description and API explorer",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.26",
        "17.36",
        "17.48",
        "17.100",
        "17.105"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.100",
        "17.105"
      ],
      "status": "waiting",
      "note": "waiting on 17.100, 17.105",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.146-<short-name>"
    },
    {
      "id": "17.147",
      "title": "Sandboxed operator scripts",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.15",
        "17.28",
        "17.48",
        "17.53",
        "17.87",
        "17.110"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.15",
        "17.28",
        "17.53",
        "17.87",
        "17.110"
      ],
      "status": "waiting",
      "note": "waiting on 17.15, 17.28, 17.53, 17.87, 17.110",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.147-<short-name>"
    },
    {
      "id": "17.148",
      "title": "Installation file synced from Git",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.15",
        "17.17",
        "17.36",
        "17.67",
        "17.99",
        "17.149"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.15",
        "17.17",
        "17.67",
        "17.99",
        "17.149"
      ],
      "status": "waiting",
      "note": "waiting on 17.15, 17.17, 17.67, 17.99, 17.149",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.148-<short-name>"
    },
    {
      "id": "17.149",
      "title": "Inbound webhooks that start a task chain",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.14",
        "17.15",
        "17.87"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.15",
        "17.87"
      ],
      "status": "waiting",
      "note": "waiting on 17.15, 17.87",
      "unlocks": 1,
      "checks_left": 7,
      "branch": "milestone/17.149-<short-name>"
    },
    {
      "id": "17.150",
      "title": "Getting-started checklist and page tours",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "3.22",
        "17.15",
        "17.16",
        "17.21",
        "17.37",
        "17.47",
        "17.82",
        "17.86",
        "17.108"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.15",
        "17.16",
        "17.21",
        "17.47",
        "17.82",
        "17.86",
        "17.108"
      ],
      "status": "waiting",
      "note": "waiting on 17.15, 17.16, 17.21, 17.47, 17.82, 17.86, 17.108",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.150-<short-name>"
    },
    {
      "id": "17.151",
      "title": "Built-in help, offline docs and what's new",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.06",
        "17.13",
        "17.37",
        "17.88",
        "17.105"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.88",
        "17.105"
      ],
      "status": "waiting",
      "note": "waiting on 17.88, 17.105",
      "unlocks": 1,
      "checks_left": 7,
      "branch": "milestone/17.151-<short-name>"
    },
    {
      "id": "17.152",
      "title": "Custom boards and a paired wall display",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.06",
        "17.14",
        "17.19",
        "17.48",
        "17.58",
        "17.73",
        "17.99"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.58",
        "17.99"
      ],
      "status": "waiting",
      "note": "waiting on 17.58, 17.99",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.152-<short-name>"
    },
    {
      "id": "17.153",
      "title": "High-contrast and color-vision themes, and display preferences",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.38",
        "17.66",
        "17.73"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.38",
        "17.66"
      ],
      "status": "waiting",
      "note": "waiting on 17.38, 17.66",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.153-<short-name>"
    },
    {
      "id": "17.154",
      "title": "Installable panel app, OS notifications and opt-in Web Push",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.06",
        "17.67",
        "17.86",
        "17.108"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.67",
        "17.86",
        "17.108"
      ],
      "status": "waiting",
      "note": "waiting on 17.67, 17.86, 17.108",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.154-<short-name>"
    },
    {
      "id": "17.155",
      "title": "Saved views, stars, recents and wider search",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.06",
        "17.21",
        "17.25",
        "17.80",
        "17.88"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.21",
        "17.25",
        "17.80",
        "17.88"
      ],
      "status": "waiting",
      "note": "waiting on 17.21, 17.25, 17.80, 17.88",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.155-<short-name>"
    },
    {
      "id": "17.156",
      "title": "Undo from the activity record, and bulk actions",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.13",
        "17.25",
        "17.37",
        "17.48",
        "17.49",
        "17.53",
        "17.54",
        "17.55",
        "17.68",
        "17.88"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.25",
        "17.53",
        "17.54",
        "17.55",
        "17.68",
        "17.88"
      ],
      "status": "waiting",
      "note": "waiting on 17.25, 17.53, 17.54, 17.55, 17.68, 17.88",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.156-<short-name>"
    },
    {
      "id": "17.157",
      "title": "Printable operations reports",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.15",
        "17.16",
        "17.17",
        "17.18",
        "17.25",
        "17.35",
        "17.67",
        "17.94",
        "17.97",
        "17.98"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.15",
        "17.16",
        "17.17",
        "17.18",
        "17.25",
        "17.67",
        "17.94",
        "17.97",
        "17.98"
      ],
      "status": "waiting",
      "note": "waiting on 17.15, 17.16, 17.17, 17.18, 17.25, 17.67, 17.94, 17.97, 17.98",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.157-<short-name>"
    },
    {
      "id": "17.158",
      "title": "Incident workspace and postmortems",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.67",
        "17.70",
        "17.78",
        "17.79",
        "17.86",
        "17.94",
        "17.102",
        "17.159",
        "17.164"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.67",
        "17.70",
        "17.78",
        "17.79",
        "17.86",
        "17.94",
        "17.102",
        "17.159",
        "17.164"
      ],
      "status": "waiting",
      "note": "waiting on 17.67, 17.70, 17.78, 17.79, 17.86, 17.94, 17.102, 17.159, 17.164",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.158-<short-name>"
    },
    {
      "id": "17.159",
      "title": "Notes, pinned warnings and graph annotations",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.13",
        "17.25",
        "17.48",
        "17.78",
        "17.79",
        "17.151"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.25",
        "17.78",
        "17.79",
        "17.151"
      ],
      "status": "waiting",
      "note": "waiting on 17.25, 17.78, 17.79, 17.151",
      "unlocks": 3,
      "checks_left": 5,
      "branch": "milestone/17.159-<short-name>"
    },
    {
      "id": "17.160",
      "title": "Operator presence and one socket across tabs",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.26",
        "17.57",
        "17.58"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.57",
        "17.58"
      ],
      "status": "waiting",
      "note": "waiting on 17.57, 17.58",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.160-<short-name>"
    },
    {
      "id": "17.161",
      "title": "Change freeze windows",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.15",
        "17.27",
        "17.47",
        "17.48",
        "17.96"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.15",
        "17.27",
        "17.47",
        "17.96"
      ],
      "status": "waiting",
      "note": "waiting on 17.15, 17.27, 17.47, 17.96",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.161-<short-name>"
    },
    {
      "id": "17.162",
      "title": "Comment threads, mentions and an inbox",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.26",
        "17.57",
        "17.67",
        "17.86",
        "17.159"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.57",
        "17.67",
        "17.86",
        "17.159"
      ],
      "status": "waiting",
      "note": "waiting on 17.57, 17.67, 17.86, 17.159",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.162-<short-name>"
    },
    {
      "id": "17.163",
      "title": "On-call rotations, escalation and shift handoff",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.25",
        "17.67",
        "17.85",
        "17.86",
        "17.96",
        "17.97"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.25",
        "17.67",
        "17.85",
        "17.86",
        "17.96",
        "17.97"
      ],
      "status": "waiting",
      "note": "waiting on 17.25, 17.67, 17.85, 17.86, 17.96, 17.97",
      "unlocks": 0,
      "checks_left": 7,
      "branch": "milestone/17.163-<short-name>"
    },
    {
      "id": "17.164",
      "title": "Staff task board and recurring chores",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.15",
        "17.48",
        "17.82",
        "17.86",
        "17.96",
        "17.97",
        "17.159"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.15",
        "17.82",
        "17.86",
        "17.96",
        "17.97",
        "17.159"
      ],
      "status": "waiting",
      "note": "waiting on 17.15, 17.82, 17.86, 17.96, 17.97, 17.159",
      "unlocks": 1,
      "checks_left": 6,
      "branch": "milestone/17.164-<short-name>"
    },
    {
      "id": "17.165",
      "title": "Type registry browser and the decoded data routes",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.06",
        "17.14",
        "17.48",
        "17.73",
        "3.03",
        "3.07"
      ],
      "checks_total": 7,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "building",
      "note": "Rayoray12 has a draft pull request",
      "unlocks": 5,
      "checks_left": 7,
      "branch": "milestone/17.165-<short-name>",
      "claim": {
        "who": "Rayoray12",
        "url": "https://github.com/Justchicoo/Project-Ambrose/pull/303",
        "kind": "a draft pull request",
        "number": 303,
        "since": "2026-10-15",
        "updated": "2026-10-15",
        "stale": false
      },
      "claims": [
        {
          "who": "Rayoray12",
          "url": "https://github.com/Justchicoo/Project-Ambrose/pull/303",
          "kind": "a draft pull request",
          "number": 303,
          "since": "2026-10-15",
          "updated": "2026-10-15",
          "stale": false
        }
      ]
    },
    {
      "id": "17.166",
      "title": "Archive browser: every archive and entry, decoded where a decoder exists",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.165",
        "3.11",
        "3.13"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.165"
      ],
      "status": "waiting",
      "note": "waiting on 17.165",
      "unlocks": 2,
      "checks_left": 5,
      "branch": "milestone/17.166-<short-name>",
      "next_after": "17.165"
    },
    {
      "id": "17.167",
      "title": "Locale text browser and a live locale reload",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.165",
        "3.13",
        "4.15"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.165"
      ],
      "status": "waiting",
      "note": "waiting on 17.165",
      "unlocks": 2,
      "checks_left": 5,
      "branch": "milestone/17.167-<short-name>",
      "next_after": "17.165"
    },
    {
      "id": "17.168",
      "title": "Template explorer with cross-links and where each is used",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.166",
        "17.167",
        "5.01",
        "5.02"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.166",
        "17.167"
      ],
      "status": "waiting",
      "note": "waiting on 17.166, 17.167",
      "unlocks": 2,
      "checks_left": 5,
      "branch": "milestone/17.168-<short-name>"
    },
    {
      "id": "17.169",
      "title": "Protocol browser: message definitions and what each server does with them",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.165",
        "1.15",
        "2.09",
        "4.01"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.165"
      ],
      "status": "waiting",
      "note": "waiting on 17.165",
      "unlocks": 1,
      "checks_left": 4,
      "branch": "milestone/17.169-<short-name>",
      "next_after": "17.165"
    },
    {
      "id": "17.170",
      "title": "Client scans from the panel: census, decode sweep, schema probe and program scans",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.166",
        "17.169",
        "3.11",
        "6.09"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.166",
        "17.169"
      ],
      "status": "waiting",
      "note": "waiting on 17.166, 17.169",
      "unlocks": 1,
      "checks_left": 6,
      "branch": "milestone/17.170-<short-name>"
    },
    {
      "id": "17.171",
      "title": "Client program reader, opt-in",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.170"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.170"
      ],
      "status": "waiting",
      "note": "waiting on 17.170",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/17.171-<short-name>",
      "next_after": "17.170"
    },
    {
      "id": "17.172",
      "title": "Progression and character creation data",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.165",
        "17.19",
        "3.14",
        "5.04"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.165"
      ],
      "status": "waiting",
      "note": "waiting on 17.165",
      "unlocks": 0,
      "checks_left": 4,
      "branch": "milestone/17.172-<short-name>",
      "next_after": "17.165"
    },
    {
      "id": "17.173",
      "title": "World tables browser and the world schema the servers publish",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.168",
        "17.08",
        "4.09",
        "4.15",
        "5.04"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.168"
      ],
      "status": "waiting",
      "note": "waiting on 17.168",
      "unlocks": 2,
      "checks_left": 5,
      "branch": "milestone/17.173-<short-name>",
      "next_after": "17.168"
    },
    {
      "id": "17.174",
      "title": "Zone catalog: templates, named places and placements on a plan",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.173",
        "4.09",
        "5.02"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.173"
      ],
      "status": "waiting",
      "note": "waiting on 17.173",
      "unlocks": 0,
      "checks_left": 4,
      "branch": "milestone/17.174-<short-name>",
      "next_after": "17.173"
    },
    {
      "id": "17.175",
      "title": "Live world: zone instances, spawned objects and wizards in the world",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.165",
        "17.49",
        "4.10",
        "5.02",
        "5.03",
        "5.05"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.165"
      ],
      "status": "waiting",
      "note": "waiting on 17.165",
      "unlocks": 4,
      "checks_left": 6,
      "branch": "milestone/17.175-<short-name>",
      "next_after": "17.165"
    },
    {
      "id": "17.176",
      "title": "Spells and sigils pages",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.167",
        "17.168",
        "17.175",
        "8.04",
        "8.05",
        "9.02"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.167",
        "17.168",
        "17.175"
      ],
      "status": "waiting",
      "note": "waiting on 17.167, 17.168, 17.175",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/17.176-<short-name>"
    },
    {
      "id": "17.177",
      "title": "Characters and online players pages",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.21",
        "17.175",
        "3.17",
        "6.05"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.21",
        "17.175"
      ],
      "status": "waiting",
      "note": "waiting on 17.21, 17.175",
      "unlocks": 3,
      "checks_left": 4,
      "branch": "milestone/17.177-<short-name>"
    },
    {
      "id": "17.178",
      "title": "Client driver runs from the panel, opt-in",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.06",
        "17.14",
        "17.48",
        "3.24"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 0,
      "checks_left": 6,
      "branch": "milestone/17.178-<short-name>"
    },
    {
      "id": "17.179",
      "title": "One desktop shell for the launcher and the panel program",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "1.04",
        "3.25",
        "17.14",
        "17.73"
      ],
      "checks_total": 9,
      "checks_done": 7,
      "done": false,
      "missing": [],
      "status": "open",
      "note": "open to anyone",
      "unlocks": 1,
      "checks_left": 2,
      "branch": "milestone/17.179-<short-name>",
      "started": {
        "by": "the maintainer's panel session",
        "sent_as": "on main",
        "left": "Two of its window checks reopened on 2026-09-30: the page loads but was not shown to render, and a page is done only when it shows real content"
      }
    },
    {
      "id": "17.180",
      "title": "Sign-in links for a desktop program",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.05",
        "17.14",
        "17.46"
      ],
      "checks_total": 7,
      "checks_done": 7,
      "done": true,
      "missing": [],
      "status": "landed",
      "note": "",
      "unlocks": 2,
      "checks_left": 0,
      "branch": "milestone/17.180-<short-name>"
    },
    {
      "id": "17.181",
      "title": "The panel program: its own window and a list of panels",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "L",
      "depends_on": [
        "17.06",
        "17.179",
        "17.180"
      ],
      "checks_total": 9,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.179"
      ],
      "status": "waiting",
      "note": "waiting on 17.179",
      "unlocks": 3,
      "checks_left": 9,
      "branch": "milestone/17.181-<short-name>",
      "next_after": "17.179"
    },
    {
      "id": "17.182",
      "title": "The panel program in the tray",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.24"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.24"
      ],
      "status": "waiting",
      "note": "waiting on 17.24",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/17.182-<short-name>",
      "next_after": "17.24"
    },
    {
      "id": "17.183",
      "title": "Installing the panel program: installer, uninstaller and portable archive",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.24"
      ],
      "checks_total": 6,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.24"
      ],
      "status": "waiting",
      "note": "waiting on 17.24",
      "unlocks": 3,
      "checks_left": 6,
      "branch": "milestone/17.183-<short-name>",
      "next_after": "17.24"
    },
    {
      "id": "17.184",
      "title": "Signed updates for the desktop programs",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.105",
        "17.183"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.105",
        "17.183"
      ],
      "status": "waiting",
      "note": "waiting on 17.105, 17.183",
      "unlocks": 1,
      "checks_left": 5,
      "branch": "milestone/17.184-<short-name>"
    },
    {
      "id": "17.185",
      "title": "The Ambrose service from the panel program",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "S",
      "depends_on": [
        "17.23",
        "17.24"
      ],
      "checks_total": 4,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.23",
        "17.24"
      ],
      "status": "waiting",
      "note": "waiting on 17.23, 17.24",
      "unlocks": 0,
      "checks_left": 4,
      "branch": "milestone/17.185-<short-name>"
    },
    {
      "id": "17.186",
      "title": "Reaching a panel through SSH",
      "phase": 17,
      "file": "doc/roadmap/phase-17-operations-console-admin-api-dashboard-and-metrics.md",
      "size": "M",
      "depends_on": [
        "17.180",
        "17.181"
      ],
      "checks_total": 5,
      "checks_done": 0,
      "done": false,
      "missing": [
        "17.181"
      ],
      "status": "waiting",
      "note": "waiting on 17.181",
      "unlocks": 0,
      "checks_left": 5,
      "branch": "milestone/17.186-<short-name>",
      "next_after": "17.181"
    }
  ]
}
