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

