"""Safety gate for manual dataset uploads (ADR-0011). Public, non-agent-facing API. An upload is quarantined-until-validated and never executable, routed through the same manifest/validation machinery a registered dataset passes, plus an admin approval: draft_manifest(path) → pre-fill a manifest skeleton from the file (friction aid) stage_upload(...) → quarantine + type/size/manifest/attestation gate scan_upload(rec) → content scan (magic-byte; AV only where declared) validate_upload(rec) → content scan (if not yet run) + manifest/against-data register_upload(rec) → admin-only promotion into the live registry Only admins (UPLOAD_ADMIN_IDS) can register; researchers may stage + validate. """ from src.uploads.drafting import DraftResult, draft_manifest from src.uploads.posture import ( POSTURE_AV_REQUIRED, POSTURE_STRUCTURAL_ONLY, av_required, declared_posture, ) from src.uploads.promotion import RegistrationRefused, register_upload from src.uploads.records import ( STATUS_QUARANTINED, STATUS_REGISTERED, STATUS_REJECTED, STATUS_VALIDATED, UploadRecord, is_admin, ) from src.uploads.scanning import ( SCAN_CLEAN, SCAN_INFECTED, SCAN_SKIPPED, scan_upload, ) from src.uploads.staging import ( UploadRejected, attach_manifest, discard_upload, placeholder_manifest, stage_upload, ) from src.uploads.validation import validate_upload __all__ = [ "draft_manifest", "DraftResult", "stage_upload", "attach_manifest", "discard_upload", "placeholder_manifest", "scan_upload", "validate_upload", "register_upload", "UploadRecord", "UploadRejected", "RegistrationRefused", "is_admin", "SCAN_CLEAN", "SCAN_INFECTED", "SCAN_SKIPPED", "POSTURE_STRUCTURAL_ONLY", "POSTURE_AV_REQUIRED", "declared_posture", "av_required", "STATUS_REJECTED", "STATUS_QUARANTINED", "STATUS_VALIDATED", "STATUS_REGISTERED", ]