- Split monolithic compact_sets.py into modular src/ directory - Add graph caching (pickle + JSON) with --cache-dir option - Add --output-dir, --rebuild-cache, --no-cache CLI options - Default seed is now None (random) instead of 42 - Add .gitignore entries for cache/ and output/
- New compact_sets.py with Pitch, Chord, HarmonicSpace classes - Voice leading graph with change parameter (instead of symdiff) - CLI: --change, --dims, --chord-size, --max-path, --seed - Tests for core functionality - .gitignore for Python/pytest