Repository navigation
fix(wallet): bump gonuts to the #23/#24/#25 integration ref; make ErrTokenAlreadySpent reachable - #392
Conversation
|
Review pass against PR-REVIEW.md — focusing on the actual new content (the tollwallet sentinel work), since ~2000 lines of this diff are #383's packaging/build content that is already on What this PR actually changes (after the #383 noise is rebased away):
Blocking item (mechanical, not content): Rebase onto git rebase --onto main feat/reproducible-builds bump/gonuts-integrationthe diff will show only the actual changes: the go.mod/sum bumps + the tollwallet sentinel work. Reviewers should not have to mentally subtract 35 files of noise. Non-blocking notes:
Disposition: land-after-rebase. The sentinel fix is real and the two-layer test design is exactly right — it catches regression at either the dependency layer or the integration layer, and the empty-guard prevents the broadened match from over-firing. |
…TokenAlreadySpent reachable Pins gonuts-tollgate to 717c886 (main + #23 + #25 + #24, branch tmp/release-integration on the gonuts repo; re-pin to the tagged release when it exists) across every consuming module (root, merchant, cli, tollwallet). With the bump, three wallet-layer fixes ride into tollgate: the empty-proofs panic becomes a normal error, mint swap rejections surface verbatim, and the below-fee swap fails fast. The surfaced rejections are what finally make the ErrTokenAlreadySpent sentinel reachable: tollwallet matched only the exact string 'Token already spent', while the mint's rejection (previously swallowed entirely by gonuts) says 'inputs have already been spent'. The match is broadened (case-insensitive 'already spent' / 'already been spent') and pinned two ways: a phrasing table, and a two-layer test driving a mock mint's rejection through gonuts into the sentinel via errors.Is — which fails if either layer regresses to swallowing. Verified: gofmt/vet/build clean; root module -race testenv green (15.3s); merchant (185s), cli, tollwallet modules green.
936e310 to
8a294b0
Compare
|
Thanks @Amperstrand — clean bump, and the two-layer pin (phrasing table + mock-mint through gonuts) is exactly the right shape. Findings:
|
Two lab repairs found by running the suite for the gonuts-bump e2e:
- Dockerfile.mint pinned cdk-mintd to 0.17.6. The unpinned cargo install
now fetches 0.18.0 (released 2026-09-02), which replaced env-var
startup with a mandatory 'config init --file <toml>' flow — the mint
container exited immediately ('mintd configuration is not initialized')
and the whole lab was unrunnable. 0.17.6 (2026-08-26) is the version
the lab was green on when it landed in #362 (2026-08-27).
- README quick-start used 'compose run --rm client pytest -sv …', but the
client service's entrypoint IS pytest, so 'pytest' arrived as a test
filename: 'ERROR: file or directory not found: pytest'. Drop the
prefix.
With these, the full suite passes at this branch's head: smoke 6/6,
mint-failure 3 passed + 1 skipped, two-router 3/3.
|
Thanks @Amperstrand — delta review of the new head
|
Stacked on #383 (the release cuts from that branch; this PR is the intended next commit before the tag).
What
Pins
gonuts-tollgateto717c886(branchtmp/release-integrationon the gonuts repo = main + #23 + #25 + #24) across every consuming module (root, merchant, cli, tollwallet), to be re-pinned to the tagged release the moment it exists. Riding in:could not swap proofs:errors (gonuts Refactor/merchant testcases #25) — and that is what finally makesErrTokenAlreadySpentreachable, because:Token already spent; mints sayinputs have already been spent. Now case-insensitivealready spent/already been spent, pinned by a phrasing table and a two-layer test that drives a mock mint's rejection through gonuts intoerrors.Is(err, ErrTokenAlreadySpent)— failing if either layer regresses to swallowing.Verification
-race -tags testenvgreen (15.3s); merchant (185s), cli, tollwallet modules green.