82 lines
4.0 KiB
Markdown
82 lines
4.0 KiB
Markdown
# 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 `ObjectOperationKey` on 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 `ObjectStoragePort` and `StoredObject` as 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.
|
|
- `ObjectContentContractTest` and `ObjectStorageValueContractTest`: 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`:
|
|
|
|
```bash
|
|
./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.
|