Skip to content

fix(catalog): proxybase pays to an account, not a minted wallet - #276

Merged
GeiserX merged 1 commit into
mainfrom
fix/proxybase-payout-model
Aug 6, 2026
Merged

fix(catalog): proxybase pays to an account, not a minted wallet#276
GeiserX merged 1 commit into
mainfrom
fix/proxybase-payout-model

Conversation

@GeiserX

@GeiserX GeiserX commented Aug 6, 2026

Copy link
Copy Markdown
Owner

Found while starting tier 3 (e8u), which is about minted wallets — so the mislabel was directly in the way. I introduced it myself in #267, by carrying the payout block across from its similarly named sibling.

proxybase (peer-cli) and proxybase-xyz (ProxyBase Markets) are the same org with opposite payout models.

The evidence that peer-cli is internal

  • authenticates with an Access Token from an account dashboard (docker.env ID, secret)
  • cashout is method: redirect to peer.proxybase.org/dashboard, minimum $1
  • its guide states "Payout frequency: On request"
  • docker.volumes is [] — there is no persistence at all

That is the textbook internal model. If it genuinely minted a wallet with no volume, every container recreate would destroy the money — a far more serious bug, but nothing supports that reading.

Harm while it stood: the payout screen told the user "The container generates its own wallet" for a service where no such wallet exists — sending them looking for something that is not there, and implying a backup obligation they do not have.

The durable part

A deployable service declared minted must now declare critical_volumes.

Minting a wallet means irreplaceable local state, so a wallet with no persisted, flagged volume dies with the container. Either the label is wrong (as here) or the service is one recreate away from destroying funds — both are worth failing a build over. Services with an empty docker.image are exempt: the catalog lists those as present but not Docker-deployable.

Verification

  • mutation-tested: restoring minted on proxybase fails 2 of the new tests — so this guard would have caught my original error
  • carries a control asserting the catalog still has a deployable minted service, without which the invariant holds vacuously and rots into decoration
  • a second check that a declared critical volume is actually mounted — flagging a path the container does not have protects nothing
  • also corrects tests/test_beads_batch_70.py, which asserted proxybase was minted: it was encoding the bug rather than catching it

4163 passed, coverage 95.56%, ruff check + format clean.

I introduced this in #267 by carrying the payout block across from its
similarly named sibling. proxybase (peer-cli) and proxybase-xyz (ProxyBase
Markets) are the same org with OPPOSITE payout models.

The evidence that peer-cli is `internal`, not `minted`:
  * it authenticates with an ACCESS TOKEN from an account dashboard
  * cashout is a redirect to peer.proxybase.org/dashboard, minimum $1
  * its guide says "Payout frequency: On request"
  * docker.volumes is [] -- there is no persistence at all

While it stood, the payout screen told the user "The container generates its
own wallet" for a service where no such wallet exists, sending them looking for
something that is not there and implying a backup obligation they do not have.

THE DURABLE PART, and why this is more than a one-line edit: a DEPLOYABLE
service declared `minted` must now declare `critical_volumes`. Minting a wallet
means irreplaceable local state, so a wallet with no persisted, flagged volume
dies with the container and takes the money with it. Either the label is wrong
(as here) or the service is one recreate away from destroying funds -- both are
worth failing a build over. Services with an empty docker.image are exempt;
the catalog lists those as present but not Docker-deployable.

Mutation-tested: restoring `minted` on proxybase fails 2 of the new tests. The
guard carries a control asserting the catalog still HAS a deployable minted
service, without which the invariant would hold vacuously.

Also corrects tests/test_beads_batch_70.py, which asserted proxybase was minted
-- it was encoding the bug rather than catching it.
@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@GeiserX, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 12 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: e1c7289b-e039-4d26-9a07-e25de6272db7

📥 Commits

Reviewing files that changed from the base of the PR and between d86865c and b03ea5f.

📒 Files selected for processing (3)
  • services/bandwidth/proxybase.yml
  • tests/test_beads_batch_70.py
  • tests/test_beads_batch_75.py

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@GeiserX
GeiserX merged commit 83d577e into main Aug 6, 2026
4 of 6 checks passed
@GeiserX
GeiserX deleted the fix/proxybase-payout-model branch August 6, 2026 17:18
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