# evidence 268 — grpc-assembly-and-release-gate # revision: 21234e38cdb9a926cbc92bb97a2aee2e4a7d2916 # cwd: /shared/codebase/clean-architecture-backend-template # command: bash /tmp/genf.sh # ---- raw output ---- ==== A. the assembly boundary: grpc-spring-boot-starter ==== -- files: src/grpc/grpc-spring-boot-starter/build.gradle src/grpc/grpc-spring-boot-starter/gradle.lockfile src/grpc/grpc-spring-boot-starter/src/main/java/dev/caskeleton/grpc/boot/GrpcPlatformAutoConfiguration.java src/grpc/grpc-spring-boot-starter/src/main/java/dev/caskeleton/grpc/boot/GrpcPlatformConfigurationException.java src/grpc/grpc-spring-boot-starter/src/main/java/dev/caskeleton/grpc/boot/GrpcPlatformProperties.java src/grpc/grpc-spring-boot-starter/src/main/java/dev/caskeleton/grpc/boot/GrpcPlatformStartupValidator.java src/grpc/grpc-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports src/grpc/grpc-spring-boot-starter/src/test/java/dev/caskeleton/grpc/boot/GrpcPlatformStartupValidatorTest.java -- AutoConfiguration.imports: dev.caskeleton.grpc.boot.GrpcPlatformAutoConfiguration -- master gate: @Configuration(proxyBeanMethods = false) @ConditionalOnProperty( prefix = "ca-skeleton.grpc.platform", name = "enabled", havingValue = "true", matchIfMissing = false) @EnableConfigurationProperties(GrpcPlatformProperties.class) public class GrpcPlatformAutoConfiguration { -- bean methods (count and names): 9 public GrpcExecutorProfile grpcExecutorProfile(GrpcPlatformProperties properties) { public GrpcServerProfile grpcServerProfile(GrpcExecutorProfile executorProfile) { public GrpcAdmissionController grpcAdmissionController(GrpcExecutorProfile executorProfile) { public GrpcServiceHealthRegistry grpcServiceHealthRegistry() { public GrpcReflectionPolicy grpcReflectionPolicy(GrpcPlatformProperties properties) { public GrpcAdminExposurePolicy grpcAdminExposurePolicy() { public GrpcDrainPolicy grpcDrainPolicy() { public GrpcContextBinder grpcContextBinder() { public GrpcErrorMapper grpcErrorMapper() { -- every reference to GrpcPlatformStartupValidator: grpc/grpc-spring-boot-starter/src/test/java/dev/caskeleton/grpc/boot/GrpcPlatformStartupValidatorTest.java:30:class GrpcPlatformStartupValidatorTest { grpc/grpc-spring-boot-starter/src/test/java/dev/caskeleton/grpc/boot/GrpcPlatformStartupValidatorTest.java:75: GrpcPlatformStartupValidator.violations( grpc/grpc-spring-boot-starter/src/test/java/dev/caskeleton/grpc/boot/GrpcPlatformStartupValidatorTest.java:78: GrpcPlatformStartupValidator.requireValid( grpc/grpc-spring-boot-starter/src/test/java/dev/caskeleton/grpc/boot/GrpcPlatformStartupValidatorTest.java:95: GrpcPlatformStartupValidator.violations( grpc/grpc-spring-boot-starter/src/test/java/dev/caskeleton/grpc/boot/GrpcPlatformStartupValidatorTest.java:109: GrpcPlatformStartupValidator.violations( grpc/grpc-spring-boot-starter/src/test/java/dev/caskeleton/grpc/boot/GrpcPlatformStartupValidatorTest.java:113: GrpcPlatformStartupValidator.violations( grpc/grpc-spring-boot-starter/src/test/java/dev/caskeleton/grpc/boot/GrpcPlatformStartupValidatorTest.java:125: GrpcPlatformStartupValidator.violations( grpc/grpc-spring-boot-starter/src/test/java/dev/caskeleton/grpc/boot/GrpcPlatformStartupValidatorTest.java:139: GrpcPlatformStartupValidator.violations( grpc/grpc-spring-boot-starter/src/test/java/dev/caskeleton/grpc/boot/GrpcPlatformStartupValidatorTest.java:164: GrpcPlatformStartupValidator.violations( grpc/grpc-spring-boot-starter/src/test/java/dev/caskeleton/grpc/boot/GrpcPlatformStartupValidatorTest.java:187: GrpcPlatformStartupValidator.violations( grpc/grpc-spring-boot-starter/src/test/java/dev/caskeleton/grpc/boot/GrpcPlatformStartupValidatorTest.java:209: GrpcPlatformStartupValidator.violations( grpc/grpc-spring-boot-starter/src/test/java/dev/caskeleton/grpc/boot/GrpcPlatformStartupValidatorTest.java:220: GrpcPlatformStartupValidator.violations( grpc/grpc-spring-boot-starter/src/test/java/dev/caskeleton/grpc/boot/GrpcPlatformStartupValidatorTest.java:235: GrpcPlatformStartupValidator.requireValid( grpc/grpc-spring-boot-starter/src/main/java/dev/caskeleton/grpc/boot/GrpcPlatformStartupValidator.java:29:public final class GrpcPlatformStartupValidator { grpc/grpc-spring-boot-starter/src/main/java/dev/caskeleton/grpc/boot/GrpcPlatformStartupValidator.java:31: private GrpcPlatformStartupValidator() {} ==== B. release gate: who constructs the evidence it reads ==== -- GrpcReleaseEvidence construction sites: grpc/grpc-testkit/src/test/java/dev/caskeleton/grpc/release/GrpcStableReleaseGateTest.java:28: return new GrpcReleaseEvidence( grpc/grpc-testkit/src/test/java/dev/caskeleton/grpc/release/GrpcStableReleaseGateTest.java:84: new GrpcReleaseEvidence( grpc/grpc-testkit/src/test/java/dev/caskeleton/grpc/release/GrpcStableReleaseGateTest.java:103: new GrpcReleaseEvidence( grpc/grpc-testkit/src/test/java/dev/caskeleton/grpc/release/GrpcStableReleaseGateTest.java:127: new GrpcReleaseEvidence( -- files referencing GrpcStableReleaseGate / GrpcCompatibilityMatrix: grpc/grpc-testkit/src/test/java/dev/caskeleton/grpc/release/GrpcStableReleaseGateTest.java grpc/grpc-testkit/src/main/java/dev/caskeleton/grpc/release/GrpcStableReleaseGate.java grpc/grpc-testkit/src/main/java/dev/caskeleton/grpc/release/GrpcCompatibilityMatrix.java -- Gradle tasks registered anywhere under src/grpc*: (no output above == no verification task like messaging's verifyMessagingCertificationEvidence) -- CI workflows naming grpc: 0 of 28 workflow files -- what ci-quality-gates.yml actually runs: 50: run: ./gradlew check verifyPublicPathSnapshot verifyDependencyLocks --warning-mode=fail --no-daemon --stacktrace 58: run: ./gradlew :adapter:inbound:graphql:graphqlStableTest --no-daemon --stacktrace 61: run: ./gradlew conditionalTransportQualification --no-daemon --stacktrace 81: run: ./gradlew :app-bootstrap:sampleOffTest verifyCleanArchitectureDependencies --no-daemon --stacktrace 173: run: ./gradlew quarantineTest --no-daemon ==== C. strict test lanes are never wired into check ==== 217: tasks.register(lane.name, Test) { -- any 'check' dependsOn a lane: (no output above == lanes run only when named explicitly) -- the four grpc lanes: 15: lane('grpcInProcessContractTest') { 20: lane('grpcNettyContractTest') { 25: lane('grpcFaultTest') { 30: lane('grpcPerformanceTest') { ==== D. compatibility matrix: code vs document ==== -- code: public static GrpcCompatibilityMatrix caSkeleton() { return new GrpcCompatibilityMatrix( Map.of( "boot-managed-platform", Lane.CERTIFIED, "proto3-explicit-optional", Lane.CERTIFIED, "netty-shaded", Lane.CERTIFIED, "netty-unshaded", Lane.COMPATIBILITY, "upstream-grpc-java-override", Lane.COMPATIBILITY, "protobuf-edition-2024", Lane.WATCH, "protobuf-edition-2026", Lane.WATCH)); } -- document: ## Lanes | Lane | Grade | Failure blocks a release | | --- | --- | --- | | Boot-managed platform (Spring Boot 4.0.8 BOM) | Certified | Yes | | proto3 with explicit `optional` | Certified | Yes | | `grpc-netty-shaded` | Certified | Yes | | `grpc-netty` (unshaded) | Compatibility | No | | Upstream gRPC Java version override | Compatibility | No | | Protobuf Edition 2024 | Watch | No | | Protobuf Edition 2026 | Watch | No | ## Runtime baseline ==== E. types with no reference anywhere in the repository ==== ReactiveGrpcClient totalRefs(incl. own file)=1 ReactiveGrpcServerAdapter totalRefs(incl. own file)=1 GrpcDeadlineExceededException totalRefs(incl. own file)=1