# XO1310: breaking change in a minor or patch release

`xo publish` compares the exported API and effects of the module (the declarations `xo query api` lists, in every package of the module) with the previous vX.Y.Z tag. A minor or patch release may add exports but must not remove one, change its signature, or add an effect to a function (callers' effect ceilings and `uses` clauses would break). A breaking change needs a new major version, whose module path ends in /vN from v2 on; before v1.0.0 (v0.x.y), a minor bump may break and a patch may not. Each breaking change is listed with the old and new signature. See decision 0086.

## Example

```xo
# v1.4.0: pub fn total(items: List[Item]) -> Int
# now:    pub fn total(items: List[Item]) -> Int uses net
xo publish --check --version v1.5.0
```

## Fix

```xo
# keep the old function pure and add a new one, or release a major version:
xo publish --check --version v2.0.0   # module path .../v2
```

Run `xo explain XO1310` for this text in a terminal, or see
[section 10.6 of the specification](../../spec/core/#106-diagnostic-codes).

