Library no longer prints to stderr:
- Replace every eprintln! with log::warn! (lib: user_data, http; bin:
parsing, output, commands); initialize env_logger in main with a
warn-level default so output is unchanged unless RUST_LOG is set
- Warn on missing/non-numeric "t" time fields instead of silently
coercing them to 0.0; suppress the per-car NotFound warning (most
cars legitimately have no timing file), keep warnings for real I/O
errors
Ownership and clone cleanup:
- CarCounts no longer duplicates the car database: drop the car_list
field and build car_map by consuming car_list (each Car stored once);
iterate car_map.values() where the list was previously used
- run_analysis takes MyCarsData by value: owned moves into the parse
Arc, owned_configs/copy_count move into CarCounts; only the three
commands that need owned/wishlist afterwards retain their own copy
- is_final_build checks the digits directly (no per-call String
allocation) and treats malformed configs as non-final so they
surface in improve.csv; owned_final_configs becomes a borrowed
rid-to-configs map so the target-exclusion check allocates nothing
- Normalize sum arithmetic to u8 in normalize_to_final_build
Docs and structure:
- Document the first-seen-wins tie-breaking in compute_ideal_wishlist
and the non-final/non-best coverage gap in write_trash_csv
- Extract compare_by_rq_config_brand_name shared by compare_records
and the remove.csv sort; drop the unused _output_dir parameter from
run_track; add a retry_delay helper de-duplicating the three HTTP
backoff sites; rename the shadowed `entry` binding to config_data