From e85ff85950a78584b48cee709050f295edd1828c Mon Sep 17 00:00:00 2001 From: openhands Date: Fri, 6 Mar 2026 03:44:04 +0000 Subject: [PATCH 1/3] fix: CollapseActive.vue: fixed 5-second delay in unstakePosition() should be replaced with polling (#448) Co-Authored-By: Claude Sonnet 4.6 --- web-app/src/components/collapse/CollapseActive.vue | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/web-app/src/components/collapse/CollapseActive.vue b/web-app/src/components/collapse/CollapseActive.vue index 450eab6..57a6f2f 100644 --- a/web-app/src/components/collapse/CollapseActive.vue +++ b/web-app/src/components/collapse/CollapseActive.vue @@ -93,7 +93,7 @@ import { useUnstake } from '@/composables/useUnstake'; import { useAdjustTaxRate } from '@/composables/useAdjustTaxRates'; import { computed, ref, onMounted } from 'vue'; import { getTaxDue, payTax } from '@/contracts/stake'; -import { type Position, loadPositions } from '@/composables/usePositions'; +import { type Position, loadPositions, loadActivePositions } from '@/composables/usePositions'; import { useStatCollection } from '@/composables/useStatCollection'; import { useWallet } from '@/composables/useWallet'; import { DEFAULT_CHAIN_ID } from '@/config'; @@ -213,8 +213,15 @@ async function changeTax(id: bigint, nextTaxRateIndex: number | null) { async function unstakePosition() { await unstake.exitPosition(props.id); loading.value = true; - // eslint-disable-next-line no-restricted-syntax -- Polling with timeout: no push event exists for Ponder indexing completion; Ponder GraphQL has no subscription endpoint. See AGENTS.md #Engineering Principles. - await new Promise(resolve => setTimeout(resolve, 5000)); + const POLL_INTERVAL_MS = 1000; + const TIMEOUT_MS = 30_000; + const deadline = Date.now() + TIMEOUT_MS; + while (Date.now() < deadline) { + const { positions } = await loadActivePositions(currentChainId.value); + if (!positions.some(p => BigInt(p.id) === props.id)) break; + // eslint-disable-next-line no-restricted-syntax -- Poll interval; Ponder has no push endpoint. See AGENTS.md #Engineering Principles. + await new Promise(resolve => setTimeout(resolve, POLL_INTERVAL_MS)); + } await loadPositions(currentChainId.value); loading.value = false; } From 372f49f6a5b585a44eb2b5bd8015ddb14adc3f10 Mon Sep 17 00:00:00 2001 From: openhands Date: Fri, 6 Mar 2026 04:18:52 +0000 Subject: [PATCH 2/3] fix: wrap unstakePosition polling loop in try/finally to prevent loading lock (#448) Co-Authored-By: Claude Sonnet 4.6 --- .../src/components/collapse/CollapseActive.vue | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/web-app/src/components/collapse/CollapseActive.vue b/web-app/src/components/collapse/CollapseActive.vue index 57a6f2f..dd7798e 100644 --- a/web-app/src/components/collapse/CollapseActive.vue +++ b/web-app/src/components/collapse/CollapseActive.vue @@ -216,14 +216,17 @@ async function unstakePosition() { const POLL_INTERVAL_MS = 1000; const TIMEOUT_MS = 30_000; const deadline = Date.now() + TIMEOUT_MS; - while (Date.now() < deadline) { - const { positions } = await loadActivePositions(currentChainId.value); - if (!positions.some(p => BigInt(p.id) === props.id)) break; - // eslint-disable-next-line no-restricted-syntax -- Poll interval; Ponder has no push endpoint. See AGENTS.md #Engineering Principles. - await new Promise(resolve => setTimeout(resolve, POLL_INTERVAL_MS)); + try { + while (Date.now() < deadline) { + const { positions } = await loadActivePositions(currentChainId.value); + if (!positions.some(p => BigInt(p.id) === props.id)) break; + // eslint-disable-next-line no-restricted-syntax -- Poll interval; Ponder has no push endpoint. See AGENTS.md #Engineering Principles. + await new Promise(resolve => setTimeout(resolve, POLL_INTERVAL_MS)); + } + await loadPositions(currentChainId.value); + } finally { + loading.value = false; } - await loadPositions(currentChainId.value); - loading.value = false; } async function loadActivePositionData() { From 4aee33ad74e4d46e2e2ffa8934d532f54c0d1f51 Mon Sep 17 00:00:00 2001 From: openhands Date: Fri, 6 Mar 2026 04:29:45 +0000 Subject: [PATCH 3/3] ci: retrigger after infra failure