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-14 07:00 to 2026-06-21 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: 72 of 87 merged MRs (82.8%) showed no visible non-author review comment in GitLab.
  • `CR - Approved` is currently too weak as evidence on its own: 33.3% of merged MRs carried that label without any visible review discussion.
  • Queue health is poor: 77.6% of active open MRs are already older than 48 working hours. The oldest example is adservio/web!2091 at 241.5d open.
  • Visible review capacity is thin and concentrated: only 18 visible review touches were detected in the whole window, and the top 3 reviewers handled 83.3% of them.
  • adservio/frontend is the highest-volume review surface with 23 merged MRs and only 30.4% visible review coverage. adservio/web is the next meaningful flow at 13 merges and 7.7% visible review coverage.
  • MR size is not the main story: median changed files were 3, and only 16.1% of merged MRs were above 20 files. Even the slowest merged example, adservio/library/backend!27, took 82.0d with 7 changed files, so the dominant problem still looks like review discipline and queue ownership rather than consistently oversized MRs.

Leadership Analysis

  • The operating rhythm is serviceable at the median (11.4h created-to-merged), which means the biggest leverage is improving process fidelity rather than pushing for even more raw throughput.
  • With 77.6% of active MRs already stale, the open list is functioning more like inventory than prioritization support. adservio/web!2091 being open for 241.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 83.3% 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 82.0d longest merged cycle (adservio/library/backend!27, 7 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 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/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

  • 72 of 87 merged MRs (82.8%) had no visible non-author review comment in GitLab.
  • 41 of 87 merged MRs (47.1%) carried the `CR - Approved` label.
  • 29 merged MRs (33.3%) were labeled `CR - Approved` without any visible non-author review comment.
  • 16.1% of merged MRs changed more than 20 files, while 4.6% changed more than 50 files.
  • Among MRs with visible review discussion, the median last-author-commit to first-review time was 23.1h.
  • The median last-author-commit to `CR - Approved` time was 45.2h.
  • The top 3 reviewers accounted for 83.3% of visible review touches.
  • 38 of 49 active open MRs (77.6%) were older than 48 working hours.
Merged MRs
Merged MRs inside the analysis window.
87
Open MRs
All currently open group MRs.
58
Active open MRs
Open MRs excluding drafts.
49
Draft open MRs
Open MRs marked draft/WIP.
9
Visible review rate
Merged MRs with at least one visible non-author GitLab comment.
17.2%
Merged without visible review comment
Merged MRs with zero visible non-author comments.
82.8%
CR - Approved label coverage
Merged MRs carrying the CR-approved label.
47.1%
Approval API coverage
Merged MRs with at least one approver in the GitLab approvals API.
12.6%
CR - Approved without visible review comment
CR-approved MRs with no visible non-author comment.
33.3%
Median MR created -> first review
Working time from MR creation to first visible non-author comment.
2.2d
Median last author commit -> first review
Working time from last author commit before review to first visible non-author comment.
23.1h
Median first review -> CR - Approved
Working time from first visible comment to CR-approved label after review start, else merge.
1.9h
Median MR created -> CR - Approved
Working time from MR creation to CR-approved label after review start, else merge.
3.1d
Median last author commit -> CR - Approved
Working time from last author commit before review to CR-approved label after review start, else merge.
45.2h
Median MR created -> merged
Working time from MR creation to merge.
11.4h
Median changed files
Median GitLab `changes_count` value.
3
MRs > 5 files
Merged MRs where `changes_count` is above 5.
40.2%
MRs > 10 files
Merged MRs where `changes_count` is above 10.
26.4%
MRs > 20 files
Merged MRs where `changes_count` is above 20.
16.1%
MRs > 50 files
Merged MRs where `changes_count` is above 50.
4.6%
Top 3 reviewer touch share
Share of visible review touches handled by the top 3 reviewers.
83.3%
Active open backlog rate
Non-draft open MRs older than 48 working hours.
77.6%

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

Median MR created -> first review2.2d
Median last author commit -> first review23.1h
Median MR created -> CR - Approved3.1d
Median first review -> CR - Approved1.9h
Median last author commit -> CR - Approved45.2h
Median MR created -> merged11.4h
Dragoș Ivan103955.6%
Edgar Alexa31516.7%
George Murgoci2211.1%
Daniel Onisoru2611.1%
Ioana Ivan1145.6%
adservio/frontend2330.4%78.3%4
adservio/web137.7%53.8%1
adservio/devops/iac128.3%8.3%4.5
adservio/helm2120.0%0.0%1.0
adservio/docgen2/backend616.7%66.7%5.0
adservio/uni/backend60.0%33.3%21.0
adservio/admission/backend540.0%80.0%8
adservio/billing/backend333.3%33.3%2
adservio/services/backend-for-frontend333.3%66.7%2
adservio/accommodations/backend10.0%0.0%1
adservio/library/backend10.0%0.0%7
adservio/social1100.0%100.0%25

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/docgen2/backend!137[ADS-7905] Pentru clasele primare, catalogul PDF trebuie sa fie conform EDU2/5 Light0.9h0.4h2.8h
adservio/devops/iac!37ADS-7820: private storage buckets + web-s3-user IAM in dev/staging/prod3/5 Solid2.3h2.3h4.3d
adservio/frontend!1924[ADS-7838] Modificari serii -adaugare dropdown Tip Invatamant2/5 Light2.8h2.8h0.8h
adservio/frontend!1933[ADS-7638] Close situation” option is incorrectly visible to teachers when the...3/5 Solid4.6h4.9h5.3h
adservio/admission/backend!154[ADS-7428] - needs modifications flow fixes3/5 Solid3.1d16.7h3.1d
adservio/frontend!1900[ADS-7428] - needs modifications flow fixes3/5 Solid3.1d18.1h3.1d
adservio/frontend!1921[ADS-7239] - Session Labels4/5 Strong2.1d20.1h3.0d
adservio/admission/backend!156[ADS-7239] - labels4/5 Strong2.2d23.1h3.1d
adservio/social!28[ADS-7519][BE] "Afișează noutăți Adservio" toggle is non-functional2/5 Light24.8h24.3h24.9h
adservio/web!2576[ADS-7519][BE] "Afișează noutăți Adservio" toggle is non-functional3/5 Solid24.9h29.8h44.0h
adservio/billing/backend!244[ADS-1757] [BE] [Financiar] - Plati partiale4/5 Strong23.7d3.0d39.8d
adservio/services/backend-for-frontend!1BFF init4/5 Strong4.6d3.5d7.5d
adservio/frontend!1909[ADS-7009]: Do not allow add/edit/delete grade if situation is closed.2/5 Light4.9d4.8d4.9d
adservio/frontend!1907[ADS-7842]: Add route for View memento for mobile2/5 Light7.2d7.2d7.2d
adservio/frontend!1724[S: ADS-1757][ADS-7256] [BE - PHP + FE]: Plăți Parțiale4/5 Strong26.3d12.2d44.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 MRs72
With CR Label29
With Approval API9
  • 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 (72 MRs). Click again to collapse.
adservio/docgen2/backend!136adservio/docgen2/backend[ADS-7838] Modificari serii -adaugare dropdown Tip InvatamantAchim Stefan2026-06-15
adservio/uni/backend!213adservio/uni/backend[ADS-7838] Nomenclator Forma de InvatamantAndrei Alexandru2026-06-15Yes
adservio/admission/backend!158adservio/admission/backendfixed migrationGeorge Murgoci2026-06-15
adservio/frontend!1925adservio/frontend[ADS-7243] - hide auto populate field if grading sistem is admitted/rejectedGeorge Murgoci2026-06-15Yes
adservio/billing/backend!252adservio/billing/backend[ads-7284-tests] Fixed failing testEdgar Alexa2026-06-15
adservio/docgen2/backend!135adservio/docgen2/backend[ADS-7870] Numarul matricol se suprapune peste numele elevului in Catalogul PDFPetronel Pavel2026-06-15Yes
adservio/frontend!1918adservio/frontend[ADS-7062] Calcul si afisare total pentru statistici eleviPetronel Pavel2026-06-15Yes
adservio/web!2571adservio/web[ADS-7860] Campul "titulatura" trebuie sa fie optional la introducerea personalului scolarPetronel Pavel2026-06-15Yes
adservio/web!2573adservio/web[ADS-7902] Refactoring top eleviMarian Andrei2026-06-15
adservio/devops/iac!40adservio/devops/iacUpdate dev permissionsRojan Shrestha2026-06-15
adservio/devops/iac!42adservio/devops/iacADS-7894: stop backing up EKS EBS volumes (enable_backup_tag=false on prod...Rojan Shrestha2026-06-15YesYes
adservio/frontend!1889adservio/frontend[ADS-7475]: Plan de Invatamant (FD) - teste e2eDana Mihaela Maritca2026-06-16Yes
adservio/devops/iac!45adservio/devops/iacmake adservio-dev-tmp bucket publicly readableRojan Shrestha2026-06-16
adservio/helm2!275adservio/helm2social-api: enable HPA min 2 and add PDB in productionRojan Shrestha2026-06-16
adservio/subscriptions/backend!112adservio/subscriptions/backend[ADS-1757] Plati partialeEdgar Alexa2026-06-16Yes
adservio/web!2449adservio/web[S: ADS-1757][ADS-7256] [Financiar] - Plati partiale [BE - PHP + FE]: Notificări webCatalin Cojan2026-06-16Yes
adservio/helm2!280adservio/helm2social-api: set cpu request to 100m so KEDA CPU trigger admission passesRojan Shrestha2026-06-16
adservio/devops/iac!46adservio/devops/iacrename cdn buckets to short-form namingRojan Shrestha2026-06-16
adservio/web!2555adservio/web[ADS-7009]: check if situation is closed before interacting with gradesIoana Ivan2026-06-16YesYes
adservio/frontend!1930adservio/frontend[ADS-7274] Implementare afisare numar matricol pentru rolurile de elev si parintePetronel Pavel2026-06-16Yes
adservio/devops/iac!47adservio/devops/iacadd tuiasi cdn on prod and tmp buckets on prod and stagingRojan Shrestha2026-06-16
adservio/uni/backend!215adservio/uni/backend[ADS-7910] Refactor - Catalog - Save gradesAndrei Alexandru2026-06-16Yes
adservio/frontend!1931adservio/frontend[ads-17570-tests] updated testsEdgar Alexa2026-06-16
adservio/docgen2/backend!125adservio/docgen2/backend[ADS-7375]: Suport multi-lang pentru disciplineDana Mihaela Maritca2026-06-16Yes
adservio/frontend!1861adservio/frontend[ADS-7375]: Suport multi-lang pentru disciplineDana Mihaela Maritca2026-06-16Yes
adservio/uni/backend!195adservio/uni/backendADS-7375 Disciplinele in EN pentru programele de studiu din ENFrancisc Gabriel Virlan2026-06-16YesYes
adservio/helm2!281adservio/helm2social-api: bump memory request to 640Mi to stop HPA memory-trigger maxing outRojan Shrestha2026-06-16
adservio/devops/iac!43adservio/devops/iacproduction: add mysql-catalog3 (db.r8g.2xlarge, 80GB) and bump catalog2 to 2xlargeRojan Shrestha2026-06-16
adservio/devops/iac!44adservio/devops/iacset default RDS maintenance window to Sat 19:00-20:00 UTCRojan Shrestha2026-06-16
adservio/helm2!282adservio/helm2social-api: bump maxrepl from 4 to 8 for school-hours headroomRojan Shrestha2026-06-16
adservio/devops/iac!41adservio/devops/iacfeat: add support for persistent /data EBS volume with configurable sizeDaniel Onisoru2026-06-16
adservio/devops/iac!48adservio/devops/iaclower db_connections_threshold on prod RDS alarmsRojan Shrestha2026-06-16
adservio/frontend!1932adservio/frontendFix uni cohorts automation tests, testId education-form-sync-select missingAchim Stefan2026-06-17Yes
adservio/web!2579adservio/web[ADS-7638] msm/mgm validationIonut Ciolan2026-06-17
adservio/frontend!1936adservio/frontend[ADS-7933]: Afisare corecta nume universitate la descarcarea cataloguluiDana Mihaela Maritca2026-06-17YesYes
adservio/frontend!1927adservio/frontend[ADS-6805] - duplicare sesiuniGeorge Murgoci2026-06-17Yes
adservio/admission/backend!159adservio/admission/backend[ADS-6805] - duplicare sesiuniGeorge Murgoci2026-06-17Yes
adservio/frontend!1934adservio/frontend[ADS-7915] Dirigintelui nu trebuie sa i se permita sa incheie media pe...Petronel Pavel2026-06-17Yes
adservio/frontend!1935adservio/frontend[ADS-7930] Setare scutiri materie educatie fizica/ReligiePetronel Pavel2026-06-17Yes
adservio/web!2581adservio/web[HOTFIX] Activate historyIonut Ciolan2026-06-17
adservio/frontend!1928adservio/frontend[ADS-7796] istoric note sterse de catre profesorul ID 2329864Petronel Pavel2026-06-17YesYes
adservio/web!2578adservio/web[ADS-7397] Corectarea afisarii claselor cu cifre romane in fisa scolaraPetronel Pavel2026-06-17Yes
adservio/frontend!1940adservio/frontend[ADS-7939] Incercarea de adaugare a unei suprascrieri in catalogul PDF...Petronel Pavel2026-06-17Yes
adservio/docgen2/backend!139adservio/docgen2/backend[ADS-7934] Observatia individuala din avertismente marcata cu "Adauga in...Petronel Pavel2026-06-17Yes
adservio/uni/backend!209adservio/uni/backendfeat: bootstrap Laravel uni-core component and nginx into the pipelineDaniel Onisoru2026-06-17
adservio/helm2!274adservio/helm2feat(uni): add Laravel uni-core sidecars to uni-api podDaniel Onisoru2026-06-17
adservio/helm2!283adservio/helm2alertmanager: route every severity=critical alert to PagerDutyRojan Shrestha2026-06-17
adservio/helm2!285adservio/helm2Add --no-atomic to feature branch dev deploy to prevent rollback on slow rolloutRojan Shrestha2026-06-18
adservio/admission/backend!160adservio/admission/backend[ADS-7885]: Session improvementsDragoș Ivan2026-06-18Yes
adservio/frontend!1941adservio/frontend[ADS-7885]: Session ImprovementsDragoș Ivan2026-06-18Yes
adservio/web!2583adservio/web[ADS-7618] Fix chestionareMarian Andrei2026-06-18
adservio/web!2577adservio/web[ADS-7913] Exclude non-statistical rows from promotion totalsValentin Pal2026-06-18YesYes
adservio/frontend!1942adservio/frontend[ADS-7967] Incercarea de accesare "promovabilitate elevi" redirectioneaza...Petronel Pavel2026-06-18
adservio/web!2572adservio/web[S: ADS-7896][ADS-7868] Migrare scrieri S3 in contul nouCatalin Cojan2026-06-18Yes
adservio/accommodations/backend!71adservio/accommodations/backend[S: ADS-7896][ADS-7868] Migrare scrieri S3 in contul nouCatalin Cojan2026-06-18
adservio/billing/backend!253adservio/billing/backend[ADS-7896] S3 Destination keyEdgar Alexa2026-06-18
adservio/frontend!1937adservio/frontend[S: ADS-7896][ADS-7868] Migrare scrieri S3 in contul nouCatalin Cojan2026-06-18
adservio/helm2!278adservio/helm2[S: ADS-7896][ADS-7868] Migrare scrieri S3 in contul nouCatalin Cojan2026-06-18
adservio/helm2!272adservio/helm2BFF SetupDaniel Onisoru2026-06-18
adservio/uni/backend!201adservio/uni/backend[S: ADS-7496][ADS-7601] Situație școlară - Medii Examen finalizareAndrei Alexandru2026-06-18Yes
adservio/uni/backend!207adservio/uni/backend[ADS-7534] Generare Adseverinte - Selectare StudențiAndrei Alexandru2026-06-18
adservio/library/backend!27adservio/library/backend[ADS-6795] Added support for auditEdgar Alexa2026-06-18
adservio/web!2584adservio/web[hotfix-yearbook] Change from anuar to yearbookCatalin Cojan2026-06-18
adservio/helm2!288adservio/helm2billing: remove null global.nodeSelector to fix helm merge conflictRojan Shrestha2026-06-18
adservio/helm2!287adservio/helm2docgen2: fix HPA over-scalingRojan Shrestha2026-06-18
adservio/helm2!289adservio/helm2docgen2: bump cpu limit 2000m to 4000m to stop throttlingRojan Shrestha2026-06-19
adservio/docgen2/backend!141adservio/docgen2/backend[ADS-7957]: Disciplinele din situatiile scolare apar in englezaDana Mihaela Maritca2026-06-19Yes
adservio/services/backend-for-frontend!2adservio/services/backend-for-frontendchore(logging): add error logging to calendar today handler upstream fetchesStefan Musat2026-06-19
adservio/devops/iac!49adservio/devops/iacmove adservio-web-user and sentry-user policies out of iam-access moduleRojan Shrestha2026-06-19
adservio/devops/iac!50adservio/devops/iacAdd adservio-social-user with scoped S3 access to news/ prefixRojan Shrestha2026-06-19
adservio/web!2587adservio/web[S: ADS-7896][ADS-7987] Migrare documente S3Catalin Cojan2026-06-19
adservio/services/backend-for-frontend!3adservio/services/backend-for-frontendfix(auth): extract token in User decorator to forward it to upstream requestsStefan Musat2026-06-19Yes

Oldest Active Open MRs (> 48 Working Hours)

adservio/web!2091adservio/webAndrei Dragan241.5d5
adservio/helm2!137adservio/helm2Raul Popovici217.6d0
adservio/services/websocket!8adservio/services/websocketRaul Popovici214.5d0
adservio/services/videothumb!5adservio/services/videothumbRaul Popovici214.5d0
adservio/services/fet-generator!9adservio/services/fet-generatorRaul Popovici214.5d0
adservio/ai/backend!62adservio/ai/backendRobert115.6d0
adservio/frontend!1556adservio/frontendGeorge Murgoci106.3d0
adservio/web!2344adservio/webGeorge Murgoci105.4d0
adservio/library/backend!26adservio/library/backendRaul Popovici85.4d0
adservio/subscriptions/backend!103adservio/subscriptions/backendEdgar Alexa83.4d4
adservio/library/backend!27adservio/library/backendEdgar Alexa82.0d70
adservio/web!2449adservio/webCatalin Cojan44.1d80
adservio/frontend!1724adservio/frontendCatalin Cojan44.1d8528
adservio/billing/backend!244adservio/billing/backendEdgar Alexa39.8d475
adservio/subscriptions/backend!112adservio/subscriptions/backendEdgar Alexa25.1d10
adservio/uni/backend!195adservio/uni/backendFrancisc Gabriel Virlan21.2d450
adservio/uni/backend!201adservio/uni/backendAndrei Alexandru17.1d220
adservio/frontend!1861adservio/frontendDana Mihaela Maritca15.1d290
adservio/docgen2/backend!125adservio/docgen2/backendDana Mihaela Maritca15.1d150
adservio/frontend!1889adservio/frontendDana Mihaela Maritca8.9d540

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.