{
  "ok": true,
  "worker": "summary+live (estagio 6) — V4 multi-par",
  "missing": [],
  "schema": {
    "valMin": 5,
    "summary": 6
  },
  "routes": {
    "summary": "/summary?wallet=0x...&chain=base",
    "statement": "/statement?tokenId=2610360&chain=base  (Bearer) — GATE do extrato: valida plano+dono pelo JWT (carteiras do USERS KV) e faz proxy do /audit do Valuation. 401 sem/invalid token, 403 blocked_free (oculta no FREE), 404 not_owned.",
    "live": "/live?tokenIds=2610360,2645173&chain=base  (ou &wallet= p/ resolver as abertas sozinho; &debugApr=1 p/ diagnostico da janela). Devolve tambem poolPrices: a cotacao de TODAS as pools que a carteira precisa, numa chamada so.",
    "poolinfo": "/poolinfo?chain=base  (ou &poolId=0x...) — IDENTIDADE do par direto do poolconfig: simbolos, decimais, fee, tickSpacing, hooks, version, platform (DEX), enderecos, logo do nativo, quoteIsToken0. SEM RPC, SEM preco. Serve posicao ABERTA E FECHADA — o /live so' responde por aberta, e o extrato de uma fechada tambem precisa do rotulo.",
    "rebuildToken": "/rebuild-token?tokenId=2610360&chain=base",
    "rebuildAll": "/rebuild-all?chain=base  (reconstroi TODOS os summary:*. Use quando um CAMPO NOVO entrar sem subir o schema — a staleness por schema nao dispara sozinha nesse caso, entao a chamada e' manual, DE PROPOSITO.)",
    "probeFlows": "/probe-flows?tokenId=2610360&chain=base  (confere price0Usd/price1Usd de cada flow contra o val:tx cru — cross-check price0Usd = price1Per0 x price1Usd)",
    "audit": "/audit  |  /audit?tokenId=  |  /audit?deep=1  |  /audit?keys=1&cursor=",
    "wipe": "/wipe?confirm=DELETE&chain=base  (apaga TODO o TRACKER_SUMMARY)",
    "recovery": "/recovery?chain=base  (le as flags)",
    "recoverySet": "/recovery/set?chain=base&tokenId=2610360&recovery=1  (marca) ou recovery=0 (desmarca)"
  },
  "nota": "o summary se reconstroi sozinho quando o schema sobe (staleness = contagem de eventos + schema). Nao precisa de /wipe."
}