Files
document-haness/docs/clean-architecture-backend-template/final/evidence/raw/155-objectstorage-platform-readiness-probes.txt
T
DongHyeonkaandClaude Opus 5 b2963105a8 docs(keycloak-session-store): import the session-storage lab as a new project
The keycloak project ended with four open questions that design could not
settle. A two-VM lab was built to answer them by measurement, and this is
that material: 26 experiments, 125 raw command outputs, 22 browser captures.

Follows the import procedure in README.md.

  source/     the originating repository verbatim — 78 documents, 28 SVGs,
              8 manifests, plus .source-revision recording the commit
  final/      the SSOT
    document.md   729 lines written from the 29 experiment documents, not
                  concatenated: what was predicted, what was measured, and
                  where the measurement itself was wrong
    evidence/raw    125 outputs, flattened to <experiment>__<file> because
                    the originals collided (01-baseline.txt appeared three
                    times) and the audit only globs the top level
    evidence/meta   one per raw file; command and exitCode are null and the
                    README says why rather than inventing them
    evidence/browser  22 captures
    assets/       three diagrams through techviz
    .techviz/     their VizSpecs

A separate project rather than an addition to keycloak: the B-layer answers
that project's four questions, but the A, C and D layers are about cluster
failure, SSO and operations, and one document.md should hold one subject.
The four question records there can point here through 관계.

Recorded rather than papered over: only three of the 28 diagrams were
remade. The repository forbids hand-drawn SVG and forbids titles inside the
canvas; all 28 originals carry both, so converting them is redrawing, not
reformatting. They stay in source/ and the gap is written into the document.

verify-pipeline.py passes. audit-records.py reports no issues.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 22:51:59 +09:00

242 lines
25 KiB
Plaintext

