thefux
7481ebd8cd
Merge PR #622 : fix: retry critical Cashu storage writes
2026-07-20 18:10:24 +00:00
thefux
7be1db8fd9
Merge PR #621 : fix: propagate Cashu storage errors
2026-07-20 18:10:15 +00:00
thefux
4a4443f98f
Merge PR #620 : fix: guard fee payouts against crash double-payments
2026-07-20 18:10:06 +00:00
thefux
fecf5b27b8
Merge PR #619 : test: vulnerability-reproducing RED tests + coverage
...
# Conflicts:
# .gitignore
# tests/unit/test_coverage_admin.py
# tests/unit/test_coverage_base2.py
# tests/unit/test_coverage_payment_helpers.py
# tests/unit/test_wallet_money_paths.py
2026-07-20 18:09:52 +00:00
9qeklajc and GitHub
bd1edcef26
Merge pull request #624 from Routstr/coverage-tests-pr-619
...
test: extract passing coverage tests from #619
2026-07-19 12:54:51 +02:00
9qeklajc
22a94a68a4
test: extract passing coverage tests from #619
2026-07-18 15:58:54 +02:00
9qeklajc
a3a4d69ed3
fix: make storage retries idempotent
2026-07-18 14:33:40 +02:00
9qeklajc
c9533c872a
fix: retry critical Cashu storage writes
2026-07-18 14:28:18 +02:00
9qeklajc
90da3803c6
fix: preserve caller recovery on storage errors
2026-07-18 14:22:16 +02:00
9qeklajc
8b3b59e176
fix: propagate Cashu transaction storage errors
2026-07-18 14:16:30 +02:00
9qeklajc
be5e323c68
test: cover payout restart and migration safety
2026-07-18 14:13:20 +02:00
9qeklajc
f6d1a41728
fix: checkpoint fee payouts before sending
2026-07-18 14:08:41 +02:00
9qeklajc and GitHub
b3bf1f0e90
Merge pull request #613 from Routstr/fix-overflowing-in-mobile
...
fix overflow
2026-07-17 21:51:38 +02:00
9qeklajc and GitHub
3035292d2a
Merge pull request #575 from Routstr/ehbp-proxy-refactor
...
EHBP proxy support, Tinfoil direct integration, rate limiting, wallet fixes and more
2026-07-17 20:22:14 +02:00
9qeklajc and GitHub
ac436d0862
Merge pull request #618 from jeroenubbink/config/docker-compose-restart-unless-stopped
...
config: Ensure docker compose services are restarted unless explicitly stopped
2026-07-17 20:21:34 +02:00
thefux
59bcc3cbbf
test: add 17 base.py coverage tests (41%→42%)
...
Tests for previously untested methods:
- _extract_upstream_error_message (5 tests): JSON error, text error, empty body
- on_upstream_error_redirect (2 tests): 402, 429 status codes
- _fold_cache_into_input_tokens (2 tests): no cache, preserves total
- get_cached_models / get_cached_model_by_id (2 tests)
- get_x_cashu_cost (2 tests): with/without usage data
- get_balance / create_account / refresh_models_cache / fetch_models (4 tests)
ruff: clean, mypy: clean, 884 pass, 10 RED, 14 skip
2026-07-17 16:27:07 +00:00
thefux
25f75643c2
test: add wallet money-path tests, strengthen billing RED tests
...
- New test_wallet_money_paths.py (10 tests): is_mint_connection_error,
classify_redemption_error, store_cashu_transaction success path,
get_balance, periodic task structure verification
- Fixed test_messages_streaming_no_silent_billing_failure:
was (always pass), now properly asserts
the silent pass pattern must NOT exist
- ruff: all clean, mypy: all clean
10 RED failures (correct), 867 pass, 14 skip
2026-07-17 16:19:33 +00:00
thefux
c68c1936d3
chore: fix ruff lint issues (29 fixes, 0 remaining)
2026-07-17 16:10:54 +00:00
thefux
49d285571e
test: rewrite vulnerability tests as RED (assert correct behavior)
...
Rewrite vulnerability-documenting tests to assert CORRECT behavior
so they FAIL against current buggy main. These are TRUE TDD RED tests.
RED tests (10 failures — correct, these document live bugs):
- test_store_cashu_raises_on_db_failure (DB errors must propagate)
- test_retry_wrapper_exists (store_cashu_transaction_with_retry must exist)
- test_emergency_refund_no_try_except_pass (must not silently lose tokens)
- test_fee_payout_has_crash_guard (must have lock before pay)
- test_billing_error_must_not_hardcode_zero_cost (must not give free service)
- test_billing_error_must_release_reserved_balance (stuck funds)
- test_billing_error_catch_is_too_broad (narrow exception type)
- test_billing_error_must_log_critical (CRITICAL not ERROR)
New coverage tests (45 pass, zero regressions):
- test_coverage_base.py (17 tests): preparers, builders, injectors
- test_coverage_admin.py (11 tests): withdraw validation, slugs, auth
- test_coverage_proxy.py (13 tests): JSON parsing, model extraction
Coverage gains:
- middleware.py: 38% → 90%
- helpers.py: 52% → 60%
- proxy.py: 47% → 51%
- admin.py: 35% → 36%
Test suite: 857 pass, 10 RED failures, 14 skipped (zero regressions)
2026-07-17 16:05:56 +00:00
Paperclip Deployment Engineer
eb108a4a5a
test: add vulnerability-reproducing and coverage-filling tests
...
Adds 40 new tests across 5 test files that document critical bugs and
fill coverage gaps in the routstr-core codebase:
- test_emergency_refund_integrity.py (5 tests):
Documents the try/except/pass vulnerability in emergency refund paths
(base.py:3643-3653 and base.py:4607-4617) where DB store failures
silently lose minted tokens. Verifies store_cashu_transaction catches
all exceptions and send_token mints before DB persistence.
- test_zero_cost_fallback.py (6 tests):
Documents the hardcoded zero-cost fallback (base.py:1012-1030) where
exceptions from adjust_payment_for_tokens() result in total_msats=0,
giving users free service with permanently reserved balances.
- test_db_and_payout_resilience.py (8 tests):
Confirms store_cashu_transaction_with_retry was reverted (#600→#604).
Documents the fee payout pay-then-reset crash window and wallet
caching mechanism.
- test_coverage_middleware.py (11 tests):
Fills middleware.py coverage gap (was 38%) — tests LoggingMiddleware,
_should_log filters, request_id_context, and middleware exports.
- test_coverage_payment_helpers.py (10 tests):
Fills payment/helpers.py coverage gap (was 52%) — tests
check_token_balance, estimate_tokens, create_error_response,
and image token calculation helpers.
All tests pass against current main (830 passed, 13 skipped).
2026-07-17 15:12:48 +00:00
Jeroen Ubbink
19082231f9
config: Ensure docker compose services are restarted unless explicitly stopped
2026-07-17 14:14:27 +02:00
9qeklajc
281607108c
fix(ui): use dynamic viewport heights
2026-07-16 13:25:44 +02:00
9qeklajc and GitHub
8314f3c1b0
Merge pull request #614 from Routstr/pr-575-review-fixes
...
Fix review blockers: hop-by-hop headers, exact attestation routing, doc updates
2026-07-16 13:18:56 +02:00
9qeklajc and GitHub
1a9041766b
Merge pull request #616 from Routstr/fix/ppq-upstream-inference-cost
...
fix: bill PPQ.AI BYOK upstream_inference_cost + BYOK fee
2026-07-16 13:16:30 +02:00
redshift
01c01fe8ad
fix: bill PPQ.AI BYOK upstream_inference_cost + BYOK fee
...
PPQ.AI (BYOK) requests were billed at ~5% of their true cost because
_resolve_usd_cost fell through to usage.cost (a small BYOK routing fee)
instead of using cost_details.upstream_inference_cost (the real inference
cost). The proxy operator absorbed the inference cost.
The fix adds a BYOK-specific branch in _resolve_usd_cost: when is_byok is
true and cost_details.upstream_inference_cost is present, bill
upstream_inference_cost + byok_fee — what PPQ actually deducts from the
balance. Non-BYOK providers (e.g. OpenRouter) are unaffected because their
usage.cost already equals upstream_inference_cost.
Regression tests mirror the live glm-5.2-fast request from GitHub issue #615 ,
asserting the corrected billing (940,274 msats vs the old 45,202 msats — a
20.8× undercharge).
Closes #615
2026-07-16 17:01:55 +08:00
redshift
892aed61cc
Fix mypy: move type: ignore onto ASGITransport line
2026-07-16 16:43:52 +08:00
9qeklajc
c6733dbb62
fix overflow
2026-07-14 21:47:26 +02:00
redshift
57fef44ce7
Merge branch 'main' of https://github.com/Routstr/routstr-core into ehbp-proxy-refactor
2026-07-13 11:14:15 +08:00
9qeklajc and GitHub
c671d277d3
Merge pull request #603 from Routstr/refund-sweep-behavior-tests
...
test: exercise refund sweep state transitions
2026-07-13 00:09:30 +02:00
9qeklajc
9460e24f21
fix: persist outbound Cashu tokens before sending
2026-07-13 00:07:00 +02:00
9qeklajc and GitHub
f31929b538
Merge pull request #610 from Routstr/fix-mypy
...
fix mypy
2026-07-12 23:35:35 +02:00
9qeklajc
129ea7bb76
fix mypy
2026-07-12 23:33:22 +02:00
9qeklajc and GitHub
b88c6d84fa
Merge pull request #608 from Routstr/fix/refund-sweep-test-coverage
...
test: cover periodic refund sweep behavior
2026-07-12 23:06:51 +02:00
9qeklajc and GitHub
238beb3e52
Merge pull request #605 from Routstr/fix/admin-withdraw-transaction-audit
...
fix: record admin withdrawals as outgoing transactions
2026-07-12 15:05:20 +02:00
9qeklajc and GitHub
dc833d9f5f
Merge pull request #602 from Routstr/fix/auto-topup-transaction-recovery
...
fix: make auto-topup tokens recoverable
2026-07-12 14:57:03 +02:00
9qeklajc
31e7ff8fbd
test: cover periodic refund sweep behavior
2026-07-12 14:54:26 +02:00
9qeklajc
a1850dfa55
fix: record admin withdrawals as outgoing transactions
2026-07-12 14:49:51 +02:00
9qeklajc and GitHub
9eacabde0e
Merge pull request #604 from Routstr/revert-600-fix/retry-cashu-transaction-storage
...
Revert "Retry Cashu transaction storage on transient DB failures"
2026-07-12 14:49:28 +02:00
9qeklajc and GitHub
73f52ef1fd
Revert "Retry Cashu transaction storage on transient DB failures"
2026-07-12 14:47:30 +02:00
9qeklajc
110ec5da5d
test: exercise refund sweep state transitions
2026-07-12 14:46:19 +02:00
9qeklajc
a5cee796c9
fix: make auto-topup tokens recoverable
2026-07-12 14:45:17 +02:00
9qeklajc and GitHub
aabf08a930
Merge pull request #600 from Routstr/fix/retry-cashu-transaction-storage
...
Retry Cashu transaction storage on transient DB failures
2026-07-12 14:21:40 +02:00
9qeklajc
07c15de106
better retry logic
2026-07-12 14:12:29 +02:00
9qeklajc
aea24d23da
fix: retry Cashu transaction storage
2026-07-12 13:29:09 +02:00
9qeklajc and GitHub
e100c77288
Merge pull request #599 from Routstr/fix/cost-calculation-breakdown
...
Fix input/output cost breakdown calculation
2026-07-12 13:25:08 +02:00
9qeklajc
057a752b1e
fix cost breakdown calculation
2026-07-12 13:07:05 +02:00
9qeklajc and GitHub
5daa2602f5
Merge pull request #593 from Routstr/fix/security-pip-deps
...
Fix/security pip deps
2026-07-11 12:28:31 +02:00
9qeklajc and GitHub
d80912b10e
Merge pull request #589 from Routstr/fix/provider-scoped-model-overrides
...
Fix provider-scoped model overrides
2026-07-10 22:44:16 +02:00
9qeklajc
8f087bf07a
Merge branch 'main' into fix/provider-scoped-model-overrides
2026-07-10 22:00:25 +02:00
9qeklajc and GitHub
744321153f
Merge pull request #585 from Routstr/fix-payout
...
fix payout
2026-07-10 20:37:10 +02:00