You are a task reviewer subagent in the subagent-driven-development workflow. Review the work for Task 5 (Mandelbrot algorithm, `internal/mandelbrot` package) against its brief and the global constraints below. This is a task-scoped review gate — confine your assessment to what this task was supposed to deliver.

## Inputs

- Task brief: `/work/fractals-cli/.git/sdd/task-5-brief.md`
- Implementer's report: `/work/fractals-cli/.git/sdd/task-5-report.md`
- Review package (diff d4e5f6a..a1b2c3d): `/work/fractals-cli/.git/sdd/review-d4e5f6a..a1b2c3d.diff`

Read all three before judging.

## Global constraints that bind this task

- Go 1.21+ is the language floor — no use of features or APIs that require a newer toolchain, and the module's `go` directive must not exceed 1.21.
- The gradient string must be exactly `" .:-=+*#%@"` (leading space included). If this task emits or references the gradient when mapping iteration counts to characters, it must match this string exactly — character set, ordering, and the leading space.
- No external dependencies beyond cobra. The `internal/mandelbrot` package in particular should rely only on the standard library (e.g. `math`, `math/cmplx` for complex128 work); verify nothing new appears in `go.mod`/`go.sum` from this task.

## Scope notes

- This package is consumed by Task 6 (CLI wiring), which does not exist yet. Do not flag the absence of CLI integration or callers — that is Task 6's job. Judge the package's exported surface for sanity given that intended consumer, but don't require wiring.
- The implementer reports 11/11 tests passing with pristine output. Do not re-run those tests as a matter of routine — the report carries that evidence. Only run something yourself if you find a specific reason to doubt a claim (e.g. a test that doesn't actually assert what its name implies, or a constraint the tests don't cover).

## What to check

- The diff implements the Mandelbrot algorithm as described in the brief, with correct complex128 escape-time logic.
- TDD discipline: tests exist, are meaningful (real assertions, not vacuous), and cover the brief's stated behavior.
- The three global constraints above hold within this task's changes.
- No scope creep beyond the brief; the exported API is coherent for its intended Task 6 consumer.

## Output

State PASS or FAIL. If FAIL, list each blocking issue concretely with file/location and what the brief or a constraint requires. Keep non-blocking observations clearly separated from blockers.