Files
document-haness/docs/clean-architecture-backend-template/final/evidence/raw/202-inbound-grpc-module-inventory.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

109 lines
4.2 KiB
Plaintext

adapter-inbound-grpc module inventory / denominator
revision=a24ece9cf797f7ea647e33bf846b115208ed1ba5
generatedAt=2026-08-30T08:12:13+00:00
=== SOURCE SETS ===
$ git ls-files adapter/inbound/grpc | sed 's|adapter/inbound/grpc/||' | cut -d/ -f1-2 | sort | uniq -c | sort -rn
8 src/main
6 src/test
1 gradle.lockfile
1 build.gradle
1 README.md
1 CLAUDE.md
exit=0
$ git ls-files adapter/inbound/grpc | wc -l
18
exit=0
=== LOC ===
$ git ls-files 'adapter/inbound/grpc/src/main/**/*.java' | xargs wc -l | tail -1
602 total
exit=0
$ git ls-files 'adapter/inbound/grpc/src/test/**/*.java' | xargs wc -l | tail -1
782 total
exit=0
$ git ls-files adapter/inbound/grpc | grep -v '\.java$'
adapter/inbound/grpc/CLAUDE.md
adapter/inbound/grpc/README.md
adapter/inbound/grpc/build.gradle
adapter/inbound/grpc/gradle.lockfile
exit=0
=== MAIN PACKAGE TREE ===
$ git ls-files 'adapter/inbound/grpc/src/main/**/*.java' | sed 's|.*/grpc/||;s|/[^/]*$||' | sort | uniq -c | sort -rn
1 GrpcStatusMapper.java
1 GrpcServerRunner.java
1 GrpcServerProperties.java
1 GrpcServerConfig.java
1 GrpcExceptionHandlingInterceptor.java
1 GrpcAuthenticationPolicy.java
1 GrpcAuthenticationInterceptor.java
1 ApiErrorException.java
exit=0
=== TEST PACKAGE TREE ===
$ git ls-files 'adapter/inbound/grpc/src/test/**/*.java' | sed 's|.*/grpc/||;s|/[^/]*$||' | sort | uniq -c | sort -rn
1 GrpcStatusMapperTest.java
1 GrpcServerRunnerBootTest.java
1 GrpcSafeActivationTest.java
1 GrpcP1BoundaryWireTest.java
1 GrpcExceptionHandlingInterceptorTest.java
1 ApiErrorExceptionTest.java
exit=0
=== BUILD ===
$ cat adapter/inbound/grpc/build.gradle
// Driving adapter: gRPC API (skeleton machinery, transport-only).
//
// A SmartLifecycle bean (GrpcServerRunner) owns the io.grpc Netty server, so this module depends on
// NO third-party grpc-spring-boot starter (no Spring Boot version coupling). The skeleton compiles
// NO protobuf: there is no `com.google.protobuf` plugin and no `.proto` here — health + reflection
// come from grpc-services at runtime, and a future consuming feature owns its `.proto`/services.
//
// io.grpc:* / protobuf versions are NOT managed by the Spring Boot BOM, and this repo has no version
// catalog, so the grpc-bom + protobuf-bom platforms are imported HERE (module scope) using the root
// `ext.grpcVersion` / `ext.protobufVersion` SSOT — this keeps the strict-locking blast radius to
// this module (the shared root dependencyManagement block stays io.grpc-free).
dependencyManagement {
imports {
mavenBom "io.grpc:grpc-bom:${grpcVersion}"
mavenBom "com.google.protobuf:protobuf-bom:${protobufVersion}"
}
}
dependencies {
implementation project(':shared-contract')
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-validation'
// Keep the direct versions in the outgoing project metadata as well as importing the BOM.
// Spring dependency-management constraints are local to this leaf and are not propagated to
// a consumer's custom qualification source set.
implementation "io.grpc:grpc-netty-shaded:${grpcVersion}"
implementation "io.grpc:grpc-services:${grpcVersion}" // health + reflection
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
// The boot test directly builds generated health/reflection protobuf messages. grpc-services
// does not expose protobuf-java on its compile API, so keep the narrower test-only declaration.
testImplementation "io.grpc:grpc-protobuf:${grpcVersion}"
// Wire qualification directly uses ClientCalls/ServerCalls/MetadataUtils without generated stubs.
testImplementation "io.grpc:grpc-stub:${grpcVersion}"
}
registerStrictQualificationTest(
name: 'grpcTransportQualificationTest',
sourceSet: sourceSets.test,
requiredClasses: [
'dev.caskeleton.adapter.inbound.grpc.GrpcSafeActivationTest',
'dev.caskeleton.adapter.inbound.grpc.GrpcP1BoundaryWireTest'
],
description: 'Runs exact no-skip gRPC conditional transport wire evidence.')
exit=0