tritium-cli 1.1.0-rc.0

The `tritium` command-line tool: inspect GGUF files and list registered backends.
use std::fs;
use std::path::PathBuf;
use std::process::Command;

fn tritium_bin() -> PathBuf {
    PathBuf::from(env!("CARGO_BIN_EXE_tritium"))
}

#[test]
fn release_digest_is_exact_and_rejects_symlinks() {
    let root = std::env::temp_dir().join(format!("tritium-release-{}", std::process::id()));
    let _ = fs::remove_dir_all(&root);
    fs::create_dir_all(&root).unwrap();
    let artifact = root.join("artifact.bin");
    fs::write(&artifact, b"tritium release\n").unwrap();

    let output = Command::new(tritium_bin())
        .args(["release", "digest"])
        .arg(&artifact)
        .output()
        .unwrap();
    assert!(
        output.status.success(),
        "{}",
        String::from_utf8_lossy(&output.stderr)
    );
    let value: serde_json::Value = serde_json::from_slice(&output.stdout).unwrap();
    assert_eq!(value["schema"], "tritium.file-identity.v1");
    assert_eq!(value["bytes"], 16);
    assert_eq!(
        value["sha256"],
        "aa5c8b507e381b1da1c6f63e1153ac0bd768d9d77ad4b0be7044aba84b89e741"
    );
    assert_eq!(
        value["blake3"],
        "46b6f12a77c83c6f92a80c903fa37743cbcda9cd08f2498f3e4e132da77c1db9"
    );

    #[cfg(unix)]
    {
        std::os::unix::fs::symlink(&artifact, root.join("link.bin")).unwrap();
        let rejected = Command::new(tritium_bin())
            .args(["release", "digest"])
            .arg(root.join("link.bin"))
            .output()
            .unwrap();
        assert!(!rejected.status.success());
        assert!(String::from_utf8_lossy(&rejected.stderr).contains("ordinary file"));
    }
    fs::remove_dir_all(root).unwrap();
}