# `package.version_needed`

Name written through a package held in two versions doesn't say which.

Area 11, [External services](../topics/external-services.md); not declinable; the next step is usually the agent's.

While two versions of a package sit side by side, a name written through
it says which one it means:






```jadpo
use shared/providers/postcodes

/// Keeps a customer's postcode as it is.
action keep_postcode(postcode: Postcodes.UkPostcode) -> Postcodes.v3.UkPostcode {
    return postcode
}
```

```text
error: `Postcodes` is held in two versions, so a name through it says which
 --> domains/addresses/actions/keep_postcode.jadpo:4:32
  |
4 | action keep_postcode(postcode: Postcodes.UkPostcode) -> Postcodes.v3.UkPostcode {
  |                                ^^^^^^^^^ which version?
  reason: The project holds `Postcodes.v2` and `Postcodes.v3` side by side while callers move across, so a name written through the package carries its version, and each use says which one it means.
  next: Write `Postcodes.v2.UkPostcode` or `Postcodes.v3.UkPostcode` (agent)
  rule: package.version_needed
  help: https://jadpo.dev/docs/errors/package.version_needed

check failed: 1 error, 6 files
```
