Skip to content

fix(free-loop): surface Circle read errors, honor search --pick, name missing params, document --live-probe - #179

Merged
SELAT-DEV merged 1 commit into
mainfrom
fix/free-loop-ux
Sep 2, 2026
Merged

fix(free-loop): surface Circle read errors, honor search --pick, name missing params, document --live-probe#179
SELAT-DEV merged 1 commit into
mainfrom
fix/free-loop-ux

Conversation

@SELAT-DEV

Copy link
Copy Markdown
Contributor

Summary

Four gaps in the free half of the loop, found on an end-to-end walk of selat on 2026-09-02 (v0.16.15):

  • doctor hid why Circle reads failed. Every failed read collapsed to could not read (Circle API issue …) with the CLI's stderr dropped, so a transient burst looked exactly like an empty wallet or a broken install. circle.mjs now records the last read failure (lastCircleReadError(), Node deprecation noise filtered) and doctor prints it under the warning with a rerun hint — for the Gateway read, the on-chain reads, and the policy reads.
  • search --pick was a silent no-op. The ranker's own footer advertises it, but selat search dropped the flag and printed the plain shortlist again. It is now forwarded and prints the plan (still free — a plan is never a settlement).
  • search's next-step footer went silent when the top pick needs params. The ranker withholds the exec hint for a pick whose indexed URL is missing query params (Gloria AI → ticker), and the footer printed nothing. It now names the params and the exact selat run … --param … --dry-run line.
  • skill compare refuses without --live-probe, but nothing documented the flag. The compare help, the top-level help example, and the README all omitted it. Documented, added to every example, and the refusal now prints the exact retry.

Verification

  • Two new test files (search-params-next-step, doctor-circle-read-error — the latter drives circle.mjs with a stub binary); npm test → 542/542.
  • Live from this branch: selat search "summarize the latest news on gold prices" ends with the Gloria "needs a parameter" block; --pick prints the plan; selat doctor with a stub Circle CLI returning 503 shows circle said: … under each warning.

Companion selat-pay PR (the paid half of the same walk — x402 v1 body-only challenges were unpayable): branch fix/x402-v1-body-challenge in SELAT-AI/selat-pay.

🤖 Generated with Claude Code

… missing params, document --live-probe

Found on an end-to-end walk of the CLI (2026-09-02):

- doctor: every failed Circle read collapsed to "could not read (Circle API
  issue …)" with the CLI's stderr dropped, so a transient burst looked like an
  empty wallet. circle.mjs now records the last read failure (deprecation
  noise filtered) and doctor prints it under the warning with a rerun hint.
- search: `--pick` was silently dropped even though the ranker's own footer
  advertises it — forward it and print the plan. And when the top pick's
  indexed URL needs query params (Gloria AI → ticker), the ranker withholds
  the exec hint and the next-step footer printed nothing; it now names the
  params and the exact `selat run … --param … --dry-run` line.
- skill compare: refuses without --live-probe, but --help, the top-level
  help, and the README all omitted the flag. Documented it, added the flag to
  every example, and the refusal now prints the exact retry.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@SELAT-DEV
SELAT-DEV merged commit 27620df into main Sep 2, 2026
1 check passed
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.

2 participants