Commit graph

  • 9c4d2c1324 docs(security-pathway): flag kind:21001 CLINK collision + rotation v2-bitspire Padreug 2026-06-06 21:00:14 +02:00
  • 8a9aa00c20 Merge pull request 'feat(v2): operator fee-config Nostr publisher (closes #39)' (#43) from feat/fee-transport into v2-bitspire padreug 2026-06-01 18:20:09 +00:00
  • 794d7e5395 feat(v2): wire fee-config publish into machine + super-config triggers (#39 3/3) Padreug 2026-06-01 20:07:56 +02:00
  • 12f39226f0 feat(v2): fee_transport — kind-30078 publisher for operator fee config (#39 2/3) Padreug 2026-06-01 20:00:29 +02:00
  • aeaee1f568 refactor(v2): extract kind-30078 publish primitives to nostr_publish.py (#39 1/3) Padreug 2026-06-01 19:54:08 +02:00
  • 52911af7b1 Merge pull request 'feat(v2): principal-based fee split + per-direction config (closes #38)' (#42) from feat/principal-based-fees into v2-bitspire padreug 2026-06-01 17:45:30 +00:00
  • 10f4b50ca5 feat(v2)(ui): per-direction fee inputs in super-config + machine modals (#38 5/5) Padreug 2026-06-01 14:46:27 +02:00
  • d9e8a04b8b feat(v2): record fee_mismatch_sats per settlement, Phase 1 (#38 4/5) Padreug 2026-06-01 14:34:25 +02:00
  • 1babdfbf06 feat(v2): principal-based fee split — fixes super under-payment (#38 3/5) Padreug 2026-06-01 11:24:09 +02:00
  • 4cd0041923 feat(v2): CRUD + per-direction fee cap validation (#38 2/5) Padreug 2026-06-01 10:42:03 +02:00
  • d87d0db324 feat(v2): m009 + models — split fee fractions by direction (#38 1/5) Padreug 2026-06-01 10:18:37 +02:00
  • e9f81d0cbb Merge pull request 'feat(v2): nostr-transport roster-resolver hook — path B wallet routing (#20)' (#36) from feat/roster-resolver into v2-bitspire padreug 2026-05-31 20:33:17 +00:00
  • 99efa52b69 feat(v2): nostr-transport roster-resolver hook (#20 path-B) Padreug 2026-05-31 19:14:45 +02:00
  • 213f95bab7 Merge pull request 'feat(v2): collision guard — refuse machines whose npub matches an operator account (closes #32)' (#33) from feat/collision-detection into v2-bitspire padreug 2026-05-31 18:10:30 +00:00
  • 7bab182abb chore(tests): remove stale test_init.py cookiecutter leftover Padreug 2026-05-31 19:23:36 +02:00
  • 05c1105897 feat(v2): collision guard — refuse machines whose npub matches an operator account (#32) Padreug 2026-05-31 18:45:56 +02:00
  • 44f6c0b1bd Merge pull request 'feat(v2): operator-side cassette inventory v1.1 + signer.nip44_* migration (#29)' (#30) from feat/cassette-config-v1 into v2-bitspire padreug 2026-05-31 13:54:18 +00:00
  • d448fab0d2 chore(v2): lint pass — black + ruff auto-fix + mypy regressions (#29 v1.1) Padreug 2026-05-31 15:50:14 +02:00
  • dcb7de0c27 refactor(v2): cassette transport — signer.nip44_* migration (#29 v1.1 / closes #21 partial) Padreug 2026-05-31 09:21:43 +02:00
  • 4b128ca53c test(v2): re-wire bitspire cross-test fixture for v1.1 positions-keyed shape (#29 v1.1) Padreug 2026-05-30 22:43:12 +02:00
  • 1cebefcde5 test(v2): rewrite cassette tests for v1.1 position-keyed wire shape (#29 v1.1) Padreug 2026-05-30 22:31:08 +02:00
  • 3014962563 refactor(v2)(ui): denomination editable per slot, position read-only (#29 v1.1) Padreug 2026-05-30 22:28:37 +02:00
  • 34e324b4c5 refactor(v2): cassette consumer + API endpoint — position-keyed (#29 v1.1) Padreug 2026-05-30 22:26:55 +02:00
  • 5dbd7314f4 refactor(v2): cassette CRUD + transport — position-keyed (#29 v1.1) Padreug 2026-05-30 22:25:27 +02:00
  • 427cad33de refactor(v2): cassette models — position-keyed wire shape (#29 v1.1) Padreug 2026-05-30 22:23:51 +02:00
  • df6e8e0a22 feat(v2): m008 flip cassette_configs PK to (machine_id, position) (#29 v1.1) Padreug 2026-05-30 22:22:29 +02:00
  • 23b615601f fix(v2)(ui): dirty cassette row — inset shadow accent, not bg-color class Padreug 2026-05-30 19:39:35 +02:00
  • 5f9c84b6e8 fix(v2)(ui): dirty cassette row needs explicit text-grey-9 under dark theme Padreug 2026-05-30 19:34:11 +02:00
  • 5631246337 test(v2): wire bitspire's NIP-44 v2 cross-test fixture from coord log (#29 v1) Padreug 2026-05-30 18:34:54 +02:00
  • 407149137a feat(v2)(ui): cassette sub-tab in machine detail + overwrite-confirm modal (#29 v1) Padreug 2026-05-30 18:26:05 +02:00
  • f8042f8e4d feat(v2): POST cassettes/publish API endpoint + ownership guard (#29 v1) Padreug 2026-05-30 18:21:51 +02:00
  • e57a73083e feat(v2): bootstrap consumer task — auto-populate cassette_configs (#29 v1) Padreug 2026-05-30 18:19:15 +02:00
  • b9d5ea3c57 feat(v2): cassette_transport — kind-30078 publish + decrypt (#29 v1) Padreug 2026-05-30 18:14:16 +02:00
  • da07bae554 feat(v2): hand-rolled NIP-44 v2 crypto + reference-vector tests (#29 v1) Padreug 2026-05-30 18:10:30 +02:00
  • 9b8008db1f feat(v2): cassette_configs CRUD + unit tests (#29 v1) Padreug 2026-05-30 18:03:52 +02:00
  • 13684e7134 feat(v2): m007 cassette_configs schema + Pydantic models (#29 v1) Padreug 2026-05-30 18:00:11 +02:00
  • 58a0974117 chore: ignore uv.lock until PEP 621 migration Padreug 2026-05-26 23:33:49 +02:00
  • cf6c0b4b7a docs: security pathway write-up + printable PDF Padreug 2026-05-26 23:30:36 +02:00
  • ecf432c6a0 feat(v2)(ui): tx_type chip in operator settlements table (S8 UI) Padreug 2026-05-26 23:28:42 +02:00
  • eca6e961b7 feat(v2): wire cash-in routing — direction discriminator + DCA skip Padreug 2026-05-26 23:21:30 +02:00
  • dcd08748a7 revert(v2): drop NIP-78 fleet publishing (privacy by default) Padreug 2026-05-26 23:20:24 +02:00
  • e13178d3ac feat(v2): route nostr_publish signing through lnbits#17 signer abstraction (hybrid) Padreug 2026-05-26 22:24:29 +02:00
  • 131ff92aa8 feat(v2): publish operator-signed kind:30078 fleet roster + per-machine config (S4) Padreug 2026-05-26 20:28:26 +02:00
  • d717a6e214 refactor(v2): canonical sat-amount vocabulary + delete Lamassu-era reverse-derivation Padreug 2026-05-26 20:08:30 +02:00
  • 6348c55e37 fix(v2)(ui): split v-text from <q-chip> children in deposit dialog Padreug 2026-05-16 18:04:40 +02:00
  • d2e682712d feat(v2): lock deposit currency to machine.fiat_code (closes #26) Padreug 2026-05-16 18:03:34 +02:00
  • da25d2e1f8 fix(v2): read fiat_amount directly from Payment.extra (bill-validator truth) Padreug 2026-05-16 16:39:47 +02:00
  • cfad4e341c feat(v2)(ui): operator-side LP UI matches the new dca_lp authority split Padreug 2026-05-16 10:12:23 +02:00
  • 80b5a6d785 refactor(v2): hoist LP state (wallet, mode, autoforward) into dca_lp table Padreug 2026-05-16 10:05:54 +02:00
  • 1feaba80ed refactor(v2): rename net_sats → principal_sats for semantic clarity Padreug 2026-05-15 23:21:32 +02:00
  • 9414a18f82 feat(v2): reject settlements that fail nostr attribution cross-check (S5 G5) Padreug 2026-05-15 22:39:30 +02:00
  • 47916bdddd fix(v2): m002 — rename dca_commission_splits.wallet_id → target Padreug 2026-05-15 07:55:57 +02:00
  • a86f8dc25d fix(v2): refuse /retry when any leg already completed (double-pay guard) Padreug 2026-05-14 19:38:32 +02:00
  • 5de9cd5205 feat(v2): commission split target accepts wallet id, invoice key, LN address, or LNURL Padreug 2026-05-14 19:37:33 +02:00
  • 8968c0ae07 fix(v2)(ui): finish expanding self-closing q-* tags (rules-attribute corner case) Padreug 2026-05-14 19:25:03 +02:00
  • 32484e3ce8 fix(v2): reorder /settlements/stuck before /settlements/{id} (route literal vs path-param collision) Padreug 2026-05-14 19:22:10 +02:00
  • 2886dd7394 chore(v2): collapse m001-m007 into single m001_satmachine_v2_initial Padreug 2026-05-14 19:15:28 +02:00
  • cb19ba3675 fix(v2): m005-m007 idempotency + SQLite CREATE INDEX syntax; template self-closing tags Padreug 2026-05-14 19:12:51 +02:00
  • b96837164e chore(v2): dead-code purge (fix bundle 3) Padreug 2026-05-14 19:00:43 +02:00
  • 00b8253dd3 fix(v2): partial-dispense preserves original split ratio (H6) Padreug 2026-05-14 18:58:15 +02:00
  • ecef916dda fix(v2): decouple listener + skipped-leg audit (fix bundle 2) Padreug 2026-05-14 18:49:16 +02:00
  • f4eb7ec928 feat(v2): super-fee edit + Worklist + Reports (P9f+g, completes P9) Padreug 2026-05-14 18:09:07 +02:00
  • 5c8e629752 feat(v2): Commission splits editor (P9e) Padreug 2026-05-14 18:07:08 +02:00
  • ce4d7e4dd6 feat(v2): Deposits tab — record/confirm/reject workflow (P9d) Padreug 2026-05-14 18:05:25 +02:00
  • 0800a1acb0 feat(v2): Clients tab — LP management + settle balance modal (P9c) Padreug 2026-05-14 18:03:29 +02:00
  • 13ac33047b feat(v2): machine detail dialog — settlements + per-row actions (P9b) Padreug 2026-05-14 18:01:08 +02:00
  • 21d159d709 feat(v2): tabbed dashboard skeleton + Fleet tab (P9a) Padreug 2026-05-14 17:58:43 +02:00
  • 0bdee0f62b feat(v2): LP auto-forward to LN address (P6 — closes #8) Padreug 2026-05-14 17:46:02 +02:00
  • 578f2c142d feat(v2): abandoned-tx queue + force-reset for stuck settlements (P3f) Padreug 2026-05-14 17:43:20 +02:00
  • 3ede66ff92 fix(v2)(security): wallet IDOR + settlement-processing concurrency Padreug 2026-05-14 17:37:58 +02:00
  • d0a947b7e6 feat(v2): balance settlement at current rate (P3e) Padreug 2026-05-14 17:17:41 +02:00
  • 2883eb7b79 feat(v2): partial-dispense + operator notes on settlements (P3d) Padreug 2026-05-14 15:46:33 +02:00
  • e8dcbfe26e feat(v2): commission splits CRUD endpoints (P3c) Padreug 2026-05-14 15:37:16 +02:00
  • b7f6f0a696 feat(v2): deposit CRUD + confirmation endpoints (P3b) Padreug 2026-05-14 15:36:04 +02:00
  • 7226b8289d feat(v2): client CRUD + balance summary endpoints (P3a) Padreug 2026-05-14 15:35:15 +02:00
  • 56be3e5c52 feat(v2): settlement distribution — three leg groups, super-fee write (P2) Padreug 2026-05-14 15:34:07 +02:00
  • 10b79ae900 feat(v2): operator-scoped API surface — machines, settlements, payments (P1b) Padreug 2026-05-14 14:50:07 +02:00
  • b91e49b642 feat(v2): wire bitSpire invoice listener + settlement landing (P1a) Padreug 2026-05-14 14:48:44 +02:00
  • cba327d0f0 fix(v2): use payment_hash as settlement idempotency key Padreug 2026-05-14 14:46:08 +02:00
  • 937749f149 feat(v2): operator-scoped CRUD + stub legacy entry points Padreug 2026-05-14 14:37:48 +02:00
  • 013e3d5f6b feat(v2): rewrite models.py for v2 schema Padreug 2026-05-14 14:33:16 +02:00
  • ae4e241d1c feat(v2): add m005 satmachine_v2 schema for bitSpire + multi-tenant Padreug 2026-05-14 14:30:45 +02:00
  • 28241e70c3 feat: add deposit edit and delete for pending deposits main v0.0.5 Padreug 2026-04-26 16:00:04 +02:00
  • 6eb076d5f6 chore: bump version to 0.0.4 padreug 2026-01-11 16:10:48 +01:00
  • 545a0284a7 fix: cap DCA allocations when ATM cash exceeds tracked balances v0.0.4 padreug 2026-01-11 15:54:48 +01:00
  • 49f3670bac fix: cast amount to float for LNbits create_invoice API padreug 2026-01-11 15:40:17 +01:00
  • a703bb32d3 fix: cast amount to float for LNbits create_invoice API backup/decimal-precision-full refactor/decimal-precision padreug 2026-01-11 15:17:07 +01:00
  • 904b3f1d61 fix: add SQLite compatibility for Decimal types padreug 2026-01-11 15:09:45 +01:00
  • d245047487 test: add CRUD layer tests with mocked database padreug 2026-01-11 14:56:29 +01:00
  • 49dd4d1844 test: add integration tests for CSV parsing and full distribution flow padreug 2026-01-11 14:51:23 +01:00
  • 6e86f53962 refactor: use Decimal instead of float for monetary calculations padreug 2026-01-11 14:47:56 +01:00
  • 397fd4b002 feat: add unit tests for DCA calculations with empirical Lamassu data padreug 2026-01-11 14:14:18 +01:00
  • 8d94dcc2b7 fix: reset correct loading state after manual transaction processing padreug 2026-01-05 20:57:25 +01:00
  • ab4e3d6b12 fix: use check_user_exists for LNbits 1.4 compatibility v0.0.3 padreug 2026-01-05 12:14:48 +01:00
  • 25be6cff87 Fix LNbits 1.4 compatibility: add null guards for g.user.wallets v0.0.2 padreug 2026-01-05 11:11:19 +01:00
  • 5e8110f322 fix: cap DCA allocations when ATM cash exceeds tracked balances Patrick Mulligan 2025-12-31 23:41:16 +01:00
  • cd0d958c2c consolidate docs v0.0.1 padreug 2025-11-03 22:22:55 +01:00
  • 1b7374fa70 Removes test transaction UI button padreug 2025-10-24 00:30:34 +02:00
  • fe38e08d4e Adds manual transaction processing feature padreug 2025-10-24 00:15:22 +02:00
  • 230beccc37 Improve balance verification in LamassuTransactionProcessor: Added rounding to two decimal places for balance and fiat amounts to ensure precision in comparisons. Enhanced logging for insufficient balance scenarios, improving clarity in transaction processing and error reporting. padreug 2025-07-19 00:21:13 +02:00