feat(release): Phase 1-5 multi-platform pipeline, CI workflow, regression auditor, and orchestrator
This commit is contained in:
1 parent
f40143cb69
commit
b87e599606
8 files changed
+1412
-559
No files matched your search
@@ -0,0 +1,48 @@
|
||||
"""
|
||||
run_pipeline.py
|
||||
Single entry point executing the end-to-end multi-platform ranking pipeline:
|
||||
1. Validates strict schema and uncorrupted nulls
|
||||
2. Calculates HIFFI-XP composite scores & dynamic weight redistribution
|
||||
3. Runs anomaly detection guardrails
|
||||
4. Applies fail-closed publication eligibility & freshness gates
|
||||
5. Regenerates provenance audit report
|
||||
"""
|
||||
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
import sys
|
||||
import pandas as pd
|
||||
from core.ranking_engine import HIFFIRankingEngine
|
||||
|
||||
|
||||
def main():
|
||||
dataset_file = Path("data/hiffi_multiplatform_500.csv")
|
||||
if not dataset_file.exists():
|
||||
print(f"Error: Dataset {dataset_file} not found.", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
|
||||
print("[1/5] Loading cohort dataset...")
|
||||
df = pd.read_csv(dataset_file)
|
||||
assert len(df) == 500, f"Expected 500 records, got {len(df)}"
|
||||
|
||||
print("[2/5] Calculating HIFFI-XP composite scores & effective weights...")
|
||||
engine = HIFFIRankingEngine()
|
||||
scored = engine.calculate_hiffi_xp(df)
|
||||
|
||||
print("[3/5] Running anomaly detection guardrails...")
|
||||
flagged = engine.detect_metric_anomalies(scored)
|
||||
|
||||
print("[4/5] Applying fail-closed publication eligibility & freshness gates...")
|
||||
gated, shortfall_audit = engine.apply_publication_eligibility_gates(flagged, return_metadata=True)
|
||||
|
||||
gated.to_csv(dataset_file, index=False)
|
||||
print(" -> Saved refreshed dataset with all governance columns.")
|
||||
|
||||
print("[5/5] Generating provenance audit report...")
|
||||
subprocess.run([sys.executable, "reports/provenance_summary.py"], check=True)
|
||||
|
||||
print("\n✓ Pipeline execution successful. All 500 records ranked and audited.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in new issue
Block a user