Adservio Code Review Analysis
A read-only analysis of recent merge request review behavior in GitLab, focused on visible review discussion, reviewer distribution, queue health, MR size, and traceability gaps.
Executive Summary
Bottom line: review throughput is not the main risk here; traceability and queue hygiene are. The team is still merging code, but most merges leave no durable visible review trail and the open queue is overwhelmingly stale.
What Matters
- Traceability is the clearest control gap: 68 of 74 merged MRs (91.9%) showed no visible non-author review comment in GitLab.
- `CR - Approved` is currently too weak as evidence on its own: 27.0% of merged MRs carried that label without any visible review discussion.
- Queue health is poor: 88.1% of active open MRs are already older than 48 working hours. The oldest example is adservio/billing/helm-deletion_scheduled-108!15 at 689.3d open.
- Visible review capacity is thin and concentrated: only 6 visible review touches were detected in the whole window, and the top 3 reviewers handled 100.0% of them.
- adservio/web is the highest-volume review surface with 20 merged MRs and only 10.0% visible review coverage. adservio/frontend is the next meaningful flow at 18 merges and 5.6% visible review coverage.
- MR size is not the main story: median changed files were 3.0, and only 8.1% of merged MRs were above 20 files. Even the slowest merged example, adservio/web!2697, took 34.1d with 1 changed files, so the dominant problem still looks like review discipline and queue ownership rather than consistently oversized MRs.
Leadership Analysis
- This does not read like a slow-review system. The median last-author-commit to first-review time was 1.8h, so the dominant weakness is decision recording and merge discipline, not reviewer reaction speed.
- With 88.1% of active MRs already stale, the open list is functioning more like inventory than prioritization support. adservio/billing/helm-deletion_scheduled-108!15 being open for 689.3d is a strong sign that ownership and review handoffs are not being actively reset.
- Reviewer concentration is now a resilience issue, not just a fairness issue. When the top 3 reviewers carry 100.0% of visible touches, review quality, continuity, and queue health all become sensitive to a very small set of people.
- The spread between a 3.0-file median MR and a 34.1d longest merged cycle (adservio/web!2697, 1 changed files) suggests a few ownership-heavy exceptions are dragging on outside normal flow. Those should be managed as explicit escalations, not left to age inside the common queue.
Recommended Actions
- Make one durable review artifact mandatory before merge: a substantive non-author GitLab review comment, a recorded approval, or both. A label alone should no longer count as sufficient evidence. The approval API coverage is also low, so the fix should include tooling or policy that leaves an auditable trace by default.
- Run a stale-MR reset on anything older than 48 working hours: close abandoned work, re-confirm owner and reviewer on the rest, and turn the open list back into a real queue instead of a parking lot. Start with adservio/billing/helm-deletion_scheduled-108!15 and the rest of the oldest backlog because their age now obscures whether they are still real priorities.
- Put adservio/billing/backend under explicit review guardrails for the next cycle. It combines enough volume with weak visible review coverage, which makes it the best place to tighten the process and see impact quickly.
- Broaden the reviewer bench beyond Dragoș Ivan and the current small reviewer set. The present concentration is a continuity risk and will keep queue health fragile when one person is away.
Improvement Ideas
- Set explicit operating standards for the next quarter: require one auditable peer-review artifact before merge, target first review inside one working day for active MRs, and keep the stale active backlog below 15%. What gets measured this clearly is far more likely to improve.
- Run a four-week process experiment on adservio/billing/backend: dedicated reviewer-of-the-week coverage, explicit reviewer assignment at MR creation, and a lightweight weekly audit of silent merges. It is the highest-yield place to test whether better ownership changes the data.
- Create a reviewer rotation with named backup coverage for the busiest repos. Good review systems depend on redundancy, not heroics, and rotation is the fastest way to lower reviewer bus factor without slowing delivery.
Supporting Evidence
- 68 of 74 merged MRs (91.9%) had no visible non-author review comment in GitLab.
- 23 of 74 merged MRs (31.1%) carried the `CR - Approved` label.
- 20 merged MRs (27.0%) were labeled `CR - Approved` without any visible non-author review comment.
- 8.1% of merged MRs changed more than 20 files, while 1.4% changed more than 50 files.
- Among MRs with visible review discussion, the median last-author-commit to first-review time was 1.8h.
- The median last-author-commit to `CR - Approved` time was 21.1h.
- The top 3 reviewers accounted for 100.0% of visible review touches.
- 59 of 67 active open MRs (88.1%) were older than 48 working hours.
Merged MRs Merged MRs inside the analysis window. | 74 |
Open MRs All currently open group MRs. | 94 |
Active open MRs Open MRs excluding drafts. | 67 |
Draft open MRs Open MRs marked draft/WIP. | 27 |
Visible review rate Merged MRs with at least one visible non-author GitLab comment. | 8.1% |
Merged without visible review comment Merged MRs with zero visible non-author comments. | 91.9% |
CR - Approved label coverage Merged MRs carrying the CR-approved label. | 31.1% |
Approval API coverage Merged MRs with at least one approver in the GitLab approvals API. | 10.8% |
CR - Approved without visible review comment CR-approved MRs with no visible non-author comment. | 27.0% |
Median MR created -> first review Working time from MR creation to first visible non-author comment. | 20.3h |
Median last author commit -> first review Working time from last author commit before review to first visible non-author comment. | 1.8h |
Median first review -> CR - Approved Working time from first visible comment to CR-approved label after review start, else merge. | 21.7h |
Median MR created -> CR - Approved Working time from MR creation to CR-approved label after review start, else merge. | 3.4d |
Median last author commit -> CR - Approved Working time from last author commit before review to CR-approved label after review start, else merge. | 21.1h |
Median MR created -> merged Working time from MR creation to merge. | 3.5h |
Median changed files Median GitLab `changes_count` value. | 3.0 |
MRs > 5 files Merged MRs where `changes_count` is above 5. | 36.5% |
MRs > 10 files Merged MRs where `changes_count` is above 10. | 21.6% |
MRs > 20 files Merged MRs where `changes_count` is above 20. | 8.1% |
MRs > 50 files Merged MRs where `changes_count` is above 50. | 1.4% |
Top 3 reviewer touch share Share of visible review touches handled by the top 3 reviewers. | 100.0% |
Active open backlog rate Non-draft open MRs older than 48 working hours. | 88.1% |
Timing Breakdown
These headline timing medians bring back the anchor-to-anchor numbers directly, using working time with weekends excluded.
| Median MR created -> first review | 20.3h |
| Median last author commit -> first review | 1.8h |
| Median MR created -> CR - Approved | 3.4d |
| Median first review -> CR - Approved | 21.7h |
| Median last author commit -> CR - Approved | 21.1h |
| Median MR created -> merged | 3.5h |
Reviewer Distribution
| Dragoș Ivan | 4 | 9 | 66.7% |
| Catalin Cojan | 1 | 2 | 16.7% |
| Andrei Dragan | 1 | 1 | 16.7% |
Repo Breakdown
| adservio/web | 20 | 10.0% | 20.0% | 2.0 |
| adservio/frontend | 18 | 5.6% | 66.7% | 6.0 |
| adservio/helm2 | 13 | 7.7% | 7.7% | 3 |
| adservio/billing/backend | 3 | 0.0% | 33.3% | 3 |
| adservio/services/notifications | 3 | 33.3% | 33.3% | 9 |
| adservio/uni/backend | 3 | 0.0% | 33.3% | 7 |
| adservio/accommodations/backend | 2 | 50.0% | 50.0% | 15.5 |
| adservio/ai | 2 | 0.0% | 0.0% | 2.0 |
| adservio/platform/iac | 2 | 0.0% | 0.0% | 3.0 |
| adservio/services/public-schools | 2 | 0.0% | 50.0% | 79.5 |
| adservio/subscriptions/backend | 2 | 0.0% | 50.0% | 1.0 |
| adservio/websocket | 2 | 0.0% | 0.0% | 10.0 |
Visible Review Discussion MRs
Compact by default: key CR metrics stay visible, and each row expands inline for the full audit trail. The table starts sorted by Last Commit -> First Review.
| Details | ||||||
|---|---|---|---|---|---|---|
| adservio/services/notifications!26 | [ADS-9002] Move group chat realtime to websocket2 | 2/5 Light | 0.9h | 0.9h | 20.6h | |
Repo adservio/services/notifications Author Daniel Onisoru Reviewers Dragoș Ivan Review Comments 2 Quality Notes 2 visible comments; 1 substantive comment; single reviewer Substantive Comments 1 Reviewer Count 1 Post-Review Pushes 0 MR Created 2026-09-28 14:03 Last Author Commit 2026-09-28 14:02 First Review 2026-09-28 14:55 CR Approved 2026-09-29 10:41 Merged 2026-09-29 11:09 First Review -> CR Approved 19.8h Last Commit -> CR Approved 20.7h Created -> Merged 21.1h | ||||||
| adservio/accommodations/backend!91 | [ADS-8682] Accommodations Open-telemetry | 3/5 Solid | 4.9d | 1.5h | 5.9d | |
Repo adservio/accommodations/backend Author Ionut Ciolan Reviewers Catalin Cojan Review Comments 2 Quality Notes 2 visible comments; 1 substantive comment; single reviewer; 5 post-review pushes Substantive Comments 1 Reviewer Count 1 Post-Review Pushes 5 MR Created 2026-09-23 13:04 Last Author Commit 2026-09-30 09:35 First Review 2026-09-30 11:04 CR Approved 2026-10-01 10:37 Merged 2026-10-02 12:00 First Review -> CR Approved 23.6h Last Commit -> CR Approved 25.0h Created -> Merged 7.0d | ||||||
| adservio/web!2746 | [ADS-8715] Refactor download_album cron into a core-events job | 3/5 Solid | 1.7h | 1.8h | 15.0d | |
Repo adservio/web Author Daniel Onisoru Reviewers Dragoș Ivan Review Comments 2 Quality Notes 2 visible comments; 1 substantive comment; single reviewer; 1 post-review push Substantive Comments 1 Reviewer Count 1 Post-Review Pushes 1 MR Created 2026-09-08 12:02 Last Author Commit 2026-09-08 11:56 First Review 2026-09-08 13:41 CR Approved n/a Merged 2026-09-29 11:28 First Review -> CR Approved 14.9d Last Commit -> CR Approved 15.0d Created -> Merged 15.0d | ||||||
| adservio/helm2!432 | [ADS-9002] Move group chat realtime to websocket2 | 1/5 Very light | 20.1h | 20.1h | 20.1h | |
Repo adservio/helm2 Author Daniel Onisoru Reviewers Dragoș Ivan Review Comments 3 Quality Notes 3 visible comments; comments look lightweight; single reviewer Substantive Comments 0 Reviewer Count 1 Post-Review Pushes 0 MR Created 2026-09-28 14:33 Last Author Commit 2026-09-28 14:35 First Review 2026-09-29 10:42 CR Approved 2026-09-29 10:41 Merged 2026-09-29 11:09 First Review -> CR Approved 0.0h Last Commit -> CR Approved 20.1h Created -> Merged 20.6h | ||||||
| adservio/frontend!2171 | [ADS-9002] Move group chat realtime to websocket2 | 2/5 Light | 20.5h | 20.6h | 21.1h | |
Repo adservio/frontend Author Daniel Onisoru Reviewers Dragoș Ivan Review Comments 2 Quality Notes 2 visible comments; 2 substantive comments; single reviewer Substantive Comments 2 Reviewer Count 1 Post-Review Pushes 0 MR Created 2026-09-28 14:04 Last Author Commit 2026-09-28 14:02 First Review 2026-09-29 10:36 CR Approved n/a Merged 2026-09-29 11:09 First Review -> CR Approved 0.6h Last Commit -> CR Approved 21.1h Created -> Merged 21.1h | ||||||
| adservio/web!2697 | [ADS-8506] Fix parent birth date export | 2/5 Light | 12.1d | n/a | 34.1d | |
Repo adservio/web Author Valentin Pal Reviewers Andrei Dragan Review Comments 1 Quality Notes 1 visible comment; comments look lightweight; single reviewer; 1 post-review push Substantive Comments 0 Reviewer Count 1 Post-Review Pushes 1 MR Created 2026-08-17 11:26 Last Author Commit n/a First Review 2026-09-02 15:00 CR Approved n/a Merged 2026-10-02 13:39 First Review -> CR Approved 21.9d Last Commit -> CR Approved n/a Created -> Merged 34.1d | ||||||
No Visible Review Comment Audit
These merged MRs had no visible non-author GitLab comment under the current heuristic. Use this section to audit whether the gap is a real review-process issue or a GitLab traceability issue.
- Open the MR link and check the Overview tab for
CR - Approvedand any approval widget signal. - Check Activity / Discussions for real human reviewer comments.
- If you only see system notes, merge notes, mentions, or bot activity, it stays in this audit set.
- If you find a genuine reviewer comment from someone other than the author, treat that MR as a false positive of this heuristic.
full audit table (68 MRs). Click again to collapse.
| adservio/services/notifications!25 | adservio/services/notifications | [ADS-8959]: Dedupe notifications using Redis | Dragoș Ivan | 2026-09-27 | ||
| adservio/web!2803 | adservio/web | [ADS-8959]: Dedupe notifications using Redis | Dragoș Ivan | 2026-09-27 | ||
| adservio/helm2!431 | adservio/helm2 | [ADS-8959]: Rate Limits for Notifications | Dragoș Ivan | 2026-09-27 | ||
| adservio/frontend!2169 | adservio/frontend | [Acommodations] Fix repartition faculties selector for unique study values | Achim Stefan | 2026-09-28 | Yes | |
| adservio/web!2798 | adservio/web | [ADS-8889] Ora afisata incorect in istoricul notei | Petronel Pavel | 2026-09-28 | ||
| adservio/web!2809 | adservio/web | [ADS-8919][ADS-8933] Invalidate user token + register parent name | Ionut Ciolan | 2026-09-28 | ||
| adservio/billing/backend!292 | adservio/billing/backend | [ADS-9865] - made invoice name/description varchar to 512 | George Murgoci | 2026-09-28 | ||
| adservio/services/public-schools!95 | adservio/services/public-schools | [ADS-8998] Update linkuri site public | Petronel Pavel | 2026-09-28 | ||
| adservio/services/public-schools!94 | adservio/services/public-schools | [ADS-4294] Actualizare pagina Edumarket & CSR | Petronel Pavel | 2026-09-28 | Yes | |
| adservio/helm2!434 | adservio/helm2 | ADS-8939: promote KubePodCrashLooping and KubeDeploymentReplicasMismatch to critical on prod and TUIASI | Rojan Shrestha | 2026-09-28 | ||
| adservio/helm2!433 | adservio/helm2 | ADS-9004: raise the TUIASI warning latency threshold for uni-api while ADS-8912 is open | Rojan Shrestha | 2026-09-28 | ||
| adservio/frontend!2173 | adservio/frontend | show table menu , hide change status/change score on ended sessions | George Murgoci | 2026-09-28 | ||
| adservio/accommodations/backend!90 | adservio/accommodations/backend | [ADS-8888][ADS-8893] Students balances - accommodation status filter, recalculate student sold | Ionut Ciolan | 2026-09-28 | ||
| adservio/web!2781 | adservio/web | [ADS-8723] Timetable generator - co-teacher activities | Ionut Ciolan | 2026-09-28 | ||
| adservio/frontend!2170 | adservio/frontend | [ADS-8888] Eroare la export fisier | Achim Stefan | 2026-09-28 | Yes | |
| adservio/frontend!2174 | adservio/frontend | [ADS-8936] Used setup mode for 0 amount sessions | Edgar Alexa | 2026-09-28 | Yes | |
| adservio/subscriptions/backend!133 | adservio/subscriptions/backend | [ADS-8936] Used setup mode for 0 amount sessions | Edgar Alexa | 2026-09-28 | Yes | |
| adservio/billing/backend!291 | adservio/billing/backend | [ADS-8936] Used setup mode for 0 amount sessions | Edgar Alexa | 2026-09-28 | Yes | |
| adservio/frontend!2172 | adservio/frontend | [ADS-8954] Register - Actualizare texte | Petronel Pavel | 2026-09-28 | Yes | |
| adservio/platform/iac!95 | adservio/platform/iac | ADS-9018: set table_definition_cache per catalog shard from measured table counts | Rojan Shrestha | 2026-09-29 | ||
| adservio/helm2!435 | adservio/helm2 | [HOTFIX] accommodations tag | Ionut Ciolan | 2026-09-29 | ||
| adservio/web!2811 | adservio/web | [ADS-9002] Move group chat realtime to websocket2 | Daniel Onisoru | 2026-09-29 | Yes | |
| adservio/websocket!6 | adservio/websocket | [ADS-9002] Move group chat realtime to websocket2 | Daniel Onisoru | 2026-09-29 | ||
| adservio/helm2!383 | adservio/helm2 | [ADS-8715] Remove the download-album cron | Daniel Onisoru | 2026-09-29 | ||
| adservio/web!2814 | adservio/web | [HOTFIX] copy classes data removed drop | Ionut Ciolan | 2026-09-29 | ||
| adservio/helm2!436 | adservio/helm2 | [ADS-9026] Rename websocket2 / ws2 to websocket | Daniel Onisoru | 2026-09-29 | ||
| adservio/frontend!2176 | adservio/frontend | [ADS-9026] Rename websocket2 / ws2 to websocket | Daniel Onisoru | 2026-09-29 | ||
| adservio/web!2813 | adservio/web | [ADS-9026] Rename websocket2 / ws2 to websocket | Daniel Onisoru | 2026-09-29 | ||
| adservio/websocket!7 | adservio/websocket | [ADS-9026] Rename websocket2 / ws2 to websocket | Daniel Onisoru | 2026-09-29 | ||
| adservio/billing/backend!293 | adservio/billing/backend | [package-availability-fix] Billing failing test | Edgar Alexa | 2026-09-29 | ||
| adservio/frontend!2177 | adservio/frontend | [package-availability-fix] Checked selected package for buy button visibility | Edgar Alexa | 2026-09-29 | ||
| adservio/frontend!2178 | adservio/frontend | [selected-packages-mitigation] hard redirect for old package | Edgar Alexa | 2026-09-29 | ||
| adservio/web!2812 | adservio/web | [ADS-9017]: Fix parameter structure in getWhere method call | Andrei Dragan | 2026-09-29 | Yes | |
| adservio/frontend!2175 | adservio/frontend | [ADS-9017] Marcare elev cu CES | Petronel Pavel | 2026-09-29 | Yes | Yes |
| adservio/web!2815 | adservio/web | [HOTFIX] copy classes - skip create student if exists | Ionut Ciolan | 2026-09-29 | ||
| adservio/helm2!437 | adservio/helm2 | Make deploy_env manual for MRs labelled NO ENVIRONMENT | Daniel Onisoru | 2026-09-29 | ||
| adservio/services/notifications!27 | adservio/services/notifications | Forward MR labels to the helm2 pipeline as CI_LABELS | Daniel Onisoru | 2026-09-29 | ||
| adservio/uni/backend!264 | adservio/uni/backend | Forward MR labels to the helm2 pipeline as CI_LABELS | Daniel Onisoru | 2026-09-29 | ||
| adservio/docgen2/backend!176 | adservio/docgen2/backend | Forward MR labels to the helm2 pipeline as CI_LABELS | Daniel Onisoru | 2026-09-29 | ||
| adservio/web!2817 | adservio/web | [ADS-8895] Validate SSO id_token audience and cache provider JWKS in Redis | Daniel Onisoru | 2026-09-29 | ||
| adservio/web!2816 | adservio/web | [ADS-9030] Remove "Echipa Adservio" as a recipient across the app | Daniel Onisoru | 2026-09-29 | ||
| adservio/frontend!2179 | adservio/frontend | [ADS-9030] Remove "Echipa Adservio" as a recipient across the app | Daniel Onisoru | 2026-09-29 | Yes | |
| adservio/uni/backend!265 | adservio/uni/backend | [ADS-8912] Optimize student search | Andrei Alexandru | 2026-09-29 | ||
| adservio/helm2!428 | adservio/helm2 | ADS-8648: page on FET and RabbitMQ outages and stop resolved alerts rendering as firing | Rojan Shrestha | 2026-09-30 | ||
| adservio/platform/iac!92 | adservio/platform/iac | ADS-8874: make the RDS alarms able to detect a fast disk fill and an instance that stops reporting | Rojan Shrestha | 2026-09-30 | ||
| adservio/frontend!2180 | adservio/frontend | [invalid-package-redirect] redirect to /buy if package is invalid | Edgar Alexa | 2026-09-30 | ||
| adservio/frontend!2182 | adservio/frontend | [ADS-8912] POST /api/v2/uni/students/search takes 2.0s at the median and is... | Achim Stefan | 2026-09-30 | Yes | Yes |
| adservio/frontend!2167 | adservio/frontend | [ADS-8599] Ajustari echivalari note | Achim Stefan | 2026-09-30 | Yes | Yes |
| adservio/uni/backend!261 | adservio/uni/backend | [ADS-8599] Situatie Scolara - Echivalare | Andrei Alexandru | 2026-09-30 | Yes | Yes |
| adservio/web!2822 | adservio/web | Hotfix copy classes data | Ionut Ciolan | 2026-09-30 | ||
| adservio/frontend!2183 | adservio/frontend | [ADS-9050] Limitare trimite cod înregistrare | Petronel Pavel | 2026-09-30 | Yes | |
| adservio/subscriptions/backend!136 | adservio/subscriptions/backend | [ADS-8936] Added guard for empty user personal and org subs fallback | Edgar Alexa | 2026-09-30 | ||
| adservio/web!2825 | adservio/web | Hotfix copy classes data | Ionut Ciolan | 2026-10-01 | ||
| adservio/web!2810 | adservio/web | [ADS-7421] [BE] Cleanup Noutati | Catalin Cojan | 2026-10-01 | Yes | Yes |
| adservio/frontend!2181 | adservio/frontend | [ADS-7421] [FE] Cleanup Noutati | Catalin Cojan | 2026-10-01 | Yes | |
| adservio/web!2827 | adservio/web | Hotfix copy classes data | Ionut Ciolan | 2026-10-01 | ||
| adservio/web!2821 | adservio/web | [ADS-8975]: See only active students in access codes for class | Ioana Ivan | 2026-10-01 | Yes | |
| adservio/web!2820 | adservio/web | [ADS-9038] Conduita timestamp | Petronel Pavel | 2026-10-01 | ||
| adservio/web!2819 | adservio/web | [ADS-7578] add sentinel retry and database fallbacks during redis outages | Catalin Cojan | 2026-10-01 | Yes | Yes |
| adservio/ai!86 | adservio/ai | summaries table index | Alex Murarescu | 2026-10-01 | ||
| adservio/helm2!440 | adservio/helm2 | ADS-9070: restore latencyWarningOverrides so helm-core renders again | Rojan Shrestha | 2026-10-02 | ||
| adservio/helm2!439 | adservio/helm2 | ADS-9040: add MySQL table cache churn dashboard to Grafana | Rojan Shrestha | 2026-10-02 | ||
| adservio/helm2!424 | adservio/helm2 | [ADS-8682] Accommodations open-telemetry | Ionut Ciolan | 2026-10-02 | ||
| adservio/frontend!2190 | adservio/frontend | Accommodations fix | Achim Stefan | 2026-10-02 | Yes | Yes |
| adservio/ai!88 | adservio/ai | fix notifs | Alex Murarescu | 2026-10-02 | ||
| adservio/helm2!441 | adservio/helm2 | ADS-9085: restore mcp-api to 1 replica in production | Rojan Shrestha | 2026-10-02 | ||
| adservio/frontend!2189 | adservio/frontend | [ADS-9069] Confirm photo deletion, show the success toaster and mark delete as destructive | Daniel Onisoru | 2026-10-02 | Yes | |
| adservio/services/mcp!10 | adservio/services/mcp | fix behavior errors | Alex Murarescu | 2026-10-02 |
Oldest Active Open MRs (> 48 Working Hours)
| adservio/billing/helm-deletion_scheduled-108!15 | adservio/billing/helm-deletion_scheduled-108 | Robert | 689.3d | 0 | |
| adservio/subscriptions/helm-deletion_scheduled-125!4 | adservio/subscriptions/helm-deletion_scheduled-125 | Daniel Onisoru | 627.4d | 0 | |
| adservio/web!2091 | adservio/web | Andrei Dragan | 316.6d | 5 | |
| adservio/helm2!137 | adservio/helm2 | Raul Popovici | 292.6d | 0 | |
| adservio/videothumb!5 | adservio/videothumb | Raul Popovici | 289.6d | 0 | |
| adservio/timetables-generator!9 | adservio/timetables-generator | Raul Popovici | 289.6d | 0 | |
| adservio/web!2344 | adservio/web | George Murgoci | 180.4d | 0 | |
| adservio/library!26 | adservio/library | Raul Popovici | 160.5d | 0 | |
| adservio/subscriptions/backend!103 | adservio/subscriptions/backend | Edgar Alexa | 158.5d | 4 | |
| adservio/admission/backend!104 | adservio/admission/backend | Edgar Alexa | 158.4d | 0 |
Longest Merged Cycles
| adservio/web!2697 | adservio/web | Valentin Pal | 34.1d | 1 | 1 |
| adservio/web!2746 | adservio/web | Daniel Onisoru | 15.0d | 7 | 2 |
| adservio/helm2!383 | adservio/helm2 | Daniel Onisoru | 15.0d | 4 | 0 |
| adservio/accommodations/backend!91 | adservio/accommodations/backend | Ionut Ciolan | 7.0d | 17 | 2 |
| adservio/helm2!424 | adservio/helm2 | Ionut Ciolan | 6.9d | 6 | 0 |
| adservio/platform/iac!92 | adservio/platform/iac | Rojan Shrestha | 6.7d | 5 | 0 |
| adservio/ai!86 | adservio/ai | Alex Murarescu | 6.2d | 3 | 0 |
| adservio/web!2781 | adservio/web | Ionut Ciolan | 6.1d | 1 | 0 |
| adservio/uni/backend!261 | adservio/uni/backend | Andrei Alexandru | 5.9d | 7 | 0 |
| adservio/services/public-schools!94 | adservio/services/public-schools | Petronel Pavel | 5.1d | 158 | 0 |
Methodology And Limits
- This report uses visible non-author GitLab comments as the strongest review-start proxy.
- GitLab approval API coverage is shown separately; missing approval API data should be read as traceability gap, not proof that no approval happened.
- Review completion uses the first `CR - Approved` label-add event after review starts when GitLab label history provides one; otherwise it falls back to merge time.
- Last-author-commit metrics use the latest non-merge MR commit authored by the MR author strictly before review starts.
- Timing metrics in this report exclude Saturday and Sunday hours using the Europe/Bucharest calendar.
- Review-quality scoring is heuristic: it rewards visible substantive comments, multiple reviewers, and post-review pushes, and it penalizes large MRs with shallow visible discussion.
- `Active open backlog rate` excludes draft MRs and uses a > 48 working-hour age threshold.
- Open MR backlog age is a queue-health signal, not proof that every old open MR is actively waiting for review right now.