<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Code-Review on Daffa Abhipraya</title><link>https://blog.abhipraya.dev/tags/code-review/</link><description>Recent content in Code-Review on Daffa Abhipraya</description><generator>Hugo</generator><language>en-us</language><copyright>© Daffa Abhipraya</copyright><lastBuildDate>Wed, 15 Apr 2026 00:00:00 +0700</lastBuildDate><atom:link href="https://blog.abhipraya.dev/tags/code-review/index.xml" rel="self" type="application/rss+xml"/><item><title>PPL: Code Review at Two Altitudes [Sprint 2, Week 3]</title><link>https://blog.abhipraya.dev/ppl/part-b/s2w3-code-review/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-b/s2w3-code-review/</guid><description>&lt;h2 id="what-i-worked-on">
 &lt;a class="anchor" href="#what-i-worked-on" data-anchor="what-i-worked-on" aria-hidden="true">#&lt;/a>
 What I Worked On
&lt;/h2>
&lt;p>Two weeks of code review on teammate MRs. Week 1 (2-8 Apr) covered three substantial MRs: hl&amp;rsquo;s CSV import modal (!155), hl&amp;rsquo;s settings management system (!128), and qenthm&amp;rsquo;s ML risk scoring engine (!166) — 44 review points including 7 P0s. Week 2 (9-15 Apr) covered fadhliraihan&amp;rsquo;s AR Staff read-only client access (!171) and fernanda.nadhiftya&amp;rsquo;s communication history UI (!177) — 6 review points including 2 P0s caught through manual testing that static reading missed. Fifty review points total, nine P0s, reviews posted as threaded discussions on every MR.&lt;/p></description></item><item><title>PPL: Communication and Knowledge Sharing [Sprint 2, Week 2]</title><link>https://blog.abhipraya.dev/ppl/part-c/s2w2-communication/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-c/s2w2-communication/</guid><description>&lt;h2 id="overview">
 &lt;a class="anchor" href="#overview" data-anchor="overview" aria-hidden="true">#&lt;/a>
 Overview
&lt;/h2>
&lt;p>Sprint 2 Week 2 (April 3 to 9) communication work centered on three substantial code reviews posted as GitLab discussion threads, merge coordination for 13+ teammate MRs, and Linear ticket management. The reviews caught several critical bugs that would have reached production, including a broken SQL join and an auth bypass.&lt;/p>
&lt;hr>
&lt;h2 id="1-threaded-mr-reviews-with-severity-grading">
 &lt;a class="anchor" href="#1-threaded-mr-reviews-with-severity-grading" data-anchor="1-threaded-mr-reviews-with-severity-grading" aria-hidden="true">#&lt;/a>
 1. Threaded MR Reviews with Severity Grading
&lt;/h2>
&lt;p>Three MRs were reviewed this week, all following the same structured approach: positive callouts first, then issues grouped by severity (P0 blockers through P3 nitpicks), with code fix suggestions for every issue.&lt;/p></description></item><item><title>PPL: Communication and Knowledge Sharing [Sprint 2, Week 1]</title><link>https://blog.abhipraya.dev/ppl/part-c/s2w1-communication/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-c/s2w1-communication/</guid><description>&lt;h2 id="overview">
 &lt;a class="anchor" href="#overview" data-anchor="overview" aria-hidden="true">#&lt;/a>
 Overview
&lt;/h2>
&lt;p>Sprint 2 Week 1 (Mar 24 to 30) communication focused on two detailed code reviews posted as GitLab discussion threads, merge coordination for the team, and direct code contributions to address review findings.&lt;/p>
&lt;hr>
&lt;h2 id="1-threaded-mr-reviews-with-severity-grading">
 &lt;a class="anchor" href="#1-threaded-mr-reviews-with-severity-grading" data-anchor="1-threaded-mr-reviews-with-severity-grading" aria-hidden="true">#&lt;/a>
 1. Threaded MR Reviews with Severity Grading
&lt;/h2>
&lt;p>This sprint I shifted to posting reviews as &lt;strong>GitLab discussion threads&lt;/strong> rather than plain comments. Discussion threads can be individually resolved by the MR owner after addressing each issue, making it clear which feedback has been handled and which is still open.&lt;/p></description></item><item><title>PPL: Team Dev Management [Sprint 2, Week 2]</title><link>https://blog.abhipraya.dev/ppl/part-b/s2w2-code-review/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-b/s2w2-code-review/</guid><description>&lt;h2 id="what-i-worked-on">
 &lt;a class="anchor" href="#what-i-worked-on" data-anchor="what-i-worked-on" aria-hidden="true">#&lt;/a>
 What I Worked On
