Skip to content

✨ Add typed QDMI device configuration transport - #1967

Merged
burgholzer merged 5 commits into
mainfrom
agent/qdmi-config-transport
Jul 30, 2026
Merged

✨ Add typed QDMI device configuration transport#1967
burgholzer merged 5 commits into
mainfrom
agent/qdmi-config-transport

Conversation

@burgholzer

@burgholzer burgholzer commented Jul 29, 2026

Copy link
Copy Markdown
Member

🤖 AI text below 🤖

Description

This is the first change in a three-PR series for runtime-configurable QDMI
devices. It adds the generic transport layer while deliberately leaving the
neutral-atom and superconducting providers unchanged.

The change:

  • represents inline JSON and file-based device descriptions as one replaceable
    DeviceConfigurationSource;
  • parses and merges session.device-config atomically across registry layers;
  • exposes mutually exclusive device_config and device_config_file
    arguments through FoMaC's Python API;
  • adapts the typed value to exactly one QDMI v1 custom parameter at session
    initialization;
  • adds generic RUNTIME_FILES metadata so provider data files remain beside
    built, installed, imported, and copied libraries;
  • documents the configuration contract and adds focused C++, Python, and CMake
    integration coverage.

Inline and file sources replace one another as a unit, preventing a
higher-precedence file override from retaining inherited inline JSON. Raw
custom1 or custom2 cannot be combined with the typed source because those
slots form the QDMI v1 adapter seam.

The follow-up PRs will migrate the NA and SC providers onto this transport. They
will remain separate so provider schema, ownership, and calibration changes can
be reviewed independently.

AI assistance was used to reconstruct the change from the approved design,
implement tests and documentation, and run the validation listed below. A human
maintainer remains responsible for reviewing and accepting the contribution.

Validation

  • Release build
  • DeviceRegistry tests: 15/15
  • QDMI Driver tests: 111/111
  • Focused Python FoMaC test: 1/1
  • Imported-target/runtime-file CMake tests: 6/6
  • Python stub regeneration
  • Full documentation build
  • Full repository lint session
  • git diff --check

Checklist

  • The pull request only contains commits that are focused and relevant to
    this change.
  • I have added appropriate tests that cover the new/changed functionality.
  • I have updated the documentation to reflect these changes.
  • I have added entries to the changelog for any noteworthy additions,
    changes, fixes, or removals.
  • I have added migration instructions to the upgrade guide (not needed;
    this change is additive).
  • The changes follow the project's style guidelines and introduce no new
    warnings.
  • The changes are fully tested and pass the CI checks.
  • I have reviewed my own code changes.

If PR contains AI-assisted content:

  • Any agent that created, edited, or submitted GitHub content was explicitly
    authorized for that scope, as required by our AI Usage Guidelines.
  • Every agent-authored or agent-edited public text body begins with the
    visible disclosure 🤖 *AI text below* 🤖 (titles are exempt).
  • I have disclosed AI assistance in the PR description.
  • I confirm that I have personally reviewed and understood all AI-generated
    content, and accept full responsibility for it.

@mergify mergify Bot added the conflict label Jul 29, 2026
@codecov

codecov Bot commented Jul 29, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

burgholzer added a commit that referenced this pull request Jul 30, 2026
Assisted-by: GPT-5.6 via Codex

# Conflicts:
#	CHANGELOG.md
@mergify mergify Bot removed the conflict label Jul 30, 2026
@burgholzer burgholzer self-assigned this Jul 30, 2026
@mergify mergify Bot added the conflict label Jul 30, 2026
Apply the repository-required formatting and license header updates.

Assisted-by: GPT-5.6 via Codex
Assisted-by: GPT-5.6 via Codex
@burgholzer
burgholzer force-pushed the agent/qdmi-config-transport branch from fd902ab to 91e6694 Compare July 30, 2026 12:35
@mergify mergify Bot removed the conflict label Jul 30, 2026
Record the published PR and latest-main integration in the living plan.

Assisted-by: GPT-5.6 via Codex
@burgholzer burgholzer added enhancement Improvement of existing feature QDMI Anything related to QDMI labels Jul 30, 2026
@burgholzer burgholzer added this to the QDMI Support milestone Jul 30, 2026
@burgholzer
burgholzer marked this pull request as ready for review July 30, 2026 14:15
@burgholzer
burgholzer merged commit b91a0bf into main Jul 30, 2026
33 checks passed
@burgholzer
burgholzer deleted the agent/qdmi-config-transport branch July 30, 2026 14:16
burgholzer added a commit that referenced this pull request Jul 30, 2026
🤖 *AI text below* 🤖

