PQA017 — Circular inheritance detected¶
Device types form a cycle through
extends:.
extends: lets a device type inherit properties, functions and commands from a base type — the shape shared by three SIO module variants is declared once and specialised three times. Resolving a type means walking that chain to its base.
A cycle makes the walk endless.
Why the build refuses this¶
The full property set of the type cannot be computed. Every generator downstream — Thing class, validator, deserializer — needs the resolved set, and there is no base case to stop at.
How to fix it¶
Make one type the base and give it no extends:. Inheritance chains here are shallow by design: a shared base and its variants.
A cycle of two usually means both types were specialised from each other instead of from a common ancestor; extract the shared shape into a third, abstract: true type and let both extend it.
If you disagree with a report¶
Do not suppress it. A wrong report is a bug in the check — report it with the YAML that triggered it.