TramAI - governed AI workflows for Java and Kotlin

tramai-spring-consumer-boundary

Version: n/a — internal build fixture, not a published artifact
Status: Internal (testing support)
Role: Classpath-boundary oracle for the published Spring artifacts.

Purpose

This module is build evidence, not a library. It carries no production source: its test source set declares only the published Spring facade, then asserts what is and is not reachable on the resulting runtime classpath. Anything provider-related it can load is, by construction, a transitive leak from the Spring artifact.

That is how the project holds the line that consumers receive dependencies only for the adapters they select. Provider adapters and the AWS Secrets Manager SDK must not be reachable; the generic Spring integration classes must be.

What it provides

AspectDetail
Production sourceNone — no runtime code, empty API dump
Test classpathtramai-spring only, plus test libraries
Layer / publishabilitytesting-support, internal — excluded from publication
EvidenceConsumerClasspathBoundaryTest

Dependencies

There is no published coordinate to depend on — the fixture exists to compile and run against the published Spring artifact. Its only TramAI dependency is that facade:

// tramai-spring-consumer-boundary/build.gradle.kts
dependencies {
    // Characterization oracle: a minimal Spring consumer depends ONLY on tramai-spring.
    testImplementation(project(":tramai-spring"))
}

The test asserts that dev.tramai.openai.OpenAiProvider, dev.tramai.anthropic.AnthropicProvider, dev.tramai.ollama.OllamaProvider and software.amazon.awssdk.services.secretsmanager.SecretsManagerClient are not loadable, that dev.tramai.spring.TramaiAutoConfiguration, dev.tramai.spring.TramaiSecretResolutionAutoConfiguration and dev.tramai.standalone.Tramai are, and that the fixture's own build file declares no adapter dependency.

When this module matters to you

  • You are changing the dependency composition of a published Spring artifact and need to know whether it leaks an adapter or SDK to consumers.
  • You are reviewing the "consumers select their adapters" invariant.

When it does not

  • You are writing an application: nothing here is a dependency you add. Use tramai-spring-boot-starter.
  • You want a runnable consumer example — the repository's example applications serve that purpose.