Sorter: fuzzysort files into the miniset-aligned library via hardlinks
- docs/SORTING.md: target hierarchy (game > faction group > faction >
subfaction > class > unit, miniset.net naming), canonical-name policy,
hardlink policy, unzip outlook
- data/library_catalog.json: canonical catalog (name/aliases/subfaction/class)
- dlphelper/sorter.py: inspect (zip via zipfile, 7z via 7z l), keyword
classification incl. inner-name voting for hash-named archives, fuzzy
matching (difflib), plan/apply split, hardlink preferred with copy
fallback, append-only audit, existing targets skipped, run artifacts
filtered, HTML-page detection for bad downloads
- sorter.py CLI (plan by default, --apply to act)