Summary
The serialize_and_backoff strategy (Circle wallets-api-rate-limit) does not
serialize. In provider.ts it sets _helix_serialize / _helix_concurrency
override flags that no caller reads, sleeps once (~2s), then lets the wrap
layer retry — in parallel. Under real concurrency the retries land in the
same rate-limit window and 429 again.
Evidence
scripts/circle-bench/results/v1-serialize-and-backoff-anomaly.md — Bench 2.1
(5×20-concurrent Arc Testnet): the ~5/20 calls that hit 429 engaged the
strategy, retried, and all 429'd again ("permanently lost"). Repair recovery
~0% at 20-concurrent.
Impact (already shipped in 2.8.1)
wallets-api-rate-limit reclassified detection-only, q 0.76 → 0.50.
- Inline KNOWN-BROKEN flags added at
packages/core/src/engine/seed-genes.ts
and packages/core/src/platforms/circle/strategies.ts (do not re-validate
without fixing the mechanism first). See packages/core/KNOWN_ISSUES.md KI-1.
Fix direction
Implement real serialization — a per-wallet semaphore, or a wrap-layer
concurrency gate that consumes _helix_concurrency. Intended replacement is the
v2 chunk_concurrent path (scripts/circle-bench/).
Target: PR #4 (existing tracker, alongside the Gene Map multi-strategy /
v2 chunk_concurrent migration). Suggested label: known-broken.
Summary
The
serialize_and_backoffstrategy (Circlewallets-api-rate-limit) does notserialize. In
provider.tsit sets_helix_serialize/_helix_concurrencyoverride flags that no caller reads, sleeps once (~2s), then lets the wrap
layer retry — in parallel. Under real concurrency the retries land in the
same rate-limit window and 429 again.
Evidence
scripts/circle-bench/results/v1-serialize-and-backoff-anomaly.md— Bench 2.1(5×20-concurrent Arc Testnet): the ~5/20 calls that hit 429 engaged the
strategy, retried, and all 429'd again ("permanently lost"). Repair recovery
~0% at 20-concurrent.
Impact (already shipped in 2.8.1)
wallets-api-rate-limitreclassified detection-only, q 0.76 → 0.50.packages/core/src/engine/seed-genes.tsand
packages/core/src/platforms/circle/strategies.ts(do not re-validatewithout fixing the mechanism first). See
packages/core/KNOWN_ISSUES.mdKI-1.Fix direction
Implement real serialization — a per-wallet semaphore, or a wrap-layer
concurrency gate that consumes
_helix_concurrency. Intended replacement is thev2
chunk_concurrentpath (scripts/circle-bench/).Target: PR #4 (existing tracker, alongside the Gene Map multi-strategy /
v2 chunk_concurrent migration). Suggested label:
known-broken.