use std::path::{Path, PathBuf};
use supercode_harness::audit::{audit_dir, Corpus, Coverage};
fn fixture(name: &str) -> PathBuf {
Path::new(env!("CARGO_MANIFEST_DIR"))
.join("tests/fixtures")
.join(name)
}
fn audit_fixture_set(
tag: &str,
files: &[&str],
corpus: Corpus,
) -> supercode_harness::audit::Report {
let tmp = std::env::temp_dir().join(format!("sc-p6-audit-gate-{}-{}", std::process::id(), tag));
std::fs::create_dir_all(&tmp).unwrap();
for name in files {
std::fs::copy(fixture(name), tmp.join(name)).unwrap();
}
let report = audit_dir(&tmp, corpus, None);
std::fs::remove_dir_all(&tmp).ok();
report
}
fn unmodeled_count(report: &supercode_harness::audit::Report) -> u64 {
let mut n: u64 = 0;
for (cov, tally) in report.records.values() {
if *cov == Coverage::Unmodeled {
n += tally.count;
}
}
for ((_tag, cov), count) in &report.blocks {
if *cov == Coverage::Unmodeled {
n += count;
}
}
n
}
fn dropped_count(report: &supercode_harness::audit::Report) -> u64 {
let mut n: u64 = 0;
for (cov, tally) in report.records.values() {
if *cov == Coverage::Dropped {
n += tally.count;
}
}
for ((_tag, cov), count) in &report.blocks {
if *cov == Coverage::Dropped {
n += count;
}
}
n
}
fn print_breakdown(tag: &str, report: &supercode_harness::audit::Report) {
println!(
"\n=== P6 audit gate: {tag} === files={} lines={} parse_errors={} unmodeled={} dropped={}",
report.files,
report.lines,
report.parse_errors,
unmodeled_count(report),
dropped_count(report),
);
for (key, (cov, tally)) in &report.records {
if matches!(cov, Coverage::Dropped | Coverage::Unmodeled) {
println!(" {cov:?} record {key} x{}", tally.count);
}
}
for ((tag2, cov), count) in &report.blocks {
if matches!(cov, Coverage::Dropped | Coverage::Unmodeled) {
println!(" {cov:?} block {tag2} x{count}");
}
}
}
#[test]
fn codex_real_corpus_audit_thresholds() {
const REAL_CORPUS_FILES: [&str; 3] = [
"codex_real_rollout_compacted.jsonl",
"codex_real_rollout_tools.jsonl",
"codex_real_rollout_patch.jsonl",
];
let report = audit_fixture_set("codex", &REAL_CORPUS_FILES, Corpus::Codex);
print_breakdown("codex real corpus", &report);
let unmodeled = unmodeled_count(&report);
let dropped = dropped_count(&report);
assert_eq!(
unmodeled, 0,
"Codex real-corpus Unmodeled regressed above the pinned floor of 0 — a record type \
these 3 genuine codex-engine sessions used to fully model is now falling into the \
Unknown bucket: {report:#?}"
);
assert!(
dropped <= 29,
"Codex real-corpus Dropped count regressed above the pinned ceiling of 29 (got \
{dropped}) — something that used to be Normalized/Retained is now being silently \
given up on: {report:#?}"
);
}
#[test]
fn codex_audit_reports_review_entry_provenance_as_retained() {
let report = audit_fixture_set(
"codex-review-provenance",
&["codex_session_eventmsg.jsonl"],
Corpus::Codex,
);
let (coverage, tally) = report
.records
.get("event_msg/entered_review_mode")
.expect("the real-shape fixture carries entered_review_mode");
assert_eq!(
*coverage,
Coverage::Retained,
"the portable provenance envelope keeps the exact review target/hint record"
);
assert_eq!(tally.count, 1);
}
#[test]
fn pi_real_corpus_audit_thresholds() {
const REAL_CORPUS_FILES: [&str; 5] = [
"pi_real_corpus_plain_text.jsonl",
"pi_real_corpus_thinking.jsonl",
"pi_real_corpus_tool_call.jsonl",
"pi_real_corpus_error_retry.jsonl",
"pi_real_corpus_aborted.jsonl",
];
let report = audit_fixture_set("pi", &REAL_CORPUS_FILES, Corpus::Pi);
print_breakdown("pi real corpus", &report);
let unmodeled = unmodeled_count(&report);
let dropped = dropped_count(&report);
assert_eq!(
unmodeled, 0,
"Pi real-corpus Unmodeled regressed above the pinned floor of 0: {report:#?}"
);
assert_eq!(
dropped, 0,
"Pi real-corpus Dropped count regressed above the pinned ceiling of 0 (got {dropped}) \
— this fixture set had zero Dropped content at pin time: {report:#?}"
);
}
#[test]
fn opencode_sqlite_fixture_audit_thresholds() {
let dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("tests/fixtures/opencode_fixture");
let report = audit_dir(&dir, Corpus::OpenCode, None);
print_breakdown("opencode sqlite fixture", &report);
let unmodeled = unmodeled_count(&report);
let dropped = dropped_count(&report);
assert_eq!(
unmodeled, 0,
"OpenCode SQLite-fixture Unmodeled regressed above the pinned floor of 0: {report:#?}"
);
assert!(
dropped <= 2,
"OpenCode SQLite-fixture Dropped count regressed above the pinned ceiling of 2 (got \
{dropped}) — the by-design residue (https: file part, ignored:true text part) grew or \
something new started being silently dropped: {report:#?}"
);
}
#[test]
fn claude_and_codex_schema_fixtures_audit_thresholds() {
let fixtures: [(&str, Corpus); 4] = [
("claude_code_session.jsonl", Corpus::ClaudeCode),
("codex_session.jsonl", Corpus::Codex),
("codex_session_eventmsg.jsonl", Corpus::Codex),
("codex_session_eventmsg_precompact.jsonl", Corpus::Codex),
];
let mut total_unmodeled: u64 = 0;
let mut total_dropped: u64 = 0;
for (file, corpus) in fixtures {
let report = audit_fixture_set(
&format!("schema-{}", file.replace('.', "_")),
&[file],
corpus,
);
print_breakdown(file, &report);
total_unmodeled += unmodeled_count(&report);
total_dropped += dropped_count(&report);
}
assert_eq!(
total_unmodeled, 0,
"ClaudeCode/Codex schema-fixture Unmodeled regressed above the pinned floor of 0 \
(aggregate over all 4 fixtures)"
);
assert!(
total_dropped <= 22,
"ClaudeCode/Codex schema-fixture Dropped count regressed above the pinned ceiling of 22 \
(aggregate over all 4 fixtures, got {total_dropped})"
);
}