feat(sdlc): save per namespace entity watermark
What does this MR do and why?
Previously, the SDLC namespace indexer tracked a single watermark per namespace. If one entity pipeline (e.g., issues) succeeded but another (e.g., merge requests) failed, the watermark wouldn't advance — and on retry, the successful entities would be re-processed unnecessarily. Conversely, if the watermark did advance, the failed entity would miss its window.
This MR stores watermarks per entity within each namespace. The namespace_indexing_watermark table gets an entity column in its primary key, and WatermarkStore methods now accept an entity parameter. The namespace handler resolves the watermark individually for each pipeline and updates it immediately after that pipeline succeeds, rather than setting a single watermark at the end. Each entity type resumes from where it last succeeded.
Related Issues
Resolves #112 (closed)
Performance Analysis
- This merge request does not introduce any performance regression. If a performance regression is expected, explain why.