# Contributing — mgf-brand-web

`mgf-brand-web` is a Magogi Foundation sibling and **inherits the cross-project
engineering standards** from
[`mgf-common`](https://codeberg.org/magogi-admin/mgf-common).

## First read

1. [FEDERATION.md](FEDERATION.md) — the contract.
2. [SCOPE.md](SCOPE.md) — what belongs here (reusable brand styling/assets only;
   it MUST stay framework-free).

## Process

1. **Bug / feature:** file in [FEEDBACK.md](FEEDBACK.md).
2. **PR:** branch from main; run the gates locally:
   ```sh
   uv run --extra dev ruff check . && uv run --extra dev ruff format --check .
   uv run --extra dev mypy
   uv run --extra dev lint-imports   # enforces framework-free
   uv run --extra dev pytest --cov --cov-report=term-missing
   mgf-fed app-doctor --standards
   ```
3. **Token changes** MUST stay reconciled to the Brand Book / `mgf-website`'s
   `global.css`. Keep the kit framework-free (no imports of fastapi/jinja/etc.).
4. **CHANGELOG.md:** add an `[Unreleased]` entry.
5. **CI is generated:** never hand-edit `.woodpecker.yml`; regenerate with
   `mgf-fed scaffold mgf-brand-web` (WF-13).
6. **Reviewer:** the federation owner (mgf-common maintainer).

## Release flow

Bump `pyproject.toml::version` + `mgf.brand_web.__version__` → build → test →
`twine check` → commit → tag `vX.Y.Z` → push tag (CI publishes to devpi) → regen
the registry (REL-13). As a wave-0 leaf, publish before consumers re-pin.
