Files

4.6 KiB
Raw Permalink Blame History

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:

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:

./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 2530 (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.