From 3494ca3dc410f9a17a980c706e2fda390af3469d Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Wed, 9 Sep 2026 02:19:19 +0100 Subject: [PATCH 1/2] fix(ci): pin standards reusables to main HEAD 8f2ee508 This repo's standards reusable pins are re-pointed at the standards default-branch HEAD, resolved live at sweep time. The prior refs are recorded in the verification line below. Three kinds of drift are repaired together and the body does not claim which one this repo had: an UNREACHABLE sha kills the run at workflow STARTUP, so GitHub reports no check at all rather than a failing one and the gate disappears instead of going red; a FLOATING ref (@main) is unpinned supply chain; a merely STALE but reachable sha silently reintroduces every bug fixed since it. files=6 pins=6 perms=0 permlines=0 from=092dedada188f56c5915f74a5fd40aac093742c3,5b1d00229e5e8c0c0fbfedc7e80f37ea50f49236 target=8f2ee508 Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_0178nN4Nm3neFRy5K9StZKnB --- .github/workflows/governance.yml | 2 +- .github/workflows/hypatia-scan.yml | 2 +- .github/workflows/mirror.yml | 2 +- .github/workflows/rust-ci.yml | 2 +- .github/workflows/scorecard.yml | 2 +- .github/workflows/secret-scanner.yml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/governance.yml b/.github/workflows/governance.yml index 8c9dc16..724d9ed 100644 --- a/.github/workflows/governance.yml +++ b/.github/workflows/governance.yml @@ -17,4 +17,4 @@ permissions: jobs: governance: - uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@092dedada188f56c5915f74a5fd40aac093742c3 + uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@8f2ee50841e216cd8c192eeb68953118190f105c diff --git a/.github/workflows/hypatia-scan.yml b/.github/workflows/hypatia-scan.yml index 85f6b6e..fe0ed88 100644 --- a/.github/workflows/hypatia-scan.yml +++ b/.github/workflows/hypatia-scan.yml @@ -26,4 +26,4 @@ permissions: jobs: scan: - uses: hyperpolymath/standards/.github/workflows/hypatia-scan-reusable.yml@092dedada188f56c5915f74a5fd40aac093742c3 + uses: hyperpolymath/standards/.github/workflows/hypatia-scan-reusable.yml@8f2ee50841e216cd8c192eeb68953118190f105c diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml index 4bba10f..9a96808 100644 --- a/.github/workflows/mirror.yml +++ b/.github/workflows/mirror.yml @@ -12,5 +12,5 @@ permissions: contents: read jobs: mirror: - uses: hyperpolymath/standards/.github/workflows/mirror-reusable.yml@5b1d00229e5e8c0c0fbfedc7e80f37ea50f49236 + uses: hyperpolymath/standards/.github/workflows/mirror-reusable.yml@8f2ee50841e216cd8c192eeb68953118190f105c secrets: inherit diff --git a/.github/workflows/rust-ci.yml b/.github/workflows/rust-ci.yml index f884aa3..ba61ffe 100644 --- a/.github/workflows/rust-ci.yml +++ b/.github/workflows/rust-ci.yml @@ -15,4 +15,4 @@ permissions: contents: read jobs: rust-ci: - uses: hyperpolymath/standards/.github/workflows/rust-ci-reusable.yml@5b1d00229e5e8c0c0fbfedc7e80f37ea50f49236 + uses: hyperpolymath/standards/.github/workflows/rust-ci-reusable.yml@8f2ee50841e216cd8c192eeb68953118190f105c diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 703a5a7..7aae3c2 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -15,7 +15,7 @@ permissions: jobs: scorecard: - uses: hyperpolymath/standards/.github/workflows/scorecard-reusable.yml@092dedada188f56c5915f74a5fd40aac093742c3 + uses: hyperpolymath/standards/.github/workflows/scorecard-reusable.yml@8f2ee50841e216cd8c192eeb68953118190f105c permissions: contents: read security-events: write diff --git a/.github/workflows/secret-scanner.yml b/.github/workflows/secret-scanner.yml index 8049ee6..aad0cde 100644 --- a/.github/workflows/secret-scanner.yml +++ b/.github/workflows/secret-scanner.yml @@ -21,5 +21,5 @@ permissions: # .github/workflows/README.adoc. jobs: scan: - uses: hyperpolymath/standards/.github/workflows/secret-scanner-reusable.yml@092dedada188f56c5915f74a5fd40aac093742c3 + uses: hyperpolymath/standards/.github/workflows/secret-scanner-reusable.yml@8f2ee50841e216cd8c192eeb68953118190f105c secrets: inherit From f39a53753e44529e8d1605ccc2e97637bec1a224 Mon Sep 17 00:00:00 2001 From: "coderabbitai[bot]" <136622811+coderabbitai[bot]@users.noreply.github.com> Date: Wed, 9 Sep 2026 09:28:28 +0000 Subject: [PATCH 2/2] Apply rustfmt to Rust sources --- crates/squabble-cli/src/fetch.rs | 15 +++++-------- crates/squabble-cli/src/fight.rs | 2 +- crates/squabble-core/src/polarity.rs | 28 ++++++++++++++---------- crates/squabble-fight/src/gate_triage.rs | 4 +++- 4 files changed, 27 insertions(+), 22 deletions(-) diff --git a/crates/squabble-cli/src/fetch.rs b/crates/squabble-cli/src/fetch.rs index 3efb9ed..ceb361c 100644 --- a/crates/squabble-cli/src/fetch.rs +++ b/crates/squabble-cli/src/fetch.rs @@ -344,7 +344,8 @@ mod polarity_plumbing_tests { #[test] fn a_job_id_is_read_from_a_real_details_url() { // Shape taken from a live `gh pr view --json statusCheckRollup`. - let url = "https://github.com/hyperpolymath/standards/actions/runs/33817314194/job/100852208701"; + let url = + "https://github.com/hyperpolymath/standards/actions/runs/33817314194/job/100852208701"; assert_eq!(job_id_from_details_url(url), Some(100852208701)); } @@ -354,7 +355,8 @@ mod polarity_plumbing_tests { // of course. Cutting the id on `/` alone leaves the suffix attached, // `parse::` fails, and the green is skipped without a word — the // exact silent undercount this module exists to prevent. - let base = "https://github.com/hyperpolymath/standards/actions/runs/33817314194/job/100852208701"; + let base = + "https://github.com/hyperpolymath/standards/actions/runs/33817314194/job/100852208701"; for suffix in ["?check_suite_focus=true", "#step:4:1", "?a=1#step:2:9"] { let url = format!("{base}{suffix}"); assert_eq!( @@ -374,19 +376,14 @@ mod polarity_plumbing_tests { None ); assert_eq!( - job_id_from_details_url( - "https://github.com/o/r/actions/runs/1" - ), + job_id_from_details_url("https://github.com/o/r/actions/runs/1"), None ); } #[test] fn an_external_job_url_is_not_treated_as_a_github_actions_job() { - assert_eq!( - job_id_from_details_url("https://ci.example/job/42"), - None - ); + assert_eq!(job_id_from_details_url("https://ci.example/job/42"), None); } #[test] diff --git a/crates/squabble-cli/src/fight.rs b/crates/squabble-cli/src/fight.rs index 7fb4545..e7f8a40 100644 --- a/crates/squabble-cli/src/fight.rs +++ b/crates/squabble-cli/src/fight.rs @@ -13,8 +13,8 @@ use crate::fetch; use squabble_core::gate::Gate; use squabble_core::moves::Move; use squabble_core::outcome::Escalation; -use squabble_core::polarity::{Applicability, Evidence, RepoDeclaration}; use squabble_core::outcome::Outcome; +use squabble_core::polarity::{Applicability, Evidence, RepoDeclaration}; use squabble_fight::context::RepoContext; use std::path::PathBuf; use std::process::ExitCode; diff --git a/crates/squabble-core/src/polarity.rs b/crates/squabble-core/src/polarity.rs index a09dd1c..4065364 100644 --- a/crates/squabble-core/src/polarity.rs +++ b/crates/squabble-core/src/polarity.rs @@ -410,7 +410,10 @@ pub fn classify( let cause = if signature.matches(steps) { Some(VacuityCause::StubbedAfterSkippedScan) - } else if steps.iter().all(|s| s.conclusion == StepConclusion::Skipped) { + } else if steps + .iter() + .all(|s| s.conclusion == StepConclusion::Skipped) + { Some(VacuityCause::AllStepsSkipped) } else { None @@ -580,7 +583,10 @@ mod tests { // A skip is half the signature, so anything we do not model must never // be mistaken for one. assert_eq!(StepConclusion::parse(None), StepConclusion::Other); - assert_eq!(StepConclusion::parse(Some("neutral")), StepConclusion::Other); + assert_eq!( + StepConclusion::parse(Some("neutral")), + StepConclusion::Other + ); assert_eq!( StepConclusion::parse(Some("skipped")), StepConclusion::Skipped @@ -592,7 +598,7 @@ mod tests { #[test] fn declared_and_unmatched_is_not_applicable() { let v = classify( - &[], // uninspectable; Axis 0 answers before steps are consulted + &[], // uninspectable; Axis 0 answers before steps are consulted &sig(), &Applicability { runs_for_operator_types: vec!["platform_maintainer".into()], @@ -741,7 +747,9 @@ mod tests { Recommendation::MakeItGreatInPractice ); assert!( - unmeasured.describe().contains("target-tech-present=unmeasured"), + unmeasured + .describe() + .contains("target-tech-present=unmeasured"), "got `{}`", unmeasured.describe() ); @@ -789,13 +797,11 @@ mod tests { #[test] fn genuine_and_not_applicable_project_to_nothing() { assert!(PolarityVerdict::Genuine.to_move("c").is_none()); - assert!( - PolarityVerdict::NotApplicable { - declaration: "d".into() - } - .to_move("c") - .is_none() - ); + assert!(PolarityVerdict::NotApplicable { + declaration: "d".into() + } + .to_move("c") + .is_none()); } // ---- the Rust witness of the SPARK theorem ------------------------------ diff --git a/crates/squabble-fight/src/gate_triage.rs b/crates/squabble-fight/src/gate_triage.rs index 491f6cb..484d769 100644 --- a/crates/squabble-fight/src/gate_triage.rs +++ b/crates/squabble-fight/src/gate_triage.rs @@ -62,7 +62,9 @@ evidence-required = ["run-count", "stub-rate", "upstream-exists", "target-tech-p // `signature-skipped-steps` and `signature-success-steps` share a long // prefix; a sloppy prefix match would merge them. let sig = parse_signature(DIRECTIVE); - assert!(!sig.skipped_steps.contains(&"Create stub findings".to_string())); + assert!(!sig + .skipped_steps + .contains(&"Create stub findings".to_string())); assert!(!sig.success_steps.contains(&"Run Hypatia scan".to_string())); }