diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 00000000..a49ad12f
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,35 @@
+## Task / context
+- Mission Control task:
+- Why:
+
+## Scope
+-
+-
+
+### Out of scope
+-
+
+## Evidence / validation
+- [ ] `make check` (or explain what you ran instead)
+- [ ] E2E (if applicable):
+- Logs/links:
+ -
+
+## Screenshots (UI changes)
+| Desktop | Mobile |
+| --- | --- |
+|
|
|
+
+## Docs impact
+- [ ] No user/operator docs changes required
+- [ ] Docs updated:
+
+## Risk / rollout notes
+- Risk level: low / medium / high
+- Rollback plan (if needed):
+
+## Checklist
+- [ ] Branch created from `origin/master` (no unrelated commits)
+- [ ] PR is focused (one theme)
+- [ ] No secrets in code/logs/docs
+- [ ] If API/behavior changes: docs updated (OpenAPI + `docs/reference/api.md`)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index fb78262e..323178a9 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -25,6 +25,20 @@ When opening an issue, please include:
## Pull requests
+### Branching hygiene (required)
+
+Create feature branches from the latest `origin/master` to avoid unrelated commits in PRs:
+
+```bash
+git fetch origin
+git checkout master
+git reset --hard origin/master
+git checkout -b
+```
+
+If you accidentally based your branch off another feature branch, fix it by cherry-picking the intended commits onto a clean branch and force-pushing the corrected branch (or opening a new PR).
+
+
### Expectations
- Keep PRs **small and focused** when possible.