Files
document-haness/docs/clean-architecture-backend-template/final/evidence/raw/208-inbound-graphql-schema-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

146 lines
11 KiB
Plaintext

Sub-scope 02 (inbound-graphql) schema + scalar + compat
revision=a24ece9cf797f7ea647e33bf846b115208ed1ba5
generatedAt=2026-08-30T08:31:40+00:00
=== OWNED FILES ===
e47efeefc3586f233c7d348c8f185a621723859e src/main/java/dev/caskeleton/compat/GraphQlChangeKind.java 285
f47a29a0236d8ae96babe444de03f60a457681c2 src/main/java/dev/caskeleton/compat/GraphQlClientOwnerApproval.java 40
f1c0d907cf440e0cd408c779d3b5b9817bed6c19 src/main/java/dev/caskeleton/compat/GraphQlCompatibilityImpact.java 20
1476785faadce59d8a6f68a9b29d6de7ed7fee91 src/main/java/dev/caskeleton/compat/GraphQlCompatibilityPolicy.java 63
a3a72d7526427ed25a9e77b637f12cb37b763a93 src/main/java/dev/caskeleton/compat/GraphQlCompatibilityReport.java 50
79f2b155be11b607a4b734092efd14052540c45f src/main/java/dev/caskeleton/compat/GraphQlDeprecationGate.java 91
8258b3359088bc1abb994281f6d3dfc19e940bc1 src/main/java/dev/caskeleton/compat/GraphQlRemovalDecision.java 51
64fe8efa32273982c0fd5fb801ea55bbd63bdca1 src/main/java/dev/caskeleton/compat/GraphQlRemovalRequest.java 39
6a3e086faf77f5a3b09d96b2b2d3c93df61593ed src/main/java/dev/caskeleton/compat/GraphQlSchemaChange.java 61
177cd5f3b5bc48995a6df3d57f522b148142b7eb src/main/java/dev/caskeleton/compat/GraphQlSchemaComparator.java 791
5d728d6c04208d8047af5012d1856ae89be86ef3 src/main/java/dev/caskeleton/compat/GraphQlSchemaUsage.java 71
8d2e51a997a30b030fb60094f42c63073023cd40 src/main/java/dev/caskeleton/scalar/BigDecimalScalar.java 211
e1a93151a07fa71dd0c00b17a1ef0e40d8fb9a65 src/main/java/dev/caskeleton/scalar/DateScalar.java 105
7a8907d3c07d9659b097a2fc6b77bc413d1f7fda src/main/java/dev/caskeleton/scalar/GraphQlDecimalBounds.java 69
99fd7c63bf4b7c411eba8b5a49d518b51ee6d0d2 src/main/java/dev/caskeleton/scalar/GraphQlScalarWiringConfigurer.java 84
5e4a6608bb0b3b01d2edd71614f0ffd9ab604103 src/main/java/dev/caskeleton/scalar/InstantScalar.java 117
48356a0f4e3e9adb219c2d38c3db3ace7bbb3395 src/main/java/dev/caskeleton/scalar/LongScalar.java 189
29f48b4eff25f5f07ee71d013418332494109062 src/main/java/dev/caskeleton/scalar/UuidScalar.java 109
772376b683e92de6988d77ba789b4b0a2e871ab9 src/main/java/dev/caskeleton/schema/GraphQlContractVersion.java 29
652af3bd3ad05296b3370369c5bbd64cc1557b32 src/main/java/dev/caskeleton/schema/GraphQlMappingInspectionGate.java 52
b1eb5a2565aa19c0f6d761bd0880b9d19b375712 src/main/java/dev/caskeleton/schema/GraphQlMappingIssue.java 102
60f76512c3335b925bbcb57105f10d142cdf618f src/main/java/dev/caskeleton/schema/GraphQlMappingPolicy.java 30
abc186cfcd5b2be828a22b03c395659a41f06107 src/main/java/dev/caskeleton/schema/GraphQlOneOfInputValidator.java 55
228405fe469bbd3e14609f96f7af2bf084a7e2d9 src/main/java/dev/caskeleton/schema/GraphQlOneOfPolicy.java 35
73de6ccaf8d753b5eec448424dc57b642cb9ff47 src/main/java/dev/caskeleton/schema/GraphQlOneOfSchemaGate.java 77
3bf90c365a5ca498fb0595092ac2f8d842fea939 src/main/java/dev/caskeleton/schema/GraphQlOneOfViolationException.java 41
8969810a607e282bb61c51e6e0a1c8620bcde3ea src/main/java/dev/caskeleton/schema/GraphQlScalarDefinition.java 43
2f9f1cbaca2aab0b4898d2058ff18390ddecf2cc src/main/java/dev/caskeleton/schema/GraphQlScalarManifest.java 141
9de5a34f734e1770b6010ceeffe08e16e25d29de src/main/java/dev/caskeleton/schema/GraphQlScalarPolicy.java 37
1869a247c37cc53df916bf8bee08b5c771761db4 src/main/java/dev/caskeleton/schema/GraphQlSchemaAssembler.java 39
eb2256250d6b6e5e55089559fe7183dc404d1c6d src/main/java/dev/caskeleton/schema/GraphQlSchemaAssemblyException.java 52
fc09a237fd39e8ace0e153f4fa19133bb2ab7ede src/main/java/dev/caskeleton/schema/GraphQlSchemaAssemblyResult.java 189
24907e279619760e06dbd4c8e12c65aa5942cebb src/main/java/dev/caskeleton/schema/GraphQlSchemaContract.java 46
6b71fd3ecc60aed5b34cc2843874316aae05a8c5 src/main/java/dev/caskeleton/schema/GraphQlSchemaHash.java 46
a808ab5f80d6702e144bf1a76246a9cd3ae14cc5 src/main/java/dev/caskeleton/schema/GraphQlSchemaMappingException.java 34
3062ccea72f2a7b0f8a9777d9790bb9a843b0b51 src/main/java/dev/caskeleton/schema/GraphQlSchemaOwnership.java 29
4960c6cf963ced0e5f101bb7427492b62d63e9a6 src/main/java/dev/caskeleton/schema/GraphQlSchemaResource.java 82
00dbd91228499cec7562c5cd26c125d46a24605f src/test/java/dev/caskeleton/compat/GraphQlDeprecationGateTest.java 172
5dbaee0ae713d288d6b685bb33002c577ac41b29 src/test/java/dev/caskeleton/compat/GraphQlSchemaComparatorTest.java 343
eb56b126ee81eadf9ee782a426c273c98c835658 src/test/java/dev/caskeleton/scalar/GraphQlScalarContractTest.java 132
62a05f39cc5455916ba727e947a3e56e28631784 src/test/java/dev/caskeleton/scalar/GraphQlScalarSymmetryTest.java 131
c5aef66492904a9f75ba3d25c6efd6fd35116c57 src/test/java/dev/caskeleton/schema/GraphQlMappingInspectionGateTest.java 70
0608ec6545f5ee48d7f0ec1e46830002484d7903 src/test/java/dev/caskeleton/schema/GraphQlOneOfInputValidatorTest.java 131
be971ec8e0d7c8e26f88d7646caab97302e272e5 src/test/java/dev/caskeleton/schema/GraphQlScalarManifestTest.java 100
ea0d6ba9f36059ce25e1d9c6e1c8e51372d2ba9d src/test/java/dev/caskeleton/schema/GraphQlSchemaAssemblerTest.java 124
a2dc50376dc57ee072b2370c980eb05ba1052a1a src/test/java/dev/caskeleton/schema/GraphQlSchemaContractTest.java 74
file_count=46
=== 8.1 파일 단위 배선 (autoconf / main_other / test) ===
TYPE autoconf main_other test
GraphQlContractVersion 0 2 2
GraphQlMappingInspectionGate 3 0 2
GraphQlMappingIssue 0 3 3
GraphQlMappingPolicy 0 1 1
GraphQlOneOfInputValidator 0 0 1
GraphQlOneOfPolicy 0 2 1
GraphQlOneOfSchemaGate 0 0 2
GraphQlOneOfViolationException 0 2 1
GraphQlScalarDefinition 3 1 2
GraphQlScalarManifest 4 1 2
GraphQlScalarPolicy 0 1 1
GraphQlSchemaAssembler 0 0 3
GraphQlSchemaAssemblyException 0 3 1
GraphQlSchemaAssemblyResult 0 1 2
GraphQlSchemaContract 0 0 1
GraphQlSchemaHash 3 2 2
GraphQlSchemaMappingException 0 1 1
GraphQlSchemaOwnership 0 2 2
GraphQlSchemaResource 0 2 3
BigDecimalScalar 0 1 2
DateScalar 0 1 1
GraphQlDecimalBounds 0 1 1
GraphQlScalarWiringConfigurer 7 0 2
InstantScalar 0 2 1
LongScalar 0 1 2
UuidScalar 0 1 2
GraphQlChangeKind 0 4 1
GraphQlClientOwnerApproval 0 1 1
GraphQlCompatibilityImpact 0 2 1
GraphQlCompatibilityPolicy 0 0 2
GraphQlCompatibilityReport 0 3 1
GraphQlDeprecationGate 0 0 1
GraphQlRemovalDecision 0 1 1
GraphQlRemovalRequest 0 1 1
GraphQlSchemaChange 0 4 1
GraphQlSchemaComparator 0 0 3
GraphQlSchemaUsage 0 2 1
=== 8.2 스키마 해시 사슬 ===
$ grep -rn 'GraphQlSchemaHash' adapter/inbound/graphql/src/main --include=*.java | sed 's|adapter/inbound/graphql/src/main/java/dev/caskeleton/adapter/inbound/graphql/||'
autoconfigure/GraphQlPlatformActuatorEndpoint.java:4:import dev.caskeleton.adapter.inbound.graphql.schema.GraphQlSchemaHash;
autoconfigure/GraphQlPlatformActuatorEndpoint.java:24: private final GraphQlSchemaHash schemaHash;
autoconfigure/GraphQlPlatformActuatorEndpoint.java:40: GraphQlSchemaHash schemaHash,
schema/GraphQlSchemaContract.java:20: GraphQlSchemaHash schemaHash,
schema/GraphQlSchemaHash.java:18:public record GraphQlSchemaHash(String value) {
schema/GraphQlSchemaHash.java:22: public GraphQlSchemaHash {
schema/GraphQlSchemaHash.java:33: public static GraphQlSchemaHash sha256(String canonicalSdl) {
schema/GraphQlSchemaHash.java:41: return new GraphQlSchemaHash(HexFormat.of().formatHex(digest));
schema/GraphQlSchemaAssemblyResult.java:94: public GraphQlSchemaHash schemaHash() {
schema/GraphQlSchemaAssemblyResult.java:95: return GraphQlSchemaHash.sha256(canonicalSdl);
exit=0
$ grep -rn 'GraphQlPlatformActuatorEndpoint' adapter/inbound/graphql/src --include=*.java | sed 's|adapter/inbound/graphql/src/[a-z]*/java/dev/caskeleton/adapter/inbound/graphql/||'
autoconfigure/GraphQlPolicyRequestPathTest.java:28: * a production deployment without it, and {@link GraphQlPlatformActuatorEndpoint}, which reports it
autoconfigure/GraphQlPlatformStartupValidatorTest.java:108: new GraphQlPlatformActuatorEndpoint(
autoconfigure/GraphQlPlatformActuatorEndpoint.java:18:public final class GraphQlPlatformActuatorEndpoint {
autoconfigure/GraphQlPlatformActuatorEndpoint.java:38: public GraphQlPlatformActuatorEndpoint(
exit=0
$ grep -c '@Bean' adapter/inbound/graphql/src/main/java/dev/caskeleton/adapter/inbound/graphql/autoconfigure/GraphQlPlatformAutoConfiguration.java
39
exit=0
=== 8.3 oneOf: 라이브러리 버전과 스키마 사용 ===
$ grep -n 'graphql-java:' adapter/inbound/graphql/gradle.lockfile | head -2
32:com.graphql-java:graphql-java:25.0=compileClasspath,runtimeClasspath,testCompileClasspath,testFixturesCompileClasspath,testFixturesRuntimeClasspath,testRuntimeClasspath
33:com.graphql-java:java-dataloader:6.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testFixturesCompileClasspath,testFixturesRuntimeClasspath,testRuntimeClasspath
exit=0
$ grep -rn 'oneOf' adapter/inbound/graphql/src/main/resources adapter/inbound/graphql/src/test/resources 2>/dev/null | wc -l
0
exit=0
$ grep -n 'the platform enforces' adapter/inbound/graphql/src/main/java/dev/caskeleton/adapter/inbound/graphql/schema/GraphQlOneOfPolicy.java
4: * The September 2025 {@code @oneOf} input rules the platform enforces (design §7.5).
exit=0
=== 8.4 조립기가 막겠다고 선언한 위험 ===
$ sed -n '1,12p' adapter/inbound/graphql/src/main/java/dev/caskeleton/adapter/inbound/graphql/schema/GraphQlSchemaAssembler.java | grep -vE '^import|^package'
/**
* Assembles module-owned SDL fragments into one schema, deterministically.
*
* <p>Fragments are sorted by owning module and path before parsing. Filesystem and classpath
* enumeration order is not stable across machines or packaging formats, and an unstable order would
* both move the schema hash and change which of two conflicting declarations "wins" — so the order
* is imposed here rather than inherited from discovery.
exit=0