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>
112 lines
10 KiB
Plaintext
112 lines
10 KiB
Plaintext
Sub-scope 210-inbound-graphql-cost-security-probes.txt (inbound-graphql) cost + policy + security
|
|
revision=a24ece9cf797f7ea647e33bf846b115208ed1ba5
|
|
generatedAt=2026-08-30T08:34:24+00:00
|
|
|
|
=== OWNED FILES ===
|
|
26863611e45b541a45a3dca357faf77047b817fa src/main/java/dev/caskeleton/cost/GraphQlComplexityCalculator.java 88
|
|
a111f7318a55346ef33d9364616abaad941778eb src/main/java/dev/caskeleton/cost/GraphQlComplexityRejectedException.java 33
|
|
0de7a7f726cbe967ec0d398101aa645c9e135e8f src/main/java/dev/caskeleton/cost/GraphQlComplexityResult.java 34
|
|
303be150f84619dc17a40e4fdc27780f8f9047f9 src/main/java/dev/caskeleton/cost/GraphQlCostCatalog.java 59
|
|
1bcafac94d61daf20a11405d6bfb5f694119047f src/main/java/dev/caskeleton/cost/GraphQlDocumentComplexityScorer.java 295
|
|
35eaca99e0272976da50f2384c1b9b19f9760443 src/main/java/dev/caskeleton/cost/GraphQlDocumentShape.java 38
|
|
b9275d7f02f0e2c7d8ffc5af880042a28a67798d src/main/java/dev/caskeleton/cost/GraphQlDocumentShapeAnalyzer.java 323
|
|
48a5a41fa3fdb00a75cab156bcf2a8f954932b8f src/main/java/dev/caskeleton/cost/GraphQlFieldCostDescriptor.java 31
|
|
8a741bf7ed985621ef4105650b102dc45c613206 src/main/java/dev/caskeleton/cost/GraphQlParserLimitPolicy.java 61
|
|
bbff885c21ebce0fc83e6d7f7d415b5a1d1e6972 src/main/java/dev/caskeleton/cost/GraphQlParserLimits.java 58
|
|
36ebb6d1a5ac60810113d5056e266e851304db01 src/main/java/dev/caskeleton/cost/GraphQlParserOptionsFactory.java 43
|
|
b567e28f577364f4d4aa9f45f13bc14cfce47c67 src/main/java/dev/caskeleton/cost/GraphQlParserRejectedException.java 52
|
|
be643bde3b2198d83f0fd37d6a3a7ce65322ce0b src/main/java/dev/caskeleton/cost/GraphQlResolverWeight.java 43
|
|
18d48f8ccaaa396d71f5b6e098bc9a11068bb6d9 src/main/java/dev/caskeleton/cost/GraphQlResponseByteLimiter.java 60
|
|
86803ab4585d3c354b6674e2587b9486b0b756f4 src/main/java/dev/caskeleton/cost/GraphQlResponseNodeCounter.java 44
|
|
4c0ce21d5951db8f7f213c81aa18c6959ae274da src/main/java/dev/caskeleton/cost/GraphQlRuntimeBudget.java 28
|
|
599673e090a2508e9ffc078438d39fb93bb338a2 src/main/java/dev/caskeleton/cost/GraphQlRuntimeBudgetExceededException.java 54
|
|
c297de8b8f39190eb2fd47eaf7d23dda3f6c024e src/main/java/dev/caskeleton/cost/GraphQlRuntimeBudgetTracker.java 95
|
|
414e0c71c9e704ea4682d8a8c63d491d0fc9e642 src/main/java/dev/caskeleton/cost/GraphQlStructuralLimitException.java 43
|
|
af0c310703bada9a46ba1f4892a8d8ba2bd92076 src/main/java/dev/caskeleton/cost/GraphQlStructuralLimitPolicy.java 61
|
|
34709d16d97205454aa7000508c79aad2d99860e src/main/java/dev/caskeleton/cost/GraphQlStructuralLimits.java 52
|
|
1fad76437f18f0045f773ec099c2fdf195794e56 src/main/java/dev/caskeleton/policy/GraphQlClientPolicy.java 125
|
|
f5daca0cafa2a075a03b2eeb7dbd4628dc60f75d src/main/java/dev/caskeleton/policy/GraphQlClientPolicyManifest.java 92
|
|
9248df8da34dd410eeb9edb34de52f0d556e5af9 src/main/java/dev/caskeleton/policy/GraphQlOperationCatalog.java 72
|
|
ff1041ef724dfcbfcf0b0da6f06b0f702da25861 src/main/java/dev/caskeleton/policy/GraphQlOperationPolicy.java 53
|
|
8a6a0c23dfa92577ffe754f010c2221de0b2458d src/main/java/dev/caskeleton/policy/GraphQlOperationType.java 14
|
|
fd7b63f06cbaa3f8c206a3343b96f9ddaeb85b7e src/main/java/dev/caskeleton/policy/GraphQlPolicyViolation.java 31
|
|
f6c7891c79dbfa6eabc611378ebaa3f74da7f0a5 src/main/java/dev/caskeleton/policy/GraphQlUnknownClientProfileException.java 21
|
|
2c2911c415bbd707f1d8c6af9936235e4bbb7464 src/main/java/dev/caskeleton/policy/GraphQlUnknownOperationException.java 20
|
|
d618cd7d9838213c50eb39ca5c6a694c1156596a src/main/java/dev/caskeleton/policy/ResolverExecutionType.java 23
|
|
78526b38cfe5a15ebe97bbc7771c0dcd979282e4 src/main/java/dev/caskeleton/security/ApplicationObjectAuthorization.java 84
|
|
668c16a6a6663d4c69ed924241ed2c07064b6da9 src/main/java/dev/caskeleton/security/GraphQlAuthenticatedPrincipal.java 46
|
|
d790cf39a24128ea92eccb69a0660cb1d4b5e77e src/main/java/dev/caskeleton/security/GraphQlAuthenticationContextFactory.java 90
|
|
28c95657b591882a53db5faf3e9f806fa4e1516c src/main/java/dev/caskeleton/security/GraphQlAuthenticationException.java 20
|
|
5c2844420f52c4b34f036ac5e3b5bb873c5b1cad src/main/java/dev/caskeleton/security/GraphQlAuthorizationDecision.java 42
|
|
43dde9df0188f1250e6cf20085713ecf5d1eec6f src/main/java/dev/caskeleton/security/GraphQlAuthorizationDeniedException.java 29
|
|
38109d7a6a148a6f5c42e0cd549bc25b49f16529 src/main/java/dev/caskeleton/security/GraphQlAuthorizationInterceptor.java 60
|
|
f2fda06ea7f0e77a514ee247d32c39833d349397 src/main/java/dev/caskeleton/security/GraphQlAuthorizationPolicy.java 112
|
|
7d930851e9c98759d688dd50f8cf491310dc2a53 src/main/java/dev/caskeleton/security/GraphQlBatchContext.java 48
|
|
d80574416c47c957d8e644d3edeb9f6ebfb1b07b src/main/java/dev/caskeleton/security/GraphQlClientProfileResolver.java 57
|
|
3ed876be1e32981bae6ab893f8283833469540ba src/main/java/dev/caskeleton/security/GraphQlContextCleanup.java 62
|
|
c2c8d13afeb36d5afaea67e2e565d8d1c29fc205 src/main/java/dev/caskeleton/security/GraphQlContextPropagator.java 88
|
|
12b0dc1b017780905bfdf5713a4eae23a8f78ecf src/main/java/dev/caskeleton/security/GraphQlObjectAuthorizationPort.java 52
|
|
fe1b83209e6858dfc2b5d48495059c7ee061c001 src/main/java/dev/caskeleton/security/GraphQlTenantIsolationException.java 21
|
|
7d302af6dc2d28b32b17a4bf7e4786c84bbb9602 src/main/java/dev/caskeleton/security/GraphQlTenantIsolationPolicy.java 78
|
|
f46053f3681842e5f497af01db85184669aab758 src/test/java/dev/caskeleton/cost/GraphQlComplexityCalculatorTest.java 107
|
|
922d25c32df7c775d56ca21c88f3f6171070174f src/test/java/dev/caskeleton/cost/GraphQlFragmentReachabilityTest.java 113
|
|
24838abc6447fcd264059e7775758686e52e590c src/test/java/dev/caskeleton/cost/GraphQlParserLimitPolicyTest.java 100
|
|
6f77553414f39d3fd306e7c51b526dda955ac303 src/test/java/dev/caskeleton/cost/GraphQlRuntimeBudgetTrackerTest.java 107
|
|
0d8b5292bbbadb4ea162218ea890ff95e411ecc4 src/test/java/dev/caskeleton/cost/GraphQlStructuralLimitPolicyTest.java 116
|
|
1e949dcba035d4170f9a436a42a94276a7a1c1fb src/test/java/dev/caskeleton/policy/GraphQlClientPolicyTest.java 134
|
|
996dae723e4345fa919ecd37c33df01864f5d00c src/test/java/dev/caskeleton/policy/GraphQlOperationPolicyTest.java 102
|
|
ceacff6254ec35ed2e395b8d5e43c50ca12711e9 src/test/java/dev/caskeleton/security/ApplicationObjectAuthorizationTest.java 156
|
|
28de2c12f5a8488fdcbb9ce4f0cd9861a9871ee9 src/test/java/dev/caskeleton/security/GraphQlAuthenticationContextFactoryTest.java 107
|
|
9f0a87a75bc9b42d9020cf2108d13c5980d129fc src/test/java/dev/caskeleton/security/GraphQlAuthorizationPolicyTest.java 110
|
|
8b6c4aa93c6c489b406da5203fbf274d7f4b42fa src/test/java/dev/caskeleton/security/GraphQlCancellationAggregationTest.java 153
|
|
2a7480f5a1c819ce2e4166e44bcd4a56cf1ab967 src/test/java/dev/caskeleton/security/GraphQlTenantIsolationPolicyTest.java 117
|
|
file_count=57
|
|
|
|
=== 배선 전수 (autoconf 패키지 참조 / 자기·autoconfigure 제외 main 참조 / test 참조 / LOC) ===
|
|
TYPE autoconf main_other test LOC
|
|
GraphQlComplexityCalculator 4 2 2 88
|
|
GraphQlComplexityRejectedException 0 3 1 33
|
|
GraphQlComplexityResult 0 5 2 34
|
|
GraphQlCostCatalog 4 1 2 59
|
|
GraphQlDocumentComplexityScorer 0 1 0 295
|
|
GraphQlDocumentShape 0 4 2 38
|
|
GraphQlDocumentShapeAnalyzer 4 2 2 323
|
|
GraphQlFieldCostDescriptor 0 2 2 31
|
|
GraphQlParserLimitPolicy 0 0 1 61
|
|
GraphQlParserLimits 0 2 1 58
|
|
GraphQlParserOptionsFactory 0 1 1 43
|
|
GraphQlParserRejectedException 0 1 1 52
|
|
GraphQlResolverWeight 0 3 3 43
|
|
GraphQlResponseByteLimiter 0 1 0 60
|
|
GraphQlResponseNodeCounter 0 1 0 44
|
|
GraphQlRuntimeBudget 0 1 2 28
|
|
GraphQlRuntimeBudgetExceededException 0 4 2 54
|
|
GraphQlRuntimeBudgetTracker 0 1 2 95
|
|
GraphQlStructuralLimitException 0 4 2 43
|
|
GraphQlStructuralLimitPolicy 4 1 1 61
|
|
GraphQlStructuralLimits 2 1 1 52
|
|
GraphQlClientPolicy 12 12 9 125
|
|
GraphQlClientPolicyManifest 0 0 1 92
|
|
GraphQlOperationCatalog 0 0 1 72
|
|
GraphQlOperationPolicy 0 1 1 53
|
|
GraphQlOperationType 0 7 5 14
|
|
GraphQlPolicyViolation 0 0 1 31
|
|
GraphQlUnknownClientProfileException 0 1 1 21
|
|
GraphQlUnknownOperationException 0 1 1 20
|
|
ResolverExecutionType 0 3 2 23
|
|
ApplicationObjectAuthorization 0 1 1 84
|
|
GraphQlAuthenticatedPrincipal 0 3 2 46
|
|
GraphQlAuthenticationContextFactory 4 1 2 90
|
|
GraphQlAuthenticationException 0 4 1 20
|
|
GraphQlAuthorizationDecision 0 5 3 42
|
|
GraphQlAuthorizationDeniedException 0 2 1 29
|
|
GraphQlAuthorizationInterceptor 2 2 1 60
|
|
GraphQlAuthorizationPolicy 5 1 6 112
|
|
GraphQlBatchContext 0 3 5 48
|
|
GraphQlClientProfileResolver 0 0 1 57
|
|
GraphQlContextCleanup 0 0 2 62
|
|
GraphQlContextPropagator 0 1 3 88
|
|
GraphQlObjectAuthorizationPort 0 2 2 52
|
|
GraphQlTenantIsolationException 0 3 1 21
|
|
GraphQlTenantIsolationPolicy 0 1 2 78
|