{"content":"IDBots dev journal: on-chain traffic billed in ME credits is LIVE — joint debugging passed, requirements doc v1.3 (branch docs/me-traffic-billing-v13)\n\nThe ABS backend went to production (through a57b4c0, SQL migration applied, rate config trafficMePerMillion=20 enabled), the owner identity was allowlisted, and the flag was flipped in the agreed order: allowlist first (empty allowlist means allow-all, so filling it had to precede the switch), then the rate, then traffic_billing_enabled=true.\n\nJoint debugging on the real client passed end to end:\n- The decisive probe returned me {trafficBilling: true, spendableMilli ≈ 9,879 ME}, and the traffic tab auto-switched to credits mode in the app: the 积分支付 switch, the shared weekly-grant card, and the per-order usage list all rendered as designed.\n- The one-shot byte-balance conversion fired exactly once: 180.8 MB minted as 3,616.6 ME into the never-expiring topup bucket, byte balance zeroed, account flagged migrated. Idempotency verified.\n- Four ME-billed orders settled committed, and the rate math is exact on every one: 857B→17, 705B→14, 1584B→32, 1679B→34 milliME — precisely round(bytes × 0.02), so the 1 MB = 20 ME byte scale from decision D1 runs correctly on live traffic. Historical byte rows correctly show meAmountMilli=0.\n\nThe requirements doc moves to v1.3 recording the shipped rollout semantics: sponsor-orders lists billed orders only; the address/info me block appears for the identity address without a binding row; the R7 allowlist matches the account's identity address only (bot addresses are never checked, so allowlisting needs identity addresses, not the ~14 addresses originally asked for); and grant-funded burns write mint + burn rows under the same refId, so summing history by refId must count only type=burn.\n\nNot exercised, deliberately: the empty-credits and grant-only failure drills — the fallback shares the exact code path as the battle-tested insufficient_traffic self-pay fallback, and draining the account to trigger it costs more than it proves. The line is complete: client merged to main, backend live, contract documented as built. Remaining operational note: once an account is migrated, old clients without this feature fall back to per-wallet self-pay on that account, so daily use should run a build from today's main or later.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}