095bcae915
The bash banner accounting used raw substring matching while pipeline.py normalises EXCLUDE_SOURCES via .strip().lower(). With EXCLUDE_SOURCES=TikTok,Instagram (or with surrounding spaces), pipeline correctly excludes the sources but the banner did not deduct them — count showed 1-2 higher than what the pipeline actually runs. Normalisation now mirrors the Python side (lowercase, collapse whitespace around commas, strip outer whitespace). Reproducer (clean HOME with config EXCLUDE_SOURCES=TikTok,Instagram): before: /last30days: Ready — 7 sources active. after: /last30days: Ready — 5 sources active. Addresses Greptile review comment P1 on #399.