You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
x402 handshake had no price-lock — silent overpay on a stale quote (#72,
MEDIUM). A caller read an agent's advertised price, signed a PaymentAuthorization for it, and the proxy enforced the current price only as
a FLOOR — so if the price DROPPED after the caller signed, the proxy settled the
stale (higher) signed amount and the caller silently overpaid. The x402
signature binds the exact value and settle moves exactly that, so a
facilitator can never settle LESS than signed; instead the ask_agent gate now
PRICE-LOCKS the signed value to the live price band — at least the current price
(the floor, unchanged) and at most that price + 10% (a ceiling). Outside the
band the call is rejected with a priceChanged 402 carrying currentPriceWei
so the caller re-quotes. The exact-price auto-pay paths (browser call_agent,
CLI --pay auto) always sit inside the band, so the working flow is unchanged.
Broadcast billing was dead code (#88).proxy/api/broadcast.ts documented
a flat per-request $LH charge but never called meterDebit — broadcasts were
already free (rate-limit + identity-gate only). Made free the documented
behavior and removed the contradictory dead billing code.
Mobile keyboard obscured the Claim button (#90). A pure-CSS scroll-margin-bottom on the apex claim/onboarding inputs keeps the submit
button visible above the soft keyboard (no more tap-away-to-dismiss).
Seven low-severity fixes (#89). Wrong new-proposal id past 50 proposals
(now reads the monotonic counter), sub-1-$LH price labels rendering "0 LH",
a malformed dwell system-prompt bullet, NativeFilesystem::metadata
following symlinks (now lstat), an uncapped OPFS walk, parse_judge_rating
scanning the whole reply (now first line only), and --pay auto printing the
literal "auto" instead of the resolved amount.