import hashlib, json
REQUIRED = {"python": str, "seed": int, "shots": int, "backend": str,
            "support": dict, "command": str}
def validate_record(record):
    errors = [name for name, kind in REQUIRED.items()
              if name not in record or type(record[name]) is not kind]
    support = record.get("support", {})
    if (record.get("shots", 0) <= 0 or not support or
            any(type(value) not in (int, float) or value < 0 for value in support.values()) or
            abs(sum(support.values()) - 1.0) > 1e-12):
        errors.append("shots_or_support")
    if errors:
        raise ValueError(",".join(sorted(set(errors))))
    payload = json.dumps(record, sort_keys=True, separators=(",", ":")).encode()
    return {"digest": hashlib.sha256(payload).hexdigest(),
            "outcomes": sorted(support), "probability_mass": sum(support.values())}

record = {"python": "3.13", "seed": 7, "shots": 10_000,
          "backend": "quantum_end_to_end.Statevector",
          "support": {"00": 0.5, "11": 0.5},
          "command": "PYTHONPATH=src python -m quantum_end_to_end bell --shots 10000 --seed 7"}
baseline = validate_record(record)
changed_seed = validate_record({**record, "seed": 8})
missing_rejected = False
try:
    validate_record({key: value for key, value in record.items() if key != "command"})
except ValueError:
    missing_rejected = True
assert baseline["outcomes"] == ["00", "11"] and baseline["probability_mass"] == 1.0
assert baseline["digest"] != changed_seed["digest"] and missing_rejected
print(f"PASS: 36 run record digest7={baseline['digest'][:12]} digest8={changed_seed['digest'][:12]} missing_command={missing_rejected}")
