<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Amirhossein Kamalzadeh</title>
    <description>The latest articles on DEV Community by Amirhossein Kamalzadeh (@amirhosseinkz).</description>
    <link>https://dev.to/amirhosseinkz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4219049%2F8b2e441f-1957-40e1-9581-d4ee6505cff6.jpg</url>
      <title>DEV Community: Amirhossein Kamalzadeh</title>
      <link>https://dev.to/amirhosseinkz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/amirhosseinkz"/>
    <language>en</language>
    <item>
      <title>Your git history already knows what you did</title>
      <dc:creator>Amirhossein Kamalzadeh</dc:creator>
      <pubDate>Sat, 31 Oct 2026 13:17:06 +0000</pubDate>
      <link>https://dev.to/amirhosseinkz/your-git-history-already-knows-what-you-did-9ga</link>
      <guid>https://dev.to/amirhosseinkz/your-git-history-already-knows-what-you-did-9ga</guid>
      <description>&lt;p&gt;Every team I've worked with has the same gap. The tracker says one thing, and git says another. By the end of a sprint, the board is a guess.&lt;/p&gt;

&lt;p&gt;We use &lt;a href="https://plane.so" rel="noopener noreferrer"&gt;Plane&lt;/a&gt;, self-hosted. Our work happens in the terminal, more and more through a coding agent, and in git. Typing it all into Plane afterwards is the chore nobody does.&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea
&lt;/h2&gt;

&lt;p&gt;Git already records what changed, when, and by whom. Conventional commits even say &lt;em&gt;what kind&lt;/em&gt; of change: &lt;code&gt;fix(auth): ...&lt;/code&gt; or &lt;code&gt;feat(billing): ...&lt;/code&gt;. Instead of asking people to update the tracker, read the history and propose the tracker entries.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/amirhosseinkz/plane-workflow-mcp" rel="noopener noreferrer"&gt;plane-workflow-mcp&lt;/a&gt; is an MCP server and CLI for Plane. It works with Claude Code, Codex, Cursor, Claude Desktop, OpenCode, and Zed. The backfill flow has four steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Plan (read-only).&lt;/strong&gt; It runs &lt;code&gt;git log&lt;/code&gt; locally and groups commits into work items: first by a path map you give it (&lt;code&gt;apps/web/&lt;/code&gt; → Web), then by commit scope, then by folder. A group splits when work pauses for more than a few days.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Date.&lt;/strong&gt; Start and target dates come from the first and last commit. They're moved onto the project's business days, so weekend commits land on a working day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review.&lt;/strong&gt; You (or your agent) rename, regroup, or skip items. Nothing is written yet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apply.&lt;/strong&gt; Each item is created, started on its real first-commit date, and completed with a comment listing its commits.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftnpic226tbdaa4dcrtdy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftnpic226tbdaa4dcrtdy.gif" alt="Backfill demo: the plan as a table, then the items created in Plane" width="720" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What broke when I ran it on real projects
&lt;/h2&gt;

&lt;p&gt;I spent a day backfilling several real projects. Everything that broke became a fix:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rate limits.&lt;/strong&gt; Plane returns 429 quickly when you create, start, and complete dozens of items. Requests now back off and honor &lt;code&gt;Retry-After&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timeouts that succeed.&lt;/strong&gt; A create can time out on the client and still succeed on the server. A naive retry duplicates it. Every create now carries a stable &lt;code&gt;external_id&lt;/code&gt; derived from the item's first commit, so a retry, or a whole re-run, finds the existing item instead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Misleading errors.&lt;/strong&gt; A 429 used to surface as "work item not found". Now only a real 404 says that.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Projects without estimates.&lt;/strong&gt; Strict planning mapped complexity to estimate points that didn't exist, and Plane answered with a bare 400. Now you get a sentence telling you what to change.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Honesty rules
&lt;/h2&gt;

&lt;p&gt;A backfilled item is not a verified one. The completion comment says the evidence is the commits and that no tests were run during the backfill. Plane stamps &lt;code&gt;completed_at&lt;/code&gt; with the current time, so the real dates live in the start and target dates and in the comment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv tool &lt;span class="nb"&gt;install &lt;/span&gt;plane-workflow-mcp
plane-workflow setup &lt;span class="nt"&gt;--client&lt;/span&gt; claude-code     &lt;span class="c"&gt;# or codex, cursor, claude-desktop&lt;/span&gt;
plane-workflow backfill &lt;span class="nt"&gt;--since&lt;/span&gt; 2026-09-01    &lt;span class="c"&gt;# prints the plan; add --apply to write&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or ask your agent:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Read this repo's git history since September 1 and propose Plane work items with plan_git_backfill. Show me the plan as a table. Don't write anything until I approve.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Day to day, the same server plans, starts, and completes work items under your team's rules (assignee, labels, estimates, business-day dates), with dry-run previews and briefings on overdue and unassigned work.&lt;/p&gt;

&lt;p&gt;It's MIT licensed, a community project, and not affiliated with Plane. If you use Plane, I'd like to hear where your tracker drifts from reality most. Issues and stars on &lt;a href="https://github.com/amirhosseinkz/plane-workflow-mcp" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; are very welcome.&lt;/p&gt;

</description>
      <category>git</category>
      <category>opensource</category>
      <category>productivity</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
