katrun index

Every scripted run across the seat backends: scenario specs (the published JSON shape), live status (read off the process table just now), and each scenario's most recent recorded run. Task KATRUN-INDEX1 · spec reference: the scenario shape below and each row's spec link (secret-smelling values redacted). Back to QA home.

Scenarios

backendtestIdnamenetgamemodecadencestatuslast recorded runspec
main brl-usd-delete-repost KBRL/USDC — delete resting order then rematch mainnet (fresh) orderBook one-shot not running no record view
main brl-usd-partial-fills BRL/USD partial fills across multiple takers mainnet (fresh) orderBook one-shot not running no record view
main brl-usd-simple-1-1-testnet KBRL/KUSD simple 1-1 buy sell match (testnet) testnet (fresh) orderBook one-shot not running no record view
main kqa-e2e-brlusd KQA continuous e2e — KBRL/KUSD 1-1 match on bravo testnet testnet kqa-e2e-1 orderBook every 120s not running no record view
main kqa-zombie-canary ZOMBIE-MATCH1 canary — unregistered account must never fill testnet kqa-zombie-1 orderBook every 600s not running no record view

Continuous demo loops (same machinery, demonstration use case)

backendloopgamestatuswatch
main 📺 two-party demo (chicken⇄ℏ replay) board-demo-loop.js t-kat-demo not running board
main 📺 three-way swap demo trio-demo-loop.js t-trio not running board
main 🎁 triangle rewards (reward bot) treats-demo-loop.js t-treats not running board
main 🎁 first swap (reward bot) treats-duo-loop.js t-duo not running board

The scenario shape

This is the JSON contract a run is scripted in — the thing we'd publish for community-authored runs. Canonical reference: kbot/katrun/README.md in the backend repo (git-tracked, so the spec's history rides the same audit trail as the code).

{
  "testId":  "my-scenario",            // trace tag — lands in order memos and the run record name
  "name":    "human label",
  "network": "testnet",
  "gameId":  "KQA1",                   // fixed game, or blank = fresh isolated game per run
  "tradingMode": "orderBook",
  "settleMs": 4000,                    // wait after the last step before recording the outcome
  "loopEveryMs": 120000,               // 0 = one-shot; >0 = continuous, fresh state each loop

  "assets":   { "KUSD": { "id": "0.0.2341021", "decimals": 6 } },
  "defaults": { "minFill": {"numerator":1,"denominator":200000}, "timeInForce": "GTC" },
  "actors":   { "alice": { "accountId": "0.0.4271", "name": "🧪 alice" } },

  "steps": [                           // the script — each step at its offset
    { "waitMs": 500,  "action": "deleteOrders" },
    { "waitMs": 1000, "actor": "alice", "action": "order",
      "offer":   { "asset": "KUSD", "amount": 1000000 },
      "request": { "asset": "KBRL", "amount": 5000000 } }
  ],

  "expect": { "txCount": 1, "fillCount": 1 }   // the verdict — checked per run, lands in kflow
}

Audit note: scenario specs and the runner are git-tracked in each backend checkout — their history is inside the commit trail Audrey Hashmore already freezes daily. Run OUTPUT records and this page's live-status reads are ephemeral by design; if/when this index is published externally (alpha release), the published copy should be generated + hashed into Audrey's batch like the other published surfaces, not served live.