## Description

This PR builds on the typed QDMI device-configuration transport merged
in #1967 and exposes the enabled QDMI device IDs already registered with
the Driver. It enables integrations to discover stable IDs without
opening devices, loading native libraries, or receiving paths, prefixes,
credentials, or session configuration.

The change adds:

- `Driver::registeredDeviceIds()` in C++, preserving deterministic
registration order;
- `registered_device_ids()` in the FoMaC Python API;
- documentation for the load-free enumeration contract; and
- C++ and Python tests covering runtime registrations, ordering,
disabled IDs, and the absence of eager library loading.

AI assistance was used to implement the API, tests, documentation, and
validation. A human maintainer remains responsible for reviewing and
accepting the contribution.

## Validation

- Full release build
- QDMI Driver tests: 112/112
- Python FoMaC tests: 185/185
- Python stub regeneration
- Full repository lint session
- `git diff --check`

## Checklist

- [x] The pull request only contains commits that are focused and
relevant to this change.
- [x] I have added appropriate tests that cover the new functionality.
- [x] I have updated the documentation to reflect these changes.
- [x] I have added the assigned pull request number to the changelog.
- [x] The changes follow the project style guidelines and introduce no
new warnings.
- [x] The changes are fully tested and pass the CI checks.
- [x] I have reviewed my own code changes.

**If PR contains AI-assisted content:**

- [x] Any agent that created, edited, or submitted GitHub content was
explicitly authorized for that scope.
- [x] Every agent-authored public text body begins with the required
visible disclosure.
- [x] I have disclosed AI assistance in the PR description.
- [x] I confirm that I have personally reviewed and understood all
AI-generated content, and accept full responsibility for it.
burgholzer added a commit that referenced this pull request Jul 31, 2026
🤖 *AI text below* 🤖

## Description

This PR builds on the typed QDMI device-configuration transport merged
in #1967 and makes the bundled neutral-atom QDMI provider configurable
at runtime.

Each session now strictly parses and owns its device description.
Callers can supply schema-version-1 JSON inline through `CUSTOM1` or by
file through `CUSTOM2`; without an explicit source, the provider loads
its bundled configuration beside the shared library. This allows one
provider library to expose multiple stable device IDs with independent
configurations.

The change also:

- moves the neutral-atom model from generated global state into each
session;
- validates malformed, incomplete, oversized, and unknown configuration
data;
- preserves retry after failed initialization and rejects
post-initialization mutation;
- packages the default JSON as a relocatable runtime artifact;
- removes the generated-header and generator-command pipeline; and
- introduces a shared configuration-source loader intended for the later
superconducting-provider migration.

The superconducting provider is intentionally outside this PR.

AI assistance was used to implement the provider migration, tests,
documentation, and validation. A human maintainer remains responsible
for reviewing and accepting the contribution.

Fixes #1226 

## Validation

- Full release build: 427/427 targets
- Neutral-atom provider tests: 40 passed, 1 expected unsupported job-ID
query skipped
- QDMI Driver tests: 112/112
- Neutral-atom FoMaC C++ tests: 2/2
- Neutral-atom FoMaC Python tests: 12/12
- Imported-target and runtime-file CTest fixtures: 6/6
- Python stub regeneration with no tracked changes
- Warning-as-error documentation build
- Full repository lint session
- `git diff --check`

## Checklist

- [x] The pull request only contains commits that are focused and
relevant to this change.
- [x] I have added appropriate tests that cover the new functionality.
- [x] I have updated the documentation to reflect these changes.
- [x] I have added the assigned pull request number to the changelog.
- [x] The changes follow the project style guidelines and introduce no
new warnings.
- [x] The changes are fully tested and pass the CI checks.
- [x] I have reviewed my own code changes.

**If PR contains AI-assisted content:**

- [x] Any agent that created, edited, or submitted GitHub content was
explicitly authorized for that scope.
- [x] Every agent-authored public text body begins with the required
visible disclosure.
- [x] I have disclosed AI assistance in the PR description.
- [x] I confirm that I have personally reviewed and understood all
AI-generated content, and accept full responsibility for it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement Improvement of existing feature QDMI Anything related to QDMI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant