ZubiSniffer Packet Cap + build repair
=====================================

Fixed build packaging:
- Restored tools/build/preflight.py (the previous ZIP referenced it but did not contain it).
- BUILD_EXE.bat now fails with a clear message if a future package is incomplete.
- preflight.py writes build/requirements.txt from pyproject.toml and exposes the app version.

Manual list classification:
- Blacklist
- Enemylist
- Friendlist
- Randomlist
- Searchlist
- Explicit/manual save only; no captured IP is auto-saved.
- Packet Cap and Live Session both expose Save / Classify IP.
- Persistent SQLite list_name column with safe migration; old saved entries become Friendlist.
- Packet Cap, Live Session and IP Vault use list-specific row styling.
- Any manually saved list entry triggers saved-IP connect/disconnect audio/toasts.
- Toast wording: A USER IP HAS BEEN DETECTED / A USER IP HAS DISCONNECTED.
- Toast includes the saved list name.

Changed / added files:
- BUILD_EXE.bat
- tools/build/preflight.py
- src/session_sniffer/zubi/ip_lists.py
- src/session_sniffer/zubi/vault_store.py
- src/session_sniffer/guis/zubi_ip_vault.py
- src/session_sniffer/guis/zubi_packet_capture.py
- src/session_sniffer/guis/tables_context_menu_mixin.py
- src/session_sniffer/guis/zubi_session_alerts.py
- src/session_sniffer/rendering_core/session_table_renderer.py
- tests/test_usernames_and_vault.py
- tests/test_packet_capture_ui.py
- STEP-BY-STEP.txt
- PACKET-CAPTURE-UPDATE.txt

Additional build blockers repaired during verification:
- src/session_sniffer/capture/exceptions.py
- src/session_sniffer/models/settings_ini_model.py
- src/session_sniffer/networking/hotspot.py
- src/session_sniffer/webserver/server.py
  Fixed invalid multi-exception syntax so BUILD_EXE.bat step [5/8] compile checks can pass.

Verification performed on this package:
- 22 focused tests passed.
- python -m compileall -q src packaging tools passed.
- tools/build/preflight.py requirement generation passed.
- tools/build/preflight.py version read passed (1.0.0).
- tools/build/preflight.py full check passed.

Note: the final Windows PyInstaller/Inno Setup EXE build itself requires Windows; this package repairs the source/build path so BUILD_EXE.bat can perform that Windows-only stage.
