# Contributing ## Gitflow - **main** — production; merges only from `release/*` and `hotfix/*` - **develop** — integration branch (default for development) - **feature/\*** — `feature/[issue-id]-description` from `develop` - **release/vX.Y.Z** — stabilization from `develop` - **hotfix/vX.Y.Z** — urgent fixes from `main` ## Commits Format: `type(scope): description` Types: `feat`, `fix`, `docs`, `style`, `refactor`, `test`, `chore` ## Pull requests - Target `develop` for features; `main` for release/hotfix - CI `test` job must pass - At least one approval - Rebase/merge when up to date with target branch - Delete branch after merge ## Versioning - SemVer in [`VERSION`](VERSION) - Bump version in `release/*` or `hotfix/*` branches - Tag `vX.Y.Z` on `main` after release merge ## Branch protection (Gitea) Configure for **main** and **develop**: - Require pull request reviews - Require status checks (`test`) - Require branches to be up to date - No force push, no deletion ## Local development ```bash cp .env.example .env pnpm install pnpm --filter @cfdm/shared build pnpm --filter @cfdm/db build # API (:8080) pnpm --filter @cfdm/api dev # Frontend (:5173, proxies /api → :8080) pnpm --filter web dev ``` ## Release process 1. `git checkout -b release/v0.2.0 develop` 2. Bump `VERSION`, fix release issues 3. PR to `main` → merge → tag `v0.2.0` 4. Merge release branch back to `develop`