Contributing and conventions#

Refer to the root CONTRIBUTING.md for setup, testing, pull requests, and DCO sign-off. Refer to AGENTS.md for the architecture and change constraints used by humans and coding agents. Refer to Documentation style for requirements governing customer-facing Markdown and reStructuredText. Refer to DEPENDENCIES.md for the package dependency map.

For a Python change:

uv --config-file uv.toml sync --project <affected-project>
uv --config-file uv.toml run --project tests pytest <affected-test-files>
uv tool run ruff check <changed-python-files>

Public Python references are generated from each enrolled module’s literal __all__, declarations, annotations, defaults, and docstrings. An API-only change therefore updates the code, its co-located documentation, and tests; the strict documentation build rejects unresolved or undocumented exports. Update a narrative page when concepts, workflows, operations, or architecture change, and add a migration entry for a breaking change.

The repository-wide README and documentation ownership rules live in the Comments and documentation section of AGENTS.md. Follow that contract instead of introducing another placement rule in a package or sample.

The user-facing command catalog is generated from top-level sample [project.scripts] entries and literal argparse declarations. Keep option descriptions in help= and do not repeat flag tables in narrative pages.

Sample configuration examples live in checked-in YAML and JSON files, with field-level guidance in adjacent YAML comments. The generated catalog enrolls files under a top-level sample’s yaml/ tree and files beside a direct capability subproject, then renders them verbatim. Narrative docs cover only workflows, operational decisions, credentials, and process relationships.

Application-owned projects under apps/ are outside the repository sample and contribution tooling described below. After a pyproject.toml change elsewhere, run uv run --script .github/scripts/generate_dependency_map.py. The pre-commit hook normally regenerates the Python inventory in DEPENDENCIES.md automatically, and CI rejects drift. Do not edit that generated section by hand. Regenerate the affected project’s gitignored uv.lock locally. New source files outside apps/ require an SPDX header; refer to SPDX headers.

The root uv.toml records the repository’s dependency qualification cutoff. Repository CI passes it explicitly to uv, so fresh resolutions ignore package-index artifacts uploaded after that timestamp while normal compatibility ranges stay in package metadata. Standalone nested projects do not always inherit the root file: uv stops upward config discovery at a nearer [tool.uv] table, and most projects define [tool.uv.sources]. Run uv from the repository root with --config-file uv.toml as shown above. To qualify newer dependencies, advance the cutoff in a dedicated change, resolve every project with uv --config-file uv.toml lock --upgrade --project <directory>, and run the full test suite. The generated per-project lockfiles are validation artifacts and remain gitignored. The same change regenerates the committed locks under dependency-manifest/; the pre-commit hook does the Python one when uv.toml is staged.