- Add compile-time const assertions (const _: () block, stable on 1.95)
for MAX_RQ, MIN_VALID_TIME, TIME_TOLERANCE, TEST_BOWL_FACTOR, and
CONCURRENCY_LIMIT so bad constant edits fail the build; remove the
stale comment that incorrectly claimed compile-time validation existed
- Add regression test for the qualifying-count fix: car with 3 configs
where only 2 meet min_count and 2 copies suffice to cover the
qualifying ones (previously phantom-wishlisted via overcounting)
- Use owned String keys in qualifying_per_guid to decouple the map from
guid_to_rid's allocations
- Clarify write_improve_csv doc (exactly one row per car), restore the
remove.csv test section header, add trailing newline to .gitignore
- Count only configs meeting min_count as qualifying in the wishlist
copy-coverage check (previously ALL guid_to_rid entries inflated the
denominator, producing phantom wishlist entries), pre-computed once
per guid instead of per record
- Update stale write_improve_csv doc to match single-best-target
behavior including cross-copy exclusion
- Borrow owned configs for the trash CSV join instead of cloning the Vec
- Build owned_final_configs via filter_map + flat_map without the
throwaway intermediate Vec
- Remove runtime assertions on literal constants (clippy
assertions_on_constants) and replace a redundant closure with the
function reference (clippy redundant_closure)
- Apply rustfmt across the crate and drop a duplicated test-section header
- Remove once_cell and serde dependencies; use std::sync::LazyLock
and manual serde_json::Value parsing instead
- Add wishlist support: load wishlist from my_cars.json, prefix
missing cars with '+' in missing mode, add 'wishlist' command
to show stale wishlist entries (prefixed with '-')
- Replace unwrap()/expect() with graceful eprintln warnings and
early returns throughout (get_car_list, parse_car_times, etc.)
- Scope all Mutex locks tightly to avoid holding during I/O
(print_best_times, print_best_cars, print_trash, print_wishlist_stale)
- Replace custom split_prefix_postfix with str::split_once
- Pass owned-car set into parse_all_times/parse_car_times via
Arc<HashSet> instead of reading file per task
- Consolidate my_cars.json loading into single load_my_cars_data()
returning both owned and wishlist sets
- Add .gitignore and Cargo.lock to version control
- Report task failures in parse_all_times join loop