Sub-scope 06 (objectstorage) filesystem + maintenance + readiness + provider + root — manifest and probes
revision=a24ece9cf797f7ea647e33bf846b115208ed1ba5
generatedAt=2026-08-30T02:57:19+00:00
cwd=/shared/codebase/clean-architecture-backend-template/src
=== OWNED FILES (main) ===
f5c77750961b83e3fde720cdc34ae080f61027db main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/FilesystemLocalDevProviderContribution.java 81
91cae2205b26ddae6c0d9c0968863dfa0bfdb47d main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalDevObjectControlStore.java 115
8c0e5d93e163cbf0509f7e68a313559b1c27b0fa main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalDevObjectDataStore.java 188
e559bd8b78fddfb364d2885d436be040accba0a0 main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalDevObjectStorageProvider.java 106
8e3b9fc5b36ca2f638d77d558dec2e9b24dc129c main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalObjectPathGuard.java 158
ab238c3d53ee1c23245fa2b8dd2037afff881ee0 main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalObjectStreamTransfer.java 193
8b8b164cee901b373039a3690c0729fdb5f3857a main/java/dev/caskeleton/adapter/outbound/objectstorage/maintenance/Ed25519LegacyAdoptionApprovalVerifier.java 119
4332c6cc3f2f81ed460c3df136af8f6d486b6b5d main/java/dev/caskeleton/adapter/outbound/objectstorage/maintenance/LegacyAdoptionApprovalCodec.java 169
a96a2a891d9b0374e08f43f4e72c50125c37379d main/java/dev/caskeleton/adapter/outbound/objectstorage/maintenance/LegacyAdoptionApprovalDocument.java 112
9c19cf8a3f428134003079ef8353e2fce52c9e40 main/java/dev/caskeleton/adapter/outbound/objectstorage/maintenance/LegacyAdoptionApprovalReplayRecord.java 39
83b67717e32806fd52396023a84cf4a6c78a5c62 main/java/dev/caskeleton/adapter/outbound/objectstorage/maintenance/LegacyAdoptionApprovalReplayStore.java 16
93dc1ebac98d9f6edb3a6d686ae2affc89d56ee8 main/java/dev/caskeleton/adapter/outbound/objectstorage/maintenance/LegacyObjectAdoptionService.java 122
e11be7109baa8b0251e8690c5c3468da50229a4e main/java/dev/caskeleton/adapter/outbound/objectstorage/maintenance/LegacyObjectInspection.java 20
d518feeed84a1b234daaa5971a84d6857f295e09 main/java/dev/caskeleton/adapter/outbound/objectstorage/maintenance/LegacyObjectInspector.java 12
95a00035aa6f388a992c043cd2fea3c93f74cf1d main/java/dev/caskeleton/adapter/outbound/objectstorage/provider/ObjectStorageProvider.java 99
46013987d2b87fb882137975d82b85f394f1876e main/java/dev/caskeleton/adapter/outbound/objectstorage/provider/ObjectStorageProviderDescriptor.java 56
82afb574a2c5e902cfe4e0b517942ac4f6940e3d main/java/dev/caskeleton/adapter/outbound/objectstorage/provider/ObjectStorageProviderException.java 43
08961f7dc0277b6ebc6974a224a82f1720983f79 main/java/dev/caskeleton/adapter/outbound/objectstorage/provider/ObjectStorageProviderOperation.java 46
dc53066f499c7ff758292c0228aa234c0e560ae7 main/java/dev/caskeleton/adapter/outbound/objectstorage/readiness/CapabilityEvidence.java 64
5371d00836e05e24e2c0fe257f24adf4d478c0c7 main/java/dev/caskeleton/adapter/outbound/objectstorage/readiness/CapabilityEvidenceSource.java 8
0be1dcc013142e946f234fdc937607634283e477 main/java/dev/caskeleton/adapter/outbound/objectstorage/readiness/CapabilityEvidenceStatus.java 8
354ba7ec7b5700e136319b790f8b2b5a5165f5c5 main/java/dev/caskeleton/adapter/outbound/objectstorage/readiness/ObjectStorageCapabilityCard.java 41
a11b85bc25a10e56de10fdb2adb93ff1dd33be58 main/java/dev/caskeleton/adapter/outbound/objectstorage/readiness/ObjectStorageCapabilityDescriptor.java 69
55e5092e7d43c10bc020fe5b2181ec09f6853d3d main/java/dev/caskeleton/adapter/outbound/objectstorage/readiness/ObjectStorageCapabilityEvidence.java 71
eb2acc4d447a9f07b56cd0fffd384fb4b5f629cd main/java/dev/caskeleton/adapter/outbound/objectstorage/readiness/ObjectStorageOperationProfile.java 24
8f6f807c770b5806be739cbc85f2eb4fdd1ca515 main/java/dev/caskeleton/adapter/outbound/objectstorage/readiness/ObjectStorageReadinessLevel.java 9
96e3713897b0e8a7b49b373d3ab1db7a6dd333f1 main/java/dev/caskeleton/adapter/outbound/objectstorage/FilesystemObjectStorageAdapter.java 111
73f8f5957a26e8b847b4fc7278ce9b57b243f13a main/java/dev/caskeleton/adapter/outbound/objectstorage/ObjectStorageConfig.java 73
9c30d68532834e86015e16fe93e28b033201d1ef main/java/dev/caskeleton/adapter/outbound/objectstorage/ObjectStorageSettings.java 119
d4e9346f832cc2a9cbd0780096379829a0eced3f main/java/dev/caskeleton/adapter/outbound/objectstorage/S3ObjectStorageAdapter.java 129
=== OWNED FILES (test + resources) ===
ace0020defa378a1510f6ca6040f129e042cb7e8 test/java/dev/caskeleton/adapter/outbound/objectstorage/contract/ObjectStorageProviderContract.java 247
8c7560b9be41fbc8d952784faaae8634ab6dbdfb test/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalDevObjectStorageProviderTest.java 77
91eb70284a74e0cc262a0b33b4f7a1edfbb4ffc9 test/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalDevObjectStorageRecoveryTest.java 153
4e1d428672fea90e9b92ddc98874f11f0b0ab501 test/java/dev/caskeleton/adapter/outbound/objectstorage/maintenance/LegacyAdoptionApprovalVerifierTest.java 145
e062e3f31a5fea30158239b1695ff2814b655be8 test/java/dev/caskeleton/adapter/outbound/objectstorage/maintenance/LegacyObjectAdoptionServiceTest.java 109
ee44b4988b56babe46ac436c242fd2069b43ce4b test/java/dev/caskeleton/adapter/outbound/objectstorage/readiness/ObjectStorageReadinessRegistryTest.java 196
110b8e4bfefe96f013fe2917d7ab70dc93788a74 test/java/dev/caskeleton/adapter/outbound/objectstorage/FilesystemObjectStorageAdapterTest.java 87
6c218260e7f11c4eeeba321210f77f0090c87633 test/java/dev/caskeleton/adapter/outbound/objectstorage/LegacyObjectStorageBehaviorTest.java 68
4ede9de7f100b30be9e8ec7a9863524cef485629 test/java/dev/caskeleton/adapter/outbound/objectstorage/LegacyObjectStorageConfigTest.java 58
15efccb9cd361f8e77716301fa6276914713c079 test/java/dev/caskeleton/adapter/outbound/objectstorage/ObjectStorageArchitectureTest.java 44
62ef07fd72f6315d02855f28a0dd674e9ae35504 test/java/dev/caskeleton/adapter/outbound/objectstorage/S3ObjectStorageAdapterIT.java 102
3ae16ed6b35f3112d8d165082971d600a54c77f1 test/java/dev/caskeleton/adapter/outbound/objectstorage/S3ObjectStorageAdapterTest.java 99
f4e41f21b45750363e967561a863f5d880c1c601 test/resources/object-storage/minio-provider-evidence.json 25
main: 30
test+resources: 13
main LOC: 2420 total
=== 8.1 reachability: maintenance/** ===
$ git grep -n 'LegacyObjectAdoptionService\|Ed25519LegacyAdoptionApprovalVerifier\|LegacyAdoptionApprovalReplayStore\|LegacyObjectInspector' -- . | grep -v '/objectstorage/maintenance/'
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfig.java:3:import dev.caskeleton.adapter.outbound.objectstorage.maintenance.LegacyAdoptionApprovalReplayStore;
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfig.java:4:import dev.caskeleton.adapter.outbound.objectstorage.maintenance.LegacyObjectAdoptionService;
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfig.java:5:import dev.caskeleton.adapter.outbound.objectstorage.maintenance.LegacyObjectInspector;
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfig.java:31: LegacyObjectInspector inspector,
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfig.java:33: LegacyAdoptionApprovalReplayStore replayStore,
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfig.java:35: return new LegacyObjectAdoptionService(inspector, publications, replayStore, clock);
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfigTest.java:6:import dev.caskeleton.adapter.outbound.objectstorage.maintenance.LegacyAdoptionApprovalReplayStore;
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfigTest.java:7:import dev.caskeleton.adapter.outbound.objectstorage.maintenance.LegacyObjectInspector;
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfigTest.java:30: .withBean(LegacyObjectInspector.class, () -> mock(LegacyObjectInspector.class))
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfigTest.java:34: LegacyAdoptionApprovalReplayStore.class,
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfigTest.java:35: () -> mock(LegacyAdoptionApprovalReplayStore.class))
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfigTest.java:53: .withBean(LegacyObjectInspector.class, () -> mock(LegacyObjectInspector.class))
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfigTest.java:57: LegacyAdoptionApprovalReplayStore.class,
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfigTest.java:58: () -> mock(LegacyAdoptionApprovalReplayStore.class))
exit=0
$ git grep -n 'LegacyObjectAdoptionApprovalVerifierPort\|LegacyObjectAdoptionPort' -- . | grep -v '/objectstorage/maintenance/'
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfig.java:7:import dev.caskeleton.application.storage.migration.LegacyObjectAdoptionPort;
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfig.java:30: public LegacyObjectAdoptionPort legacyObjectAdoptionPort(
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfigTest.java:9:import dev.caskeleton.application.storage.migration.LegacyObjectAdoptionPort;
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfigTest.java:23: .run(context -> assertThat(context).doesNotHaveBean(LegacyObjectAdoptionPort.class));
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfigTest.java:45: assertThat(context).hasSingleBean(LegacyObjectAdoptionPort.class);
application-core/src/main/java/dev/caskeleton/application/storage/migration/LegacyObjectAdoptionApprovalVerifierPort.java:5:public interface LegacyObjectAdoptionApprovalVerifierPort {
application-core/src/main/java/dev/caskeleton/application/storage/migration/LegacyObjectAdoptionPort.java:5:public interface LegacyObjectAdoptionPort {
application-core/src/test/java/dev/caskeleton/application/objectstorage/ObjectStorageArchitectureContractTest.java:49: "dev.caskeleton.application.storage.migration.LegacyObjectAdoptionApprovalVerifierPort",
application-core/src/test/java/dev/caskeleton/application/objectstorage/ObjectStorageArchitectureContractTest.java:50: "dev.caskeleton.application.storage.migration.LegacyObjectAdoptionPort",
sample-portfolio/src/main/java/dev/caskeleton/sample/portfolio/application/poster/migration/AdoptLegacyPosterImageUseCase.java:8:import dev.caskeleton.application.storage.migration.LegacyObjectAdoptionApprovalVerifierPort;
sample-portfolio/src/main/java/dev/caskeleton/sample/portfolio/application/poster/migration/AdoptLegacyPosterImageUseCase.java:9:import dev.caskeleton.application.storage.migration.LegacyObjectAdoptionPort;
sample-portfolio/src/main/java/dev/caskeleton/sample/portfolio/application/poster/migration/AdoptLegacyPosterImageUseCase.java:35: private final LegacyObjectAdoptionPort adoptions;
sample-portfolio/src/main/java/dev/caskeleton/sample/portfolio/application/poster/migration/AdoptLegacyPosterImageUseCase.java:36: private final LegacyObjectAdoptionApprovalVerifierPort approvals;
sample-portfolio/src/main/java/dev/caskeleton/sample/portfolio/application/poster/migration/AdoptLegacyPosterImageUseCase.java:43: LegacyObjectAdoptionPort adoptions,
sample-portfolio/src/main/java/dev/caskeleton/sample/portfolio/application/poster/migration/AdoptLegacyPosterImageUseCase.java:44: LegacyObjectAdoptionApprovalVerifierPort approvals,
exit=0
=== 8.1b reachability: readiness/** and the declared registry file ===
$ git grep -n 'ObjectStorageCapabilityEvidence\|ObjectStorageCapabilityCard\|ObjectStorageReadinessLevel' -- . | grep -v '/objectstorage/readiness/'
exit=1
$ git grep -rn 'object-storage-readiness' -- . | head -20
adapter/outbound/objectstorage/CLAUDE.md:13:`docs/registries/object-storage-readiness.yaml`.
adapter/outbound/objectstorage/CLAUDE.md:44:- Claims above the exact rows in `docs/registries/object-storage-readiness.yaml`.
adapter/outbound/objectstorage/README.md:11:evidence claims in `docs/registries/object-storage-readiness.yaml`.
adapter/outbound/objectstorage/build.gradle:46: .resolve('docs/registries/object-storage-readiness.yaml').toFile()
app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:32: "object-storage-readiness.yaml",
app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:165: invalidSpecialized.resolve("object-storage-readiness.yaml"),
app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:174: .hasMessageContaining("object-storage-readiness.yaml");
app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:179: fractionalSpecializedVersion.resolve("object-storage-readiness.yaml"),
app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:187: .hasMessageContaining("object-storage-readiness.yaml");
app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:192: duplicateSpecializedIdentity.resolve("object-storage-readiness.yaml"),
app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:204: String specialized = Files.readString(falseProvenance.resolve("object-storage-readiness.yaml"));
app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:206: falseProvenance.resolve("object-storage-readiness.yaml"),
app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:213: .hasMessageContaining("object-storage-readiness.yaml");
app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:218: Files.readString(embeddedFalseProvenance.resolve("object-storage-readiness.yaml"))
app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:221: embeddedFalseProvenance.resolve("object-storage-readiness.yaml"),
app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:233: .hasMessageContaining("object-storage-readiness.yaml");
app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:236: Path fabricatedHeaderFile = fabricatedBranchHeader.resolve("object-storage-readiness.yaml");
app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:243: .hasMessageContaining("object-storage-readiness.yaml");
app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:246: Path reorderedHeaderFile = reorderedHeader.resolve("object-storage-readiness.yaml");
app-bootstrap/src/test/java/dev/caskeleton/bootstrap/contract/ContractRegistrySchemaGovernanceTest.java:260: .hasMessageContaining("object-storage-readiness.yaml");
exit=0
$ git ls-files | grep -i 'registries/' | head -20
exit=0
=== 8.2 conditional sibling: legacy root adapters vs the new capability ===
$ grep -n 'autoCreateBucket\|publicAcl' adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ProviderBinding.java adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/ObjectStorageSettings.java adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/ObjectStorageConfig.java
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ProviderBinding.java:268: if (settings.autoCreateBucket() || settings.publicAcl()) {
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/ObjectStorageSettings.java:46: private boolean autoCreateBucket = true;
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/ObjectStorageSettings.java:113: return autoCreateBucket;
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/ObjectStorageSettings.java:116: public void setAutoCreateBucket(boolean autoCreateBucket) {
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/ObjectStorageSettings.java:117: this.autoCreateBucket = autoCreateBucket;
exit=0
$ cat -n adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/config/LegacyObjectStorageActivationGuard.java
1 package dev.caskeleton.adapter.outbound.objectstorage.config;
2
3 import java.util.Arrays;
4 import org.springframework.context.annotation.Condition;
5 import org.springframework.context.annotation.ConditionContext;
6 import org.springframework.core.env.ConfigurableEnvironment;
7 import org.springframework.core.env.EnumerablePropertySource;
8 import org.springframework.core.type.AnnotatedTypeMetadata;
9
10 /** Activates the deprecated alias only when explicitly present and rejects mixed namespaces. */
11 public final class LegacyObjectStorageActivationGuard implements Condition {
12
13 private static final String LEGACY_PREFIX = "ca-skeleton.objectstorage.";
14 private static final String CANONICAL_PREFIX = "app.object-storage.";
15
16 @Override
17 public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
18 boolean legacy = hasPrefix(context, LEGACY_PREFIX);
19 boolean canonical = hasPrefix(context, CANONICAL_PREFIX);
20 if (legacy && canonical) {
21 throw new IllegalStateException(
22 "legacy and canonical object-storage configuration cannot be combined");
23 }
24 return legacy;
25 }
26
27 private static boolean hasPrefix(ConditionContext context, String prefix) {
28 if (context.getEnvironment() instanceof ConfigurableEnvironment environment) {
29 for (var propertySource : environment.getPropertySources()) {
30 if (propertySource instanceof EnumerablePropertySource<?> enumerable
31 && Arrays.stream(enumerable.getPropertyNames())
32 .anyMatch(name -> name.startsWith(prefix))) {
33 return true;
34 }
35 }
36 }
37 return knownProperties(prefix).stream().anyMatch(context.getEnvironment()::containsProperty);
38 }
39
40 private static java.util.List<String> knownProperties(String prefix) {
41 if (LEGACY_PREFIX.equals(prefix)) {
42 return java.util.List.of(
43 prefix + "backend",
44 prefix + "base-path",
45 prefix + "bucket",
46 prefix + "endpoint",
47 prefix + "region",
48 prefix + "access-key",
49 prefix + "secret-key",
50 prefix + "path-style-access",
51 prefix + "auto-create-bucket");
52 }
53 return java.util.List.of(
54 prefix + "enabled",
55 prefix + "default-destination",
56 prefix + "legacy.enabled",
57 prefix + "legacy.backend",
58 prefix + "legacy.base-path");
59 }
60 }
exit=0
$ grep -n 'symbolic link\|isSymbolicLink' adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalObjectPathGuard.java adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/FilesystemObjectStorageAdapter.java
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalObjectPathGuard.java:23: if (Files.isSymbolicLink(root)) {
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalObjectPathGuard.java:24: throw new IllegalArgumentException("local object-storage root cannot be a symbolic link");
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalObjectPathGuard.java:73: if (Files.isSymbolicLink(target)) {
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalObjectPathGuard.java:74: throw new IllegalArgumentException("local object target cannot be a symbolic link");
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalObjectPathGuard.java:86: if (Files.isSymbolicLink(current)) {
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalObjectPathGuard.java:87: throw new IllegalArgumentException("local object parent cannot be a symbolic link");
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalObjectPathGuard.java:95: || Files.isSymbolicLink(current)) {
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalObjectPathGuard.java:109: if (Files.isSymbolicLink(current)) {
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalObjectPathGuard.java:110: throw new IllegalArgumentException("local object parent cannot be a symbolic link");
exit=0
=== 8.3 duplicate mechanism: two capability tables for filesystem-local-dev ===
$ grep -c 'Support.SUPPORTED' adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalDevObjectStorageProvider.java adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/FilesystemLocalDevProviderContribution.java
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalDevObjectStorageProvider.java:6
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/FilesystemLocalDevProviderContribution.java:6
exit=0
$ grep -n 'private static EnumMap' adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalDevObjectStorageProvider.java adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/FilesystemLocalDevProviderContribution.java
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/LocalDevObjectStorageProvider.java:93: private static EnumMap<Capability, Support> capabilitySupport() {
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/filesystem/FilesystemLocalDevProviderContribution.java:58: private static EnumMap<ObjectStorageProvider.Capability, ObjectStorageProvider.Support>
exit=0
=== 8.4 declared-but-unenforced: adoption claim result ===
$ grep -n 'ClaimResult claim\|claim !=\|markTerminal\|publications.publish' adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/maintenance/LegacyObjectAdoptionService.java
68: LegacyAdoptionApprovalReplayStore.ClaimResult claim = replayStore.claim(replay);
69: var published = publications.publish(request.publicationRequest(), inspected.producer());
70: if (claim != LegacyAdoptionApprovalReplayStore.ClaimResult.TERMINAL_REPLAY) {
71: replayStore.markTerminal(
exit=0
$ grep -n 'ObjectStorageLegacyMigrationConfig' -B 2 -A 30 adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageLegacyMigrationConfig.java | head -45
25-// This explicit adoption wiring remains active until data/API migration is complete.
26-@SuppressWarnings("deprecation")
27:public class ObjectStorageLegacyMigrationConfig {
28-
29- @Bean
30- public LegacyObjectAdoptionPort legacyObjectAdoptionPort(
31- LegacyObjectInspector inspector,
32- ManagedObjectPublicationPort publications,
33- LegacyAdoptionApprovalReplayStore replayStore,
34- Clock clock) {
35- return new LegacyObjectAdoptionService(inspector, publications, replayStore, clock);
36- }
37-}
exit=0