logmv 0.7.1

Logged atomic file move and trash with an append-only JSON-Lines audit trail
Documentation
// Regression guard: tracked Rust source must carry no em dash or disallowed
// project-specific token.
//
// Two needles, both escaped/constructed so this file's own source stays
// clean of either literal (this file is itself tracked and published, though
// it is not in SCANNED_FILES, so the guard below does not scan it):
// - the em dash (U+2014), referenced only via `'\u{2014}'`
// - the disallowed project-specific token, constructed via an escape so this
//   published file holds no literal copy of the token; do not inline it as a
//   literal, or the banned token re-enters published source

const SCANNED_FILES: [&str; 3] = ["src/lib.rs", "src/main.rs", "tests/integration.rs"];

#[test]
fn tracked_sources_have_no_em_dash_or_tool_token() {
    let manifest_dir = env!("CARGO_MANIFEST_DIR");
    // Built so the literal token substring never appears in this source file:
    let needle = "\u{70}onytail";

    for rel_path in SCANNED_FILES {
        let path = std::path::Path::new(manifest_dir).join(rel_path);
        let content = std::fs::read_to_string(&path)
            .unwrap_or_else(|e| panic!("failed to read {}: {e}", path.display()));

        assert!(
            !content.contains('\u{2014}'),
            "{} contains an em dash (U+2014); use standard punctuation instead",
            path.display()
        );

        assert!(
            !content.to_ascii_lowercase().contains(needle),
            "{} contains a disallowed project-specific token; remove it",
            path.display()
        );
    }
}