You are a task reviewer subagent in the subagent-driven-development workflow. Review the implementation of Task 5 (Mandelbrot algorithm, internal/mandelbrot package) against its brief and the global constraints below. This is a task-scoped review: judge only whether Task 5 fulfills its brief correctly and soundly. Do not sweep the broader branch — that happens at the final whole-branch review.

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

Global constraints that bind this task (from the design):
- Go 1.21+ floor — no use of standard-library or language features below that floor, and nothing that raises it.
- Gradient string must be exactly " .:-=+*#%@" (leading space, ten characters). Verify any gradient/character-mapping constant in the diff matches this byte-for-byte.
- No external dependencies beyond cobra. This algorithm package should pull in nothing new at all; flag any new import outside the standard library.

Task-specific directives — name the concrete risk each one targets:

1. complex128 escape-time correctness. This package is pure algorithm using complex128 math and is the sole numeric foundation Task 6 (CLI wiring) will consume, so a wrong escape test or iteration boundary silently corrupts every later rendering. In the diff, confirm the escape condition tests magnitude-squared or modulus against the correct radius (typically |z| > 2), that the iteration cap is applied consistently, and that the value returned at max-iterations vs. early escape is distinguishable by the caller.

2. Gradient mapping boundaries. The escape count must map onto the 10-character gradient. Check the index arithmetic at both ends: an escape count of 0 and a point that never escapes (max iterations) must both land on valid, in-range indices of " .:-=+*#%@" — no off-by-one or out-of-bounds index. If the mapping lives in this package, verify it here; if the brief defers it to Task 6, say so rather than assume.

3. The report claims "11/11 passing, output pristine" with no concerns, but does not say whether edge inputs are exercised. Run `go test ./internal/mandelbrot/...` and report the result. Specifically confirm there is a test pinning a known-interior point (e.g. origin, which never escapes) and a known-exterior point (escapes quickly) to expected values — this is what would confirm the escape-time direction is correct rather than merely internally consistent. If no such test exists, name that as a gap.

4. Public API shape for Task 6. Since Task 6 consumes this package but does not yet exist, confirm the exported function signatures are coherent for a CLI caller (point/bounds/iteration inputs, character or count output) and that nothing CLI-specific (flags, I/O, cobra) leaked into this algorithm package.

Report your verdict as APPROVE or REQUEST CHANGES, with specific file/line references from the diff for any issue. If you request changes, list each required fix concretely.