Every device in plesty now ships reference docs generated straight from its live doc_model(). As a user you get docs that always match the real API; as a contributor you write none.

plesty-sdk ๐Ÿ“– docs [Device] tier
Using it โ€” find & read any device's reference

Open a device module's documentation and you'll find four reference pages, regenerated from the device's schema on every build โ€” so what you read is exactly what you can run, and it can't drift from the code.

Start on Usage to see how to connect and drive the device; reach for Parameters and Functions as the complete, typed list of what you can set and call.

Usage
how to drive it
Copy-ready connect / read / set examples for the device โ€” the fastest way to get it moving.
Parameters
what you can set
Every config key with its type, unit, access, and valid range โ€” so you know exactly what a value means before you change it.
Functions
what you can call
Each operation with its inputs and outputs โ€” the callable surface of the device at a glance.
Standard Methods
the shared contract
The commands every device answers โ€” connect, identity, check_errors, reset โ€” so switching devices doesn't mean relearning basics.
Contributing โ€” document your device for free
1
Declare the module a device
Auto-generation keys off module_type = "device". Your schemas already describe the parameters and operations, so the base device builds doc_model() for you โ€” there are no reference .md files to write.
# pyproject.toml [tool.plesty] standard = "quantum" module_type = "device"
2
Build โ€” the four pages appear
Generation runs before the Sphinx build (scaffolded by plesty init), so a plain build produces the reference pages from your live model. Preview them locally before you push.
Terminal
uv run plesty docs serve # โ†’ generates Usage / Parameters / Functions / Standard Methods # โ†’ builds the site and opens it for preview
The guardrail โ€” gate d3 in plesty check

Because the docs are generated, a contributor needs to know they'll actually render. Gate d3 ([Device] tier) runs in plesty check / CI and, in an isolated subprocess, proves your device is documentable โ€” so a broken model fails fast, on your machine, not on the published site:

# what d3 verifies, in essence device = load_doc_device() # imports the module, constructs WITHOUT hardware model = device.doc_model() if not model.standard_methods: raise SystemExit("doc_model().standard_methods is empty") if not (model.parameters or model.functions): raise SystemExit("device documents neither parameters nor functions") render_device_pages(model) # every page must render without error print("D3_OK")

So to pass d3 your device must import and construct without real hardware, and expose a non-empty model that renders. Non-device modules print โœ“ Device Docs (N/A โ€” not a device module) and skip it.

What you do vs. what everyone gets
โœ— Before
โ€ข Authors hand-wrote Usage / Parameters / Functions
โ€ข Every schema change meant re-editing docs
โ€ข Users hit reference that had drifted from the API
โ€ข Nothing checked the docs even built
โœ“ Now
โ€ข Contributors declare module_type = "device" โ€” done
โ€ข Pages regenerate from doc_model() each build
โ€ข Users get reference that can't drift from the schema
โ€ข Gate d3 blocks CI if it won't render