Guide / Contribute

Contributing

Start with a focused issue describing the student workflow, expected behavior and an anonymized reproduction. Never include credentials, signed URLs, course bodies, private submission material or another student's information. Use fictional course fixtures and generic institution origins. Omit account-linked test counts/dates, local machine names and personal paths from public evidence. Run uv run python scripts/check_public.py before publishing. Its common-pattern checks supplement manual review; they cannot identify all personal information.

uv sync --frozen
uv run ruff check .
uv run ruff format --check .
uv run pytest
uv build

Use a small pull request with a concrete before/after description and the checks you actually ran. Distinguish fixture tests, protocol tests and live Canvas checks. No live Canvas credentials are required by CI. Contributions are under Apache-2.0; by submitting a change you confirm you have the right to contribute it. Use the testing guide for scenario coverage and optional live checks.

Adding API coverage

Add a fixed GET operation to catalog.py, link the official endpoint documentation, and review parameter-side effects. Add per-operation query keys; avoid broad wildcards. Check unread state, module completion and permissions explicitly. Reject undocumented or ambiguous action endpoints until verified. Include a test asserting the emitted method, path, accepted input and relevant unsafe variants.

The common policy must cover named tools, discovered reads, pagination and the poller. Attachment content must come through authenticated metadata and the fixed public_url API pointer, then pass the audited S3-only download boundary on every hop without Canvas authorization or cookies. Do not re-enable UI/preview routes or unsupported storage as a fallback. Credential operations belong in auth.py and never become agent tools. Scope strings require exact official placeholders, not generated friendly names.

Prefer small dependencies, bounded resource use, actionable errors, and returning source IDs/links. Do not hide permission failures or partial collections. Follow security reporting for vulnerabilities and read the release gates before proposing deployment claims.