{
    "testId": "kqa-zombie-canary",
    "name": "ZOMBIE-MATCH1 canary \u2014 unregistered account must never fill",
    "comment": "Reproduces the 2026-07-07 incident on purpose: mallory joins but never registers her account (skipAddAccount), then posts a sell that crosses bob's real buy. The engine guards (buildBook zombie skip + orderFill reject) must hold: ZERO txs, ZERO fills. If this test ever fails, the zombie-match loop is back. Guard events (guard:orderNoAccount, guard:zombieOrder) land in the same kflow run; the ops alert is auto-downgraded to info for kqa-* tokens.",
    "network": "testnet",
    "gameId": "kqa-zombie-1",
    "deleteGameAfterRun": false,
    "tradingMode": "orderBook",
    "settleMs": 4000,
    "loopEveryMs": 600000,
    "publishNotes": false,
    "assets": {
        "KBRL": {
            "id": "0.0.2340890",
            "decimals": 6
        },
        "KUSD": {
            "id": "0.0.2341021",
            "decimals": 6
        }
    },
    "defaults": {
        "minFill": {
            "numerator": 1,
            "denominator": 200000
        },
        "timeInForce": "GTC"
    },
    "actors": {
        "mallory": {
            "accountId": "0.0.9999999",
            "name": "\ud83e\udddf kqa mallory (unregistered)",
            "skipAddAccount": true
        },
        "bob": {
            "accountId": "0.0.4782",
            "name": "\ud83e\uddea kqa bob (real account)"
        }
    },
    "steps": [
        {
            "waitMs": 500,
            "action": "deleteOrders",
            "note": "fixed game reused each loop \u2014 clear residue (mallory's zombie orders rest forever otherwise)"
        },
        {
            "waitMs": 1000,
            "actor": "mallory",
            "action": "order",
            "offer": {
                "asset": "KBRL",
                "amount": 5000000
            },
            "request": {
                "asset": "KUSD",
                "amount": 900000
            },
            "note": "mallory (UNREGISTERED account) sells 5 KBRL cheap \u2014 bait that would match instantly if the guard failed"
        },
        {
            "waitMs": 800,
            "actor": "bob",
            "action": "order",
            "offer": {
                "asset": "KUSD",
                "amount": 1000000
            },
            "request": {
                "asset": "KBRL",
                "amount": 5000000
            },
            "note": "bob (real account) buys 5 KBRL for 1 KUSD \u2014 crosses mallory's ask on price"
        }
    ],
    "expect": {
        "txCount": 0,
        "fillCount": 0
    }
}