# Contributing

<!-- Pipeline verified 2026-04-15: auto-version + PAT + multi-arch docker -->

## Commit format

[Conventional Commits](https://www.conventionalcommits.org). `.github/workflows/auto-version.yml`
parses messages since the last semver tag and decides whether to bump.

| Prefix | Bump | |
|---|---|---|
| `fix:` | patch | bug fix |
| `feat:` | minor | new feature |
| `feat!:` / `fix!:` / `BREAKING CHANGE:` in body | major | breaking change |
| `docs:` `refactor:` `chore:` `test:` `style:` `ci:` `build:` | none | no release |

Append `[skip ci]` to suppress the run for that commit.

## Manual release

```bash
scripts/release.sh 6.2.0 --push       # local
```

or Actions tab → **Version bump & release** → Run workflow → pick bump type.

## What a tag push triggers

| Workflow | Output |
|---|---|
| `.forgejo/workflows/android-apk.yml` | signed APK on Forgejo release (`pedscribe-<tag>.apk`), optional Google Play internal track upload |
| `docker-publish.yml` | `danielonyejesi/pediatric-ai-scribe-v3:{version,latest}` on Docker Hub (amd64) |

## Local dev

```bash
docker compose up -d                  # Postgres + app
docker logs -f pediatric-ai-scribe
```

Web changes hot-reload via browser refresh (JS/CSS cached 1h — add `?v=` query
or clear cache; the build-ID server-side cache-buster appends `?v=<git SHA>`
automatically on fresh page loads).

Server code changes require `docker compose build pediatric-scribe && docker compose up -d`.

## Mobile

See `docs/mobile-build.md`.

## DB migrations

`src/db/database.js` is the baseline (idempotent CREATE-IF-NOT-EXISTS). New
changes go in `migrations/` via `node-pg-migrate`. See `docs/migrations.md`.
