docs: build the supported machines table from a device registry - #1202
Merged
Conversation
`docs/_static/devices.json` lists every supported machine: vendor, model, device type, capabilities, support level, driver import path, and links to its documentation page, its source and the manufacturer. Two MyST directives render it. `device-table` produces a searchable, filterable table, used for the whole list on the supported machines page and for per-vendor subsets elsewhere. `device-card` renders a single entry, for the top of a machine's own page. The registry is validated when the build starts: unknown or duplicate fields, statuses outside the known set, and device types or capabilities outside their controlled vocabularies all fail the build, as do `doc_slug` and `code_slug` values that do not resolve to a real page or module. That keeps a machine's metadata and the pages describing it from drifting apart. The supported machines page was a TODO, and the previous registry had grown stale paths during the documentation reorganisation. Its 64 entries are replaced by 93, with per-model entries for the BioShake, Cytomat, Thermoshake and Hamilton STAR families rather than one row covering several machines. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The supported machines page was a
TODO, and thedevices.jsonalready in the repo was unused with paths that had gone stale during the documentation reorganisation. This replaces both with a registry that the docs render from.What it is
docs/_static/devices.jsonlists every supported machine: vendor, model, device type, capabilities, support level, driver import path, and links to its documentation page, its source, the manufacturer, and the person who looks after it.Two MyST directives read it:
device-table— the searchable, filterable table. Used bare for the whole list on the supported machines page, and with:vendor:for a compact per-vendor list (see the BioShake notebook).device-card— one entry, for the top of a machine's own page.Adding a machine is one JSON object. There is no table markup to keep in sync.
Validation
The registry is checked when the build starts, so metadata cannot drift away from the pages it describes:
kindandcapabilitiesare controlled vocabularies; a term that nothing uses is also an error, so the lists cannot accumulate dead synonymsdoc_slugandcode_slugmust resolve to a real page and a real moduledocs/_exts/plr_devices/registry_tests.pycovers the loader, the renderers and the registry itself. It depends only on the standard library, so it runs in every test environment rather than only where Sphinx is installed.Registry contents
64 entries become 93. The BioShake, Cytomat, Thermoshake and Hamilton STAR families each had one row covering several machines; they are now one entry per model, with capabilities and support levels taken from the drivers. Ten entries whose factory raises
NotImplementedErrorbefore constructing anything are marked WIP rather than Mostly — you cannot instantiate them, so none of their capabilities are available.Every manufacturer link was checked by fetching it: 37 were wrong and are corrected, 4 pointed at pages that no longer exist and are removed. Notably, QuantStudio 5 pointed at the Human Identification forensic variant, and all twelve QInstruments models shared one generic landing page.
Known gaps
mettler-toledo-wxs205sduandagrowtek-pump-arraylinks could not be fetch-confirmed — mt.com returns 406 to automated requests and agrowtek.com was unreachable. Both were left as they were.biotek-cytation-5andbiotek-synergy-htmay point at dead or redirecting pages, but agilent.com returns 403 to every request, so this could not be confirmed either way. Left in place rather than removed on unverified grounds.cole-parmer-masterflexpoints at Avantor because masterflex.com was returning HTTP 522 throughout; a first-party page may exist.device-cardin a notebook renders on the published page but shows as a literal code block when the notebook is opened in an editor. That is inherent to a build-time directive.🤖 Generated with Claude Code