- parse_ids_filter: one shared parser/validator for the ids query param, used
by the /api/jobs handler AND its tests (no more hand-copied wiring that can
drift from — and silently outlive a regression in — the shipped handler)
- present-but-empty ids (?ids=, ?ids=,,) is now a zero-match filter, not a
silent 'return the entire job history'
- bounded history lookup when an ids filter is present: a batch poll costs
O(requested ids), not O(total history)
- dedupe ids so the max-count cap bounds distinct values, not repeats
- .get('id') instead of j['id'] so a job missing its id degrades to no-match
rather than a 500