Bugs: - extract: pick the OUTERMOST archive suffix (sfx.first(), not last()) so x.tar.gz uses the gz->tar path - gwshop: truncate the error snippet by chars, not bytes (UTF-8 panic) - sorter: py_stem_split now matches pathlib (0 < i < len-1) so a trailing dot is not treated as a suffix - sorter::apply_plan: a per-file link/copy/mkdir failure is logged and skipped instead of aborting the whole apply (never-abort contract) - orchestrate/state: add State::mark_logged and use it for every per-URL record so a state-save error cannot abort a run Cleanups: - remove dead is_archive_name and unused SourceInfo.manifest field - mark kept-but-unused capabilities with allow(dead_code) + rationale - let-chains / is_ok_and / is_multiple_of / replace([..]) / sort_by_key and other idiomatic simplifications across modules - difflib: SequenceMatcher owns its char vecs (bit-identical parity kept) - --only now enforces gofile|0807 via value_parser Docs: - SORTING.md: drop phantom sorter_plan.jsonl, os.link -> std::fs::hard_link, zipfile -> the zip crate - README: add --since to the dlp synopsis, clarify --subs/--assume-done - .gitignore: ignore catalogue/sorter/_logs/subscriptions run artifacts Validation: cargo fmt --check clean, cargo clippy --all-targets 0 warnings, cargo test 87 passed / 0 failed.
30 lines
435 B
Plaintext
30 lines
435 B
Plaintext
/target
|
|
|
|
# Algolia credentials (search-only key, still never commit)
|
|
algolia.json
|
|
gwshop_raw.json
|
|
|
|
# Never commit credentials
|
|
*.token
|
|
.env
|
|
|
|
# Run outputs (if OUT_DIR points into the repo)
|
|
thread/
|
|
downloads/
|
|
extracted/
|
|
export.json
|
|
export.html
|
|
state.json
|
|
state.json.tmp
|
|
failed_urls.txt
|
|
manifest.jsonl
|
|
catalogue.md
|
|
catalogue.jsonl
|
|
catalogue_moves.jsonl
|
|
sorter_applied.jsonl
|
|
sorter_low_confidence.txt
|
|
subscriptions.json
|
|
*.bak
|
|
_logs/
|
|
*.log
|