- scripts/stash_inventory.py: fix BaseItem["dimensions"] being a list
not a dict — use dims[0] for height so the claimed-slot dedup works
and multi-slot items (Large/Grand Charms, 2h weapons) are no longer
double-counted
- scripts/make_stash_csv.py: new — convert stash_inventory.json to a
deduplicated stash_list.csv (name, page, stats) for trade reference
- stash_list.csv: current stash export (71 unique items)
- config/params.ini: add stash_scan_interval (default 0/off)
- src/config.py: parse stash_scan_interval from [general]
- src/bot.py: after stash+transmute, trigger scan every N runs when
stash_scan_interval > 0
- src/inventory/personal.py: reset transfer_failures per stash tab so
each tab gets its own 2-failure budget before moving to the next
- tools/testbed.py: PASS/FAIL fix for `stash all` — equipped-area cols
(≥4) correctly left in inventory is a PASS not a FAIL (Bug 19 guard)
- CLAUDE.md: document stash scanner scripts in File Quick Reference
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>