forked from chiki2bum2/SniperGold_ML
Implements the frozen P3_DATA_ENGINE_V1_SPEC (SHA 84bf0f217ffba51197112a6bbacbcc297058e04b5ca47f0459028fe33e0321e5). Components: engine/ producer (certify, chunkmap, parse, canonical, worker, dispatcher, aggregate, storage, journal, checkpoint, lock, evidence, manifest, run_complete, dataset_builder, cli) + engine/verify independent verifier (vparse, vaggregate, vinvariants, vcompare); headless CLI sniper-data; golden corpus G01-G17; unit/property/adversarial/mutation/legacy-diff/CLI suites. Qualification verdict: QUALIFIED (all 9 mandatory gates pass; independent verifier accepted). Spec, governance record, and legacy checkpoint untouched. G-14 NOT AUTHORIZED honored; no real-data processing, no pilot, no workload 46, no chunk 760 access.
82 lines
No EOL
3.4 KiB
Python
82 lines
No EOL
3.4 KiB
Python
"""Differential legacy comparison (spec 24, G-16) -- evidence-level only.
|
|
|
|
The legacy P3-S25 evidence (per-chunk JSON + real checkpoint) is read
|
|
read-only; every compared item is classified into the five-class taxonomy and
|
|
no UNRESOLVED semantic discrepancy may remain. The real 34.5 GB source is
|
|
NOT opened in this session (implementation + qualification only); the
|
|
byte-range/tick/hash differential is recorded as the G-13 pilot scope.
|
|
"""
|
|
|
|
import json
|
|
import os
|
|
import sys
|
|
import tempfile
|
|
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(
|
|
os.path.abspath(__file__)))))
|
|
|
|
from engine.verify.vcompare import ( # noqa: E402
|
|
legacy_evidence_items, build_legacy_diff, write_legacy_diff, Taxonomy,
|
|
)
|
|
from engine.util import sha256_file # noqa: E402
|
|
from tests.golden.run_golden import mini_setup, mini_run # noqa: E402
|
|
from tests.golden.common import case_bytes # noqa: E402
|
|
|
|
REPO = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
LEGACY_INGEST = os.path.join(REPO, "ml", "p3", "p3_s251_external_ingest")
|
|
LEGACY_CHUNK_GLOB = "real_run_chunk_*.json"
|
|
LEGACY_CHECKPOINT = os.path.join(LEGACY_INGEST, "output", "s251_real_checkpoint.json")
|
|
|
|
|
|
def run():
|
|
# read-only snapshot of the legacy evidence dir hashes (byte-unchanged check)
|
|
before = {}
|
|
for f in sorted(os.listdir(LEGACY_INGEST)):
|
|
if f.startswith("real_run_chunk") and f.endswith(".json"):
|
|
before[f] = sha256_file(os.path.join(LEGACY_INGEST, f))
|
|
before_cp = sha256_file(LEGACY_CHECKPOINT)
|
|
|
|
chunk_files = sorted(os.path.join(LEGACY_INGEST, f) for f in before)
|
|
legacy = legacy_evidence_items(chunk_files, LEGACY_CHECKPOINT)
|
|
|
|
# new engine metadata from a synthetic mini run (permitted fixture)
|
|
with tempfile.TemporaryDirectory() as td:
|
|
cfg, cert, cm, rid = mini_setup(case_bytes("G01"), td,
|
|
chunk_bytes=25_165_824,
|
|
workload_bytes=5_368_709_120)
|
|
mini_run(cfg, cert, cm, td, rid)
|
|
from engine.storage import checkpoint_path
|
|
from engine.checkpoint import load_checkpoint
|
|
ck = load_checkpoint(checkpoint_path(td))
|
|
report = build_legacy_diff(legacy, ck, ck["versions"],
|
|
cfg["workers_requested"], 1)
|
|
|
|
# verify no UNRESOLVED items and the DEFERRED scope marker
|
|
unresolved = [i for i in report["items"]
|
|
if i["classification"] == Taxonomy.UNRESOLVED]
|
|
deferred = report.get("real_source_range_differential", {}).get("status")
|
|
all_classified = len(report["items"]) > 0 and len(unresolved) == 0
|
|
|
|
# verify legacy evidence untouched
|
|
after = {f: sha256_file(os.path.join(LEGACY_INGEST, f)) for f in before}
|
|
after_cp = sha256_file(LEGACY_CHECKPOINT)
|
|
untouched = before == after and before_cp == after_cp
|
|
|
|
return {
|
|
"ok": all_classified and deferred == "DEFERRED" and untouched,
|
|
"items_classified": len(report["items"]),
|
|
"unresolved": len(unresolved),
|
|
"deferred_status": deferred,
|
|
"legacy_untouched": untouched,
|
|
"report": report,
|
|
}
|
|
|
|
|
|
if __name__ == "__main__":
|
|
res = run()
|
|
print("items_classified", res["items_classified"])
|
|
print("unresolved", res["unresolved"])
|
|
print("deferred_status", res["deferred_status"])
|
|
print("legacy_untouched", res["legacy_untouched"])
|
|
print("OK" if res["ok"] else "FAIL")
|
|
sys.exit(0 if res["ok"] else 1) |