Commit Graph

100 Commits

Author SHA1 Message Date
2d94c00136 v0.5.15: update changelog 2026-07-15 12:08:57 +00:00
62502263fd v0.5.15: sync version in plugin_base 2026-07-15 12:08:13 +00:00
184eb7b619 v0.5.15: version bump 2026-07-15 12:07:43 +00:00
3845c8d739 v0.5.15: shorten long .onion URLs + fix KeyError on delete/select/ping 2026-07-15 12:06:58 +00:00
3d256ddd3d v0.5.13: update changelog 2026-07-14 10:51:23 +00:00
84e1094553 v0.5.13: version bump 2026-07-14 10:50:46 +00:00
df6b5e3e9a v0.5.13: Electrum 4.8.0 compatibility (register_dict -> register_name shim 2026-07-14 10:50:08 +00:00
b1145d654c v0.5.13: remove Check Alive red highlight 2026-07-14 10:49:27 +00:00
be2733f180 v0.5.11: update changelog 2026-07-13 21:55:45 +00:00
e8cde30182 v0.5.11: version bump 2026-07-13 21:54:53 +00:00
745489f616 v0.5.11: Electrum 4.8.0 compatibility (register_dict -> register_name shim) 2026-07-13 21:53:51 +00:00
6456f9fa16 v0.5.10: update changelog 2026-07-05 09:07:36 +00:00
cd2278c2b8 v0.5.10: sync version in plugin_base 2026-07-05 09:06:53 +00:00
3ceabac0bb v0.5.10: version bump 2026-07-05 09:05:36 +00:00
527ae95c75 v0.5.10: Check Alive/BASIC fixes, UX improvements, Raw-Date handling. 2026-07-05 09:03:57 +00:00
4c81290954 v0.5.2: update changelog 2026-07-04 10:08:34 +00:00
2cb39f1a6d v0.5.2: sync version in plugin_base 2026-07-04 10:07:53 +00:00
20fd54681f v0.5.2: version bump 2026-07-04 10:07:25 +00:00
9d48512fa9 Merge pull request 'v0.5.1: fix Windows Settings-dialog flicker' (#1) from fix-flicker-windows-051 into main
Reviewed-on: kaibot/bal-plugin-ai#1
2026-07-04 08:18:50 +00:00
3a3dca0c2e v0.5.1: update changelog 2026-07-04 08:13:15 +00:00
346164207f v0.5.1: sync version in plugin_base 2026-07-04 08:12:25 +00:00
431bcc6247 v0.5.1: version bump 2026-07-04 08:11:18 +00:00
9cbed79590 v0.5.1: fix Windows Settings-dialog flicker 2026-07-04 08:07:33 +00:00
donkey-ai
ca874d8e93 v0.5.4 2026-07-02 00:29:26 +02:00
kaibot
868674ece2 baltx_fees default 100 -> 20 2026-06-30 06:23:44 -04:00
kaibot
aaa8658aa0 fix: default baltx_fees 100 -> 50 2026-06-30 06:21:58 -04:00
kaibot
aa03c12aab v0.5.0 2026-06-30 04:33:24 -04:00
kaibot
65b50b51f3 fix: auto-sign on check rispetta AUTO_SIGN + nascosto in basic mode
- plugin.py: auto-sign setting con widget nominati, nascosto in basic mode
  (visibile solo in ADVANCED, come welist server e calendar app)
- dialogs.py: _on_success_phase1_body() salta firma/broadcast quando
  AUTO_SIGN è OFF (solo in advanced; basic usa sempre default=True)
- dialogs.py: _show_next_steps_hint() sopprime hint manuali anche in basic
  mode (dove auto-sign è sempre attivo)
2026-06-30 04:27:31 -04:00
kaibot
7b77ff8692 feat: add will-executor edit dialog on double-click with sync button (↻)
- WillExecutorListWidget: double-click/Enter opens edit dialog
- WillExecutorWidget.add() accepts edit_key param for edit mode:
  pre-populates URL, Info, Base Fee, Address fields
- Sync button (↻) pings executor URL via TaskThread and populates
  fields; updates executor status in list in edit mode (200/KO)
- Loading indicator (⟳) during async ping
- QMessageBox with dialog as parent for sync errors
- Focus returns to URL field after sync error
- 'Add another' button only in add mode, no longer default (OK is default)
- Removed Promo Code field
- Heir dialog: 'Add another' no longer default (matches new pattern)
2026-06-30 03:56:11 -04:00
kaibot
ffd518f1a5 fix: forward force param in push_transactions_to_willexecutors so rebroadcast actually resends pushed txs 2026-06-30 02:55:53 -04:00
kaibot
8a6cfc13cf feat: add per-setting reset button (↺) to each row in settings dialog 2026-06-30 02:50:32 -04:00
kaibot
f574472dcf refactor: extract BalCalendarButton common widget + basic-mode default app 2026-06-30 02:43:05 -04:00
kaibot
02cda3513b feat: add calendar button with dropdown menu to build-will dialog + calendar app setting (advanced mode) 2026-06-30 02:27:50 -04:00
kaibot
6d568bf304 Fix: NoneType error in normalize_will when others_inputs is None
When deleting old transactions and clicking Check, task_phase1 would fail
with 'NoneType object has no attribute get' error in WillItem.normalize_locktime.

Root cause: In Will.normalize_will (will.py:150), the parameter others_inputs
defaults to None. At line 151, a local variable 'others_input' is created with
a safe default value (empty dict). However, lines 179 and 184 still used the
original 'others_inputs' parameter instead of the safe local variable, causing
the error when calling .get() on None.

Fix: Use the safe 'others_input' variable instead of the raw parameter in
lines 179 and 184.

Also added:
- Traceback logging to on_error_phase1 so future errors include full call stack
- Debug logging in update_all to log willitems state before processing
- Comprehensive test (test_e5_build_with_real_wallet_heirs_and_utxos) that
  reproduces the exact scenario from the user's karen7 wallet
2026-06-29 12:03:24 -04:00
kaibot
aa971b8759 fix: distinguish empty response from network error in advanced mode
Show 'No active will-executor servers for {chain}' when the server
responds with no data, and 'Could not reach the configured welist
server' only for actual connection errors.
2026-06-29 01:13:38 -04:00
kaibot
41803139c6 feat: move User Type above advanced-only settings, improve dialog sizing
- Move User Type combo to row 5 (before Number of reminders)
- Use QLayout.SizeConstraint.SetFixedSize so dialog auto-resizes on mode switch
- Hide event summary, description and reminders count in basic mode, use defaults
- Increase Event Description height to 3 lines
- Set minimum width on line edits for proper dialog sizing in advanced mode
2026-06-29 01:07:22 -04:00
kaibot
ff00097af4 docs: update User Type and welist server help texts
User Type help now says BASIC is safe for most users and lists
welist server URL config + always-editable fields as advanced features.
Welist server help text updated to 'Only available in ADVANCED mode'.
2026-06-29 00:29:17 -04:00
kaibot
7a58c69533 feat: add configurable welist server URL (advanced mode only)
- Add NoServersForChainError(chain, url, reason) with error details
- Expose WELIST_SERVER setting in plugin dialog, hidden in basic mode
- Basic mode uses factory default; advanced mode uses configured URL only
- Show descriptive error with URL and reason when advanced-mode fetch fails
2026-06-29 00:18:42 -04:00
kaibot
7004953ce2 fix: keep will-settings fields editable in advanced mode
In advanced mode the locktime, check-alive and fees fields should always
be editable regardless of the EDITABLE_DATES setting. Only basic mode
respects that setting.
2026-06-29 00:01:25 -04:00
kaibot
b8e6c240be feat(willexecutors): differentiate empty server response from network error
Raise NoServersForChainError when the welist server responds but returns
no data for the requested chain, showing a chain-specific message instead
of the generic network error.
2026-06-28 23:56:30 -04:00
donkey-ai
c9d0280a2a docs: update HANDOFF.md to v0.4.8 state
Refresh the AI handoff document so future assistants (e.g. Claude Code)
can resume work without losing the analysed logic/history:
- bump version references 0.4.7 -> 0.4.8 and test count 258 -> 266
  (added tests/test_group_h_v048.py to the run command)
- document the report-area min height change (500 -> 450)
- add BASIC/ADVANCED user-type section and the Raw/Date selector
  visibility gotcha (task #04: toolbars built once and reused, so
  per-widget visibility must be re-applied via apply_user_type_visibility)
- document will-item CONFIRMED/MEMPOOL status flags and the
  NotCompleteWillException-on-emptied-wallet behaviour
- note that dates shown in the plugin are LOCAL time (fromtimestamp),
  not UTC, and the msg_set_status row append/overwrite behaviour
- update git/delivery workflow (ZIPs via GitHub Releases, auth note,
  PR #13/#14/#15, release v0.4.8) and the resume checklist
2026-06-28 23:02:48 -04:00
donkey-ai
33e8a7533d v0.4.8: seven UX fixes for the BAL inheritance plugin
- #04: Raw/Date selector now reappears on the WILL/HEIR tabs when switching to
  ADVANCED (and when a raw value is pushed from the wizard), keeping the current
  value/editor. New BalTimeEditWidget.apply_user_type_visibility() wired into
  WillSettingsWidget for both the locktime and check-alive boxes.
- #3: Building Will report window minimum height 500 -> 450 px.
- #5: 'User Type' setting moved to the bottom, above 'Rebroadcast transactions'.
- #6: enabling ADVANCED now requires typing 'at My Risk' (case-insensitive);
  wrong phrase or cancel reverts to BASIC. QInputDialog added to common import.
- #7a: on CHECK with an emptied wallet, an extra reassuring line is shown on
  'Checking your will': 'Inheritance already executed (on blockchain)' in GREEN
  (CONFIRMED) or 'Inheritance in mempool (waiting confirmation)' in ORANGE
  (MEMPOOL). New _executed_inheritance_status() helper.
- #7b: 'Balance is too low, or CheckAlive is in the past. Skipped' (space added)
  recoloured to ORANGE instead of red.
- Reset button renamed 'Reset setting' -> 'Reset to Default Setting'.
- Added tests/test_group_h_v048.py (8 tests). Version 0.4.7 -> 0.4.8.
  Full suite: 266 passed; ruff clean; CHANGELOG #24; memory updated (#04 done).
2026-06-28 23:02:40 -04:00
donkey-ai
0f2b3a4146 docs: add DUST section to inheritance-options (v0.4.7) and translate agent memory to English
- inheritance-options.md/.html: new section 4.8 explaining the dust limit
  (some-dust continues vs all-dust blocks), dust quick-reference row,
  golden rule #5, and footer bumped to v0.4.7 referencing core/heirs.py.
- .agent_memory_tasks.md: translated remaining Italian user-quote lines
  to English (Point B2 = replace, English only, no Italian originals kept).
- Verified: no Italian text remains in any repo doc; md/html mirrors in sync.
2026-06-28 23:02:33 -04:00
donkey-ai
646a33f2f5 feat(v0.4.7): report area 500px, heirs one-per-line, wizard line breaks, ALL-DUST guard
Owner-approved changes after testing v0.4.6, plus accumulated v0.4.x work,
task-tracking notes, and an updated project HANDOFF document.

The four v0.4.7 changes:

1. Report area (BalBuildWillDialog) opens 500px tall (min) up to 700px (max),
   then the scrollbar takes over. Previously it opened ~140px (too short).

2. Heirs are listed ONE per line again (green, bold) in _build_success_report,
   reverting the v0.4.6 single-line form. Heir names can be long and the report
   now scrolls, so compression is no longer needed.

3. Two wizard texts get an explicit line break: after "(or backup)" in the date
   hint and after "miner fees" in the fee note (widgets.py).

4. ALL-DUST guard: when EVERY heir's share is below the Bitcoin dust limit, the
   inheritance would pay nobody. Heirs.prepare_lists now raises
   HeirAmountIsDustException at the end (where all heirs across all locktimes
   are known with their final dust state), and dialogs.task_phase1 shows a clear
   RED message and stops without building/signing/checking. A mix of dust +
   valid heirs keeps building normally. The guard is intentionally in
   prepare_lists, NOT prepare_transactions (which only sees the lowest locktime
   and would false-positive). HeirAmountIsDustException is imported in common.py.

Tests: 3 new tests in test_core_heirs_extra.py pin the dust behaviour (all-dust
raises; mixed continues; multi-locktime continues). Full suite: 258 passed.
ruff: no new errors. Version bumped 0.4.6 -> 0.4.7 (4 files). CHANGELOG #23.

Also adds/updates HANDOFF.md so any future AI (Claude or another model) can
resume the project with full context (rules, layout, build/test/lint, dust
logic, git flow), and records the task-tracking notes in
.agent_memory_tasks.md.
2026-06-28 23:02:25 -04:00
donkey-ai
ed83af6be9 docs(bal): add HANDOFF.md to resume the project in a new chat/model
Adds a single handoff document summarizing the mandatory rules (R1-R4,
zip-first), project overview, build/test/release commands, current state
(v0.3.9 released), the pending 'unify invalidate procedure' task with the
user-approved warning popup text, and a key file/line map. Lets any new chat
or AI model resume work without losing context. Documentation only; no plugin
code changed.
2026-06-28 23:02:18 -04:00
donkey-ai
5b707e647b feat(bal): UI batch v0.3.9 + expired-will invalidate regression fix
UI batch (TASK A/B/C/D):
- (A) Clearer 'Will expired' message: shortened will id (8+8 chars) and
  readable UTC date instead of raw UNIX timestamp; shown in WARNING colour
  (orange) instead of ERROR (red) in the wizard, as it is an expected step.
- (A2) Split the orange message onto two lines via <br> (rendered as HTML by
  msg_warning) to avoid an overly long single line.
- (B) History tab labels (text only): inheritance txs -> 'BAL Inheritance
  transaction'; invalidate tx -> 'BAL Invalidate transaction'. Colours left
  to Electrum defaults.
- (C) New 'No will-executor TX' checkbox in plugin settings, bound to the
  existing NO_WILLEXECUTOR config (default ON, kept in sync with the wizard),
  with help text, and included in the settings reset action.
- (D) Wizard button label 'Create your will' -> 'Build Your Will'.

Regression fix (A3):
- When an heir was added to an already-expired will via the wizard, the
  automatic invalidation no longer triggered. Root cause: the inner
  check_will() after build_will() raised WillExpiredException and the handler
  returned (False, None), which never invalidated.
- Auto-opening the invalidation tx window from the closing wizard proved
  unreliable (the window ended up behind the main wallet on some window
  managers; a re-check loop could ask to invalidate repeatedly before the tx
  reached the mempool). The robust fix: close the wizard and show a clear
  instruction popup guiding the user to run 'Tools -> Invalidate' and then
  press 'Check' to finish the will. Reasoning documented in the code.

Version bumped to 0.3.9 (manifest.json, __init__.py, plugin_base.py, VERSION).
CHANGELOG entry #15 updated. Verified: py_compile OK, ruff clean (no new
errors), full test suite 239 passed.
2026-06-28 23:02:11 -04:00
donkey-ai
ce3a463a5e docs(bal): rewrite CHECK ALIVE help text (DATA/RAW modes) + fix two typos (v0.3.8)
Rewrite the CHECK ALIVE help popup (ThresholdTimeWidget.help_text) to explain
both modes, keeping the <b>CHECK ALIVE</b> title bold:
- DATA mode: set the check-alive date; on wallet open, if the date has passed
  the plugin asks whether to postpone the inheritance.
- RAW mode: when less than this time is missing, ask to invalidate; failing to
  invalidate delivers the transactions to the heirs; kept the d/y suffix help.

Fix two typos within this help text: 'less then' -> 'less than',
'currrent' -> 'current'.

Bump version to 0.3.8 across the four version files. CHANGELOG entry #14.
2026-06-28 23:02:03 -04:00
donkey-ai
50129d3b77 feat(bal): export calendar .ics as separate reminder events (v0.3.7)
- open_or_save_calendar(): emit one VEVENT per reminder instead of a single
  event with VALARM blocks. Dates come from compute_reminder_offsets(), spread
  across the check-alive period, with the LAST event one day before the
  locktime. Unique UID per event (bal-<wallet>-<offset>d) and numbered
  summaries ' (reminder N/total)'.
- Removed the now-unused create_alarms() method (no more VALARM).
- Default save filename changed from will_event.ics to BAL_will_event.ics.
- common.py: added timedelta to the datetime import.
- plugin_base.py: updated the NUM_REMINDERS comment for the new behaviour.
- tests: replaced the VALARM E1 test with test_e1_build_separate_events_for_giovanna.
- Bumped version to 0.3.7 (4 files) and added CHANGELOG entry #13.

Tests: 239 passed. ruff: no new errors.
2026-06-28 23:01:54 -04:00
donkey-ai
c963f61424 docs(bal): translate refactoring docs to English and rename two files
- CHANGELOG_REFACTOR.md: translated sections 1-16 (header + §1-§16) from
  Italian to English; sections 17-18 were already English and left untouched.
  All code blocks, commit hashes, tables, names, versions and structure kept.
- DIAGNOSI_GUI.md -> GUI_DIAGNOSIS.md: renamed and fully translated to
  English (title included), preserving code, line refs, emojis and tables.
- REPORT_NETWORKING_PARALLELO.md -> PARALLEL_NETWORKING_REPORT.md: renamed
  only (content was already in English).
- CHANGELOG.md: added entry #12 documenting this task.

Documentation-only change; no plugin code touched (zip-first not applicable).
2026-06-28 23:01:47 -04:00
donkey-ai
dd2e160a17 fix(bal): black bar on cancelled invalidation + editable fee follows dates (v0.3.6)
Two GUI fixes bundled together (v0.3.6):

- Fix #10 (black bar): in dialogs.py on_success_phase1, the cancelled
  invalidation branch no longer calls the blocking self.wait(3)+self.close().
  wait() uses time.sleep() and runs in the GUI thread, freezing the UI so the
  'Building Will' dialog could not repaint the area it just resized, leaving a
  black rectangle at the bottom. It now shows 'Aborted' plus the existing
  non-blocking Close button (_add_close_button), consistent with the other
  end-of-flow branches.

- Fix #11 (editable fee): in widgets.py WillSettingsWidget.apply_editable_dates,
  the fee widget (baltx_fees) now follows the same 'Editable dates' setting as
  the locktime/threshold widgets (set_read_only(not editable_dates)) instead of
  being forced read-only. With the setting ticked, dates AND fee are editable
  outside the wizard; unticked, all three are read-only. Default stays OFF.

Version bumped 0.3.5 -> 0.3.6 (manifest.json, __init__.py, plugin_base.py,
VERSION). CHANGELOG: entries #10 and #11. ruff clean; full suite 239 passed.
2026-06-28 23:01:38 -04:00