<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Git on Daffa Abhipraya</title><link>https://blog.abhipraya.dev/tags/git/</link><description>Recent content in Git on Daffa Abhipraya</description><generator>Hugo</generator><language>en-us</language><copyright>© Daffa Abhipraya</copyright><lastBuildDate>Fri, 13 Mar 2026 00:00:00 +0700</lastBuildDate><atom:link href="https://blog.abhipraya.dev/tags/git/index.xml" rel="self" type="application/rss+xml"/><item><title>PPL: Development Discipline [Sprint 1, Week 3]</title><link>https://blog.abhipraya.dev/ppl/part-b/s1w3-discipline/</link><pubDate>Fri, 13 Mar 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-b/s1w3-discipline/</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>Sprint 1 Week 3 was the highest-output week of the project so far. I authored and merged &lt;strong>14 merge requests&lt;/strong> covering full-stack features, CI/CD pipeline improvements, production infrastructure fixes, and data integrity patches.&lt;/p>
&lt;h2 id="mr-summary">
 &lt;a class="anchor" href="#mr-summary" data-anchor="mr-summary" aria-hidden="true">#&lt;/a>
 MR Summary
&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>MR&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Title&lt;/th>
 &lt;th>Date&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>!20&lt;/td>
 &lt;td>feat&lt;/td>
 &lt;td>Layout, navigation &amp;amp; dashboard (full stack)&lt;/td>
 &lt;td>Mar 7&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!47&lt;/td>
 &lt;td>feat&lt;/td>
 &lt;td>Seed production admin and staff users with Nashta emails&lt;/td>
 &lt;td>Mar 7&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!12&lt;/td>
 &lt;td>feat&lt;/td>
 &lt;td>Invoice management (full stack)&lt;/td>
 &lt;td>Mar 8&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!54&lt;/td>
 &lt;td>feat&lt;/td>
 &lt;td>Add Payments link to sidebar navigation&lt;/td>
 &lt;td>Mar 8&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!66&lt;/td>
 &lt;td>fix&lt;/td>
 &lt;td>Rename out-of-order migration timestamps to unblock CI deploy&lt;/td>
 &lt;td>Mar 9&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!67&lt;/td>
 &lt;td>feat&lt;/td>
 &lt;td>Add migration dry-run validation to MR pipelines&lt;/td>
 &lt;td>Mar 9&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!68&lt;/td>
 &lt;td>fix&lt;/td>
 &lt;td>Add missing ENCRYPTION_KEY to deploy env generation&lt;/td>
 &lt;td>Mar 9&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!71&lt;/td>
 &lt;td>fix&lt;/td>
 &lt;td>Add proxy-headers to uvicorn for HTTPS redirect support&lt;/td>
 &lt;td>Mar 10&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!74&lt;/td>
 &lt;td>chore&lt;/td>
 &lt;td>Add Conductor workspace support&lt;/td>
 &lt;td>Mar 11&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!76&lt;/td>
 &lt;td>fix&lt;/td>
 &lt;td>Resolve invoice seeder subquery returning multiple rows&lt;/td>
 &lt;td>Mar 11&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!77&lt;/td>
 &lt;td>fix&lt;/td>
 &lt;td>Deduplicate invoice numbers in seed CSV&lt;/td>
 &lt;td>Mar 11&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!78&lt;/td>
 &lt;td>fix&lt;/td>
 &lt;td>Polish sidebar, header, profile edit, and invoices page consistency&lt;/td>
 &lt;td>Mar 11&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!79&lt;/td>
 &lt;td>fix&lt;/td>
 &lt;td>Remove sidebar header bottom border&lt;/td>
 &lt;td>Mar 11&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>!17&lt;/td>
 &lt;td>feat&lt;/td>
 &lt;td>Client management (full stack, merged by me)&lt;/td>
 &lt;td>Mar 9&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="breakdown-by-category">
 &lt;a class="anchor" href="#breakdown-by-category" data-anchor="breakdown-by-category" aria-hidden="true">#&lt;/a>
 Breakdown by category
&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Full-stack features:&lt;/strong> 4 MRs (!20, !12, !54, !17)&lt;/li>
&lt;li>&lt;strong>CI/CD pipeline:&lt;/strong> 3 MRs (!66, !67, !68)&lt;/li>
&lt;li>&lt;strong>Infrastructure:&lt;/strong> 2 MRs (!71, !74)&lt;/li>
&lt;li>&lt;strong>Data integrity:&lt;/strong> 3 MRs (!47, !76, !77)&lt;/li>
&lt;li>&lt;strong>UI polish:&lt;/strong> 2 MRs (!78, !79)&lt;/li>
&lt;/ul>
&lt;h2 id="commit-message-quality">
 &lt;a class="anchor" href="#commit-message-quality" data-anchor="commit-message-quality" aria-hidden="true">#&lt;/a>
 Commit Message Quality
&lt;/h2>
&lt;p>Every commit follows the conventional commits format: &lt;code>type(scope): description&lt;/code>. The scope tells you exactly which app/layer is affected, and the description is specific enough to understand the change without reading the diff.&lt;/p></description></item></channel></rss>