Skip to content

fix(image): poll the Solana job instead of losing a paid render (0.52.2) - #159

Merged
VickyXAI merged 1 commit into
mainfrom
fix/solana-image-poll
Sep 29, 2026
Merged

VickyXAI merged 1 commit into
mainfrom
fix/solana-image-poll

Conversation

@VickyXAI

Copy link
Copy Markdown
Contributor

Cherry-pick of 27807da from codex/seedance-capability-parity (#155) so the money bug ships without waiting on the video work.

Problem

blockrun_image on the Solana wallet rail sent one POST and never polled. Past the gateway's ~30s inline window the route answers 202 { id, poll_url }, so the tool returned "No image URL in response" while the charge stood (Solana settles at submit). Observed live: google/nano-banana-pro 4096x4096 booked $0.1575, no image. The account rail was fixed in #140; the Solana rail never moved across.

Fix

  • Solana image path now uses solanaPaidAsyncPost (same helper video/music use): handles inline 200 and 202, re-signs each poll.
  • solanaPaidAsyncPost no longer treats an edge 502/503/504 on submit as the origin's verdict; the payment tracker stays armed and the charge is booked as a precaution (video + music benefit too).
  • Test doubles repaired: quote-guard matched the old helper name; the async-helper stand-in never fired onPaidRequest.

Bumps to 0.52.2 — merging triggers publish.yml (npm + MCP registry + tag + release).

Verification (on origin/main + this commit)

  • npm run typecheck clean, npm run build clean
  • npm test: 1318 pass, 0 fail

🤖 Generated with Claude Code

blockrun_image on the Solana wallet rail sent one POST and never polled.
Past the gateway's ~30s inline window the route answers 202 { id,
poll_url } instead of the image, so the tool returned "No image URL in
response" — and the charge stood, because Solana settles at submit and
cannot settle after a long render (a signed transaction expires with its
blockhash). The user paid and got nothing.

Observed live: google/nano-banana-pro at 4096x4096 booked $0.1575 and
returned no image. The same defect was fixed on the account rail in #140;
the Solana wallet rail was never moved across. It now uses
solanaPaidAsyncPost, the helper video and music already use, which
handles the inline 200 and the 202 alike and re-signs each poll.

Also fixes a hazard that switch exposed: solanaPaidAsyncPost marked the
payment tracker answered as soon as the submit response arrived,
including a 502/503/504 from the edge. On this rail the submit IS the
paid request, so an origin that never answered may still have settled it
— and the tool said "temporary API issue, try again" on a charge that
already stood. An edge status is no longer the origin's verdict; the
tracker stays armed and the tool books it as a precaution. Video and
music get the same protection.

Two test doubles were letting this through and are repaired rather than
relaxed: quote-guard matched the old helper name, and the async helper's
stand-in never fired onPaidRequest, so the tracker it exists to exercise
was never armed.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@VickyXAI
VickyXAI merged commit f96b0bd into main Sep 29, 2026
3 checks passed
@VickyXAI
VickyXAI deleted the fix/solana-image-poll branch September 29, 2026 12:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant