Contribute#

Set up the development environment, then:

  • Run the checks of the development guide; the pre-commit hooks run ruff.

  • Describe user visible changes in a news fragment: a file news/<issue number>.<type> without extension, such as news/42.feature, where the type is breaking, feature, bugfix, documentation or misc. Without an issue use +name.<type>. Pull requests without a fragment fail the check unless they have the label skip-changelog.

  • todo.txt lists what is done and open.

Project constraints#

  • Errors are split up as finely as possible: one class per cause in community_insights/errors/, each with a docstring that says what happened and how to solve it. Then each has its own entry in Errors and can be caught specifically. Do not raise a general error where a specific one can be defined.

  • All classes and functions have a docstring in the Google style: a summary line, a blank line, the description, and the sections Args:, Returns:, Raises: and Examples: where they apply. make lint checks it with ruff. tests/quality/test_docstrings.py allows only these headings and fails for a docstring that lacks a section it needs; tests/quality/test_with_doctest.py runs the examples (>>>) of the code and of the documentation. Both are adapted from icalendar (BSD-2-Clause).

  • One class per module (see Set up for development).

AI contributions#

You may use AI to contribute. Follow the AI policy of icalendar and the Python Calendaring Ecosystem: say which model you used and how, take responsibility for the result, and make sure nothing is copied from sources you may not use. The ai-prompt-auto-commit pre-commit hook records the prompts and adds them to the commits.

AI agents that work in this repository follow AGENTS.md (Claude Code reads it through CLAUDE.md): every prompt becomes items of todo.txt, nothing is committed or deleted without asking, and the project constraints above apply.

Last updated on 2026-10-28.