release 1.21.0: amount ladder classic + max-search

Generic currency ladder (check_amount_ladder.sh; goa-ladder shim).
Default remains classic 23-rung withdraw/pay. New max-ladder mode
hunts highest withdrawable amount with alt_unit_names in logs/report.

Fixes force-select extract (external ladder_extract_rpubs.py; no
stdin return SyntaxError), soft CEILING_REJECT on mint 5110/P0001,
force-select 409 tries next rpub, pay SKIP_BALANCE when over available,
and crash-proof report formatting. Verified live GOA: force-select 200,
confirm 204, OK_BANK, report finishes without Traceback.
This commit is contained in:
Hernâni Marques 2026-07-19 14:15:56 +02:00
parent c477a3aec8
commit 6185f89fa6
No known key found for this signature in database
10 changed files with 1952 additions and 1421 deletions

View file

@ -70,11 +70,15 @@ path = sys.argv[2] if len(sys.argv) > 2 else ""
alt = {}
if path:
try:
alt = json.load(open(path))
_loaded = json.load(open(path))
if isinstance(_loaded, dict):
alt = {str(k): str(v) for k, v in _loaded.items()}
except Exception:
alt = {}
if not alt:
if not isinstance(alt, dict) or not alt:
alt = {"0": "GOA"}
elif "0" not in alt:
alt["0"] = "GOA"
def parse(s):
if ":" in s: