- Main Package (
cforge/): CLI for Context Forge (entrymain.py) - Commands (
cforge/commands/): Individual CLI command sections - Tests (
tests): structure mirrorscforge
- Python >= 3.11. Type hints required; strict
mypysettings. - Formatters/linters: Black (line length 200), isort (profile=black), Ruff (F,E,W,B,ASYNC), Pylint as configured in
pyproject.tomland dotfiles. - Naming:
snake_casefor modules/functions,PascalCasefor classes,UPPER_CASEfor constants. - Group imports per isort sections (stdlib, third-party, first-party
mcpgateway, local).
- Pytest with async; discovery configured in
pyproject.toml. - Layout: follow the structure of the
cforgepackage. - Naming: files
test_*.py, classesTest*, functionstest_*. - Commands:
make test,pytest -k "name". Usemake coveragefor reports. - Keep tests deterministic, isolated, and fast by default.
- Conventional Commits (
feat:,fix:,docs:,refactor:,chore:). Link issues (e.g.,Closes #123). - Sign every commit with DCO:
git commit -s. - Do not mention Claude or Claude Code in PRs/diffs. Do not include effort estimates or "phases".
- Include tests and docs for behavior changes.
- Require green lint and tests locally before opening a PR.
- Copy
.env.example→.env; verify withmake check-env. Never commit secrets.