Indexer registry cleanup, BuyViaKumbaya ingest, platform-usage API, cursor pagination #319

Closed
opened 2026-06-13 07:34:27 +00:00 by PlasticDigits · 17 comments
PlasticDigits commented 2026-06-13 07:34:27 +00:00 (Migrated from gitlab.com)

Parent

Gap analysis follow-up from #309.

Current codebase

DoubPresaleVesting: Listed in indexer/address-registry.megaeth-mainnet.json but not in RegistryContracts / index_addresses() — contract removed from tree (#243). Approved: remove from registry.

BuyViaKumbaya: Emitted by TimeArenaBuyRouter.sol L64; not decoded; router excluded from log filter (config.rs index_addresses()). INDEXER_REGISTRY_REQUIRE_BUY_ROUTER documented but unwired.

Platform-usage API (#231): No /v1/arena/platform-usage route; frontend indexerApi.ts stubs return null; UI scaffolding exists (platformUsagePagination.ts).

Silent data loss: Referral list handlers use filter_map + try_get failures dropped silently (api.rs L215–450); next_offset from SQL count can lie.

Pagination: Design doc requests cursor/block watermarks; all lists use limit/offset (api.rs, api_arena.rs).

Why needed

Approved: Remove vesting registry entry; ingest BuyViaKumbaya; implement platform-usage API; fix silent row drops; add cursor pagination.

Constraints / guardrails

  • Minimal GitLab CI — API changes need unit + integration tests, not full Anvil CI.
  • Cursor tokens should use (block_number, log_index) or block height per docs/onchain/security-and-threat-model.md.
  • Platform-usage aggregates from idx_arena_buy + WarBow tables per docs/indexer/design.md L122.

Relevant files

  • indexer/address-registry.megaeth-mainnet.json
  • indexer/src/config.rs, indexer/src/decoder.rs, indexer/src/persist.rs
  • indexer/src/api.rs, indexer/src/api_arena.rs, indexer/src/arena_wallet_stats.rs
  • frontend/src/lib/indexerApi.ts, frontend/src/lib/platformUsagePagination.ts
  • docs/indexer/design.md
  1. Remove DoubPresaleVesting from mainnet registry; update INV-INDEXER-112 / INV-REMOVAL-243.
  2. Add TimeArenaBuyRouter to index_addresses(); decode BuyViaKumbaya; link to idx_arena_buy with payKind.
  3. Implement GET /v1/arena/platform-usage (+ wallet leaderboard pagination).
  4. Replace silent filter_map drops with error logs or 500; fix offset metadata.
  5. Add cursor pagination to high-churn lists (buys, activity); deprecate offset with compatibility period.

Acceptance criteria

  • No vesting address in active registry.
  • Kumbaya-routed buys appear in /v1/arena/buys with pay kind.
  • Platform-usage API returns documented JSON; frontend stub removed.
  • Corrupt rows surface error, not silent drop.
  • At least buys/activity support cursor param.

Test plan

  • cd indexer && cargo test.
  • bash scripts/verify-time-arena-buy-router-anvil.sh.
  • cd frontend && npm test — indexerApi.test.ts.

Attack / abuse test plan

  • Pagination: concurrent inserts cannot skip/duplicate rows with cursor.
  • API: malformed DB row returns error, not truncated list.

Verification criteria

  • Registry JSON diff removes vesting.
  • Anvil Kumbaya buy visible in indexer API.
  • Platform-usage integration test passes.
## Parent Gap analysis follow-up from [#309](https://gitlab.com/PlasticDigits/yieldomega/-/issues/309). ## Current codebase **DoubPresaleVesting:** Listed in `indexer/address-registry.megaeth-mainnet.json` but not in `RegistryContracts` / `index_addresses()` — contract removed from tree (#243). Approved: **remove from registry**. **BuyViaKumbaya:** Emitted by `TimeArenaBuyRouter.sol` L64; not decoded; router excluded from log filter (`config.rs` `index_addresses()`). `INDEXER_REGISTRY_REQUIRE_BUY_ROUTER` documented but unwired. **Platform-usage API (#231):** No `/v1/arena/platform-usage` route; frontend `indexerApi.ts` stubs return `null`; UI scaffolding exists (`platformUsagePagination.ts`). **Silent data loss:** Referral list handlers use `filter_map` + `try_get` failures dropped silently (`api.rs` L215–450); `next_offset` from SQL count can lie. **Pagination:** Design doc requests cursor/block watermarks; all lists use `limit`/`offset` (`api.rs`, `api_arena.rs`). ## Why needed Approved: Remove vesting registry entry; ingest BuyViaKumbaya; implement platform-usage API; fix silent row drops; add cursor pagination. ## Constraints / guardrails - Minimal GitLab CI — API changes need unit + integration tests, not full Anvil CI. - Cursor tokens should use `(block_number, log_index)` or block height per `docs/onchain/security-and-threat-model.md`. - Platform-usage aggregates from `idx_arena_buy` + WarBow tables per `docs/indexer/design.md` L122. ## Relevant files - `indexer/address-registry.megaeth-mainnet.json` - `indexer/src/config.rs`, `indexer/src/decoder.rs`, `indexer/src/persist.rs` - `indexer/src/api.rs`, `indexer/src/api_arena.rs`, `indexer/src/arena_wallet_stats.rs` - `frontend/src/lib/indexerApi.ts`, `frontend/src/lib/platformUsagePagination.ts` - `docs/indexer/design.md` ## Recommended direction 1. Remove `DoubPresaleVesting` from mainnet registry; update `INV-INDEXER-112` / `INV-REMOVAL-243`. 2. Add `TimeArenaBuyRouter` to `index_addresses()`; decode `BuyViaKumbaya`; link to `idx_arena_buy` with `payKind`. 3. Implement `GET /v1/arena/platform-usage` (+ wallet leaderboard pagination). 4. Replace silent `filter_map` drops with error logs or 500; fix offset metadata. 5. Add cursor pagination to high-churn lists (buys, activity); deprecate offset with compatibility period. ## Acceptance criteria - [ ] No vesting address in active registry. - [ ] Kumbaya-routed buys appear in `/v1/arena/buys` with pay kind. - [ ] Platform-usage API returns documented JSON; frontend stub removed. - [ ] Corrupt rows surface error, not silent drop. - [ ] At least buys/activity support cursor param. ## Test plan - `cd indexer && cargo test`. - `bash scripts/verify-time-arena-buy-router-anvil.sh`. - `cd frontend && npm test` — `indexerApi.test.ts`. ## Attack / abuse test plan - Pagination: concurrent inserts cannot skip/duplicate rows with cursor. - API: malformed DB row returns error, not truncated list. ## Verification criteria - Registry JSON diff removes vesting. - Anvil Kumbaya buy visible in indexer API. - Platform-usage integration test passes.
PlasticDigits commented 2026-06-13 07:34:43 +00:00 (Migrated from gitlab.com)

mentioned in issue #309

mentioned in issue #309
PlasticDigits commented 2026-06-13 13:15:27 +00:00 (Migrated from gitlab.com)

mentioned in commit c2f9dc9383

mentioned in commit c2f9dc9383c3b0aa5243c17b684f30cf95988d2e
PlasticDigits commented 2026-06-13 13:15:45 +00:00 (Migrated from gitlab.com)

mentioned in merge request !472

mentioned in merge request !472
project_80561744_bot_5118c68a88bff95eacb6ab1c47c19cae commented 2026-06-13 13:22:07 +00:00 (Migrated from gitlab.com)

mentioned in commit eb908c587e

mentioned in commit eb908c587e3e471367677d905b8b538ac748d210
project_80561744_bot_5118c68a88bff95eacb6ab1c47c19cae commented 2026-06-13 13:30:10 +00:00 (Migrated from gitlab.com)

mentioned in commit b6d9b3501f

mentioned in commit b6d9b3501fb2f39e7b3e46d530d8c86bc4caaedf
PlasticDigits commented 2026-06-13 14:14:26 +00:00 (Migrated from gitlab.com)

mentioned in commit 5b201b5bab

mentioned in commit 5b201b5bab6e27286a972014f60540bd060c36cc
PlasticDigits commented 2026-06-14 02:35:04 +00:00 (Migrated from gitlab.com)

mentioned in commit 889ab2e0ae

mentioned in commit 889ab2e0aef4891717fae2b9f44d931e9042fee2
PlasticDigits commented 2026-06-14 02:55:14 +00:00 (Migrated from gitlab.com)

mentioned in merge request !478

mentioned in merge request !478
PlasticDigits commented 2026-06-14 02:55:45 +00:00 (Migrated from gitlab.com)

mentioned in commit 0f34b77db6

mentioned in commit 0f34b77db6ee3a6d85b6b847b3843f9bd4bb18a3
PlasticDigits commented 2026-06-14 02:55:55 +00:00 (Migrated from gitlab.com)

mentioned in merge request !481

mentioned in merge request !481
PlasticDigits commented 2026-06-14 05:14:35 +00:00 (Migrated from gitlab.com)

mentioned in commit f1d01175ee

mentioned in commit f1d01175eed1487475c20c9ed0322db49795672d
PlasticDigits commented 2026-06-14 05:31:05 +00:00 (Migrated from gitlab.com)

mentioned in commit f7cf193dd7

mentioned in commit f7cf193dd7508ae52a0d68f856dfd0d39964888a
PlasticDigits commented 2026-06-14 05:44:58 +00:00 (Migrated from gitlab.com)

Verification — #319 (agent:verify)

Verdict: FAIL — acceptance criteria are not met on main (a0d325c5). Issue remains open for implementation.

Acceptance criteria

Criterion Result Evidence
No vesting address in active registry FAIL indexer/address-registry.megaeth-mainnet.json still lists DoubPresaleVesting in abiHashesSha256 and contracts (0xb4128c9f…). jq -e '.contracts.DoubPresaleVesting' returns the address.
Kumbaya-routed buys in /v1/arena/buys with pay kind FAIL TimeArenaBuyRouter is in RegistryContracts but excluded from index_addresses() (config.rs L113–130: only TimeArena, PodiumVaults, AdminSellVault, ReferralRegistry). No BuyViaKumbaya decode in decoder.rs; no pay_kind field anywhere under indexer/src/.
Platform-usage API + frontend stub removed FAIL No /v1/arena/platform-usage route in api_arena.rs. Live indexer: GET /v1/arena/platform-usage → 404. frontend/src/lib/indexerApi.ts still stubs fetchArenaPlatformUsage → null and arenaPlatformUsageApiPath → /v1/arena/timers.
Corrupt rows surface error, not silent drop FAIL Referral list handlers still use filter_map + try_get().ok()? (api.rs L215–227, L322–331, L441–445) — bad rows are dropped without log or 500.
Buys/activity support cursor param FAIL PageParams is limit + offset only (api.rs L35–40). GET /v1/arena/activity?limit=1 returns keys items,limit,next_offset,offset — no cursor / next_cursor.

Test plan (issue body)

Command Result Notes
cd indexer && cargo test PASS 39 unit + 4 integration tests; no platform-usage or cursor-pagination tests present.
bash scripts/verify-time-arena-buy-router-anvil.sh PASS Contract/deploy path only (TimeArenaBuyRouter wired on Anvil, forge fork test passes). Does not prove indexer BuyViaKumbaya ingest.
cd frontend && npm test PASS 632 tests; indexerApi.test.ts still expects platform-usage stub → /v1/arena/timers (#266 retirement), not restored API.

Verification criteria (issue body)

Check Result
Registry JSON diff removes vesting FAIL — vesting still present
Anvil Kumbaya buy visible in indexer API FAIL — router not in log filter; event not decoded
Platform-usage integration test passes FAIL — no such test in indexer/tests/

How verified

  • glab issue view 319 --comments
  • bash scripts/verify-cloud-postgres.sh — PASS
  • cd indexer && cargo test
  • bash scripts/verify-time-arena-buy-router-anvil.sh
  • cd frontend && npm test
  • Code inspection: config.rs, decoder.rs, api.rs, api_arena.rs, indexerApi.ts, mainnet registry JSON
  • Live indexer smoke (Anvil RPC + native Postgres test DB, INGESTION_ENABLED=0): curl on :3100 for platform-usage 404 and offset-only pagination

Follow-ups

  1. Implement #319 scope on a feature branch: registry vesting removal, BuyViaKumbaya decode + idx_arena_buy.pay_kind, GET /v1/arena/platform-usage, error surfacing for corrupt rows, cursor pagination on buys/activity.
  2. Add indexer integration tests for platform-usage aggregates and cursor stability under concurrent inserts (attack plan).
  3. Update INV-INDEXER-112 / INV-REMOVAL-243 and frontend indexerApi.test.ts once platform-usage ships.
  4. Re-label agent:implement when ready; re-run agent:verify after merge.
## Verification — #319 (agent:verify) **Verdict: FAIL** — acceptance criteria are not met on `main` (`a0d325c5`). Issue remains **open** for implementation. ### Acceptance criteria | Criterion | Result | Evidence | |-----------|--------|----------| | No vesting address in active registry | **FAIL** | `indexer/address-registry.megaeth-mainnet.json` still lists `DoubPresaleVesting` in `abiHashesSha256` and `contracts` (`0xb4128c9f…`). `jq -e '.contracts.DoubPresaleVesting'` returns the address. | | Kumbaya-routed buys in `/v1/arena/buys` with pay kind | **FAIL** | `TimeArenaBuyRouter` is in `RegistryContracts` but **excluded** from `index_addresses()` (`config.rs` L113–130: only TimeArena, PodiumVaults, AdminSellVault, ReferralRegistry). No `BuyViaKumbaya` decode in `decoder.rs`; no `pay_kind` field anywhere under `indexer/src/`. | | Platform-usage API + frontend stub removed | **FAIL** | No `/v1/arena/platform-usage` route in `api_arena.rs`. Live indexer: `GET /v1/arena/platform-usage` → **404**. `frontend/src/lib/indexerApi.ts` still stubs `fetchArenaPlatformUsage` → `null` and `arenaPlatformUsageApiPath` → `/v1/arena/timers`. | | Corrupt rows surface error, not silent drop | **FAIL** | Referral list handlers still use `filter_map` + `try_get().ok()?` (`api.rs` L215–227, L322–331, L441–445) — bad rows are dropped without log or 500. | | Buys/activity support cursor param | **FAIL** | `PageParams` is `limit` + `offset` only (`api.rs` L35–40). `GET /v1/arena/activity?limit=1` returns keys `items,limit,next_offset,offset` — no `cursor` / `next_cursor`. | ### Test plan (issue body) | Command | Result | Notes | |---------|--------|-------| | `cd indexer && cargo test` | **PASS** | 39 unit + 4 integration tests; **no** platform-usage or cursor-pagination tests present. | | `bash scripts/verify-time-arena-buy-router-anvil.sh` | **PASS** | Contract/deploy path only (`TimeArenaBuyRouter` wired on Anvil, forge fork test passes). Does **not** prove indexer `BuyViaKumbaya` ingest. | | `cd frontend && npm test` | **PASS** | 632 tests; `indexerApi.test.ts` still expects platform-usage stub → `/v1/arena/timers` (#266 retirement), not restored API. | ### Verification criteria (issue body) | Check | Result | |-------|--------| | Registry JSON diff removes vesting | **FAIL** — vesting still present | | Anvil Kumbaya buy visible in indexer API | **FAIL** — router not in log filter; event not decoded | | Platform-usage integration test passes | **FAIL** — no such test in `indexer/tests/` | ### How verified - `glab issue view 319 --comments` - `bash scripts/verify-cloud-postgres.sh` — PASS - `cd indexer && cargo test` - `bash scripts/verify-time-arena-buy-router-anvil.sh` - `cd frontend && npm test` - Code inspection: `config.rs`, `decoder.rs`, `api.rs`, `api_arena.rs`, `indexerApi.ts`, mainnet registry JSON - Live indexer smoke (Anvil RPC + native Postgres test DB, `INGESTION_ENABLED=0`): `curl` on `:3100` for platform-usage 404 and offset-only pagination ### Follow-ups 1. Implement #319 scope on a feature branch: registry vesting removal, `BuyViaKumbaya` decode + `idx_arena_buy.pay_kind`, `GET /v1/arena/platform-usage`, error surfacing for corrupt rows, cursor pagination on buys/activity. 2. Add indexer integration tests for platform-usage aggregates and cursor stability under concurrent inserts (attack plan). 3. Update `INV-INDEXER-112` / `INV-REMOVAL-243` and frontend `indexerApi.test.ts` once platform-usage ships. 4. Re-label `agent:implement` when ready; re-run `agent:verify` after merge.
PlasticDigits commented 2026-06-14 06:55:00 +00:00 (Migrated from gitlab.com)

mentioned in merge request !487

mentioned in merge request !487
PlasticDigits commented 2026-06-14 11:59:33 +00:00 (Migrated from gitlab.com)

mentioned in commit f5632269af

mentioned in commit f5632269afb011eb9386d589bd2bedd485df6f9f
PlasticDigits commented 2026-06-14 11:59:48 +00:00 (Migrated from gitlab.com)

mentioned in merge request !492

mentioned in merge request !492
PlasticDigits commented 2026-06-14 14:12:40 +00:00 (Migrated from gitlab.com)

Verification — #319 (agent:verify)

Verdict: PASS — all acceptance criteria met on main (6c822804).

Acceptance criteria

Criterion Result Evidence
No vesting address in active registry PASS jq -e '.contracts.DoubPresaleVesting' indexer/address-registry.megaeth-mainnet.json → null (exit 1). rg DoubPresaleVesting on registry JSON → no matches.
Kumbaya-routed buys in /v1/arena/buys with pay kind PASS TimeArenaBuyRouter included in index_addresses() (config.rs L124–131). BuyViaKumbaya decoded in decoder.rs; pay_kind persisted + exposed in api_arena.rs. Integration api_buy_via_kumbaya_pay_kind_smoke in postgres_stage2_persist_all_events_and_rollback_after asserts API pay_kind + entry_pay_asset.
Platform-usage API + frontend stub removed PASS Route GET /v1/arena/platform-usage in api_arena.rs / arena_platform_usage.rs. Live indexer: curl -sf http://127.0.0.1:3199/v1/arena/platform-usage?limit=5&velocity_window=1h → JSON keys total_buys, warbow, velocity, wallets (schema 2.12.0). frontend/src/lib/indexerApi.ts targets /v1/arena/platform-usage (stub removed).
Corrupt rows surface error, not silent drop PASS Referral handlers use pg_row_required → internal_db_error_response (500); no filter_map + silent try_get drops in api.rs.
Buys/activity support cursor param PASS api_cursor.rs + ListPageParams.cursor. Live: GET /v1/arena/buys?limit=1 returns next_cursor; GET /v1/arena/activity?cursor=not-a-cursor → 400. Integration api_buys_cursor_smoke asserts cursor round-trip + distinct pages.

Test plan (issue body)

Command Result Notes
bash scripts/verify-cloud-postgres.sh PASS Native PG :5433, CREATEDB probe
cd indexer && cargo test PASS 65 unit + 4 integration (includes api_platform_usage_smoke, api_buys_cursor_smoke, api_buy_via_kumbaya_pay_kind_smoke via postgres_stage2_persist_all_events_and_rollback_after)
bash scripts/verify-time-arena-buy-router-anvil.sh PASS DeployDev + Kumbaya fixtures + fork matrix on Anvil :8545
cd frontend && npm test PASS 672 tests; indexerApi.test.ts expects /v1/arena/platform-usage (#319)

Verification criteria (issue body)

Check Result
Registry JSON diff removes vesting PASS
Anvil Kumbaya buy visible in indexer API PASS (integration ingest + API projection; verify-time-arena-buy-router-anvil.sh covers on-chain router path)
Platform-usage integration test passes PASS (api_platform_usage_smoke)

Invariants

ID Result
INV-INDEXER-319-REGISTRY-VESTING PASS
INV-INDEXER-319-KUMBAYA-BUY PASS
INV-INDEXER-319-PLATFORM-USAGE PASS
INV-INDEXER-319-CURSOR-PAGE PASS
INV-INDEXER-319-NO-SILENT-DROP PASS

How verified

  • glab issue view 319 --comments
  • Code inspection: config.rs, decoder.rs, persist.rs, api.rs, api_arena.rs, api_cursor.rs, arena_platform_usage.rs, indexerApi.ts, mainnet registry JSON
  • Automated test suite (above)
  • Live indexer smoke on Anvil :8545 + native Postgres (INGESTION_ENABLED=1, port 3199): platform-usage 200, buys/activity next_cursor, malformed cursor 400

Follow-ups

  1. Attack plan — concurrent cursor stability: add an integration test that inserts rows concurrently and asserts no skip/duplicate across cursor pages (called out in issue attack plan; not blocking merge).
  2. E2E Anvil script: optional verify-* wrapper that executes a live buyViaKumbaya on Anvil and asserts indexer pay_kind via HTTP (today covered by api_buy_via_kumbaya_pay_kind_smoke + verify-time-arena-buy-router-anvil.sh contract path).
## Verification — #319 (agent:verify) **Verdict: PASS** — all acceptance criteria met on `main` (`6c822804`). ### Acceptance criteria | Criterion | Result | Evidence | |-----------|--------|----------| | No vesting address in active registry | **PASS** | `jq -e '.contracts.DoubPresaleVesting' indexer/address-registry.megaeth-mainnet.json` → null (exit 1). `rg DoubPresaleVesting` on registry JSON → no matches. | | Kumbaya-routed buys in `/v1/arena/buys` with pay kind | **PASS** | `TimeArenaBuyRouter` included in `index_addresses()` (`config.rs` L124–131). `BuyViaKumbaya` decoded in `decoder.rs`; `pay_kind` persisted + exposed in `api_arena.rs`. Integration `api_buy_via_kumbaya_pay_kind_smoke` in `postgres_stage2_persist_all_events_and_rollback_after` asserts API `pay_kind` + `entry_pay_asset`. | | Platform-usage API + frontend stub removed | **PASS** | Route `GET /v1/arena/platform-usage` in `api_arena.rs` / `arena_platform_usage.rs`. Live indexer: `curl -sf http://127.0.0.1:3199/v1/arena/platform-usage?limit=5&velocity_window=1h` → JSON keys `total_buys`, `warbow`, `velocity`, `wallets` (schema **2.12.0**). `frontend/src/lib/indexerApi.ts` targets `/v1/arena/platform-usage` (stub removed). | | Corrupt rows surface error, not silent drop | **PASS** | Referral handlers use `pg_row_required` → `internal_db_error_response` (500); no `filter_map` + silent `try_get` drops in `api.rs`. | | Buys/activity support cursor param | **PASS** | `api_cursor.rs` + `ListPageParams.cursor`. Live: `GET /v1/arena/buys?limit=1` returns `next_cursor`; `GET /v1/arena/activity?cursor=not-a-cursor` → **400**. Integration `api_buys_cursor_smoke` asserts cursor round-trip + distinct pages. | ### Test plan (issue body) | Command | Result | Notes | |---------|--------|-------| | `bash scripts/verify-cloud-postgres.sh` | **PASS** | Native PG :5433, CREATEDB probe | | `cd indexer && cargo test` | **PASS** | 65 unit + 4 integration (includes `api_platform_usage_smoke`, `api_buys_cursor_smoke`, `api_buy_via_kumbaya_pay_kind_smoke` via `postgres_stage2_persist_all_events_and_rollback_after`) | | `bash scripts/verify-time-arena-buy-router-anvil.sh` | **PASS** | DeployDev + Kumbaya fixtures + fork matrix on Anvil :8545 | | `cd frontend && npm test` | **PASS** | 672 tests; `indexerApi.test.ts` expects `/v1/arena/platform-usage` (#319) | ### Verification criteria (issue body) | Check | Result | |-------|--------| | Registry JSON diff removes vesting | **PASS** | | Anvil Kumbaya buy visible in indexer API | **PASS** (integration ingest + API projection; `verify-time-arena-buy-router-anvil.sh` covers on-chain router path) | | Platform-usage integration test passes | **PASS** (`api_platform_usage_smoke`) | ### Invariants | ID | Result | |----|--------| | `INV-INDEXER-319-REGISTRY-VESTING` | **PASS** | | `INV-INDEXER-319-KUMBAYA-BUY` | **PASS** | | `INV-INDEXER-319-PLATFORM-USAGE` | **PASS** | | `INV-INDEXER-319-CURSOR-PAGE` | **PASS** | | `INV-INDEXER-319-NO-SILENT-DROP` | **PASS** | ### How verified - `glab issue view 319 --comments` - Code inspection: `config.rs`, `decoder.rs`, `persist.rs`, `api.rs`, `api_arena.rs`, `api_cursor.rs`, `arena_platform_usage.rs`, `indexerApi.ts`, mainnet registry JSON - Automated test suite (above) - Live indexer smoke on Anvil :8545 + native Postgres (`INGESTION_ENABLED=1`, port 3199): platform-usage 200, buys/activity `next_cursor`, malformed cursor 400 ### Follow-ups 1. **Attack plan — concurrent cursor stability:** add an integration test that inserts rows concurrently and asserts no skip/duplicate across cursor pages (called out in issue attack plan; not blocking merge). 2. **E2E Anvil script:** optional `verify-*` wrapper that executes a live `buyViaKumbaya` on Anvil and asserts indexer `pay_kind` via HTTP (today covered by `api_buy_via_kumbaya_pay_kind_smoke` + `verify-time-arena-buy-router-anvil.sh` contract path).
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-06-14 14:12:41 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
code/yieldomega#319
No description provided.