1. move models.py into apps/specs/models.py, add compiled_entry_t
pydantic model for parsed requirements entries;
2. add apps/specs/utils.py with parse_compiled() and parse_reference()
as single source for requirements file parsing;
3. refactor cli/diff.py: remove local parse_compiled, use specs/utils,
compute_diff takes dict[str, compiled_entry_t];
4. refactor cli/download.py: remove download_requirements_t class,
use parse_compiled from specs/utils;
5. refactor cli/compile.py: compile_t class encapsulating all logic,
-p/--package with action=append, --mode (requirements/needed/full),
-o/--output, --generate-hashes default true with BooleanOptionalAction,
build_filter computed once, transitive_deps minus pinned;
6. update all imports across apps/, cli/, resolver/, tests/;