&lt;/h2>
&lt;p>Three substantial MRs reviewed this week: Bertrand&amp;rsquo;s cancel invoice feature (SIRA-125), Erdafa&amp;rsquo;s blue/green deployment system (SIRA-134 to SIRA-141), and Rifqi&amp;rsquo;s invoice grouping by status (SIRA-132). Total review points: 29 across P0/P1/P2/P3 severity.&lt;/p>
&lt;hr>
&lt;h2 id="mr-118--cancel-invoice-feature-bertrand">
 &lt;a class="anchor" href="#mr-118--cancel-invoice-feature-bertrand" data-anchor="mr-118--cancel-invoice-feature-bertrand" aria-hidden="true">#&lt;/a>
 MR !118 — Cancel Invoice Feature (Bertrand)
&lt;/h2>
&lt;p>The implementation was solid on the happy path: TDD discipline visible from commit history, clean Router-Service-DB layering, rollback migration included. Review focused on API-level guard gaps that the frontend UI hid but the API did not enforce.&lt;/p></description></item><item><title>PPL: Ticket Quality as Code Review [Sprint 2, Week 1]</title><link>https://blog.abhipraya.dev/ppl/part-b/s2w1-code-review/</link><pubDate>Mon, 23 Mar 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-b/s2w1-code-review/</guid><description>&lt;h2 id="what-i-worked-on">
 &lt;a class="anchor" href="#what-i-worked-on" data-anchor="what-i-worked-on" aria-hidden="true">#&lt;/a>
 What I Worked On
&lt;/h2>
&lt;p>This week&amp;rsquo;s review work had two dimensions: reviewing the &lt;strong>ticket board&lt;/strong> for sync issues (a form of &amp;ldquo;code review&amp;rdquo; for project management), and letting &lt;strong>SonarQube quality gates&lt;/strong> act as automated code review for the monitoring MR.&lt;/p>
&lt;h2 id="ticket-board-audit">
 &lt;a class="anchor" href="#ticket-board-audit" data-anchor="ticket-board-audit" aria-hidden="true">#&lt;/a>
 Ticket Board Audit
&lt;/h2>
&lt;p>After creating 64 new tickets, I audited all 150+ active tickets (Backlog, Todo, In Progress, In Review) for contradictions and stale data. This is essentially code review applied to project planning.&lt;/p></description></item><item><title>PPL: Code Review [Sprint 1, Week 3]</title><link>https://blog.abhipraya.dev/ppl/part-b/s1w3-code-review/</link><pubDate>Fri, 13 Mar 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-b/s1w3-code-review/</guid><description>&lt;h2 id="what-i-worked-on">
 &lt;a class="anchor" href="#what-i-worked-on" data-anchor="what-i-worked-on" aria-hidden="true">#&lt;/a>
 What I Worked On
&lt;/h2>
&lt;p>This week I reviewed &lt;strong>10 teammates&amp;rsquo; merge requests&lt;/strong>, leaving substantive comments with code samples, performance suggestions, and architectural fixes. Three reviews included fix commits that I pushed directly to the teammate&amp;rsquo;s branch to unblock merging.&lt;/p>
&lt;h2 id="review-summary">
 &lt;a class="anchor" href="#review-summary" data-anchor="review-summary" aria-hidden="true">#&lt;/a>
 Review Summary
&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>MR&lt;/th>
 &lt;th>Author&lt;/th>
 &lt;th>Feature&lt;/th>
 &lt;th>Review Type&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>!75&lt;/td>
 &lt;td>soydoradesu&lt;/td>
 &lt;td>Client management pages&lt;/td>
 &lt;td>Duplicate code + missing field&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!72&lt;/td>
 &lt;td>hl&lt;/td>
 &lt;td>Dashboard stale data fix&lt;/td>
 &lt;td>TanStack Query invalidation gap&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!64&lt;/td>
 &lt;td>soydoradesu&lt;/td>
 &lt;td>Frontend foundation&lt;/td>
 &lt;td>Comprehensive review + fix commits&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!49&lt;/td>
 &lt;td>qenthm&lt;/td>
 &lt;td>Overdue detection worker&lt;/td>
 &lt;td>Consistency + naming review&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!45&lt;/td>
 &lt;td>froklax&lt;/td>
 &lt;td>Staff management&lt;/td>
 &lt;td>Auth/DB desync risk&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!46&lt;/td>
 &lt;td>adipppp&lt;/td>
 &lt;td>Auth deadlock fix&lt;/td>
 &lt;td>Correctness verification&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!50&lt;/td>
 &lt;td>dafandikri&lt;/td>
 &lt;td>Dev environment fix&lt;/td>
 &lt;td>Review + 4 fix commits pushed&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!40&lt;/td>
 &lt;td>soydoradesu&lt;/td>
 &lt;td>Frontend foundation&lt;/td>
 &lt;td>Cleanup commits pushed&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!52&lt;/td>
 &lt;td>adipppp&lt;/td>
 &lt;td>Payment seeder&lt;/td>
 &lt;td>FK resolution review&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!63&lt;/td>
 &lt;td>adipppp&lt;/td>
 &lt;td>JWT alg:none hardening&lt;/td>
 &lt;td>Security review&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="how-i-conduct-code-reviews">
 &lt;a class="anchor" href="#how-i-conduct-code-reviews" data-anchor="how-i-conduct-code-reviews" aria-hidden="true">#&lt;/a>
 How I Conduct Code Reviews
