Skip to main content

Compatibility

GATool is at 0.x. Until 1.0 these rules hold:

  • A patch release, such as 0.1.1 after 0.1.0, publishes the same tools for the same schema and operation files. It keeps the public Java API binary compatible. The exceptions are a security fix and a fix that the Model Context Protocol (MCP) or GraphQL requires. The release note names each one.

  • A minor release, such as 0.2.0, may change the tool contract, the public Java API, a property or a default. Its release note lists every such change.

  • Everything under gatool.dev.experimental may change in any release.

The tool contract is what the model and its client see. It covers the name, title, description, input schema, output schema and annotations of each tool. It also covers the shape of a tool result, and the name and tags of the gatool.call observation.

The public Java API is every public type in these packages:

ModulePackages
gatool-coreio.gatool.core.check, io.gatool.core.model, io.gatool.core.naming, io.gatool.core.search
gatool-spring-bootio.gatool.boot, io.gatool.boot.autoconfigure, io.gatool.boot.execution
gatool-mcp-spring-bootio.gatool.boot.mcp.autoconfigure, io.gatool.boot.mcp.limit, io.gatool.boot.mcp.security
gatool-in-process-spring-bootio.gatool.boot.inprocess, io.gatool.boot.inprocess.autoconfigure
gatool-spring-boot-testio.gatool.boot.test

A package with internal in its name may change in any release. The published Javadoc leaves those packages out.

GAToolProperties and the three classes beside it (GAToolApiProperties, GAToolMcpProperties and GAToolDevProperties) have a narrower promise than the rest of those packages. Their contract is the properties themselves: the names, types and defaults under gatool.*. The rules above cover those. Their getters and setters exist for Spring Boot's binder and may change in any release. Spring Boot states the same rule for its own properties classes.

An application replaces a part of GATool by publishing a bean of its type:

Bean typeWhat it replaces
GraphQlExecutorHow a document reaches the GraphQL API
ApiCredentialStrategyThe credential GATool sends to the API
ToolNamingStrategyHow an operation name becomes a tool name
ToolRateLimiterThe rate limit in front of an MCP tool call
SchemaSearchThe ranking behind searchSchema
GAToolCatalogThe tools themselves, built in Java. GATool then leaves its executor unbuilt, so gatool.api.url may stay unset

A public record may gain a component in a minor release. The constructor of the release before stays for at least one minor release. Code that takes a record apart with a record pattern changes with the record.