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>
212 lines
23 KiB
Plaintext
212 lines
23 KiB
Plaintext
Sub-scope 05 (objectstorage) direct/** + multipart/** — manifest and negative-space probes
|
|
revision=a24ece9cf797f7ea647e33bf846b115208ed1ba5
|
|
generatedAt=2026-08-30T02:51:17+00:00
|
|
cwd=/shared/codebase/clean-architecture-backend-template/src
|
|
|
|
=== OWNED FILES ===
|
|
a383f614ffbe34051a5fd340db70554e96f9b6d1 main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectGrantGeneration.java 38
|
|
ebf7f8ca1e5c9cd35c95bb92edd183a370e7e067 main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectGrantProvider.java 91
|
|
4078d3d3f61f4dbd627be3ac1702a35108519682 main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCompletionVerifier.java 57
|
|
038e985585103fedb18fcaacc0d4711c84e69e4f main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCoordinator.java 509
|
|
4708542e986845196d4245ca049f837cc35d9b3b main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartGrantLedger.java 107
|
|
d98d11e29fe674ec8fd0fc8986432a83a9f6eccc main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartProvider.java 100
|
|
f039dc14b5ca2a653d77a40bb988c21b91937da8 main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectPartAcknowledgementVerifier.java 32
|
|
44097b32375e6e97f9bcc817fe4a44106c22d88d main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectPublishedObjectResolver.java 67
|
|
768779d2f64094cfc5e3ce149638b47130e56fc8 main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinator.java 335
|
|
94bb156ce8d61a77f685ace80228d4611645460c main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCorsPolicy.java 26
|
|
b94094684e287803bfd8ac01c17bb40714181583 main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferPolicy.java 120
|
|
225bd1024bdb30b9633948f3a99d86c4bf435ad3 main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferSessionRecord.java 166
|
|
2cf1d611f180570cc98df81dc8c685504bbc7103 main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/PresignedGrantRedactor.java 22
|
|
d6e5c166372a6c315fa57923d223380fa9752a93 main/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/ManagedMultipartCoordinator.java 77
|
|
9236dc512954a46804f811d9ae0c7d299c779a8d main/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/MultipartCompletionEvidence.java 19
|
|
9642d221600fd2ea0974d61a1f004268d3c818dd main/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/MultipartOperationResolver.java 67
|
|
a6b251092d0b511de9ca7286e229c0e614588a51 main/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/MultipartPartLedger.java 86
|
|
27e7f34cefbfbf198bd2a4069f79c357475a9fd2 main/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/MultipartUploadPlan.java 69
|
|
dc9f9f566b8ff4ba1dbe6fe256dcb648af082074 test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCoordinatorTest.java 327
|
|
d5c64c0bbc68ef0dec9197b241fdab398342919c test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartRaceTest.java 35
|
|
8c02e0a78967e3f0405734c984d9c4d8240b928b test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinatorTest.java 251
|
|
dbbfa053ea245173ad62943c2360080c2c0010f4 test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCorsContractTest.java 23
|
|
8e3e3a280752af008efa3ac5a6f89daa26a19342 test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/PresignedGrantRedactionTest.java 68
|
|
4a57af09f29a0902cdd831c8abdd98842ae694b5 test/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/ManagedMultipartCoordinatorTest.java 178
|
|
325e11d1443c4f2b3d1ff5ded69d13cac3c7c415 test/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/MultipartResponseLossTest.java 65
|
|
|
|
main: 18
|
|
test: 7
|
|
main LOC: 1988 total
|
|
|
|
=== 8.1 reachability: who constructs the two coordinators ===
|
|
$ git grep -n 'new DirectTransferCoordinator\|new DirectMultipartCoordinator\|new ManagedMultipartCoordinator\|new MultipartOperationResolver\|new DirectPublishedObjectResolver' -- 'adapter/outbound/objectstorage/src' 'app' 'application' 'adapter'
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ObjectStorageProviderContribution.java:141: new DirectPublishedObjectResolver(
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCoordinatorTest.java:64: new DirectMultipartCoordinator(
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCoordinatorTest.java:109: new DirectMultipartCoordinator(
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCoordinatorTest.java:126: new DirectMultipartCoordinator(
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinatorTest.java:57: new DirectTransferCoordinator(ROUTE, store, policy(), provider, CLOCK);
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinatorTest.java:77: new DirectTransferCoordinator(
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinatorTest.java:113: new DirectTransferCoordinator(
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/ManagedMultipartCoordinatorTest.java:96: ManagedMultipartCoordinator coordinator = new ManagedMultipartCoordinator(store);
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/MultipartResponseLossTest.java:17: MultipartOperationResolver resolver = new MultipartOperationResolver();
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/MultipartResponseLossTest.java:21: new MultipartOperationResolver.UploadCandidate(
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/MultipartResponseLossTest.java:28: new MultipartOperationResolver.InitiateResolution(
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/MultipartResponseLossTest.java:33: new MultipartOperationResolver.InitiateResolution(
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/MultipartResponseLossTest.java:37: new MultipartOperationResolver.InitiateResolution(
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/MultipartResponseLossTest.java:43: MultipartOperationResolver resolver = new MultipartOperationResolver();
|
|
exit=0
|
|
|
|
$ git grep -rn 'DirectMultipartUploadPort\|DirectObjectUploadPort\|DirectObjectDownloadGrantPort' -- 'adapter/outbound/objectstorage/src/main' 'application/core/src/main'
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCoordinator.java:27:import dev.caskeleton.application.objectstorage.port.DirectMultipartUploadPort;
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCoordinator.java:46:public final class DirectMultipartCoordinator implements DirectMultipartUploadPort {
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinator.java:19:import dev.caskeleton.application.objectstorage.port.DirectObjectDownloadGrantPort;
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinator.java:20:import dev.caskeleton.application.objectstorage.port.DirectObjectUploadPort;
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinator.java:39: implements DirectObjectUploadPort, DirectObjectDownloadGrantPort {
|
|
exit=0
|
|
|
|
=== 8.2 conditional sibling: the same part-size policy, two call sites ===
|
|
$ grep -n 'MINIMUM_NON_FINAL_PART_BYTES\s*=' adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ClientPolicy.java
|
|
13: public static final long MINIMUM_NON_FINAL_PART_BYTES = 5L * 1024 * 1024;
|
|
exit=0
|
|
|
|
$ grep -n 'requirePartSize' adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ClientPolicy.java adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/MultipartUploadPlan.java adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCoordinator.java
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ClientPolicy.java:47: public static void requirePartSize(long partBytes, boolean finalPart) {
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/MultipartUploadPlan.java:61: S3ClientPolicy.requirePartSize(result, partNumber == partCount);
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCoordinator.java:163: S3ClientPolicy.requirePartSize(request.exactPartLength(), false);
|
|
exit=0
|
|
|
|
$ git grep -n 'requirePartSize' -- 'adapter/outbound/objectstorage/src'
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCoordinator.java:163: S3ClientPolicy.requirePartSize(request.exactPartLength(), false);
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/MultipartUploadPlan.java:61: S3ClientPolicy.requirePartSize(result, partNumber == partCount);
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ClientPolicy.java:47: public static void requirePartSize(long partBytes, boolean finalPart) {
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ManagedMultipartProvider.java:80: S3ClientPolicy.requirePartSize(
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3SdkApiCharacterizationTest.java:93: S3ClientPolicy.requirePartSize(S3ClientPolicy.MINIMUM_NON_FINAL_PART_BYTES, false);
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3SdkApiCharacterizationTest.java:94: S3ClientPolicy.requirePartSize(S3ClientPolicy.MINIMUM_NON_FINAL_PART_BYTES - 1, true);
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3SdkApiCharacterizationTest.java:98: S3ClientPolicy.requirePartSize(
|
|
exit=0
|
|
|
|
--- does the grant request carry a final-part signal? ---
|
|
$ sed -n '1,80p' application/core/src/main/java/dev/caskeleton/application/objectstorage/request/PartUploadGrantRequest.java
|
|
sed: can't read application/core/src/main/java/dev/caskeleton/application/objectstorage/request/PartUploadGrantRequest.java: No such file or directory
|
|
exit=2
|
|
|
|
=== 8.2b conditional sibling: signed-grant endpoint validation, upload vs download ===
|
|
$ grep -n 'validateSignedGrant\|planningEndpoint\|signUpload\|signDownload\|signPart' adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinator.java adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCoordinator.java
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinator.java:68: policy.planningEndpoint(),
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinator.java:94: DirectGrantProvider.DirectGrantMaterial material = provider.signUpload(current.session());
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinator.java:95: policy.validateSignedGrant(material.requestUri(), current.session().expiresAt());
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinator.java:142: policy.planningEndpoint(),
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinator.java:180: provider.signDownload(prepared.session(), published);
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCoordinator.java:191: DirectGrantProvider.DirectGrantMaterial material = provider.signPart(session, grant.record());
|
|
exit=0
|
|
|
|
$ git grep -n 'validateSignedGrant' -- 'adapter/outbound/objectstorage/src'
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinator.java:95: policy.validateSignedGrant(material.requestUri(), current.session().expiresAt());
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferPolicy.java:84: public void validateSignedGrant(URI uri, Instant expectedExpiry) {
|
|
exit=0
|
|
|
|
=== 8.3 duplicate mechanism: two independent process-local bearer caches ===
|
|
$ git grep -n 'new ConcurrentHashMap' -- 'adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct'
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCoordinator.java:55: new ConcurrentHashMap<>();
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinator.java:47: new ConcurrentHashMap<>();
|
|
exit=0
|
|
|
|
$ git grep -n 'unavailable after process restart' -- 'adapter/outbound/objectstorage/src'
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCoordinator.java:183: "issued direct multipart bearer is unavailable after process restart");
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinator.java:87: "issued direct grant bearer material is unavailable after process restart");
|
|
exit=0
|
|
|
|
=== 8.4 declared-but-unused policy bounds ===
|
|
$ git grep -n 'maximumOutstandingGenerations' -- 'adapter/outbound/objectstorage/src'
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferPolicy.java:18: int maximumOutstandingGenerations,
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferPolicy.java:46: if (maximumOutstandingGenerations < 1 || maximumOutstandingGenerations > 16) {
|
|
exit=0
|
|
|
|
$ git grep -n 'maximumExposureBytes\|providerHardCeilingEnforced\|signatureAgeCeiling' -- 'adapter/outbound/objectstorage/src/main'
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferPolicy.java:14: Duration signatureAgeCeiling,
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferPolicy.java:19: long maximumExposureBytes,
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferPolicy.java:20: boolean providerHardCeilingEnforced,
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferPolicy.java:38: requirePositive("signatureAgeCeiling", signatureAgeCeiling);
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferPolicy.java:49: if (maximumExposureBytes < 1) {
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferPolicy.java:66: || requestedTtl.compareTo(signatureAgeCeiling) > 0) {
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferPolicy.java:69: if (exactBytes < 1 || exactBytes > maximumExposureBytes) {
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferPolicy.java:72: if (uploadProfile == UploadProfile.DIRECT_SINGLE_HARD_CEILING && !providerHardCeilingEnforced) {
|
|
exit=0
|
|
|
|
$ git grep -n 'DirectTransferCorsPolicy' -- 'adapter/outbound/objectstorage/src' 'adapter' 'app'
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCorsPolicy.java:6:public final class DirectTransferCorsPolicy {
|
|
adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCorsPolicy.java:8: private DirectTransferCorsPolicy() {}
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCorsContractTest.java:11: assertThat(DirectTransferCorsPolicy.allowedMethods())
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCorsContractTest.java:13: assertThat(DirectTransferCorsPolicy.allowedRequestHeaders())
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCorsContractTest.java:20: assertThat(DirectTransferCorsPolicy.exposedResponseHeaders())
|
|
exit=0
|
|
|
|
=== 8.4b test coverage of this sub-scope ===
|
|
$ git ls-files 'adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct' 'adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/multipart'
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartCoordinatorTest.java
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectMultipartRaceTest.java
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCoordinatorTest.java
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/DirectTransferCorsContractTest.java
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct/PresignedGrantRedactionTest.java
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/ManagedMultipartCoordinatorTest.java
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/multipart/MultipartResponseLossTest.java
|
|
exit=0
|
|
|
|
$ git grep -hn 'void [a-z][A-Za-z0-9]*(' -- 'adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/direct' 'adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/multipart' | sed 's/^ *//' | head -60
|
|
60: void initiateIntentGrantAcknowledgementAndCompletionAreDurablyOrdered() {
|
|
105: void startReplayResolvesTheDurableInitiationInsteadOfBlindlyCreatingAgain() {
|
|
122: void lostCompleteResponseIsResolvedBeforeTheTerminalVersionIsPersisted() {
|
|
268: public void abort(ObjectDirectMultipartSessionRecord session) {}
|
|
321: private void capture(ObjectControlRecord record) {
|
|
14: void completionHorizonRejectsWhileIssuedPartRequestsMayStillArrive() {
|
|
27: void lateGrantAdmissionRejectsAfterCompletionFence() {
|
|
51: void preparedCasPrecedesSigningAndIssuedCasPrecedesReturningTheBearerGrant() {
|
|
74: void completionIgnoresClientSuccessAndAdvancesOnlyAfterExactProviderVerification() {
|
|
96: void unhealthyQualifiedClockRejectsBeforePersistingOrSigning() {
|
|
244: private void capture(ObjectControlRecord record) {
|
|
10: void browserContractContainsOnlyTheSignedUploadAndCompletionEvidenceSurface() {
|
|
18: void bearerUriAndSignedValuesAreNeverRendered() {
|
|
32: void endpointExpiryCredentialHorizonClockAndHardCeilingFailClosed() {
|
|
37: void freezesSingleVersusMultipartAndEveryS3ResourceBoundary() {
|
|
74: void immutableShardedPartLedgerReplaysSameEvidenceAndConflictsOnDifferentEvidence() {
|
|
90: void initiationIntentIsDurableBeforeTheProviderCall() {
|
|
16: void initiateLossAdoptsOnlyOneExactBoundedCandidate() {
|
|
42: void completionLossUsesExactHeadAndNeverRetriesAnOldUploadId() {
|
|
exit=0
|
|
|
|
|
|
=== 8.1b follow-up: nothing outside direct/** names the coordinators or the policy ===
|
|
$ git grep -n 'DirectTransferCoordinator\|DirectMultipartCoordinator\|DirectTransferPolicy' -- . | grep -v '/objectstorage/direct/' | wc -l
|
|
0
|
|
exit=0
|
|
|
|
=== 8.1c the capability is operator-declarable and allocates a credentialed presigner ===
|
|
$ grep -n 'DIRECT_UPLOAD\|DIRECT_MULTIPART' adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/config/ObjectStorageBindingCompiler.java
|
|
206: case DIRECT_UPLOAD -> ObjectStorageProvider.Capability.DIRECT_UPLOAD;
|
|
207: case DIRECT_MULTIPART -> ObjectStorageProvider.Capability.DIRECT_MULTIPART;
|
|
exit=0
|
|
|
|
$ grep -n 'directUploadEnabled\|directMultipartEnabled\|presignerFactory.apply' adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ObjectStorageProviderContribution.java
|
|
112: boolean directUploadEnabled =
|
|
121: boolean directMultipartEnabled =
|
|
131: directUploadEnabled || directMultipartEnabled
|
|
132: ? presignerFactory.apply(clientPolicy)
|
|
135: !directUploadEnabled
|
|
148: !directMultipartEnabled
|
|
exit=0
|
|
|
|
$ grep -n 'DIRECT_UPLOAD\|DIRECT_MULTIPART\|cannot claim native conditional' adapter/outbound/objectstorage/src/main/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ProviderBinding.java
|
|
196: || config.capabilities().contains(ObjectStorageProvider.Capability.DIRECT_UPLOAD)
|
|
199: .contains(ObjectStorageProvider.Capability.DIRECT_MULTIPART))) {
|
|
201: "the exact MinIO release cannot claim native conditional managed mutation support");
|
|
exit=0
|
|
|
|
--- are the built direct providers ever retrieved from the factory? ---
|
|
$ git grep -n 'directMultipartProvider(\|directTransferProvider(' -- 'adapter/outbound/objectstorage/src' | grep -v 'config/SelectedObjectStorageProviderFactory.java' | grep -v 'S3ObjectStorageProviderContribution.java'
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ProviderCompositionTest.java:112: .directTransferProvider(S3DirectTransferProvider.class))
|
|
adapter/outbound/objectstorage/src/test/java/dev/caskeleton/adapter/outbound/objectstorage/s3/S3ProviderCompositionTest.java:120: .directMultipartProvider(S3DirectMultipartProvider.class))
|
|
exit=0
|
|
|
|
=== 8.4c what the leaf README declares about this sub-scope ===
|
|
$ grep -n 'remain R0\|no direct-grant port is registered' adapter/outbound/objectstorage/README.md
|
|
28:production reconciliation cards remain R0.
|
|
39:privileged purge composition remain separate and empty; no direct-grant port is registered.
|
|
exit=0
|
|
|