#![allow(clippy::too_many_lines)]
//! Regression guards for the 2026-05-28 quality sweep.
//!
//! These tests fail the build if a previously-fixed systemic defect is
//! reintroduced. Each guard maps to a finding from the sweep:
//!
//! - `DOCDRIFT-2`: stale "no implementation yet" status reappearing in
//!   `CLAUDE.md` after M0-M8 shipped.
//! - `DOCKER-2`: the standalone container booting ephemeral (silent data loss
//!   on restart) because `--data-dir` was dropped from the entrypoint.
//!
//! The "silent-wrong-results" cluster (profiles referencing unimplemented
//! aggregations) is guarded by unit tests in `ranking::registry`
//! (`register_rejects_ratio_aggregation_in_gate` et al.) and the `ThirtyDays`
//! window by `signals::warm` tests — those live next to the code they protect.

use std::{fs, path::PathBuf};

/// Crate root (`tidal/`), resolved at compile time.
fn crate_root() -> PathBuf {
    PathBuf::from(env!("CARGO_MANIFEST_DIR"))
}

/// Read a crate-relative file, panicking with a clear message if absent.
fn read(rel: &str) -> String {
    let path = crate_root().join(rel);
    fs::read_to_string(&path).unwrap_or_else(|e| panic!("cannot read {}: {e}", path.display()))
}

/// DOCDRIFT-2: the crate must not re-advertise itself as unimplemented now that
/// M0-M8 has shipped (see CHANGELOG.md).
#[test]
fn claude_md_does_not_claim_unimplemented() {
    let claude_md = read("CLAUDE.md");
    for stale in ["No implementation yet", "Vision and specification phase"] {
        assert!(
            !claude_md.contains(stale),
            "tidal/CLAUDE.md reintroduced the stale status phrase {stale:?}; \
             the crate has shipped M0-M8 (see CHANGELOG.md)."
        );
    }
}

/// DOCKER-2: the standalone image must boot with a persistent `--data-dir` and
/// declare the volume, so a restart never silently loses durable data.
#[test]
fn standalone_dockerfile_is_persistent() {
    let dockerfile = read("docker/standalone/Dockerfile");
    assert!(
        dockerfile.contains("--data-dir"),
        "docker/standalone/Dockerfile dropped `--data-dir`; the container would boot ephemeral \
         and lose all durable data on restart (DOCKER-2)."
    );
    assert!(
        dockerfile.contains("VOLUME"),
        "docker/standalone/Dockerfile dropped its VOLUME declaration for the data directory."
    );
}
