GitLab-backed analysis

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.

Period: 2026-08-29 07:00 to 2026-09-05 07:00
Primary source: GitLab merge request metadata, notes, labels, commits, and approvals endpoints.

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: 54 of 61 merged MRs (88.5%) showed no visible non-author review comment in GitLab.
  • `CR - Approved` is currently too weak as evidence on its own: 26.2% of merged MRs carried that label without any visible review discussion.
  • Queue health is poor: 78.8% of active open MRs are already older than 48 working hours. The oldest example is adservio/web!2091 at 297.0d open.
  • Visible review capacity is thin and concentrated: only 7 visible review touches were detected in the whole window, and the top 3 reviewers handled 85.7% of them.
  • adservio/web is the highest-volume review surface with 16 merged MRs and only 6.2% visible review coverage. adservio/frontend is the next meaningful flow at 16 merges and 31.2% visible review coverage.
  • MR size is not the main story: median changed files were 3, and only 13.1% of merged MRs were above 20 files. Even the slowest merged example, adservio/frontend!1873, took 67.8d with 3 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 2.4h, so the dominant weakness is decision recording and merge discipline, not reviewer reaction speed.
  • With 78.8% of active MRs already stale, the open list is functioning more like inventory than prioritization support. adservio/web!2091 being open for 297.0d 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 85.7% of visible touches, review quality, continuity, and queue health all become sensitive to a very small set of people.
  • The spread between a 3-file median MR and a 67.8d longest merged cycle (adservio/frontend!1873, 3 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/web!2091 and the rest of the oldest backlog because their age now obscures whether they are still real priorities.
  • Put adservio/helm2 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 Ioana 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/helm2: 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

  • 54 of 61 merged MRs (88.5%) had no visible non-author review comment in GitLab.
  • 22 of 61 merged MRs (36.1%) carried the `CR - Approved` label.
  • 16 merged MRs (26.2%) were labeled `CR - Approved` without any visible non-author review comment.
  • 13.1% of merged MRs changed more than 20 files, while 11.5% changed more than 50 files.
  • Among MRs with visible review discussion, the median last-author-commit to first-review time was 2.4h.
  • The median last-author-commit to `CR - Approved` time was 22.9h.
  • The top 3 reviewers accounted for 85.7% of visible review touches.
  • 52 of 66 active open MRs (78.8%) were older than 48 working hours.
Merged MRs
Merged MRs inside the analysis window.
61
Open MRs
All currently open group MRs.
83
Active open MRs
Open MRs excluding drafts.
66
Draft open MRs
Open MRs marked draft/WIP.
17
Visible review rate
Merged MRs with at least one visible non-author GitLab comment.
11.5%
Merged without visible review comment
Merged MRs with zero visible non-author comments.
88.5%
CR - Approved label coverage
Merged MRs carrying the CR-approved label.
36.1%
Approval API coverage
Merged MRs with at least one approver in the GitLab approvals API.
24.6%
CR - Approved without visible review comment
CR-approved MRs with no visible non-author comment.
26.2%
Median MR created -> first review
Working time from MR creation to first visible non-author comment.
11.0d
Median last author commit -> first review
Working time from last author commit before review to first visible non-author comment.
2.4h
Median first review -> CR - Approved
Working time from first visible comment to CR-approved label after review start, else merge.
3.7h
Median MR created -> CR - Approved
Working time from MR creation to CR-approved label after review start, else merge.
11.1d
Median last author commit -> CR - Approved
Working time from last author commit before review to CR-approved label after review start, else merge.
22.9h
Median MR created -> merged
Working time from MR creation to merge.
24.2h
Median changed files
Median GitLab `changes_count` value.
3
MRs > 5 files
Merged MRs where `changes_count` is above 5.
34.4%
MRs > 10 files
Merged MRs where `changes_count` is above 10.
21.3%
MRs > 20 files
Merged MRs where `changes_count` is above 20.
13.1%
MRs > 50 files
Merged MRs where `changes_count` is above 50.
11.5%
Top 3 reviewer touch share
Share of visible review touches handled by the top 3 reviewers.
85.7%
Active open backlog rate
Non-draft open MRs older than 48 working hours.
78.8%

These headline timing medians bring back the anchor-to-anchor numbers directly, using working time with weekends excluded.

Median MR created -> first review11.0d
Median last author commit -> first review2.4h
Median MR created -> CR - Approved11.1d
Median first review -> CR - Approved3.7h
Median last author commit -> CR - Approved22.9h
Median MR created -> merged24.2h
Ioana Ivan31242.9%
Dragoș Ivan2428.6%
Alex Murarescu1114.3%
Catalin Cojan11014.3%
adservio/frontend1631.2%62.5%7.0
adservio/web166.2%31.2%2.0
adservio/helm2100.0%0.0%1.5
adservio/devops/iac40.0%0.0%4.0
adservio/billing/backend30.0%33.3%1
adservio/docgen2/backend30.0%100.0%3
adservio/uni/backend30.0%0.0%6
adservio/services/backend-for-frontend250.0%50.0%3.5
adservio/subscriptions/backend20.0%50.0%11.5
adservio/accommodations/backend10.0%0.0%1
adservio/services/notifications10.0%100.0%4

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/frontend!2066[ADS-8067] [ADS-8400] Refactor încadrare4/5 Strong14.9d0.5h16.1d
adservio/frontend!2102[ADS-8601] School config for AI Summaries2/5 Light1.0h1.1h1.2h
adservio/frontend!2104[ADS-8595] Validare register elevi/parinti4/5 Strong3.0d2.3h3.0d
adservio/frontend!2055[S-7816][ADS-8199] SIIIR1/5 Very light17.9d2.4h18.1d
adservio/web!2651[ADS-8067]: Incadrare (Allocation) — migrare Laravel4/5 Strong32.2d3.3h33.3d
adservio/services/backend-for-frontend!16added charts implementation4/5 Strong16.4h16.4h22.9h
adservio/frontend!2078[ADS-7251] Mutarea subscriptii de pe recurenta An scolar pe recurenta an calendaristic3/5 Solid11.0d23.7h11.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.

Total MRs54
With CR Label16
With Approval API13
  • Open the MR link and check the Overview tab for CR - Approved and 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 (54 MRs). Click again to collapse.
adservio/docgen2/backend!160adservio/docgen2/backend[S - ADS-8176][State de functii] - Functionalitati si fluxAchim Stefan2026-08-31Yes
adservio/frontend!2084adservio/frontend[S - ADS-8176][State de functii] - Functionalitati si fluxAchim Stefan2026-08-31YesYes
adservio/frontend!2099adservio/frontend[UNI-CORE] change path from /api/v2/uni-core to /api/v2/uni/core for uni-coreAndrei Alexandru2026-08-31
adservio/uni/backend!245adservio/uni/backend[ADS-8176] State de funcțiiAndrei Alexandru2026-08-31Yes
adservio/uni/backend!248adservio/uni/backend[UNI-CORE] Path from /api/v2/uni-core to /api/v2/uni/core for uni-coreAndrei Alexandru2026-08-31
adservio/helm2!366adservio/helm2[ADS-8176] State de funcțiiAndrei Alexandru2026-08-31
adservio/helm2!365adservio/helm2[UNI-CORE] Route from /api/v2/uni-core to /api/v2/uni/core for uni-coreAndrei Alexandru2026-08-31
adservio/helm2!368adservio/helm2ads-8589 restrict staging public NLB to cloudflare ip rangesRojan Shrestha2026-09-01Yes
adservio/devops/iac!77adservio/devops/iacdeclare the developer access entry username and add the developers groupRojan Shrestha2026-09-01
adservio/web!2728adservio/web[Hotfix]: Update access code handling in Utilizatori controllerAndrei Dragan2026-09-01
adservio/frontend!1873adservio/frontend[ADS-5007] Early Bird - REVERTEdgar Alexa2026-09-01
adservio/subscriptions/backend!123adservio/subscriptions/backend[ADS-7251] Mutarea subscriptii de pe recurenta An scolar pe recurenta an calendaristicEdgar Alexa2026-09-01Yes
adservio/billing/backend!276adservio/billing/backend[ADS-7251] Mutarea subscriptii de pe recurenta An scolar pe recurenta an calendaristicEdgar Alexa2026-09-01Yes
adservio/subscriptions/backend!116adservio/subscriptions/backend[ADS-5007] Early Bird - REVERTEdgar Alexa2026-09-01
adservio/billing/backend!273adservio/billing/backend[ADS-5654]- tuition fees fastify-to-nest-migrationGeorge Murgoci2026-09-01
adservio/helm2!344adservio/helm2[S: ADS-7816] Worker SIIIR & RMQMarian Andrei2026-09-01Yes
adservio/services/notifications!18adservio/services/notifications[S ADS-7816][ADS-8489] SIIIR - web notificationMarian Andrei2026-09-01YesYes
adservio/web!2726adservio/web[S-8176][ADS-8454] School config - state of functionsIonut Ciolan2026-09-01
adservio/web!2644adservio/web[S: ADS-7816][ADS-8196][ADS-8200][ADS-8197][ADS-8198][ADS-8201] SIIIRMarian Andrei2026-09-01Yes
adservio/frontend!2103adservio/frontend[ADS-8616] Load all class parents for account statusValentin Pal2026-09-01YesYes
adservio/helm2!371adservio/helm2ADS-8630: give notifications-sync-events-worker a heap ceiling that fits its containerRojan Shrestha2026-09-01
adservio/devops/iac!79adservio/devops/iacADS-8628: enable RDS enhanced monitoring and tune MySQL timeoutsRojan Shrestha2026-09-01Yes
adservio/helm2!372adservio/helm2ADS-8627: disable DeploymentZeroAvailableReplicas in productionRojan Shrestha2026-09-01
adservio/helm2!373adservio/helm2ADS-8631: stop grouped critical alerts failing to reach pagerdutyRojan Shrestha2026-09-01
adservio/devops/iac!78adservio/devops/iacads-8609 retune production rds alarms and page critical ones to pagerdutyRojan Shrestha2026-09-02
adservio/devops/iac!80adservio/devops/iacADS-8628: set table_definition_cache on mysql-catalog2 and mysql-catalog3Rojan Shrestha2026-09-02
adservio/helm2!367adservio/helm2ADS-8607: scope Traefik latency alerts to protocol=httpRojan Shrestha2026-09-02
adservio/frontend!2100adservio/frontend[ADS-8600] Restore required diploma fieldsValentin Pal2026-09-02Yes
adservio/docgen2/backend!166adservio/docgen2/backend[ADS-8637] Eroare la descarea situatiei scolare a sudentuluiAchim Stefan2026-09-02Yes
adservio/web!2734adservio/webHotfix siiirMarian Andrei2026-09-02
adservio/web!2731adservio/web[ADS-8594]: Allow to filter by classID parents endpointIoana Ivan2026-09-02Yes
adservio/web!2735adservio/web[HOTFIX] Workers - DB PingIonut Ciolan2026-09-02
adservio/web!2736adservio/web[ADS-8619]: Allow elObservatii on students details for docgen2Ioana Ivan2026-09-02Yes
adservio/web!2733adservio/web[Hotfix]: Enhance transaction handling and event publishingAndrei Dragan2026-09-02
adservio/accommodations/backend!79adservio/accommodations/backend[HOTFIX] Non didactic period - new dormIonut Ciolan2026-09-02
adservio/web!2723adservio/webAlign account-status tests with batch contractValentin Pal2026-09-02Yes
adservio/web!2707adservio/webMake role cleanup ownership-safe after setup failureValentin Pal2026-09-02Yes
adservio/web!2722adservio/webAlign classbook archive polling with async job budgetValentin Pal2026-09-02
adservio/billing/backend!279adservio/billing/backend[bucharest-codes-export] Updated to siruta city codes for bucharestEdgar Alexa2026-09-02
adservio/web!2737adservio/web[ADS-8636] Sync students parents jobIonut Ciolan2026-09-02
adservio/web!2740adservio/web[HOTFIX] db pingIonut Ciolan2026-09-03
adservio/frontend!2111adservio/frontend[ADS-8604] In catalogul studentului nu afiseaza informatiile din sectiunea Ani studiuAchim Stefan2026-09-03YesYes
adservio/docgen2/backend!168adservio/docgen2/backend[ADS-8649] State de functii, design feedback + improvementsAchim Stefan2026-09-03Yes
adservio/frontend!2113adservio/frontend[ADS-8657]: SIIIR fixes for missing astIDIoana Ivan2026-09-03
adservio/frontend!2110adservio/frontend[ADS-8649] State de functii, design feedback + improvementsAchim Stefan2026-09-03Yes
adservio/helm2!380adservio/helm2ads-7610 right-size social-api and uni php-fpm-laravel memory requestsRojan Shrestha2026-09-04
adservio/frontend!2115adservio/frontend[ADS-8067-hotfix] Old interface încadrare backPetronel Pavel2026-09-04
adservio/frontend!2116adservio/frontendPreload social i18n to avoid double loader on dashboardAlex Murarescu2026-09-04
adservio/web!2727adservio/web[ADS-8601] School config for AI SummariesAlex Murarescu2026-09-04Yes
adservio/web!2729adservio/web[ADS-8595] Validare register elevi/parintiPetronel Pavel2026-09-04YesYes
adservio/uni/backend!250adservio/uni/backend[ADS-8574] Import Note: preia mentiuni nota: Restanţă, Refacere, Lipsă...Andrei Alexandru2026-09-04Yes
adservio/frontend!2117adservio/frontend[ADS-8658] Repoint authentication at IAMDaniel Onisoru2026-09-04Yes
adservio/services/backend-for-frontend!17adservio/services/backend-for-frontendfix: add width and height to SVG to prevent flutter_svg crashStefan Musat2026-09-04
adservio/helm2!379adservio/helm2restrict production public NLB to cloudflare ip rangesRojan Shrestha2026-09-04

Oldest Active Open MRs (> 48 Working Hours)

adservio/web!2091adservio/webAndrei Dragan297.0d5
adservio/helm2!137adservio/helm2Raul Popovici273.1d0
adservio/services/websocket!8adservio/services/websocketRaul Popovici270.0d0
adservio/services/videothumb!5adservio/services/videothumbRaul Popovici270.0d0
adservio/services/fet-generator!9adservio/services/fet-generatorRaul Popovici270.0d0
adservio/frontend!1556adservio/frontendGeorge Murgoci161.8d0
adservio/web!2344adservio/webGeorge Murgoci160.9d0
adservio/library/backend!26adservio/library/backendRaul Popovici140.9d0
adservio/subscriptions/backend!103adservio/subscriptions/backendEdgar Alexa138.9d4
adservio/admission/backend!104adservio/admission/backendEdgar Alexa138.8d0
adservio/frontend!1873adservio/frontendEdgar Alexa67.8d30
adservio/subscriptions/backend!116adservio/subscriptions/backendEdgar Alexa67.8d40
adservio/web!2644adservio/webMarian Andrei34.9d1110
adservio/web!2651adservio/webAndrei Dragan33.3d8410
adservio/frontend!2055adservio/frontendMarian Andrei18.1d1061
adservio/frontend!2066adservio/frontendPetronel Pavel16.1d1196
adservio/helm2!344adservio/helm2Marian Andrei12.1d80
adservio/subscriptions/backend!123adservio/subscriptions/backendEdgar Alexa12.0d190
adservio/frontend!2078adservio/frontendEdgar Alexa12.0d101
adservio/uni/backend!245adservio/uni/backendAndrei Alexandru9.0d1480

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.