First release published to PyPI.
pip install "component-framework[fastapi]" # or [django], [flask], [litestar]No behavioural change from 0.6.0b0. The beta is promoted to a final release so dependents can require a stable version: a specifier without a pre-release marker only resolves to a pre-release when no final release exists, so relying on that fallback would mean the resolution changed silently the first time any stable version appeared.
The rest of this release is what an audit of the built wheel turned up — the package was installable, but not yet fit to hand to someone.
Packaging
- Trusted publishing via GitHub Actions OIDC on a
v*tag (#47) — no API token is stored in the repository. The build job also refuses to hand off a wheel missing the client assets orpy.typed, which ship with no explicit include and would otherwise produce a wheel that installs and imports cleanly and then serves no interactivity. py.typed(#49). The codebase is type-checked in CI and shipscomponent-client.d.ts, but without the PEP 561 marker every consumer running mypy or pyright saw the package as untyped. The types existed; they were not advertised.- A
testingextra (#49).component_framework.testingimports pytest at module scope, but pytest was only reachable viadev-base— so following the README's testing sample after a normal install raisedModuleNotFoundError. - Classifiers for the license, the frameworks the adapters target, and
Typing :: Typed.
Documentation that did not survive contact with the package (#49)
Found by building the wheel, installing it into a clean venv, and checking every documented import against the installed package rather than the source tree.
- The README described an install nobody could perform — every instruction was an editable install from a checkout, and the section opened with "Not on PyPI yet". The README is the PyPI landing page, so the one line a visitor needed was the one that was missing.
- The README's composition example was invented, importing two names
core.compositiondoes not export. - The README's testing example used three methods that do not exist.
docs/LOCKED_FIELDS.mdanddocs/CBV_GUIDE.mdeach imported from the wrong module.- Two
docs/examples/ecommerce.mdsamples did not parse at all.
A test that reads the docs (#49)
tests/test_docs_samples.py parses every fenced python block in the README, CONTRIBUTING, and docs/, and resolves every component_framework import against the real package. Nothing read the documentation before, which is why all six defects above shipped — the guard goes red on every one of them when run against the previous text, including three my own manual audit had missed. It also fails if the README ever again claims the package is not on PyPI.
Full details in CHANGELOG.md.