95 lines
4.6 KiB
Markdown
95 lines
4.6 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 V8 dual-read schema (renumbered from branch-local V7 during JPA integration),
|
||
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
|
||
|
||
At this isolated-branch checkpoint, the then-selected private vault
|
||
`/home/donghyeon/workspace/ai-tool/llm-wiki-private/` was absent, so capture was blocked. The final
|
||
main integration was later captured in the user-designated public vault at
|
||
`raw/branch-notes/chore-main-worktree-capability-integration.md`, with the derived error note
|
||
`raw/errors/multi-worktree-contract-drift-2026-07-31.md`.
|