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-06-21 07:00 to 2026-06-28 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: 64 of 78 merged MRs (82.1%) showed no visible non-author review comment in GitLab.
  • `CR - Approved` is currently too weak as evidence on its own: 46.2% of merged MRs carried that label without any visible review discussion.
  • Queue health is poor: 94.7% of active open MRs are already older than 48 working hours. The oldest example is adservio/web!2091 at 246.5d open.
  • Visible review capacity is thin and concentrated: only 16 visible review touches were detected in the whole window, and the top 3 reviewers handled 81.2% of them.
  • adservio/web is the highest-volume review surface with 22 merged MRs and only 9.1% visible review coverage. adservio/frontend is the next meaningful flow at 18 merges and 27.8% visible review coverage.
  • MR size is not the main story: median changed files were 4.0, and only 16.7% of merged MRs were above 20 files. Even the slowest merged example, adservio/social!17, took 30.0d with 57 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.2h, so the dominant weakness is decision recording and merge discipline, not reviewer reaction speed.
  • With 94.7% of active MRs already stale, the open list is functioning more like inventory than prioritization support. adservio/web!2091 being open for 246.5d 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 81.2% of visible touches, review quality, continuity, and queue health all become sensitive to a very small set of people.
  • The spread between a 4.0-file median MR and a 30.0d longest merged cycle (adservio/social!17, 57 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/docgen2/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/docgen2/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

  • 64 of 78 merged MRs (82.1%) had no visible non-author review comment in GitLab.
  • 50 of 78 merged MRs (64.1%) carried the `CR - Approved` label.
  • 36 merged MRs (46.2%) were labeled `CR - Approved` without any visible non-author review comment.
  • 16.7% of merged MRs changed more than 20 files, while 6.4% changed more than 50 files.
  • Among MRs with visible review discussion, the median last-author-commit to first-review time was 2.2h.
  • The median last-author-commit to `CR - Approved` time was 14.1h.
  • The top 3 reviewers accounted for 81.2% of visible review touches.
  • 36 of 38 active open MRs (94.7%) were older than 48 working hours.
Merged MRs
Merged MRs inside the analysis window.
78
Open MRs
All currently open group MRs.
43
Active open MRs
Open MRs excluding drafts.
38
Draft open MRs
Open MRs marked draft/WIP.
5
Visible review rate
Merged MRs with at least one visible non-author GitLab comment.
17.9%
Merged without visible review comment
Merged MRs with zero visible non-author comments.
82.1%
CR - Approved label coverage
Merged MRs carrying the CR-approved label.
64.1%
Approval API coverage
Merged MRs with at least one approver in the GitLab approvals API.
14.1%
CR - Approved without visible review comment
CR-approved MRs with no visible non-author comment.
46.2%
Median MR created -> first review
Working time from MR creation to first visible non-author comment.
2.4d
Median last author commit -> first review
Working time from last author commit before review to first visible non-author comment.
2.2h
Median first review -> CR - Approved
Working time from first visible comment to CR-approved label after review start, else merge.
3.9h
Median MR created -> CR - Approved
Working time from MR creation to CR-approved label after review start, else merge.
3.5d
Median last author commit -> CR - Approved
Working time from last author commit before review to CR-approved label after review start, else merge.
14.1h
Median MR created -> merged
Working time from MR creation to merge.
22.7h
Median changed files
Median GitLab `changes_count` value.
4.0
MRs > 5 files
Merged MRs where `changes_count` is above 5.
41.0%
MRs > 10 files
Merged MRs where `changes_count` is above 10.
26.9%
MRs > 20 files
Merged MRs where `changes_count` is above 20.
16.7%
MRs > 50 files
Merged MRs where `changes_count` is above 50.
6.4%
Top 3 reviewer touch share
Share of visible review touches handled by the top 3 reviewers.
81.2%
Active open backlog rate
Non-draft open MRs older than 48 working hours.
94.7%

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

Median MR created -> first review2.4d
Median last author commit -> first review2.2h
Median MR created -> CR - Approved3.5d
Median first review -> CR - Approved3.9h
Median last author commit -> CR - Approved14.1h
Median MR created -> merged22.7h
Dragoș Ivan61137.5%
George Murgoci42325.0%
Alex Murarescu31518.8%
Marian Andrei116.2%
Ioana Ivan1186.2%
Edgar Alexa116.2%
adservio/web229.1%68.2%2.0
adservio/frontend1827.8%88.9%4.5
adservio/docgen2/backend70.0%100.0%10
adservio/helm2616.7%33.3%3.5
adservio/devops/iac50.0%0.0%1
adservio/services/backend-for-frontend50.0%40.0%2
adservio/admission/backend450.0%50.0%21.5
adservio/social475.0%75.0%41.5
adservio/uni/backend40.0%25.0%8.5
adservio/accommodations/backend10.0%0.0%2
adservio/billing/backend1100.0%100.0%46
adservio/subscriptions/backend10.0%100.0%3

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/social!31[ADS-7418] [Stiri] - Configurare restricții de distribuire3/5 Solid6.0h0.2h5.9h
adservio/frontend!1958[ADS-5663] Numele utilizatorului nu se afișează în chat-ul grupului3/5 Solid0.2h0.2h0.9h
adservio/frontend!1943[ADS-7825] - multy apply to session4/5 Strong2.9d1.1h4.2d
adservio/frontend!1956[ADS-7238] rapoarte4/5 Strong43.9h1.4h2.0d
adservio/admission/backend!163[ADS-7238] - reports2/5 Light46.1h1.7h2.1d
adservio/frontend!1939[ADS-7874][Node/React] Cache images for news created by admins via CDN3/5 Solid2.8d1.8h4.0d
adservio/frontend!1944[ADS-7767] Chitante si facturi5/5 Deep5.0d2.0h5.2d
adservio/billing/backend!254[ADS-7767] Chitante si facturi3/5 Solid5.0d2.3h5.2d
adservio/web!2586[ADS-7898]: Add validation for student status in Medii controller2/5 Light2.6h2.6h24.8h
adservio/web!2604[ADS-7418] [Stiri] - Configurare restricții de distribuire1/5 Very light3.4h3.4h5.9h
adservio/social!17[ADS-7405] Local Cache3/5 Solid20.1d21.8h20.1d
adservio/helm2!248[ADS-7405] Local cache2/5 Light16.2d21.9h21.2d
adservio/admission/backend!161[ADS-7825] - multi apply flow4/5 Strong2.0d25.2h4.0d
adservio/social!30[ADS-7434] Securitate3/5 Solid2.9d2.9d2.9d

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 MRs64
With CR Label36
With Approval API10
  • 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 (64 MRs). Click again to collapse.
adservio/frontend!1945adservio/frontend[ADS-7475]: Plan de Invatamant - fix teste e2eDana Mihaela Maritca2026-06-22Yes
adservio/devops/iac!51adservio/devops/iacmysql catalog memory alarm fixesRojan Shrestha2026-06-22
adservio/frontend!1946adservio/frontend[ADS-7993]: Fix create exemptionsIoana Ivan2026-06-22
adservio/uni/backend!217adservio/uni/backend[ADS-7972] Restantieri - Sesiunea 2Andrei Alexandru2026-06-22Yes
adservio/admission/backend!162adservio/admission/backendrmq logsGeorge Murgoci2026-06-23
adservio/web!2570adservio/web[UNI] Tenant - University detailsIonut Ciolan2026-06-23
adservio/frontend!1948adservio/frontend[ADS-7289][SUBSCRIPTIONS] - Pachetul superior ar trebui folosit când calculăm featuresEdgar Alexa2026-06-23Yes
adservio/subscriptions/backend!119adservio/subscriptions/backend[ADS-7289][SUBSCRIPTIONS] - Pachetul superior ar trebui folosit când calculăm featuresEdgar Alexa2026-06-23Yes
adservio/services/backend-for-frontend!4adservio/services/backend-for-frontendFeature/mobile newsfeed bffStefan Musat2026-06-23
adservio/frontend!1947adservio/frontend[ADS-1272] The duplicate name appears next to the recipient's namePetronel Pavel2026-06-23YesYes
adservio/docgen2/backend!145adservio/docgen2/backend[ADS-7991]: Change fontSize for longer address textIoana Ivan2026-06-23Yes
adservio/docgen2/backend!144adservio/docgen2/backend[ADS-7975] Initiala tatalui este afisata cu punct in Management clasa si este...Petronel Pavel2026-06-23Yes
adservio/frontend!1926adservio/frontend[ADS-7898] Situatia scolara poate fi incheiata pentru elevul transferatPetronel Pavel2026-06-23YesYes
adservio/docgen2/backend!142adservio/docgen2/backend[ADS-7963] Notare cu calificative, insa in catalog PDF apare mediile in notePetronel Pavel2026-06-23YesYes
adservio/frontend!1949adservio/frontend[ADS-7802]: Allow select Countries tab.Ioana Ivan2026-06-23YesYes
adservio/uni/backend!197adservio/uni/backend[S: ADS-7405][ADS-7661]: LocalCache - New Role/ UserRole eventsAndrei Alexandru2026-06-24Yes
adservio/web!2497adservio/web[S: ADS-7405][ADS-7408] Actualizat/adăugat message bus eventsCatalin Cojan2026-06-24Yes
adservio/accommodations/backend!72adservio/accommodations/backend[ADS-7405] update student study job - event payload changesIonut Ciolan2026-06-24
adservio/web!2544adservio/web[S: ADS-6494] Log levels & Log formatsCatalin Cojan2026-06-24Yes
adservio/frontend!1953adservio/frontend[ADS-7475]: Plan de Invatamant - fix teste e2eDana Mihaela Maritca2026-06-24
adservio/services/backend-for-frontend!5adservio/services/backend-for-frontendRefactor remove social feedStefan Musat2026-06-24Yes
adservio/frontend!1955adservio/frontend[ADS-7638] Close situation” option is incorrectly visible to teachers when the...Petronel Pavel2026-06-24Yes
adservio/services/backend-for-frontend!6adservio/services/backend-for-frontendfix secret_detection job inheriting nodejs before_scriptRojan Shrestha2026-06-24
adservio/docgen2/backend!147adservio/docgen2/backend[ADS-8009] Lipsa initiale tata la catalog PDF- date personale eleviPetronel Pavel2026-06-24Yes
adservio/services/backend-for-frontend!7adservio/services/backend-for-frontendfix semgrep-sast stuck: add docker tag and clear before_scriptRojan Shrestha2026-06-24
adservio/frontend!1957adservio/frontend[ADS-7638] fix close situation banner visibilityPetronel Pavel2026-06-24Yes
adservio/helm2!293adservio/helm2docgen2: relax api health probes and add startupProbe to stop probe death-spiral under loadRojan Shrestha2026-06-24
adservio/web!2590adservio/web[ADS-7978] Preserve hosted school logo URLsValentin Pal2026-06-25Yes
adservio/web!2596adservio/web[S: ADS-7896][ADS-8013] Migrare logouri din s3 old in s3 newCatalin Cojan2026-06-25
adservio/web!2600adservio/web[ADS-8032] sync staff activities fixed bugIonut Ciolan2026-06-25
adservio/devops/iac!52adservio/devops/iacguardduty weekly report: critical/high in email body, all severities in PDF...Rojan Shrestha2026-06-25
adservio/devops/iac!53adservio/devops/iacfix drift: set alarm_actions_enabled=false for rds-mysql-catalog2Rojan Shrestha2026-06-25
adservio/devops/iac!54adservio/devops/iacgrant Developer permission set to staging and production for all developer groupsRojan Shrestha2026-06-25
adservio/web!2599adservio/web[ADS-7571]: Enhance user type validation in Utilizatori controllerAndrei Dragan2026-06-25Yes
adservio/web!2598adservio/web[ADS-7654]: Enhance AverageCalculator with logging context for updatesAndrei Dragan2026-06-25Yes
adservio/services/backend-for-frontend!8adservio/services/backend-for-frontendfix(calendar): filter events by date in today handlerStefan Musat2026-06-25Yes
adservio/web!2601adservio/web[S: ADS-7896][ADS-8040] Migrare fisiere din s3 old in s3 newCatalin Cojan2026-06-25Yes
adservio/admission/backend!164adservio/admission/backendrmq-logs-v2George Murgoci2026-06-25
adservio/web!2591adservio/web[S: ADS-7825][ADS-7992] [BE][PHP] Toggle Aplicare multiplaCatalin Cojan2026-06-25YesYes
adservio/web!2588adservio/web[ADS-7605] fsID validationIonut Ciolan2026-06-25Yes
adservio/docgen2/backend!146adservio/docgen2/backend[ADS-6826] Procesul verbal de încheiere medie purtarePetronel Pavel2026-06-25YesYes
adservio/frontend!1952adservio/frontend[ADS-6826] Procesul verbal de încheiere medie purtarePetronel Pavel2026-06-25YesYes
adservio/web!2592adservio/web[ADS-7667] Add competition result validationIonut Ciolan2026-06-25Yes
adservio/web!2597adservio/web[ADS-6781]: Add matModule field to Materii and update M_Elevi queriesAndrei Dragan2026-06-25Yes
adservio/uni/backend!221adservio/uni/backend[ADS-8052][ADS-8048] Restanțieri sesiuni 2/3/4 PDF + webAndrei Alexandru2026-06-25Yes
adservio/web!2603adservio/web[S: ADS-7896][ADS-8040] Migrare fisiere avatar din s3 old in s3 newCatalin Cojan2026-06-25Yes
adservio/frontend!1954adservio/frontend[ADS-6781] Sortare materii foaia matricolaPetronel Pavel2026-06-26Yes
adservio/web!2605adservio/web[ADS-8045] student file - fixed exemption type localization bugIonut Ciolan2026-06-26
adservio/web!2606adservio/webRevert "[ADS-8045] student file - fixed exemption type localization bug"Ionut Ciolan2026-06-26
adservio/web!2607adservio/web[ADS-8045] english exemption types lokalizeIonut Ciolan2026-06-26
adservio/helm2!292adservio/helm2bump prometheus/tempo memory and tempo limits after monitoring node upgradeRojan Shrestha2026-06-26
adservio/web!2608adservio/web[S: ADS-7896][ADS-8030] Migrare fisiere Classbook archives din s3 old in s3 newCatalin Cojan2026-06-26Yes
adservio/helm2!270adservio/helm2[S: ADS-6494] Log levels & Log formatsCatalin Cojan2026-06-26
adservio/helm2!294adservio/helm2[ADS-7238]: Session Multi-applyDragoș Ivan2026-06-26Yes
adservio/frontend!1962adservio/frontend[ADS-7418] [Stiri] - Configurare restricții de distribuireAlex Murarescu2026-06-26Yes
adservio/helm2!290adservio/helm2[ADS-7874] Local images / cdnDaniel Onisoru2026-06-26
adservio/web!2580adservio/web[ADS-7874] Cache images for news created by admins via CDNIonut Ciolan2026-06-26Yes
adservio/social!29adservio/social[ADS-7874][Node/React] Cache images for news created by admins via CDNAlex Murarescu2026-06-26
adservio/docgen2/backend!143adservio/docgen2/backend[ADS-7767] Chitante si facturiEdgar Alexa2026-06-26Yes
adservio/uni/backend!216adservio/uni/backend[ADS-7574] Clasament grupe/ seriiAndrei Alexandru2026-06-26Yes
adservio/frontend!1966adservio/frontend[ADS-7574] Calculul mediilor la nivel de grupa/serieAchim Stefan2026-06-26Yes
adservio/docgen2/backend!148adservio/docgen2/backend[ADS-7574] Calculul mediilor la nivel de grupa/serieAchim Stefan2026-06-26Yes
adservio/web!2609adservio/web[S: ADS-7896][ADS-8079] Migrare fisiere pentru scolile inactiveCatalin Cojan2026-06-26
adservio/devops/iac!55adservio/devops/iacdowngrade mysql master, catalog1, catalog3 from db.r8g.2xlarge to db.r8g.xlargeRojan Shrestha2026-06-26

Oldest Active Open MRs (> 48 Working Hours)

adservio/web!2091adservio/webAndrei Dragan246.5d5
adservio/helm2!137adservio/helm2Raul Popovici222.6d0
adservio/services/websocket!8adservio/services/websocketRaul Popovici219.5d0
adservio/services/videothumb!5adservio/services/videothumbRaul Popovici219.5d0
adservio/services/fet-generator!9adservio/services/fet-generatorRaul Popovici219.5d0
adservio/ai/backend!62adservio/ai/backendRobert120.6d0
adservio/frontend!1556adservio/frontendGeorge Murgoci111.3d0
adservio/web!2344adservio/webGeorge Murgoci110.4d0
adservio/library/backend!26adservio/library/backendRaul Popovici90.4d0
adservio/subscriptions/backend!103adservio/subscriptions/backendEdgar Alexa88.4d4
adservio/social!17adservio/socialAlex Murarescu30.0d571
adservio/web!2497adservio/webCatalin Cojan27.0d390
adservio/helm2!248adservio/helm2Alex Murarescu26.1d61
adservio/uni/backend!197adservio/uni/backendAndrei Alexandru22.8d170
adservio/helm2!270adservio/helm2Catalin Cojan14.1d20
adservio/web!2544adservio/webCatalin Cojan12.1d110
adservio/web!2580adservio/webIonut Ciolan7.1d10
adservio/frontend!1939adservio/frontendAlex Murarescu7.0d261
adservio/frontend!1926adservio/frontendPetronel Pavel6.0d30
adservio/web!2570adservio/webIonut Ciolan6.0d10

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.