# Changelog

<!-- next-header -->
## Unreleased - ReleaseDate

## [0.7.1] - 2026-04-15

### Added

Normalize WebSocket response JSON schema changes between Dropshot 0.16 and 0.17. (The changes are wire-compatible but the JSON schema is different.)

## [0.7.0] - 2026-03-17

### Changed

- Dropshot updated to 0.17.0.

## [0.6.0] - 2026-03-10

### Added

The Dropshot API manager now works in non-colocated Jujutsu repositories, for example [Jujutsu workspaces](https://docs.jj-vcs.dev/latest/working-copy/#workspaces).

### Changed

- The `--blessed-from-git` command-line option has been renamed to `--blessed-from-vcs`, and in Jujutsu repos it now accepts Jujutsu revsets. (The old name, as well as the old `OPENAPI_MGR_BLESSED_FROM_GIT` environment variable, are still supported for backwards compatibility.)
- The `--blessed-from-vcs` command-line argument's `REVISION:PATH` format has been split into `--blessed-from-vcs` and `--blessed-from-vcs-path`. This change was made so `REVISION` could be a Jujutsu revset. Revsets often have embedded colons.

## [0.5.2] - 2026-02-28

### Changed

API manager structures are now dropped in parallel, leading to measured performance gains of up to 15%.

## [0.5.1] - 2026-02-28

### Fixed

Handle scenarios where the blessed version was missing from local disk. This was previously unusual and indicated a user deleting the file from disk, but the semantic compatibility support added in version 0.2.1 makes this more likely to happen in normal workflows.

## [0.5.0] - 2026-02-28

### Changed

- API processing and validation is now done in parallel using rayon. We've measured up to 6x performance improvements as a result.
- The validation function is now called in parallel. As a result, if the validation function is a closure, it must be `Sync` on top of the existing requirement to be `Send`. (Most validation functions are just function pointers, which are already `Sync`.)

## [0.4.0] - 2026-02-26

### Added

- Support for Git stubs for versioned APIs, which enable Git's rename detection to work on blessed versions. For more information, see [oxidecomputer/git-stub](https://github.com/oxidecomputer/git-stub) and [RFD 634](https://rfd.shared.oxide.computer/rfd/0634).
- The API manager now handles unparseable files (e.g., those with merge conflict markers) properly. This is a fix for a pre-existing issue: in some situations, merge conflicts could have occurred with generated files. However, the issue is exacerbated by Git stub support since that causes rename detection to trigger more often.

  As of this version of dropshot-api-manager, all merge conflict situations can be addressed by running `cargo xtask openapi generate` or equivalent.

### Fixed

- For blessed versions, merge base detection now recognizes Git's `MERGE_HEAD`. It'll use whichever of `HEAD` or `MERGE_HEAD` is a descendant of the other (so it works with both first-parent and second-parent merges).
- Fixes for several bugs found while building out a more robust test suite.

## [0.3.0] - 2025-12-19

### Added

- For versioned APIs, the latest blessed version is now checked for bytewise equality, not just wire compatibility. This prevents trivial changes (such as documentation changes or type renames) from accumulating invisibly.

  The previous behavior can be restored with the `allow_trivial_changes_for_latest` function.

- Validation functions can now be `Fn` closures, not just function pointers.

### Changed

- The optional `extra_validation` argument no longer needs to be specified on `ManagedApiConfig`. Instead, first convert the `ManagedApiConfig` to a `ManagedApi`, then call `extra_validation` on the resulting `ManagedApi`.

- `ManagedApis::new` is changed to accept an iterator over any kind of type that can be converted to `ManagedApi`, including `ManagedApiConfig`.

## [0.2.4] - 2025-11-13

### Added

- `ValidationContext::is_latest()` returns `true` if this is the latest version of a versioned API, or if it is a lockstep API.
- `ValidationContext::is_blessed()` returns `Some(true)` if a version is blessed, `Some(false)` if not, or `None` for non-versioned APIs.

### Changed

- `extra_validation` is now compatible with versioned APIs. Use the `ValidationContext::is_blessed` to filter out validation checks for blessed APIs as appropriate (since those APIs are immutable), and `is_latest` to only write out extra files for the latest version of the API.

## [0.2.3] - 2025-10-08

### Fixed

Updated drift to 0.1.1 to enable proper handling of OpenAPI type graph cycles.

## [0.2.2] - 2025-10-01

### Added

- The `api_versions!` macro now generates a `latest_version` function.
- The README has a new note about how to create versioned Dropshot servers using the `latest_version` function.

## [0.2.1] - 2025-09-30

### Added

- For versioned APIs, comparisons between blessed and generated documents now use the [`drift`](https://docs.rs/drift) crate rather than simple string comparisons. This means that trivial/wire-compatible changes between blessed and generated documents (such as adding or removing newtypes) are now allowed.

### Fixed

- Git commands are now run in the repository root instead of the current directory.
- Changed some error output to use stderr instead of stdout.

## [0.2.0] - 2025-09-26

### Added

- Add a way to specify an allowlist of unmanaged APIs within a local directory. See `ManagedApis::with_unknown_apis` for more.

### Changed

- `Environment` now accepts `impl Into<String>` and `impl Into<Utf8PathBuf>` for ease of use.
- Hide private types and methods.
- Update documentation.

## [0.1.1] - 2025-09-24

- README updates.
- Windows path fixes.

## [0.1.0] - 2025-09-24

Initial release.

<!-- next-url -->
[0.7.1]: https://github.com/oxidecomputer/dropshot-api-manager/releases/tag/dropshot-api-manager-0.7.1
[0.7.0]: https://github.com/oxidecomputer/dropshot-api-manager/releases/tag/dropshot-api-manager-0.7.0
[0.6.0]: https://github.com/oxidecomputer/dropshot-api-manager/releases/tag/dropshot-api-manager-0.6.0
[0.5.2]: https://github.com/oxidecomputer/dropshot-api-manager/releases/tag/dropshot-api-manager-0.5.2
[0.5.1]: https://github.com/oxidecomputer/dropshot-api-manager/releases/tag/dropshot-api-manager-0.5.1
[0.5.0]: https://github.com/oxidecomputer/dropshot-api-manager/releases/tag/dropshot-api-manager-0.5.0
[0.4.0]: https://github.com/oxidecomputer/dropshot-api-manager/releases/tag/dropshot-api-manager-0.4.0
[0.3.0]: https://github.com/oxidecomputer/dropshot-api-manager/releases/tag/dropshot-api-manager-0.3.0
[0.2.4]: https://github.com/oxidecomputer/dropshot-api-manager/releases/tag/dropshot-api-manager-0.2.4
[0.2.3]: https://github.com/oxidecomputer/dropshot-api-manager/releases/tag/dropshot-api-manager-0.2.3
[0.2.2]: https://github.com/oxidecomputer/dropshot-api-manager/releases/tag/dropshot-api-manager-0.2.2
[0.2.1]: https://github.com/oxidecomputer/dropshot-api-manager/releases/tag/dropshot-api-manager-0.2.1
[0.2.0]: https://github.com/oxidecomputer/dropshot-api-manager/releases/tag/dropshot-api-manager-0.2.0
[0.1.1]: https://github.com/oxidecomputer/dropshot-api-manager/releases/tag/dropshot-api-manager-0.1.1
[0.1.0]: https://github.com/oxidecomputer/dropshot-api-manager/releases/tag/dropshot-api-manager-0.1.0
