import hashlib, pathlib
here = pathlib.Path(__file__).resolve() if "__file__" in globals() else pathlib.Path.cwd()
candidates = [pathlib.Path.cwd() / "labs"]
if len(here.parents) > 3:
    candidates.append(here.parents[3] / "labs")
root = next((path for path in candidates if path.is_dir()), None)
assert root is not None, f"labs directory not found in: {candidates}"
required = ["LICENSE", "README.md", "pyproject.toml", "run-record.json",
            "src/quantum_end_to_end/simulator.py", "tests/test_simulator.py"]
def audit_package(package_root, names):
    if not names or len(names) != len(set(names)):
        raise ValueError("inventory must contain unique required paths")
    missing = [name for name in names
               if not (package_root / name).is_file() or (package_root / name).stat().st_size <= 0]
    if missing:
        raise ValueError("missing package paths: " + ",".join(missing))
    hashes = {name: hashlib.sha256((package_root / name).read_bytes()).hexdigest()
              for name in names}
    digest = hashlib.sha256("".join(name + hashes[name] for name in sorted(hashes)).encode()).hexdigest()
    return {"files": len(names), "hashes": hashes, "inventory_digest": digest}

full_result = audit_package(root, required)
metadata_result = audit_package(root, required[:4])
missing_rejected = False
try:
    audit_package(root, [*required, "tests/not-present.py"])
except ValueError:
    missing_rejected = True
assert full_result["files"] == 6 and all(len(value) == 64 for value in full_result["hashes"].values())
assert metadata_result["files"] == 4 and metadata_result["inventory_digest"] != full_result["inventory_digest"]
assert missing_rejected
print(f"PASS: 44 lab dossier files={full_result['files']} digest={full_result['inventory_digest'][:12]} metadata_files={metadata_result['files']} missing={missing_rejected}")
