Scope adapter-outbound-objectstorage - module inventory and denominator revision=a24ece9cf797f7ea647e33bf846b115208ed1ba5 generatedAt=2026-08-30T02:35:56+00:00 total tracked: 206 $ git ls-files 'adapter/outbound/objectstorage' | sed "s|^adapter/outbound/objectstorage/||" | awk -F/ '{print $1}' | sort | uniq -c | sort -rn 202 src 1 gradle.lockfile 1 build.gradle 1 README.md 1 CLAUDE.md exit=0 $ git ls-files 'adapter/outbound/objectstorage/src' | sed "s|^adapter/outbound/objectstorage/src/||" | awk -F/ '{print $1}' | sort | uniq -c | sort -rn 147 main 49 test 2 objectStorageMinioFaultTest 2 objectStorageMinioContractTest 2 objectStorageAwsQualificationTest exit=0 === per source set === main: java=147 loc=14336 nonjava=0 objectStorageAwsQualificationTest: java=2 loc=51 nonjava=0 objectStorageMinioContractTest: java=2 loc=316 nonjava=0 objectStorageMinioFaultTest: java=2 loc=179 nonjava=0 test: java=48 loc=6753 nonjava=1 === package map (main) === $ git ls-files 'adapter/outbound/objectstorage/src/main' | grep '\.java$' | sed 's|.*/java/||;s|/[^/]*\.java$||' | sort | uniq -c | sort -rn 26 dev/caskeleton/adapter/outbound/objectstorage/s3 24 dev/caskeleton/adapter/outbound/objectstorage/control 23 dev/caskeleton/adapter/outbound/objectstorage/kernel 19 dev/caskeleton/adapter/outbound/objectstorage/config 13 dev/caskeleton/adapter/outbound/objectstorage/direct 8 dev/caskeleton/adapter/outbound/objectstorage/readiness 8 dev/caskeleton/adapter/outbound/objectstorage/maintenance 7 dev/caskeleton/adapter/outbound/objectstorage/codec 6 dev/caskeleton/adapter/outbound/objectstorage/filesystem 5 dev/caskeleton/adapter/outbound/objectstorage/multipart 4 dev/caskeleton/adapter/outbound/objectstorage/provider 4 dev/caskeleton/adapter/outbound/objectstorage exit=0 === package map (test) === --- objectStorageAwsQualificationTest 2 dev/caskeleton/adapter/outbound/objectstorage/qualification --- objectStorageMinioContractTest 2 dev/caskeleton/adapter/outbound/objectstorage/qualification --- objectStorageMinioFaultTest 2 dev/caskeleton/adapter/outbound/objectstorage/qualification --- test 14 dev/caskeleton/adapter/outbound/objectstorage/s3 7 dev/caskeleton/adapter/outbound/objectstorage/kernel 6 dev/caskeleton/adapter/outbound/objectstorage 5 dev/caskeleton/adapter/outbound/objectstorage/direct 5 dev/caskeleton/adapter/outbound/objectstorage/config 2 dev/caskeleton/adapter/outbound/objectstorage/multipart 2 dev/caskeleton/adapter/outbound/objectstorage/maintenance 2 dev/caskeleton/adapter/outbound/objectstorage/filesystem 2 dev/caskeleton/adapter/outbound/objectstorage/codec 1 dev/caskeleton/adapter/outbound/objectstorage/readiness 1 dev/caskeleton/adapter/outbound/objectstorage/control 1 dev/caskeleton/adapter/outbound/objectstorage/contract $ git ls-files 'adapter/outbound/objectstorage' | grep -v '\.java$' adapter/outbound/objectstorage/CLAUDE.md adapter/outbound/objectstorage/README.md adapter/outbound/objectstorage/build.gradle adapter/outbound/objectstorage/gradle.lockfile adapter/outbound/objectstorage/src/test/resources/object-storage/minio-provider-evidence.json exit=0 === main files by size === $ git ls-files 'adapter/outbound/objectstorage/src/main' | grep '\.java$' | xargs wc -l | sort -rn | head -40 14336 total 898 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/control/CanonicalJsonObjectControlRecordCodec.java 523 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/config/RoutingObjectMutationAdapter.java 509 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCoordinator.java 416 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/kernel/StagedObjectPublicationKernel.java 367 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ClientPolicy.java 361 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ProviderBinding.java 342 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3AsyncResponseBodyBridge.java 335 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinator.java 324 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3DirectMultipartProvider.java 281 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ManagedMultipartProvider.java 279 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ConditionalObjectControlStore.java 276 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageBindingCompiler.java 270 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3AsyncRequestBodyBridge.java 213 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ManagedObjectProvider.java 210 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/control/ObjectOperationRecord.java 198 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/control/ObjectDirectMultipartSessionRecord.java 193 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalObjectStreamTransfer.java 190 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ObjectStorageProviderContribution.java 188 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalDevObjectDataStore.java 188 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/control/ObjectPublicationHandoffRecord.java 180 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/control/ObjectStagedObjectRecord.java 172 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/codec/ObjectControlKeyCodec.java 171 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/kernel/ObjectPublicationHandoffService.java 169 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/maintenance/LegacyAdoptionApprovalCodec.java 166 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferSessionRecord.java 164 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageCapabilityConfig.java 158 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalObjectPathGuard.java 150 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/kernel/ObjectOperationEpochRecord.java 147 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/config/RoutingObjectScanMaintenanceAdapter.java 147 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/config/RoutingObjectReadAdapter.java 144 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3DirectTransferProvider.java 144 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/control/CanonicalJsonReader.java 142 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/kernel/ObjectOperationStateMachine.java 132 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageCapabilityAssembler.java 132 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/codec/ObjectRequestFingerprintCodec.java 129 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/S3ObjectStorageAdapter.java 127 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/kernel/ObjectOperationKernel.java 122 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/maintenance/LegacyObjectAdoptionService.java 120 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferPolicy.java exit=0 === test files by size === $ git ls-files 'adapter/outbound/objectstorage/src' | grep '\.java$' | grep -v '/main/' | xargs wc -l | sort -rn | head -30 7299 total 480 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageCapabilityConfigTest.java 468 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ProviderBindingTest.java 339 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/control/ObjectControlRecordCodecTest.java 327 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCoordinatorTest.java 291 adapter/outbound/objectstorage/src/objectStorageMinioContractTest/java/dev/caskeleton/adapter/outbound/objectstorage/qualification/MinioManagedObjectContractTest.java 255 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ManagedObjectProviderTest.java 251 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinatorTest.java 247 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/contract/ObjectStorageProviderContract.java 197 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ProviderCompositionTest.java 196 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/readiness/ObjectStorageReadinessRegistryTest.java 179 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3AsyncClientFactoryTest.java 178 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/ManagedMultipartCoordinatorTest.java 177 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/codec/ObjectRequestFingerprintCodecTest.java 172 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ConditionalObjectControlStoreTest.java 167 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageBindingCompilerTest.java 165 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3AsyncRequestBodyBridgeTest.java 154 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/config/RoutingObjectStorageAdapterTest.java 153 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalDevObjectStorageRecoveryTest.java 151 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ObjectOperationResolverTest.java 147 adapter/outbound/objectstorage/src/objectStorageMinioFaultTest/java/dev/caskeleton/adapter/outbound/objectstorage/qualification/MinioManagedObjectFaultTest.java 145 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/maintenance/LegacyAdoptionApprovalVerifierTest.java 134 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ManagedMultipartProviderTest.java 133 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3AsyncResponseBodyBridgeTest.java 130 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/kernel/ObjectMutationResponseLossTest.java 124 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/kernel/ObjectOperationKernelTest.java 123 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3DirectTransferProviderTest.java 116 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/codec/ObjectNamespaceCodecTest.java 115 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3SdkApiCharacterizationTest.java 109 adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/maintenance/LegacyObjectAdoptionServiceTest.java exit=0 === registry + consumers === $ python3 -c " import json;d=json.load(open('config/architecture/modules.json')) def f(o): if isinstance(o,dict): if o.get('id','')=='adapter-outbound-objectstorage': return o for v in o.values(): r=f(v) if r: return r elif isinstance(o,list): for v in o: r=f(v) if r: return r print(json.dumps(f(d), ensure_ascii=False, indent=2)) " { "id": "adapter-outbound-objectstorage", "gradle_path": ":adapter:outbound:objectstorage", "source_path": "src/adapter/outbound/objectstorage", "allowed_dependencies": [ "application-core", "shared-contract" ], "runtime_memberships": [ "sample-portfolio" ] } exit=0 $ git grep -rn ':adapter:outbound:objectstorage' -- . | grep -v "^adapter/outbound/objectstorage/" | head app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:208: "# Semantic owner Gradle path: :adapter:outbound:objectstorage:test", app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:219: .replace("# Semantic owner Gradle path: :adapter:outbound:objectstorage:test\n", ""); app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:228: # Semantic owner Gradle path: :adapter:outbound:objectstorage:test app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:326: + "# Semantic owner Gradle path: :adapter:outbound:objectstorage:test\n"; app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/RegistryGovernanceCatalog.java:32: "# Semantic owner Gradle path: :adapter:outbound:objectstorage:test"); app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/RegistryGovernanceCatalog.java:230: if (!":adapter:outbound:objectstorage:test".equals(definition.ownerGradlePath()) app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/RegistryGovernanceCatalog.java:260: ":adapter:outbound:objectstorage:test", config/architecture/modules.json:103: "gradle_path": ":adapter:outbound:objectstorage", sample-portfolio/build.gradle:41: runtimeOnly project(':adapter:outbound:objectstorage') exit=0 $ git grep -rln 'dev.caskeleton.adapter.outbound.objectstorage' -- . | grep -v "^adapter/outbound/objectstorage/" | head -20 app-bootstrap/src/main/java/dev/caskeleton/bootstrap/CaSkeletonApplication.java app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/RegistryGovernanceCatalog.java exit=0 $ cat adapter/outbound/objectstorage/build.gradle // Driven adapter: provider-neutral semantic object-storage ports plus a bounded local-development // provider. Canonical app.object-storage activation is disabled by default. The old whole-byte[] // filesystem/S3 adapters remain isolated, explicit legacy compatibility only. // // software.amazon.awssdk:* versions are NOT managed by the Spring Boot BOM, and this repo has no // version catalog, so the AWS SDK v2 BOM platform is imported HERE (module scope) using the root // `ext.awsSdkVersion` SSOT — this keeps the strict-locking blast radius to this module (the shared // root dependencyManagement block stays awssdk-free), mirroring the grpc module's grpc-bom import. description = 'Outbound adapter: object storage (S3/MinIO + local filesystem)' strictTestLanes { sourceSet('objectStorageMinioContractTest') { compilesAgainst 'main', 'test' } sourceSet('objectStorageMinioFaultTest') { compilesAgainst 'main', 'test' } sourceSet('objectStorageAwsQualificationTest') { compilesAgainst 'main', 'test' } } dependencyManagement { imports { mavenBom "software.amazon.awssdk:bom:${awsSdkVersion}" } } dependencies { implementation project(':application-core') implementation project(':shared-contract') implementation 'org.springframework.boot:spring-boot-autoconfigure' implementation 'org.slf4j:slf4j-api' implementation 'software.amazon.awssdk:s3' implementation 'software.amazon.awssdk:netty-nio-client' annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor' // test-only: Testcontainers MinIO integration test for the S3 backend. Uses the core // GenericContainer (no dedicated module) so the S3 round-trip runs against a real MinIO when // Docker is available and is skipped (disabledWithoutDocker) otherwise. testImplementation 'org.testcontainers:testcontainers' testImplementation 'org.testcontainers:testcontainers-junit-jupiter' testImplementation 'org.testcontainers:testcontainers-toxiproxy' testImplementation 'com.tngtech.archunit:archunit-junit5:1.3.0' testImplementation 'net.jqwik:jqwik:1.9.1' } def objectStorageReadinessRegistry = rootProject.projectDir.parentFile.toPath() .resolve('docs/registries/object-storage-readiness.yaml').toFile() tasks.named('test') { inputs.file(objectStorageReadinessRegistry) .withPathSensitivity(PathSensitivity.RELATIVE) systemProperty 'objectstorage.readiness.registry', objectStorageReadinessRegistry.absolutePath } def objectStorageMinioContractQualification = registerStrictQualificationTest( name: 'objectStorageMinioContractTest', sourceSet: sourceSets.objectStorageMinioContractTest, requiredClasses: [ 'dev.caskeleton.adapter.outbound.objectstorage.qualification.MinioDirectTransferContractTest', 'dev.caskeleton.adapter.outbound.objectstorage.qualification.MinioManagedObjectContractTest' ], description: 'Runs the non-skipping exact-release MinIO managed object contract.') objectStorageMinioContractQualification.configure { shouldRunAfter tasks.named('test') } def objectStorageMinioFaultQualification = registerStrictQualificationTest( name: 'objectStorageMinioFaultTest', sourceSet: sourceSets.objectStorageMinioFaultTest, requiredClasses: [ 'dev.caskeleton.adapter.outbound.objectstorage.qualification.MinioDirectTransferFaultTest', 'dev.caskeleton.adapter.outbound.objectstorage.qualification.MinioManagedObjectFaultTest' ], description: 'Runs the non-skipping digest-pinned MinIO/Toxiproxy fault contract.') objectStorageMinioFaultQualification.configure { shouldRunAfter objectStorageMinioContractQualification } registerStrictQualificationTest( name: 'objectStorageAwsQualificationTest', sourceSet: sourceSets.objectStorageAwsQualificationTest, requiredClasses: [ 'dev.caskeleton.adapter.outbound.objectstorage.qualification.AwsS3DirectTransferQualificationTest', 'dev.caskeleton.adapter.outbound.objectstorage.qualification.AwsS3ManagedCommonSubsetQualificationTest' ], description: 'Runs only with explicit protected AWS sandbox authority and exact inputs.') exit=0