The `target` describes the change under review:

- When `mode` is `changes` or `commit`, the review scope is the committed
  two-sided Git range in `range`. Read the unified diff first --
  `python3 -I .fabro/workflows/code-review/scripts/git_readonly.py diff <range>`
  (append `-- <path>` to narrow it; `scope` lists any configured scope paths).
  `changedFiles` lists the files the range touches. Report findings the change
  introduces or exposes, not unrelated pre-existing issues; bugs in unchanged
  lines of a touched function are in scope, because the change re-exposes or
  fails to fix them.
- When `mode` is `files`, there is no diff. The files in `changedFiles` (the
  resolved `scope`) are the review scope: read each one in full and treat
  every line as under review.
