Thanks for taking the time to contribute. This document captures the small set of conventions we follow so that the public history stays readable.
- The default branch is
master. - Branch off
masterfor every change. Branch names follow the pattern<type>/<short-description>, e.g.feat/csv-multi-row-paste,fix/firecrawl-truncation,docs/security-policy,redesign/professional-ui-v1.1.
We use Conventional Commits. Each commit subject is one of:
feat(scope): …— user-visible feature changefix(scope): …— bug fixdocs(scope): …— documentation onlyrefactor(scope): …— code change, no behavior changetest(scope): …— tests onlychore(scope): …— tooling, deps, repo hygieneci(scope): …— CI/CD configurationperf(scope): …— performance improvement
scope is optional but encouraged. Use frontend, backend, repo, or a
component name (e.g. feat(frontend/results-table): …).
- One logical change per PR. Use squash-merge.
- The PR title MUST be a Conventional Commits subject — that line becomes the
squash-merged commit on
master. - Use
.github/PULL_REQUEST_TEMPLATE.md. Frontend visual changes require before/after screenshots. - Both CI jobs (
backendpytest,frontendlint+test) must be green before merge.
The repository ships as one product. frontend and backend carry the
same version number and bump together (lockstep), even when only one side
changes in a given release.
- Frontend version lives in
frontend/package.json. - Backend version is the literal in
backend/API/api.py(theversionfield of the/healthresponse).
Both must be updated to the same value in the same PR that introduces the
release. Tags use the form v<version> (e.g. v1.1.0). Update
CHANGELOG.md in the same PR.
# Frontend
cd frontend
npm run lint
npm run test
npm run build
# Backend
cd backend
pytest tests/ -vIf you cannot run one half (e.g. you only touched the frontend), say so in the PR's Test Plan and lean on CI to cover the other side.
See SECURITY.md.