Sequence: 5 (depends on #67)
Once #67's worker loop is running, expose operational visibility: IngestJob throughput (files/sec by state transition), error rate (state: "failed"/"dead_letter" counts from #59), and queue depth (state: "pending" count).
Scope: reuse Core::Ports::Instrumenter (already the codebase's metrics port — see Core::Ports::Null::Instrumenter/whatever real adapter exists) rather than introducing a new telemetry mechanism, unless that port genuinely can't express counters/gauges for this — verify before reaching for Prometheus/StatsD directly.
Depends on: #67 (and effectively #59 for error-rate data).
Sequence: 5 (depends on #67)
Once #67's worker loop is running, expose operational visibility:
IngestJobthroughput (files/sec by state transition), error rate (state: "failed"/"dead_letter"counts from #59), and queue depth (state: "pending"count).Scope: reuse
Core::Ports::Instrumenter(already the codebase's metrics port — seeCore::Ports::Null::Instrumenter/whatever real adapter exists) rather than introducing a new telemetry mechanism, unless that port genuinely can't express counters/gauges for this — verify before reaching for Prometheus/StatsD directly.Depends on: #67 (and effectively #59 for error-rate data).