Assert the group offload summary by keyword, not by line count
The summary tests counted lines and compared the total against groups read
back off the hooks. That pinned the layout rather than the content: a blank
line, a trailing note, or a wrapped member list would fail a summary that was
entirely correct, while a summary naming the wrong leader for every group
would pass. The count also came from a walk that reimplemented the function
under test, so it could not catch a shared misconception, and `assert 4 == 5`
said nothing about what went wrong.
Assert instead what each line should claim, as literal expectations against a
known fixture, and take the prefetch chain off `hook.next_group` rather than
out of the rendered text — the thing under test should not also be the
instrument that measures it. The chain is compared to a written-out dict, so
nothing regenerates the expectation from the implementation's own data.
This drops `installed_groups`, `group_lines` and `reported_members`, which
were the machinery that reimplemented the walk, and it catches a rendering
bug the counts could not: naming a prefetched group's own leader instead of
the group ahead of it leaves the number of lines unchanged.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>