Skip to content

exo-408 items 10 and 14: refused rail wording; the LEZ preview prices from its real source (revives #288) - #329

Merged
corpetty merged 4 commits into
mainfrom
revive/288
Oct 17, 2026
Merged

corpetty merged 4 commits into
mainfrom
revive/288

Conversation

@corpetty

Copy link
Copy Markdown
Owner

Revives #288 by rebasing it onto current main, with two changes:

  • muster_gen.nim was the only conflict. It's generated, so I took main's copy and regenerated it with module/tools/regen.sh (SDK 6077eb7). The diff is exactly wallet_estimate_fee gaining from_id.
  • The Nim UI port (ui-nim/app/backend.nim) still called wallet_estimate_feeAsync with four arguments, which would break make build-nim. It now passes fromId, like the C++ backend. Separate commit.

Re-tested on main (2026-10-17):

  • suite 262/262;
  • the C++ UI .lgx builds;
  • the Nim UI runner builds (scripts/build-runner-nim.sh);
  • ui-lint has only the 2 baseline-new findings already on main, both in ClaimsRegistry.qml.

Original description:

  • exo-408 item 14: the LEZ send preview prices from the account it will spend. wallet_estimate_fee took no source, so the preview always priced from the module's first LEZ account, the public one. A send from a shielded account previewed the public rail and its disclosure, while the send itself went private: the educational layer said something the code doesn't do. wallet_estimate_fee now takes from_id (empty = the module's account, as before), and the hosted estimate builds the source with its real form, as wallet_send does. Contract changed, surface regenerated; the backend passes the account the Send panel names.
  • exo-408 item 10: a refused rail choice says Propose is off, and why. Propose was already blocked (pickPending is in composeBlocked), but the line said "Propose waits while this proposal switches to …", and a refused switch never completes. It now says the proposal could not switch, with the reason.
  • exo-a2a: closed. Its spec's probes landed under exo-3f2 (a2d3819), and grade-specs.sh exo-45e grades 7/7.

Checks:

  • nim check of the hosted module is clean, and the regenerated surface has 92 methods.
  • The runner rebuilt with the new client.
  • scripts/ui-parity.sh with MUSTER_FLEET=local: 10 of 11 green in the table. The split test was red only for want of foundry on PATH, and it passes under nix shell nixpkgs#foundry.
  • ui-lint: 0 findings.

Still open in exo-408: 1, 11, 12, 15. The pebble notes that the Send panel's chain id is the LEZ adapter's own constant lez:testnet, so it matches the module; that's not a bug.

🤖 Generated with Claude Code

Item 10 of exo-408. A refused policy switch (a Bitcoin split with no
node, a private split with no LEZ wallet) leaves the previous policy in
force and pickPending set, which already keeps Propose off. But the
line under the picker said "Propose waits while this proposal switches
to …", and after a refusal it never switches. It now says the proposal
could not switch, with the reason from chainErrorWords. exo-a2a is
closed too: its spec's probes landed under exo-3f2 and it grades 7/7.

TDD-Exempt: wording on an existing gate; ui-lint 0 findings; no recorded fixture of a refused switch yet

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Session-Id: 4184ac11-a506-5256-a1c3-4f1e988410ce
… will spend

Item 14 of exo-408. wallet_estimate_fee took no source, so the LEZ
preview always priced from the module's first account there, the public
one. A send from a shielded account previewed the public rail and its
disclosure, while the send itself (wallet_send, which reads the source's
real form) went private. The educational layer then said something the
code does not do. wallet_estimate_fee now takes from_id (empty = the
module's account, as before); the hosted estimate builds the source
with its real form, as wallet_send does; the backend passes the account
the Send panel names. Surface regenerated.

TDD-Exempt: wiring on the hosted surface, which no suite test compiles; nim check of muster_module.nim clean; the runner build compiles the UI against the regenerated client

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Session-Id: 4184ac11-a506-5256-a1c3-4f1e988410ce
…s own

TDD-Exempt: tracker only

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Session-Id: 4184ac11-a506-5256-a1c3-4f1e988410ce
…will spend

wallet_estimate_fee gained from_id in this PR; the seaqt port (ui-nim) still called it with
four arguments, which would break make build-nim. It now passes fromId, as the C++ backend.

TDD-Exempt: a caller kept in step with a contract change; checked by building the Nim UI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Session-Id: dae9f1e7-9a60-57e2-8d29-9afc3c6527d1
@corpetty
corpetty merged commit 7acee7f into main Oct 17, 2026
6 checks 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.

1 participant