# Versioning and migration

SDK 1.0.0 retains C ABI 1.1 and ABI 1.0 structure prefixes. Service tables keep
their independent v1 negotiation. Updating the SDK package version alone does
not change the wire schema or entitlement format.

## From the 0.x SDK previews

Update `find_package(EpicTunerSDK 0.x REQUIRED CONFIG)` to
`find_package(EpicTunerSDK 1 REQUIRED CONFIG)` and use a fresh build directory.
CMake package compatibility follows SDK major versions; a 0.x version request
does not select a 1.x package automatically.

Rebuild each OS/architecture library independently. Recheck required features
and manifest capabilities. Run conformance tests, exercise your plugin in a
staged application, then sign a new immutable package version. Do not replace
files under a running worker.

The Hello Panels image now uses `assets/epictuner.png` so the same code works in
both development layout and signed package inventory. Copy that directory beside
the development manifest.

## Settings migration

Settings carry a schema version and are namespaced to the plugin and optional
project. Read the existing schema before writing an upgraded representation.
Preserve data you can migrate, report invalid settings, and use deterministic
defaults only for genuinely absent values. Test rollback with the previous
plugin version; a newer schema may require a reversible representation.

Window restoration is separate from settings migration. Restoring placement
must never simulate a prior button click or replay an edit.

## Porting a TunerStudio Java plugin

There is no JAR, Swing or Java binary compatibility. Port calculations and data
models to C++ and replace the UI with ET controls or supported prefabs.

| Java/Swing concept | EpicTuner counterpart |
|---|---|
| Application plugin startup/shutdown | `Plugin::start` / `stop` in an isolated worker |
| Returned Swing panel | Registered `PanelBuilder` definition |
| Event dispatch thread work | Worker dispatcher callback plus host-owned UI updates |
| Long-running analysis thread | SDK job with cancellation and dispatcher completion |
| Raw calibration mutation | Host-validated proposal, explicit Apply and readback |
| Application-specific classes | Negotiated C ABI service tables |

Avoid translating blocking dialogs or direct memory access literally. Design
each step as an asynchronous request/completion and retain only owned copies of
borrowed data.
