@cfxlabsinc/b2b-services
    Preparing search index...
    FileS3ReadError:
        | ServiceError<"S3_OBJECT_NOT_FOUND", { bucket: string; key: string }>
        | ServiceError<"S3_READ_FAILED", { bucket: string; key: string }>

    Failure of an S3 read path (WireFileS3Service.downloadFile, WireFileS3Service.generateDownloadLink).

    • S3_OBJECT_NOT_FOUND — the bucket holds nothing at the recorded key. The record and the bucket disagree; no retry fixes it.
    • S3_READ_FAILED — S3 refused or could not serve the read: denied permissions, the wrong bucket, a network fault. Retryable, and it never means the object is absent.

    The two must stay distinct at the call site: collapsing them is what makes an operator chase a missing file that is actually a permissions problem.