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.
This commit is contained in:
@@ -30,6 +30,14 @@ from .plugin_base import BalPlugin
|
||||
# block the UI.
|
||||
DEFAULT_TIMEOUT = 5
|
||||
|
||||
# Single, shared wall-clock deadline (seconds) for ALL network waits the user
|
||||
# can watch in the GUI: the parallel broadcast (pushtxs), the parallel check
|
||||
# (searchtx), the will-executor ping and the will-executor list download.
|
||||
# Having ONE constant (instead of several scattered 30s/45s values) keeps the
|
||||
# experience consistent and makes it trivial to tune. Requested by the user
|
||||
# (reduced from 30s/45s to 20s, unified into one variable).
|
||||
NETWORK_DEADLINE = 20
|
||||
|
||||
# Broadcast (pushtxs) timeouts. Broadcasting a will is important, so we keep a
|
||||
# couple of quick retries to survive a transient hiccup -- but far from the old
|
||||
# 10s x 10 retries + 30s sleeps (~140s) that froze the wizard on a dead server.
|
||||
@@ -43,7 +51,8 @@ PUSH_RETRY_SLEEP = 1
|
||||
# Global wall-clock deadline (seconds) for the whole parallel broadcast. Once
|
||||
# it elapses we stop waiting for the still-pending servers, mark them as
|
||||
# "Timeout" and let the wizard proceed instead of appearing stuck.
|
||||
PUSH_GLOBAL_DEADLINE = 30
|
||||
# Derived from the single shared NETWORK_DEADLINE constant above.
|
||||
PUSH_GLOBAL_DEADLINE = NETWORK_DEADLINE
|
||||
|
||||
# Check (searchtx) timeouts. Used when the user presses "Check" to verify that
|
||||
# each will-executor still holds the transaction. Like the broadcast path, the
|
||||
@@ -53,7 +62,8 @@ PUSH_GLOBAL_DEADLINE = 30
|
||||
CHECK_TIMEOUT = 8
|
||||
CHECK_MAX_RETRIES = 1
|
||||
CHECK_RETRY_SLEEP = 1
|
||||
CHECK_GLOBAL_DEADLINE = 30
|
||||
# Derived from the single shared NETWORK_DEADLINE constant above.
|
||||
CHECK_GLOBAL_DEADLINE = NETWORK_DEADLINE
|
||||
|
||||
_logger = get_logger(__name__)
|
||||
|
||||
@@ -68,6 +78,7 @@ class Willexecutors:
|
||||
# importing module-level names. Single source of truth: the module
|
||||
# constants defined above.
|
||||
DEFAULT_TIMEOUT = DEFAULT_TIMEOUT
|
||||
NETWORK_DEADLINE = NETWORK_DEADLINE
|
||||
PUSH_TIMEOUT = PUSH_TIMEOUT
|
||||
PUSH_MAX_RETRIES = PUSH_MAX_RETRIES
|
||||
PUSH_RETRY_SLEEP = PUSH_RETRY_SLEEP
|
||||
|
||||
Reference in New Issue
Block a user