π¦ PromptCanary v0.2.2
Detect silent behavioral drift in LLM providers β before it breaks production.
This is a stabilization release. No new features β every change here exists
to make the project's own CI, packaging, and public-facing links trustworthy.
If you're evaluating PromptCanary for the first time, this is the version to start with.
What's Fixed
Two CI-only mypy failures, both caused by the same root issue: local
development environments had accumulated packages over time that were never
declared in pyproject.toml, so checks passed locally but failed in CI's
genuinely clean install.
types-PyYAMLwas missing from[dev]extras β without it,yaml.dump()
returnsAnyinstead ofstr, whichmypy --strictcorrectly flags
againstCanarySuite.to_yaml_template()'s declared return type.pandaswas declared in[viz]extras but never actually used anywhere
in the codebase β its only effect was pulling innumpytransitively.
numpy2.5's type stubs require Python 3.12+ to parse, conflicting with
this project's deliberatepython_version = "3.10"mypy target (chosen
because we support 3.10+). Removed the unused dependency rather than
working around the symptom. Full investigation inDECISION_LOG.mdADR-011.
Both were caught by adopting clean-room verification as standard
practice: installing only what pyproject.toml declares into a fresh,
disposable virtualenv before every release, rather than trusting a
long-lived dev environment. This is now documented as a permanent step in
CONTRIBUTING.md's new Release Checklist.
What's Corrected
- Fixed the placeholder GitHub org across the entire project. Every
badge, URL, and cross-reference β 32 occurrences across the README, CI
workflows, issue templates,pyproject.toml,mkdocs.yml, docstrings,
and documentation pages β pointed to a placeholder org. All now correctly
point to the real repository. - Fixed a related inconsistency: the documentation URL pointed to a
ReadTheDocs domain that was never configured; the actual deploy target
(GitHub Pages, via the existingdocs.ymlworkflow) is now referenced
correctly everywhere. - New badge row on the README: CI status, PyPI version, Python version,
license, Ruff, mypy, a live view counter, and a one-click Colab launch
badge for the notebooks. - New
notebooks/README.mdwith direct "Open in Colab" links for all four
notebooks β anyone can now run the interactive examples with zero local
setup.