5.1 KiB
Object Storage Batch D Checkpoint
- Date: 2026-07-28
- Branch:
codex/objectstorage-production-capability - Worktree:
/home/donghyeon/workspace/clean-architecture-backend-template-objectstorage - Scope: direct-transfer provider/application primitives only
- Public endpoint: none
- Readiness advanced: no; all direct cards remain R0
Implemented scope
- Added direct single-upload session policy, durable prepared/issued transitions, bearer redaction, exact completion verification, published-version download resolution, and an S3-presigner lifecycle owned by the selected provider.
- Added direct multipart durable session and part-grant families, opaque acknowledgement tokens, sharded part records, admission-close/expiry fencing, exact ledger validation, completion/abort states, response-loss resolution, and persisted terminal exact-version replay.
- Added direct S3 initiate/discovery, exact-part presign,
ListPartsacknowledgement, conditional complete followed by exact HEAD verification, and abort resolution. - Registered direct single and multipart delegates only when their exact compiled capability is selected. One presigner is constructed and closed exactly once.
- Added golden canonical envelopes for the direct session, direct multipart session, and direct multipart grant families.
- Fixed
MultipartCompleteRequestnull validation so valid immutableList.of(...)input no longer throws fromcontains(null).
Qualification truth
The exact MinIO release cannot prove create-only PUT or create-only multipart completion, so both
direct profiles are explicitly UNSUPPORTED. The direct MinIO contract/fault lanes are negative
admission tests: they prove no bearer or multipart mutation enters an unsupported profile. No test
skip is used as positive evidence.
The AWS managed/direct source sets compile, but no AWS call was made and no AWS evidence row was published. No inbound controller, authorization surface, CORS runtime configuration, or public direct API exists.
Verification
Commands completed with BUILD SUCCESSFUL:
cd src
./gradlew :adapter:outbound:objectstorage:test \
--tests '*DirectTransferCoordinatorTest' \
--tests '*PresignedGrantRedactionTest' \
--tests '*S3DirectTransferProviderTest' \
--tests '*ObjectControlRecordCodecTest' \
--tests '*S3ProviderCompositionTest' --console=plain
./gradlew :adapter:outbound:objectstorage:test \
--tests '*DirectMultipartCoordinatorTest' \
--tests '*DirectMultipartRaceTest' \
--tests '*S3DirectMultipartProviderTest' \
--tests '*ObjectControlRecordCodecTest' \
--tests '*S3ProviderCompositionTest' --console=plain
./gradlew \
:adapter:outbound:objectstorage:objectStorageMinioContractTest \
:adapter:outbound:objectstorage:objectStorageMinioFaultTest \
--tests '*DirectTransfer*' --console=plain
./gradlew :adapter:outbound:objectstorage:test \
--tests '*DirectTransferCorsContractTest' --console=plain
./gradlew :adapter:outbound:objectstorage:objectStorageAwsQualificationTestClasses --console=plain
./gradlew :adapter:outbound:objectstorage:check --console=plain
./gradlew :adapter:outbound:objectstorage:verifyDependencyLocks \
verifyCleanArchitectureDependencies --console=plain
./gradlew \
:adapter:outbound:objectstorage:objectStorageMinioContractTest \
:adapter:outbound:objectstorage:objectStorageMinioFaultTest --console=plain
bash ../.github/scripts/verify-gate-matrix.sh
./gradlew test --console=plain
./gradlew check --console=plain
The module check includes unit tests, Checkstyle, Spotless, SpotBugs, architecture, configuration
processor, environment-key, and repository-wide policy checks. Existing test-only compiler
warnings remain non-failing. The final repository-wide test run completed 79 tasks and the final
repository-wide check completed 214 tasks.
Deliberate limitations
- Issued bearer material is process-local. A restart fails closed instead of reconstructing or reissuing an already-issued bearer.
- The signing clock/window is stored and bounded, but AWS SDK presigner query timing is not driven by the injected application clock.
- The direct multipart recovery/race matrix covers its principal fences and completion response loss but is not exhaustive enough for an R2 claim.
- Retention/Object Lock grant headers and a provider-enforced direct-single hard size ceiling are not qualified.
- No public endpoint exists, so CORS evidence is a pure contract and no direct card may exceed R0 in the current registry.
Approval Gate A
Tasks 20–24 remain blocked until the user explicitly approves scanner ownership, the sample's first publication profile, the additive asynchronous API/status contract, and digest transport. No scan/publication/sample endpoint implementation was started.
LLM Wiki capture
The canonical vault /home/donghyeon/workspace/ai-tool/llm-wiki-private/ and its parent
/home/donghyeon/workspace/ai-tool/ do not exist in this environment. The required
raw/branch-notes/codex-objectstorage-production-capability.md and derived raw documents could not
be created or updated. No similarly named non-canonical clone was used.