&lt;/h2>
&lt;p>Reviewing 10 MRs in a single week is only feasible because of a structured AI-assisted workflow. I use two Claude Code plugins depending on the MR type, then manually filter and post the findings.&lt;/p></description></item><item><title>PPL: Communication and Knowledge Sharing [Sprint 1, Week 3]</title><link>https://blog.abhipraya.dev/ppl/part-c/s1w3-communication/</link><pubDate>Tue, 10 Mar 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-c/s1w3-communication/</guid><description>&lt;h2 id="overview">
 &lt;a class="anchor" href="#overview" data-anchor="overview" aria-hidden="true">#&lt;/a>
 Overview
&lt;/h2>
&lt;p>This week&amp;rsquo;s communication contributions fall into five categories: detailed code reviews, merge coordination, issue tracking, direct code contributions to teammates&amp;rsquo; MRs, and proactive Discord communication to unblock the team.&lt;/p>
&lt;hr>
&lt;h2 id="1-detailed-code-reviews-with-actionable-fixes">
 &lt;a class="anchor" href="#1-detailed-code-reviews-with-actionable-fixes" data-anchor="1-detailed-code-reviews-with-actionable-fixes" aria-hidden="true">#&lt;/a>
 1. Detailed Code Reviews with Actionable Fixes
&lt;/h2>
&lt;p>Reviewed 15 MRs this week. Each review goes beyond surface-level &amp;ldquo;LGTM&amp;rdquo;: they include issue categorization (Critical/Important), before/after code snippets, and concrete suggested fixes that the MR owner can directly apply.&lt;/p></description></item><item><title>PPL: Code Review Across Architecture and Runtime Bugs [Sprint 1, Week 2]</title><link>https://blog.abhipraya.dev/ppl/part-b/s1w2-code-review/</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-b/s1w2-code-review/</guid><description>&lt;h2 id="overview">
 &lt;a class="anchor" href="#overview" data-anchor="overview" aria-hidden="true">#&lt;/a>
 Overview
&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>MR&lt;/th>
 &lt;th>Feature&lt;/th>
 &lt;th>Issues&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/10">!10&lt;/a> - SIRA-31&lt;/td>
 &lt;td>Payment recording (dafandikri)&lt;/td>
 &lt;td>2&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/12">!12&lt;/a> - SIRA-30&lt;/td>
 &lt;td>Invoice management (froklax)&lt;/td>
 &lt;td>7&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/17">!17&lt;/a> - SIRA-29&lt;/td>
 &lt;td>Client management (fadhli)&lt;/td>
 &lt;td>1&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/20">!20&lt;/a> - SIRA-27&lt;/td>
 &lt;td>Layout and dashboard (haliza)&lt;/td>
 &lt;td>1&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>11 issues total. Each review included specific file and line references.&lt;/p>
&lt;hr>
&lt;h2 id="mr-10---payment-recording-2-issues">
 &lt;a class="anchor" href="#mr-10---payment-recording-2-issues" data-anchor="mr-10---payment-recording-2-issues" aria-hidden="true">#&lt;/a>
 MR !10 - Payment Recording (2 issues)
&lt;/h2>
&lt;p>&lt;strong>Issue 1: &lt;code>.single()&lt;/code> causes an unhandled 500 on missing records.&lt;/strong>&lt;/p>
&lt;p>&lt;code>get_payment_by_id&lt;/code> used &lt;code>.single()&lt;/code> which throws &lt;code>PostgRESTError (PGRST116)&lt;/code> when no row is found, making the &lt;code>if payment is None&lt;/code> guard below it dead code. The fix is &lt;code>.maybe_single()&lt;/code>, which returns &lt;code>None&lt;/code> cleanly. The same fix was already applied in MR !23 for &lt;code>app_users.py&lt;/code>.&lt;/p></description></item></channel></rss>