1. separate pacman-specific types (apps/pacman/types.py) from general types (models.py);
2. split CLI into cli/main.py dispatcher with compile, archive, list_installed, download subcommands;
3. move cache_db into apps/cache/db.py, pacman client/db into apps/pacman/;
4. add pacman_manager_t (apps/pacman/manager.py) implementing manager_t ABC;
5. move resolver into resolver/ with general.py (pure python) and solv.py (libsolv);
6. add solv_types.py for solv-internal types, separate from general models;
7. change package_index_t.packages to 2-level dict (name -> version -> pkg);
8. add .add() and .iter_all() helpers to package_index_t and solv_index_t;
9. fix solver: SELECTION_NAME only, SOLVER_SOLVABLE for exact name+version match;
10. default expand_groups=False to prevent group bleed-through;
11. add dedupe=True mode to cache_db.load_indices via SQL GROUP BY;
12. fix provides hijack: vim==X no longer resolves to gvim;
13. add comprehensive unit tests: test_cli, test_compile, test_db, test_models, test_pacman, test_resolver, test_solv_backend, test_integration;
14. add test fixtures in tests/res/ with core/extra .db snapshots;
15. add libsolv experiments in tests/experiments/libsolv/;