<!-- Entries in each category are sorted by merge time, with the latest PRs appearing first. -->

# Changelog

All notable changes to this project will be documented in this file.

The format is based on a mixture of [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and [Common Changelog](https://common-changelog.org).
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html), with the exception that minor
releases may include breaking changes.

## [Unreleased](https://github.com/iqm-finland/QDMI-on-IQM/compare/v1.4.0...HEAD)

### Added

- ✨ Select and pin an IQM calibration before target construction through
  session `CUSTOM4` or `IQMBackend(calibration_set_id=...)`, expose its
  effective UUID, and keep every session on its initial calibration when a
  calibration job returns a new set ([#271](https://github.com/iqm-finland/QDMI-on-IQM/pull/271)) ([**@burgholzer**](https://github.com/burgholzer),
  [**@marcelwa**](https://github.com/marcelwa))
- ✨ Answer `QDMI_DEVICE_PROPERTY_NEEDSCALIBRATION` with zero instead of
  `QDMI_ERROR_NOTSUPPORTED`, since IQM schedules recalibration itself and never
  asks a client to trigger one ([#229](https://github.com/iqm-finland/QDMI-on-IQM/pull/229)) ([**@marcelwa**](https://github.com/marcelwa))
- ✨ Catalogue stable IDs for Garnet, Emerald, Sirius, and their mocks, and open
  them through `IQMBackend(device_id=...)` ([#274](https://github.com/iqm-finland/QDMI-on-IQM/pull/274)) ([**@burgholzer**](https://github.com/burgholzer)).
- ✨ Expose calibration submission through the IQM-specific
  `IQM_QDMI_device_job_submit_calibration` function ([#266](https://github.com/iqm-finland/QDMI-on-IQM/pull/266))
  ([**@burgholzer**](https://github.com/burgholzer)).
- ✨ Submit ordered circuit lists as one native IQM job with indexed results,
  recoverable program counts, and indexed program queries ([#277](https://github.com/iqm-finland/QDMI-on-IQM/pull/277))
  ([**@burgholzer**](https://github.com/burgholzer)).
- ✨ Forward optional IQM `CircuitJobDefinition` fields as one JSON object
  through a standard QDMI custom job parameter, exposed on `IQMBackend` through
  `run_request_options` in `set_options` and per-run overrides. Validate
  complete JSON buffers and reject `heralding_mode="zeros"` before submission
  because it may discard shots ([#272](https://github.com/iqm-finland/QDMI-on-IQM/pull/272), [#293](https://github.com/iqm-finland/QDMI-on-IQM/pull/293)) ([**@marcelwa**](https://github.com/marcelwa),
  [**@burgholzer**](https://github.com/burgholzer))
- ✨ Slow down before the IQM Server API rate limit blocks the account, waiting
  out the quota window instead of taking a 30-second block.
  `IQM_RATE_LIMIT_THRESHOLD_PERCENT` moves the threshold or turns it off
  ([#214](https://github.com/iqm-finland/QDMI-on-IQM/pull/214)) ([**@marcelwa**](https://github.com/marcelwa))
- ✨ Accept `IQM_SERVER_URL` and `IQM_QUANTUM_COMPUTER` as the canonical
  environment variables for IQM Server and quantum computer selection, while
  keeping `IQM_BASE_URL` and `IQM_QC_ALIAS` as aliases ([#217](https://github.com/iqm-finland/QDMI-on-IQM/pull/217))
  ([**@burgholzer**](https://github.com/burgholzer))
- ✨ Add `partition` and `nodes` keyword arguments to `iqm.qdmi.offloader`’s
  `sample`/`estimate`, with the partition also resolvable from
  `IQM_SLURM_PARTITION`, so a site whose quantum partition is not named
  `quantum` can use the offloader ([#202](https://github.com/iqm-finland/QDMI-on-IQM/pull/202)) ([**@marcelwa**](https://github.com/marcelwa))

### Changed

- ✨ Discover the installed QDMI manifest without loading provider code and open
  independent sessions through the MQT Core QDMI driver. Explicit device
  selection takes precedence over environment defaults. Temporary Core source
  pins and LLVM/MLIR CI setup remain until a suitable release ([#274](https://github.com/iqm-finland/QDMI-on-IQM/pull/274))
  ([**@burgholzer**](https://github.com/burgholzer)).
- 👷 Enable testing on Python 3.15 ([#291](https://github.com/iqm-finland/QDMI-on-IQM/pull/291)) ([**@denialhaag**](https://github.com/denialhaag))
- 💥 Drop the QDMI calibration advisory property. IQM schedules recalibration
  itself and does not require clients to trigger it ([#229](https://github.com/iqm-finland/QDMI-on-IQM/pull/229), [#266](https://github.com/iqm-finland/QDMI-on-IQM/pull/266))
  ([**@marcelwa**](https://github.com/marcelwa), [**@burgholzer**](https://github.com/burgholzer)).
- 💥 Drop the QDMI pulse-support property while preserving surviving enum values
  for binary compatibility ([#266](https://github.com/iqm-finland/QDMI-on-IQM/pull/266)) ([**@burgholzer**](https://github.com/burgholzer)).
- 💥 Replace the removed program setter with `IQM_QDMI_device_job_set_programs`
  ([#277](https://github.com/iqm-finland/QDMI-on-IQM/pull/277)) ([**@burgholzer**](https://github.com/burgholzer)).
- 💥 Use native Qiskit primitives with MQT Core 4, preserving genuine shot order
  and using estimator precision `1/64` (4,096 shots per measurement circuit) by
  default ([#246](https://github.com/iqm-finland/QDMI-on-IQM/pull/246), [#254](https://github.com/iqm-finland/QDMI-on-IQM/pull/254)) ([**@marcelwa**](https://github.com/marcelwa), [**@denialhaag**](https://github.com/denialhaag))
- 💥 Drop support for x86 macOS and stop publishing the respective wheels
  ([#220](https://github.com/iqm-finland/QDMI-on-IQM/pull/220)) ([**@denialhaag**](https://github.com/denialhaag))
- ⬆️ Raise the macOS deployment target to 13.3 ([#220](https://github.com/iqm-finland/QDMI-on-IQM/pull/220))
  ([**@denialhaag**](https://github.com/denialhaag))
- 💥 Require Python 3.11 or newer ([#220](https://github.com/iqm-finland/QDMI-on-IQM/pull/220)) ([**@denialhaag**](https://github.com/denialhaag))

### Fixed

- 🐛 Restrict `IQMBackend` targets to qubits with calibrated PRX and measurement
  operations, preserving physical site names during IQM JSON serialization
  ([#293](https://github.com/iqm-finland/QDMI-on-IQM/pull/293)) ([**@burgholzer**](https://github.com/burgholzer))
- 🩹 Restrict Linux and macOS exports to the QDMI device ABI and IQM
  calibration, preventing host libcurl interference on Linux and hiding bundled
  dependencies on macOS ([#284](https://github.com/iqm-finland/QDMI-on-IQM/pull/284)) ([**@marcelwa**](https://github.com/marcelwa))
- 🐛 Preserve circuit metadata in IQM JSON serialization, dropping it with a
  warning when it cannot be represented as JSON ([#273](https://github.com/iqm-finland/QDMI-on-IQM/pull/273)) ([**@marcelwa**](https://github.com/marcelwa))
- 🩹 Serialize PRX rotation and phase angles in radians using the current IQM
  JSON fields ([#231](https://github.com/iqm-finland/QDMI-on-IQM/pull/231)) ([**@burgholzer**](https://github.com/burgholzer))
- 🩹 Report backend job failure messages at the default log level ([#231](https://github.com/iqm-finland/QDMI-on-IQM/pull/231))
  ([**@burgholzer**](https://github.com/burgholzer))
- 🩹 Preserve joint sampling counts across all classical registers in offloaded
  results ([#231](https://github.com/iqm-finland/QDMI-on-IQM/pull/231)) ([**@burgholzer**](https://github.com/burgholzer))
- 🐛 Discover the host CA bundle in Linux wheels, fixing TLS on Debian/Ubuntu
  and SUSE, and honor `CURL_CA_BUNDLE` and `SSL_CERT_FILE` overrides ([#268](https://github.com/iqm-finland/QDMI-on-IQM/pull/268))
  ([**@burgholzer**](https://github.com/burgholzer))
- 🩹 Skip disabled log message formatting and use original HTTP response bodies
  in debug output, including malformed JSON ([#260](https://github.com/iqm-finland/QDMI-on-IQM/pull/260)) ([**@burgholzer**](https://github.com/burgholzer))
- 🐛 Link unit tests with MinGW on Windows by compiling consumers of the
  internal object library without DLL import decorations ([#242](https://github.com/iqm-finland/QDMI-on-IQM/pull/242))
  ([**@marcelwa**](https://github.com/marcelwa))
- 🐛 Decode base64url JWT payloads, so an access token whose payload encodes to
  a `-` or `_` is no longer reported as expired ([#232](https://github.com/iqm-finland/QDMI-on-IQM/pull/232)) ([**@marcelwa**](https://github.com/marcelwa))
- ⬆️ Require Qiskit 2.1 on all supported Python versions so the minimum
  environments install and run ([#218](https://github.com/iqm-finland/QDMI-on-IQM/pull/218), [#220](https://github.com/iqm-finland/QDMI-on-IQM/pull/220), [#246](https://github.com/iqm-finland/QDMI-on-IQM/pull/246)) ([**@burgholzer**](https://github.com/burgholzer),
  [**@marcelwa**](https://github.com/marcelwa))

## [1.4.0](https://github.com/iqm-finland/QDMI-on-IQM/compare/v1.3.0...v1.4.0) - 2026-08-25

### Added

- ✨ Take over the IQM JSON serialization and the `MoveGate` from MQT Core,
  which removed both in 3.9.1, and advertise the serializer through MQT Core’s
  `mqt.core.qiskit.program_serializers` entry point group so any QDMI backend
  over an IQM device keeps submitting IQM JSON ([#189](https://github.com/iqm-finland/QDMI-on-IQM/pull/189)) ([**@marcelwa**](https://github.com/marcelwa))
- ✨ Accept `IQM_LOG_LEVEL` as the environment variable that selects the log
  level, injected by the SPANK plugin through `iqm_log_level` and
  `--iqm-log-level`. `IQM_CPP_API_LOG_LEVEL` still works as a deprecated alias
  ([#206](https://github.com/iqm-finland/QDMI-on-IQM/pull/206)) ([**@marcelwa**](https://github.com/marcelwa))
- ✅ Cover the device’s queue length, a queued job’s position, retrieval of an
  existing job by ID, and its advertised program formats through MQT Core’s
  Python QDMI API ([#195](https://github.com/iqm-finland/QDMI-on-IQM/pull/195)) ([**@marcelwa**](https://github.com/marcelwa))
- 👷 Add an `IQM_QDMI_SANITIZERS` CMake option for building with
  AddressSanitizer, UndefinedBehaviorSanitizer, ThreadSanitizer, or
  MemorySanitizer, and run the C++ test suite under ASan and UBSan in CI
  ([#173](https://github.com/iqm-finland/QDMI-on-IQM/pull/173)) ([**@marcelwa**](https://github.com/marcelwa))
- 🐍 Start building CPython 3.15 wheels ([#177](https://github.com/iqm-finland/QDMI-on-IQM/pull/177)) ([**@denialhaag**](https://github.com/denialhaag))
- ✨ Expose current device queue length and queued job position through QDMI,
  refreshing IQM job status for every position query ([#172](https://github.com/iqm-finland/QDMI-on-IQM/pull/172))
  ([**@burgholzer**](https://github.com/burgholzer))
- ✨ Add a `licenses` keyword argument to `iqm.qdmi.offloader`’s `sample`/
  `estimate`, forwarded as `--licenses` on `srun`, so callers can request the
  Slurm license a site administrator may require via the SPANK plugin’s
  `iqm_require_license` option ([#162](https://github.com/iqm-finland/QDMI-on-IQM/pull/162)) ([**@marcelwa**](https://github.com/marcelwa))
- ✨ Support retrieving existing IQM circuit jobs by ID ([#160](https://github.com/iqm-finland/QDMI-on-IQM/pull/160))
  ([**@burgholzer**](https://github.com/burgholzer))

### Fixed

- 🔒️ Log raw HTTP error-response bodies at `DEBUG` instead of `ERROR`, keeping
  only their size and content type at the default log level ([#205](https://github.com/iqm-finland/QDMI-on-IQM/pull/205))
  ([**@marcelwa**](https://github.com/marcelwa))
- 🐛 Keep authentication working past January 2038 by reading JWT expiry times
  as 64-bit values ([#205](https://github.com/iqm-finland/QDMI-on-IQM/pull/205)) ([**@marcelwa**](https://github.com/marcelwa))
- 🐛 Survive a calibration set whose gate loci or coherence times have an
  unexpected shape, dropping the affected gate or metric instead of crashing or
  misreporting it ([#204](https://github.com/iqm-finland/QDMI-on-IQM/pull/204)) ([**@marcelwa**](https://github.com/marcelwa))
- 🐛 Report a cancellation that the server refuses because the job already
  finished as `QDMI_ERROR_INVALIDARGUMENT` rather than
  `QDMI_ERROR_PERMISSIONDENIED`, which said the session was not allowed to use
  the job interface ([#199](https://github.com/iqm-finland/QDMI-on-IQM/pull/199)) ([**@marcelwa**](https://github.com/marcelwa))
- 🐛 Report the status the quantum computer is actually in, instead of pinning a
  session to busy from its first job submission onwards ([#190](https://github.com/iqm-finland/QDMI-on-IQM/pull/190))
  ([**@marcelwa**](https://github.com/marcelwa))
- 🐛 Keep a job checkable when a status or cancellation request fails, instead
  of permanently reporting a still-running job as failed ([#187](https://github.com/iqm-finland/QDMI-on-IQM/pull/187))
  ([**@marcelwa**](https://github.com/marcelwa))
- 🐛 Fix a potential histogram buffer size mismatch ([#181](https://github.com/iqm-finland/QDMI-on-IQM/pull/181)) ([**@marcelwa**](https://github.com/marcelwa))
- 🐛 Report the number of qubits without the computational resonators, which
  inflated `QDMI_DEVICE_PROPERTY_QUBITSNUM` on Star-topology devices ([#182](https://github.com/iqm-finland/QDMI-on-IQM/pull/182))
  ([**@marcelwa**](https://github.com/marcelwa))
- 🐛 Contain exceptions so they do not escape the C interface ([#175](https://github.com/iqm-finland/QDMI-on-IQM/pull/175), [#188](https://github.com/iqm-finland/QDMI-on-IQM/pull/188))
  ([**@burgholzer**](https://github.com/burgholzer), [**@marcelwa**](https://github.com/marcelwa))
- 🐛 Serialize move-gate and active-reset options using the canonical IQM
  RunRequest field names ([#169](https://github.com/iqm-finland/QDMI-on-IQM/pull/169)) ([**@burgholzer**](https://github.com/burgholzer))
- 🩹 Preserve exact program bytes across QDMI job parameter updates and property
  queries ([#159](https://github.com/iqm-finland/QDMI-on-IQM/pull/159)) ([**@burgholzer**](https://github.com/burgholzer))
- 🩹 Keep IQM shot and histogram bitstrings in the measurement-key and qubit
  order specified by IQM’s result metadata ([#158](https://github.com/iqm-finland/QDMI-on-IQM/pull/158)) ([**@burgholzer**](https://github.com/burgholzer))

### Changed

- ⬆️ Update MQT Core to 3.9.0, moving to its `mqt.core.qdmi.driver` namespace
  and its explicit sampler and estimator shot and precision defaults ([#195](https://github.com/iqm-finland/QDMI-on-IQM/pull/195))
  ([**@marcelwa**](https://github.com/marcelwa))
- ⬆️ Update QDMI to v1.3.3, and publish the device target’s stable ID and symbol
  prefix through QDMI’s `configure_qdmi_device_target` ([#195](https://github.com/iqm-finland/QDMI-on-IQM/pull/195))
  ([**@marcelwa**](https://github.com/marcelwa))
- ⚡️ Reuse HTTP connections within each QDMI device session to reduce TCP/TLS
  setup during initialization and subsequent requests ([#163](https://github.com/iqm-finland/QDMI-on-IQM/pull/163))
  ([**@burgholzer**](https://github.com/burgholzer))

## [1.3.0](https://github.com/iqm-finland/QDMI-on-IQM/compare/v1.2.0...v1.3.0) - 2026-07-31

### Added

- ✨ Validate IQM backend and target-QC availability once per node for each
  Slurm job step before launching tasks ([#136](https://github.com/iqm-finland/QDMI-on-IQM/pull/136)) ([**@burgholzer**](https://github.com/burgholzer))
- ✨ Export the stable IQM device ID and symbol prefix on the installed CMake
  target so MQT Core can synthesize relocatable manifests ([#140](https://github.com/iqm-finland/QDMI-on-IQM/pull/140))
  ([**@burgholzer**](https://github.com/burgholzer))
- ✨ Add `iqm.qdmi.offloader` module exposing programmatic `sample` and
  `estimate` functions (including `qc_id`/`qc_alias` SPANK device-selection
  parameters) for Slurm job submissions ([#104](https://github.com/iqm-finland/QDMI-on-IQM/pull/104), [#130](https://github.com/iqm-finland/QDMI-on-IQM/pull/130), [#133](https://github.com/iqm-finland/QDMI-on-IQM/pull/133))
  ([**@marcelwa**](https://github.com/marcelwa))
- ✨ Validate Slurm `--licenses` alignment with the targeted QC alias in the
  SPANK plugin, enabling admins to enforce Slurm-native concurrency limits on
  on-premise QCs ([#114](https://github.com/iqm-finland/QDMI-on-IQM/pull/114), [#134](https://github.com/iqm-finland/QDMI-on-IQM/pull/134)) ([**@marcelwa**](https://github.com/marcelwa), [**@burgholzer**](https://github.com/burgholzer))
- 📝 Add an integration scenarios analysis comparing IQM integration paths
  (direct C++/Python usage, Slurm + SPANK offloading, Spack install, and
  non-Slurm schedulers as forward-looking guidance) and an administrator guide
  walking through standing up IQM access on a Slurm cluster ([#147](https://github.com/iqm-finland/QDMI-on-IQM/pull/147))
  ([**@marcelwa**](https://github.com/marcelwa))

### Changed

- ⚡️ Cache SPANK validation per node and job step, isolate it from daemon-only
  environment variables, bound each launch-time request to 30 seconds by
  default, emit task diagnostics once per node and step, and require Slurm 20.02
  or newer ([#136](https://github.com/iqm-finland/QDMI-on-IQM/pull/136)) ([**@burgholzer**](https://github.com/burgholzer))
- ⬆️ Update `mqt-core` to version 3.8.0 and use its stable device registry with
  per-backend device sessions ([#140](https://github.com/iqm-finland/QDMI-on-IQM/pull/140)) ([**@burgholzer**](https://github.com/burgholzer))
- ♻️ Further align C++ HTTP and authentication handling with [cpr](https://github.com/libcpr/cpr) abstractions
  ([#122](https://github.com/iqm-finland/QDMI-on-IQM/pull/122)) ([**@burgholzer**](https://github.com/burgholzer))

### Fixed

- 🩹 Preserve a configured `iqm.default` endpoint unless `IQMBackend` receives
  an explicit or environment-provided base URL ([#140](https://github.com/iqm-finland/QDMI-on-IQM/pull/140)) ([**@burgholzer**](https://github.com/burgholzer))
- 🩹 Fix rate limit handling and retry logic for API requests ([#122](https://github.com/iqm-finland/QDMI-on-IQM/pull/122))
  ([**@burgholzer**](https://github.com/burgholzer))

## [1.2.0](https://github.com/iqm-finland/QDMI-on-IQM/compare/v1.1.1...v1.2.0) - 2026-07-09

### Added

- ✨ Expose the current calibration set ID as a device property via
  `QDMI_DEVICE_PROPERTY_CUSTOM1` ([#108](https://github.com/iqm-finland/QDMI-on-IQM/pull/108)) ([**@burgholzer**](https://github.com/burgholzer))
- ✨ Add `iqm-sampler` and `iqm-estimator` CLI entrypoints leveraging
  `IQMBackend`’s primitives ([#92](https://github.com/iqm-finland/QDMI-on-IQM/pull/92)) ([**@marcelwa**](https://github.com/marcelwa))
- ✨ Implement Slurm SPANK plugin for injecting IQM environment variables and
  session parameters into Slurm jobs ([#74](https://github.com/iqm-finland/QDMI-on-IQM/pull/74), [#117](https://github.com/iqm-finland/QDMI-on-IQM/pull/117)) ([**@marcelwa**](https://github.com/marcelwa))
- ✨ Support environment variable fallbacks (`IQM_BASE_URL`, `IQM_QC_ID`, and
  `IQM_QC_ALIAS`) for session initialization ([#74](https://github.com/iqm-finland/QDMI-on-IQM/pull/74)) ([**@marcelwa**](https://github.com/marcelwa))

### Fixed

- 🩹 Ensure the QDMI device can handle devices with computational resonators
  ([#107](https://github.com/iqm-finland/QDMI-on-IQM/pull/107)) ([**@burgholzer**](https://github.com/burgholzer))

### Changed

- ⬆️ Update `mqt-core` to version 3.7.0 ([#120](https://github.com/iqm-finland/QDMI-on-IQM/pull/120)) ([**@denialhaag**](https://github.com/denialhaag))
- ⬆️ Update QDMI to version 1.3.2 ([#120](https://github.com/iqm-finland/QDMI-on-IQM/pull/120)) ([**@denialhaag**](https://github.com/denialhaag))
- ♻️ Rewrite the C++ HTTP client to use [cpr](https://github.com/libcpr/cpr) instead of direct `libcurl` calls
  ([#105](https://github.com/iqm-finland/QDMI-on-IQM/pull/105)) ([**@marcelwa**](https://github.com/marcelwa))
- ♻️ Considerably simplify the internal HTTP client implementation ([#105](https://github.com/iqm-finland/QDMI-on-IQM/pull/105))
  ([**@burgholzer**](https://github.com/burgholzer))

## [1.1.1](https://github.com/iqm-finland/QDMI-on-IQM/compare/v1.1.0...v1.1.1) - 2026-06-01

### Fixed

- 🩹 Decouple MQT Core and Qiskit dependency resolution to avoid potential
  cyclic dependency issues ([#78](https://github.com/iqm-finland/QDMI-on-IQM/pull/78)) ([**@marcelwa**](https://github.com/marcelwa))

## [1.1.0](https://github.com/iqm-finland/QDMI-on-IQM/compare/v1.0.1...v1.1.0) - 2026-05-22

### Added

- ✨ Add end-to-end examples and documentation for running experiments on IQM
  hardware ([#53](https://github.com/iqm-finland/QDMI-on-IQM/pull/53)) ([**@marcelwa**](https://github.com/marcelwa), [**@burgholzer**](https://github.com/burgholzer))
- 🚸 Add explicit retry logic to avoid hitting API rate limits ([#52](https://github.com/iqm-finland/QDMI-on-IQM/pull/52), [#73](https://github.com/iqm-finland/QDMI-on-IQM/pull/73))
  ([**@marcelwa**](https://github.com/marcelwa), [**@burgholzer**](https://github.com/burgholzer))
- ✨ Add Qiskit-compatible `IQMBackend` wrapper including Sampler and Estimator
  primitives ([#37](https://github.com/iqm-finland/QDMI-on-IQM/pull/37)) ([**@marcelwa**](https://github.com/marcelwa), [**@burgholzer**](https://github.com/burgholzer))

### Changed

- ♻️ Consistently use `IQM_TOKEN` instead of `RESONANCE_API_KEY` for
  authentication ([#67](https://github.com/iqm-finland/QDMI-on-IQM/pull/67)) ([**@marcelwa**](https://github.com/marcelwa))
- ♻️ Consistently enforce explicit authentication parameters to take precedence
  over environment variables ([#67](https://github.com/iqm-finland/QDMI-on-IQM/pull/67)) ([**@marcelwa**](https://github.com/marcelwa))
- 📝 Restructure documentation for better clarity and navigation ([#53](https://github.com/iqm-finland/QDMI-on-IQM/pull/53))
  ([**@burgholzer**](https://github.com/burgholzer))
- 📝 Update Spack package guide with latest release and installation
  instructions ([#53](https://github.com/iqm-finland/QDMI-on-IQM/pull/53)) ([**@burgholzer**](https://github.com/burgholzer))
- 📝 Reduce redundancy across documentation ([#53](https://github.com/iqm-finland/QDMI-on-IQM/pull/53)) ([**@burgholzer**](https://github.com/burgholzer))
- 🚚 Replace `meetiqm.com` with new `iqm.tech` domain in documentation and
  codebase ([#56](https://github.com/iqm-finland/QDMI-on-IQM/pull/56)) ([**@iqmtjm**](https://github.com/iqmtjm), [**@marcelwa**](https://github.com/marcelwa))
- 🚸 Demote warnings from missing calibration endpoints to debug level ([#51](https://github.com/iqm-finland/QDMI-on-IQM/pull/51))
  ([**@marcelwa**](https://github.com/marcelwa))

## [1.0.1](https://github.com/iqm-finland/QDMI-on-IQM/compare/v1.0.0...v1.0.1) - 2026-04-27

### Fixed

- 🐛 Fix CD workflow runner ([#49](https://github.com/iqm-finland/QDMI-on-IQM/pull/49)) ([**@burgholzer**](https://github.com/burgholzer))

## [1.0.0](https://github.com/iqm-finland/QDMI-on-IQM/compare/...v1.0.0) - 2026-04-27

Compatible with QDMI `v1.3.0`.

- 🎉 Initial release ([**@burgholzer**](https://github.com/burgholzer), [**@marcelwa**](https://github.com/marcelwa))

<!-- Version links -->
<!-- PR links -->
<!-- Contributor -->
<!-- General links -->
