- Add clear_cache() called once in on_mount
- ensure_cache_dir() no longer deletes existing files
- This fixes the issue where only the last target's cache survived
- Add widget.refresh() calls to force UI updates
- Replace reactive attributes with direct widget updates in set_target
- Delay _select_target by 0.1s after pop_screen to ensure DOM is stable
- Remove summary.refresh() calls that interfere with direct updates
- Add dock: top and fixed height for toolbar buttons
- DataTable now fills remaining space with height: 1fr
- Add borders and padding for better visual separation
- Scan sequential with asyncio.to_thread for proper Textual integration
- Use push_screen/pop_screen for package/CVE lists (no more mount/remove)
- Sidebar now shows 'APT X CVE X' with right-aligned indicators
- Loader uses black circles (⚫) for pending tasks
- Removed unused package_table.py and cve_table.py
- Replace ThreadPoolExecutor with asyncio.gather + asyncio.to_thread
- Use @work async worker for proper Textual integration
- Add table.focus() after mount to ensure button events are received
- Remove all call_from_thread calls (now in main thread)
- Use ThreadPoolExecutor for parallel scanning of all targets
- Fix PackageTable and CVETable crash by initializing columns in compose()
- Force widget refresh after scan completion to update counters
- Remove dh-python and pybuild from debian/rules
- Remove python3-all from build deps
- Manual install of scripts and full_updater module
- Update Depends to use python3 directly