# Phase 17: Object Storage - Discussion Log > **Audit trail only.** Do not use as input to planning, research, or execution agents. **Date:** 2026-04-05 **Phase:** 17-object-storage **Areas discussed:** S3 Client, URL Strategy, Storage Abstraction, Migration Approach **Mode:** --auto --batch --- ## S3 Client | Option | Description | Selected | |--------|-------------|----------| | @aws-sdk/client-s3 | Official AWS SDK v3, S3-compatible, tree-shakeable | ✓ | | minio-js | MinIO-specific client | | | undici/fetch with S3 API | Raw HTTP calls | | **User's choice:** @aws-sdk/client-s3 (auto-selected) --- ## URL Strategy | Option | Description | Selected | |--------|-------------|----------| | Presigned URLs | MinIO generates time-limited signed URLs, client fetches directly | ✓ | | Proxy through GearBox API | Server fetches from MinIO, streams to client | | | Public bucket | No auth needed, direct MinIO URLs | | **User's choice:** Presigned URLs (auto-selected) --- ## Storage Abstraction | Option | Description | Selected | |--------|-------------|----------| | Thin storage service | Single file wrapping S3 SDK with upload/delete/getUrl | ✓ | | Full abstraction layer | Interface with local/S3 implementations | | **User's choice:** Thin storage service (auto-selected) --- ## Migration Approach | Option | Description | Selected | |--------|-------------|----------| | One-time script | Reads uploads/, uploads to MinIO, same filenames | ✓ | | Lazy migration | Upload to MinIO on first access, fallback to local | | **User's choice:** One-time script (auto-selected) --- ## Claude's Discretion - Presigned URL expiry, proxy fallback, MinIO version, bucket policy, cleanup strategy ## Deferred Ideas None