4.0 KiB
Object Storage Batch A Checkpoint
- Date: 2026-07-28
- Branch:
codex/objectstorage-production-capability - Worktree:
/home/donghyeon/workspace/clean-architecture-backend-template-objectstorage - Claimed level: R0 application contract only
- Provider readiness advanced: no
Implemented scope
- Characterized the legacy caller-key overwrite, whole-object materialization, locator exposure, eager filesystem directory creation, optional S3 bucket provisioning, and Poster transaction/API coupling without changing those behaviors.
- Added provider-neutral identities, opaque checked references/handles, bounded streaming
callbacks, content identity, digest/range values, requests, receipts, outcomes, and narrow ports
under
dev.caskeleton.application.objectstorage. - Required an
ObjectOperationKeyon mutation requests and separated normal publication, scan-maintenance, purge-maintenance, direct, and staged privilege surfaces. - Added recursive contract-purity tests and an ArchUnit freeze for the one existing sample legacy import.
- Marked the legacy
ObjectStoragePortandStoredObjectas removal boundaries without adapting new semantic calls back to raw keys.
No provider-neutral kernel, canonical namespace/control codec, local R1 provider, S3/MinIO qualification, sample migration, or R2 readiness claim is included.
TDD evidence
The planned RED checks failed only for the intentionally missing types or removal annotations:
ObjectStorageIdentityContractTest: missing identity types before Task 2 implementation.ObjectContentContractTestandObjectStorageValueContractTest: missing content/value types before Task 3 implementation.ObjectStoragePortContractTest: missing request/receipt/port family before Task 4 implementation.ObjectStorageArchitectureContractTest: missing legacy removal annotations before Task 5 implementation.
An initial ArchUnit DSL compilation error was a test-authoring error, not accepted as a RED result; the rule was corrected and rerun.
GREEN verification
All commands ran from src/ and completed with BUILD SUCCESSFUL:
./gradlew :application-core:resolveAndLockAll --write-locks
./gradlew :application-core:verifyDependencyLocks --console=plain
./gradlew :application-core:test --tests '*ObjectStorageIdentityContractTest' --console=plain
./gradlew :application-core:test \
--tests '*ObjectContentContractTest' \
--tests '*ObjectStorageValueContractTest' --console=plain
./gradlew :application-core:test --tests '*ObjectStoragePortContractTest' --console=plain
./gradlew :application-core:test \
--tests '*ObjectStorageArchitectureContractTest' --console=plain
./gradlew :app-bootstrap:test --tests '*CleanArchitectureTest' --console=plain
./gradlew :application-core:check --console=plain
./gradlew verifyCleanArchitectureDependencies --console=plain
./gradlew :adapter:outbound:objectstorage:test :sample-portfolio:test --console=plain
The final combined legacy focused suites completed in 27 seconds. Deprecation-for-removal warnings are expected evidence that legacy consumers remain visible; they are not suppressed.
LLM Wiki capture
The canonical vault required by repository policy,
/home/donghyeon/workspace/ai-tool/llm-wiki-private/, and its parent
/home/donghyeon/workspace/ai-tool/ do not exist in this environment. Therefore the required
raw/branch-notes/codex-objectstorage-production-capability.md could not be created or updated.
No similarly named non-canonical clone was used. This exact access block is recorded in both the
plan and design headers and here at the Batch A boundary.
Remaining gates and risks
- External broker and REST consumers and deployed legacy data were not inspected; Gate A remains blocked for legacy removal or public API versioning.
- The new contracts have no provider implementation yet.
- The current legacy adapter retains whole-object and raw-locator behavior by design until the later migration batch.
- No readiness registry row is promoted by this checkpoint.