19108407c6c1d3d53155bcc835c009b9de4ebf83
The "until <date>" only appeared for a PAID due, because the annotation filtered status=PAID. A WAIVED period is settled just the same — the club is covered for that time, and its end is still when grace would start — so it belongs there too. The annotation is now `covered_until` (furthest-out period end where status is PAID or WAIVED) plus `covered_status`, read from the same ordered row so the table can badge "paid" vs "waived" and still show the date for both. Rides the same single query — assertNumQueries(1) still holds. Full matrix now: no plan -> n/a; paid -> "paid, until X"; waived -> "waived, until X"; unpaid/partial -> the amount owed (no date); a paid-then-owing club shows the amount, not the stale cover date. A subscribed club with no covering period at all (only cancelled dues) shows a dash rather than a bare "paid". Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Description
No description provided
Languages
Python
59.1%
HTML
28.3%
CSS
8%
JavaScript
4.2%
Shell
0.2%
Other
0.2%