mirror of
https://github.com/bdbrown4/peltier.io.git
synced 2026-11-07 19:08:27 +00:00
Closes the CI-reachable slice of the Phase 1 infra gaps: - trust-layer job: cargo test + clippy -D warnings + fmt - target-gates-no-net: fetches pinned targets (new targets/fetch.sh), regenerates + verifies corpora, runs 'just gates tokei' mechanically, and executes the bench workload inside a --network=none container (SPEC 3.1/10 no-net requirement) - runner-calibration (informational): A/A + injection harness measures the shared runner's noise floor per run, evidence uploaded as an artifact — environments are judged empirically, not assumed - perf-probe (informational): reports which perf event sources work docs/infra.md maps each remaining hardware requirement (pinned cores, governor/SMT control, separate-uid trust layer) to the bench-metal self-hosted runner setup a human can complete in ~15 min. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EcKPWQ3MQD4NdEHwar96u2
75 lines
2.1 KiB
Rust
75 lines
2.1 KiB
Rust
//! Equivalence gates (SPEC §3.2) and corpus hash-pinning.
|
|
//!
|
|
//! The gate *sequencing* (upstream tests → golden replay → differential
|
|
//! fuzz → sanitizers) is orchestrated per-target; this crate owns the
|
|
//! pieces that must be trustworthy regardless of target: the pin
|
|
//! verifier that refuses to run on a tampered corpus, and the
|
|
//! per-target equivalence policy parser (byte-identical unless a target
|
|
//! declares an explicit FP tolerance).
|
|
|
|
pub mod orchestrate;
|
|
pub mod pin;
|
|
pub mod policy;
|
|
pub mod target;
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
/// Outcome of one gate layer. `Skipped` is only legal where the SPEC
|
|
/// allows it (e.g. TSan when no concurrency primitives changed) and the
|
|
/// reason is always recorded.
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub enum GateOutcome {
|
|
Passed,
|
|
Failed { detail: String },
|
|
Skipped { reason: String },
|
|
}
|
|
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub enum GateLayer {
|
|
UpstreamTests,
|
|
GoldenReplay,
|
|
DifferentialFuzz,
|
|
Sanitizers,
|
|
}
|
|
|
|
/// All layers must pass; any failure is an auto-reject (SPEC §8).
|
|
pub fn all_passed(results: &[(GateLayer, GateOutcome)]) -> bool {
|
|
results
|
|
.iter()
|
|
.all(|(_, o)| matches!(o, GateOutcome::Passed | GateOutcome::Skipped { .. }))
|
|
&& results
|
|
.iter()
|
|
.any(|(_, o)| matches!(o, GateOutcome::Passed))
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn any_failure_rejects() {
|
|
let results = vec![
|
|
(GateLayer::UpstreamTests, GateOutcome::Passed),
|
|
(
|
|
GateLayer::GoldenReplay,
|
|
GateOutcome::Failed {
|
|
detail: "stdout diverged".into(),
|
|
},
|
|
),
|
|
];
|
|
assert!(!all_passed(&results));
|
|
}
|
|
|
|
#[test]
|
|
fn all_skipped_is_not_a_pass() {
|
|
let results = vec![(
|
|
GateLayer::Sanitizers,
|
|
GateOutcome::Skipped {
|
|
reason: "n/a".into(),
|
|
},
|
|
)];
|
|
assert!(!all_passed(&results));
|
|
}
|
|
}
|