Модуль 10 · Урок 38
Pull requests, conflicts і evidence-based review
Pull request — пропозиція інтегрувати head changes у base branch. Якісний review оцінює весь effective diff, requirements, risks і evidence; зелений CI або відсутність conflict не доводять correctness.
PR contract
Опишіть purpose, included/excluded scope, base/head branches і exact SHA, requirement/defect, behavior change, verification, risk, rollout/rollback та reviewer focus. Перед request review автор сам читає Files changed і перевіряє, що accidental/generated/secret files відсутні.
Review не дорівнює style policing
| Area | Питання reviewer |
|---|---|
| Correctness | Чи покриті boundaries, invalid state, race/failure та backward compatibility? |
| Security/privacy | Permissions, secrets, logging, input/output exposure і dependency trust? |
| Operations | Config, migration, monitoring, feature flag, rollback і recovery? |
| Tests | Чи failed би test до change; чи evidence належить exact head SHA? |
Коментар має location, observation, risk/impact, requested outcome і, за потреби, question. Розрізняйте blocker, non-blocking suggestion і clarification.
Як виникає conflict
Git робить three-way merge з двох branch tips і common ancestor. Якщо зміни несумісні, merge зупиняється, `git status` показує unmerged paths, а markers відділяють sides. Conflict resolution — нове рішення; не можна механічно обрати «ours/theirs» без розуміння обох intents.
Resolution треба тестувати заново
Після редагування видаліть усі markers, stage exact files, перечитайте final diff, запустіть affected tests і перевірте combined behavior. «Conflict зник» не означає «обидва requirements збережені».
Merge, squash і rebase
Merge може fast-forward branch pointer або створити merge commit для divergent history. Squash створює один result commit без збереження topic commits як окремих parents. Rebase replay-ить commits на нову base і переписує commit IDs; shared/public history не переписують без командної домовленості.
Практика
Заповніть `pull-request-template.md`, `review-checklist.csv` і `conflict-resolution-log.csv`. Для synthetic conflict поясніть обидва intents, combined resolution та tests — не лише видалення markers.
Офіційні джерела
Закріпіть матеріал уроку
Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.