From b2bb28f1b904ac727d01c7dcaf71807549ecd139 Mon Sep 17 00:00:00 2001 From: openhands Date: Tue, 3 Mar 2026 20:58:07 +0000 Subject: [PATCH 1/3] ci: retrigger after git clone auth failure From 92ede4c7b786a2b30a5eda99922152e906b4c971 Mon Sep 17 00:00:00 2001 From: openhands Date: Wed, 4 Mar 2026 06:16:41 +0000 Subject: [PATCH 2/3] address review: clarify eth_newFilter is polling not subscription, acknowledge existing violations --- AGENTS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 3409d14..4db9488 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -40,9 +40,9 @@ See [docs/dev-environment.md](docs/dev-environment.md) for restart modes, ports, ## Engineering Principles These apply to ALL code in this repo — contracts, tests, scripts, indexers, frontend. -1. **Never use fixed delays or `waitForTimeout`** — subscribe to events instead. Use `eth_newFilter`/`eth_subscribe` for on-chain events, DOM mutation observers for UI changes, callback patterns for async flows. Even if event-driven code takes more effort, it is always the right answer. +1. **Never use fixed delays or `waitForTimeout`** — react to actual events instead. Use `eth_subscribe` (WebSocket) for on-chain push notifications, `eth_newFilter` + `eth_getFilterChanges` for on-chain polling, DOM mutation observers or Playwright's `waitForSelector`/`waitForURL` for UI changes, callback patterns for async flows. Even if event-driven code takes more effort, it is always the right answer. 2. **Never use hardcoded expectations** — dynamic systems change. React to actual state, not assumed state. Don't assert a specific block number, token amount, or address unless it's a protocol constant. -3. **Event subscription > polling > fixed delay** — if there is truly no way to subscribe to an event, polling with a timeout is acceptable. A fixed `sleep`/`wait` is never acceptable. +3. **Event subscription > polling with timeout > fixed delay** — prefer true push subscriptions (`eth_subscribe`, WebSocket, observers). When push is unavailable (e.g. HTTP-only RPC), polling with a timeout and clear error is acceptable. A fixed `sleep`/`wait`/`waitForTimeout` is never acceptable. Existing violations should be replaced when touched. ## Before Opening a PR 1. `forge build && forge test` in `onchain/` — contracts must compile and pass. From ca2be4c4e9b9f586b0b7d07eb495568b31d1afd2 Mon Sep 17 00:00:00 2001 From: openhands Date: Wed, 4 Mar 2026 08:09:32 +0000 Subject: [PATCH 3/3] ci: retrigger