93 lines
4.4 KiB
Markdown
93 lines
4.4 KiB
Markdown
# Object Storage Batch E Pause Checkpoint
|
||
|
||
- Recorded: 2026-07-29 (Asia/Seoul)
|
||
- Branch: `codex/objectstorage-production-capability`
|
||
- Worktree:
|
||
`/home/donghyeon/workspace/clean-architecture-backend-template-objectstorage`
|
||
- Status: implementation in progress; intentionally paused at the user's request
|
||
- Evidence grade: local unit/integration/architecture evidence only; no AWS R2 evidence
|
||
|
||
## Implemented at this checkpoint
|
||
|
||
- Staged integrity verification, fake-scanner routing, publication handoff fencing, and stable
|
||
replay receipts.
|
||
- Additive Poster V7 dual-read schema, upload/retirement intents, HMAC-sanitized idempotency scope,
|
||
PostgreSQL atomic claim SPI, and forward-only migration qualification lane.
|
||
- Short-transaction Poster image publication flow and additive locator-free `202` API under the
|
||
AIP-122-compatible `/posters/{id}/imagePublications` collection.
|
||
- Exact-reference/version logical retirement enqueue, lease/fence takeover, response-loss retry,
|
||
Poster deletion survival, and disabled-by-default worker composition.
|
||
- Isolated legacy migration contracts, report-only inspection, two-distinct-approver Ed25519
|
||
approval verification, nonce replay boundary, and explicit maintenance-only composition.
|
||
|
||
## Verification completed
|
||
|
||
The following focused command passed after the final architecture fixes:
|
||
|
||
```bash
|
||
cd src
|
||
./gradlew \
|
||
:sample-portfolio:spotlessApply \
|
||
:sample-portfolio:test --tests '*PosterImagePublicationControllerWireTest' \
|
||
:app-bootstrap:test --tests '*CleanArchitectureTest' \
|
||
--console=plain
|
||
```
|
||
|
||
The following focused suites also passed during this checkpoint:
|
||
|
||
```bash
|
||
./gradlew :adapter:outbound:objectstorage:test \
|
||
--tests '*LegacyObjectAdoptionServiceTest' \
|
||
--tests '*LegacyAdoptionApprovalVerifierTest' \
|
||
--tests '*ObjectStorageLegacyMigrationConfigTest' --console=plain
|
||
|
||
./gradlew :sample-portfolio:test \
|
||
--tests '*DeletePosterImageRetirementTest' \
|
||
--tests '*PosterImageRetirementCrashMatrixTest' \
|
||
--tests '*PosterImageRetirementConfigTest' \
|
||
--tests '*LegacyPosterImageUploadCharacterizationTest' --console=plain
|
||
|
||
./gradlew :sample-portfolio:test \
|
||
--tests '*SampleApplicationContextTest' \
|
||
:sample-portfolio:posterImageMigrationTest --console=plain
|
||
```
|
||
|
||
The migration lane included
|
||
`PosterImageRetirementQualificationTest`, which proved that an exact retirement row survives
|
||
deletion of its Poster row.
|
||
|
||
## Failures found and resolved
|
||
|
||
- `spotlessJavaCheck` initially found formatting drift in newly changed application-core and
|
||
persistence files. The owner-module Spotless apply tasks fixed it.
|
||
- `SampleApplicationContextTest` initially failed because Spring's persistence exception advisor
|
||
could not CGLIB-proxy the final `PosterImageAttachmentCasRepository`. Removing `final` fixed the
|
||
context; the focused context suite then passed.
|
||
- `CleanArchitectureTest` initially rejected an application-core return type from the sample domain
|
||
and the kebab-case `image-publications` path. Conversion moved back to the application use case,
|
||
and the endpoint changed to the repository's AIP-122-compatible `imagePublications` segment. The
|
||
complete focused architecture suite then passed.
|
||
|
||
## Not yet re-run / not complete
|
||
|
||
- The combined Batch E checkpoint command stopped on the two architecture failures above before all
|
||
requested root tasks could complete. The focused failing suites passed after the fixes, but
|
||
`:sample-portfolio:check`, `verifyPublicPathSnapshot`, and the full combined Batch E command have
|
||
not been re-run after those final fixes.
|
||
- The complete repository `./gradlew test` and `./gradlew check` have not been re-run after the
|
||
Batch E additions.
|
||
- The legacy adoption runner/configuration is not yet wired to a production legacy inspector,
|
||
permission-checked trust-key loader, or durable control-record replay-store implementation.
|
||
- Tasks 25–30 (Batch F) have not started in this continuation.
|
||
- Actual AWS qualification is blocked by Approval Gate B: no approved account, bucket/namespaces,
|
||
workload roles, signed deployment attestation, or mutation/test authority was supplied.
|
||
- No readiness card was promoted. Local/MinIO ceilings and unsupported conditional behavior remain
|
||
unchanged.
|
||
|
||
## Wiki capture
|
||
|
||
The canonical vault
|
||
`/home/donghyeon/workspace/ai-tool/llm-wiki-private/` is absent in this environment. Therefore the
|
||
required branch note and derived raw documents could not be written. No non-canonical substitute
|
||
was used.
|