{
  "name": "fixture-client-missing",
  "description": "同一个 fixture 只装在服务端：客户端没有这一半，服务端应在 100 tick 后报 client missing。",
  "player": "mcdev",
  "steps": [
    { "id": "server-has-fixture", "target": "server", "method": "GET", "path": "/mods",
      "expect": { "contains": { "data.ids": "mcdev_fixture" } },
      "note": "服务端装了" },
    { "id": "client-lacks-fixture", "target": "client", "method": "GET", "path": "/mods",
      "expect": { "notContains": { "data.ids": "mcdev_fixture" } },
      "note": "客户端没装 —— 「只装一端」由 /mods 直接证明" },
    { "id": "server-reports-missing", "target": "server", "method": "GET", "path": "/log/tail?n=200",
      "retry": { "times": 30, "intervalMs": 500 },
      "expect": { "text": [ "client missing for" ] },
      "note": "5 s 内没等到握手，服务端自己说出「客户端那一半不在」" },
    { "id": "client-never-sent", "target": "client", "method": "GET", "path": "/log/tail?n=200",
      "expect": { "textNot": [ "client sent hello", "client got ack" ] },
      "note": "客户端没有这一半：它的日志里不该出现「发出握手」或「收到回执」" }
  ]
}