Thanks for considering a contribution. Iris is open source under Apache 2.0 and welcomes pull requests, issues, and discussions.
iris/ # repo root
├── iris/ # Python CLI (the analysis engine)
├── platform/ # Next.js app (multi-tenant dashboard)
├── docs/ # Architecture, methodology, principles
├── tests/ # Python pytest suite (CLI)
├── examples/ # Sample reports and fixtures
└── supabase/ # Project-level Supabase config
The CLI and the platform ship independently:
- CLI wheels are published as GitHub Release assets and installed via the
install.sh/install.ps1scripts served by the platform. - Platform is deployed to Vercel; see
platform/VERCEL.md.
git clone git@github.com:RocketBus/clickbus-iris.git iris
cd iris
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
pip install pytest
# Verify
iris --help
pytest tests/ -qRequirements: Python 3.11+, Git, optional gh CLI for PR analysis.
cd platform
npm install --legacy-peer-deps
# Copy env.example → .env.local and fill in your own Supabase / NextAuth secrets
cp env.example .env.local
$EDITOR .env.local
npm run devThe first npm install also installs the Husky pre-commit hook (platform/.husky/pre-commit) which runs lint-staged on changed files.
Optional: npx supabase start to run a local Postgres mirror of the schema in platform/supabase/migrations/.
In platform/:
npm run dev # dev server (Turbopack)
npm run build # production build
npm run lint # eslint --fix
npm run test # vitest (unit tests)
npm run test:coverage # vitest with coverage report
npx tsc --noEmit # type check
npm run format # prettier writeIn repo root (Python):
pytest tests/ -q # full Python test suite
iris /path/to/repo # run the CLI on a real repo- Open an issue first for non-trivial changes. Use the templates in
.github/ISSUE_TEMPLATE/. Trivial fixes (typos, doc tweaks) don't need an issue. - Fork the repo, branch from
main(feat/...,fix/...,docs/...). - Commit following Conventional Commits —
feat:,fix:,docs:,chore:,refactor:,test:. Keep commits focused. - Run locally before pushing:
npm run lint && npx tsc --noEmit && npm run test:coverageinplatform/, pluspytest tests/ -qfrom repo root. - Open a PR against
main. Fill out the description (what + why). The CI workflow at.github/workflows/ci.ymlwill run lint, type check, and tests automatically. - Reviews: at least one approval from a maintainer required. Address feedback in additional commits (don't force-push during review).
- Merge: squash-merge by default; the PR title becomes the commit message.
When introducing a new analysis metric, complete the entire chain so it surfaces in reports and the platform:
iris/analysis/<metric>.py— analysis moduleiris/metrics/aggregator.py— wire it iniris/models/metrics.py— Python schema (dataclass)iris/reports/writer.py— Markdown report writeriris/reports/narrative.py— narrative finding (if threshold-based)platform/src/types/metrics.ts— TypeScript schemaplatform/src/app/[tenant]/...— UI surface (if visible in the dashboard)docs/METRICS.md— entry in the canonical metric dictionary
The metric.yml issue template enforces this checklist.
- TypeScript: ESLint + Prettier handle formatting. Strict mode enabled.
- Python: PEP 8, 4-space indent. Small, readable functions.
- Comments: only when the why is non-obvious. Don't restate what the code does.
- Tests: integration tests favor real DBs over mocks for migrations; unit tests for analysis modules.
Iris analyzes its own repo as a release sanity check:
iris .If your PR touches the engine, include the resulting out/90d/ summary in the PR description.
Please don't open public issues for security vulnerabilities. See SECURITY.md for the responsible disclosure process.
This project follows the Contributor Covenant. By participating, you agree to uphold it.
By submitting a contribution, you agree that your work will be licensed under the project's Apache License 2.0.