|
| 1 | +# Platform Support Tiers |
| 2 | + |
| 3 | +How PyDevices states what a platform claim is worth. Companion to |
| 4 | +[`design-principles.md`](design-principles.md): the completeness standard |
| 5 | +demands that every claim be proven or recorded with its honest cause — |
| 6 | +these tiers are the vocabulary for doing that consistently, org-wide. |
| 7 | + |
| 8 | +Every platform claim in a PyDevices README, vision, or roadmap carries |
| 9 | +one of three labels: |
| 10 | + |
| 11 | +## Bench-proven |
| 12 | + |
| 13 | +We demonstrated it ourselves on real hardware — the demo a stranger |
| 14 | +could watch exists and has run. This is the default tier for the |
| 15 | +platforms on our bench: the MCU fleet (ESP32 family, RP2), Windows, and |
| 16 | +desktop Linux. |
| 17 | + |
| 18 | +## CI-proven |
| 19 | + |
| 20 | +Continuous integration builds it, imports it, and runs its unit and |
| 21 | +contract tests — but no one here has exercised it against real hardware |
| 22 | +or OS services beyond what a runner provides. CI-proven is a real, |
| 23 | +honest tier, not a lesser apology: structural correctness is proven, |
| 24 | +hardware behavior is not yet, and the claim says so. |
| 25 | + |
| 26 | +## Community-verified |
| 27 | + |
| 28 | +The surface ships, clearly labeled as awaiting verification from |
| 29 | +someone with the hardware. This tier is an invitation, not a gap: the |
| 30 | +work is done to the CI-proven line, the seams are designed and |
| 31 | +documented, and a report from the field — "works here," with platform |
| 32 | +details — promotes the claim. Verification reports are welcome as |
| 33 | +issues on the relevant repo or in |
| 34 | +[Discussions](https://github.com/PyDevices/pydevices/discussions). |
| 35 | + |
| 36 | +A claim may only sit in this tier if the two below it are actually met: |
| 37 | +shipping untestable code and calling it community-verified is the |
| 38 | +silent gap the completeness standard condemns, with a friendlier label. |
| 39 | + |
| 40 | +--- |
| 41 | + |
| 42 | +## Current postures |
| 43 | + |
| 44 | +**macOS.** PyDevices ships everything for macOS that CI can prove — |
| 45 | +wheels, imports, unit and contract tests on macOS runners — and claims |
| 46 | +nothing hardware-adjacent (USB enumeration, Bluetooth radios, audio |
| 47 | +devices) beyond that. Those surfaces ship at the community-verified |
| 48 | +tier: the code paths exist where the underlying libraries support them, |
| 49 | +and reports from Mac users promote them. No PyDevices claim assumes a |
| 50 | +Mac on our bench, because there isn't one. |
| 51 | + |
| 52 | +**Single-board computers (Raspberry Pi and kin).** An SBC running |
| 53 | +CPython on Linux inherits most of the desktop tier as-is: Bluetooth |
| 54 | +via BlueZ, USB host enumeration, kmsdrm display output, standard |
| 55 | +wheels. Those claims are the desktop Linux claims, at desktop Linux's |
| 56 | +tier. The named gap is the machine layer — GPIO/SPI/I2C access that |
| 57 | +would let MCU-style device drivers run on an SBC's pins. That seam is |
| 58 | +identified and undelivered; it ships no claim today, and if it becomes |
| 59 | +a project it starts at CI-proven with community verification invited |
| 60 | +on the breadth of boards no bench could hold. |
| 61 | + |
| 62 | +--- |
| 63 | + |
| 64 | +*Postures are updated here when a tier changes — a promotion needs its |
| 65 | +verification report or bench demo; a demotion needs its honest cause.* |
0 commit comments