<?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: Roshan</title>
    <description>The latest articles on DEV Community by Roshan (@roshandxt).</description>
    <link>https://dev.to/roshandxt</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%2F4012813%2F28072abf-4215-4e65-9877-e9acda9711be.png</url>
      <title>DEV Community: Roshan</title>
      <link>https://dev.to/roshandxt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/roshandxt"/>
    <language>en</language>
    <item>
      <title>What actually happens when your AI coding session dies mid-refactor</title>
      <dc:creator>Roshan</dc:creator>
      <pubDate>Sun, 20 Sep 2026 18:56:58 +0000</pubDate>
      <link>https://dev.to/roshandxt/what-actually-happens-when-your-ai-coding-session-dies-mid-refactor-o3k</link>
      <guid>https://dev.to/roshandxt/what-actually-happens-when-your-ai-coding-session-dies-mid-refactor-o3k</guid>
      <description>&lt;p&gt;3:47pm. Mid-refactor. "Rate limit reached."&lt;/p&gt;

&lt;p&gt;If you've used Claude Code, Cursor, or any AI coding tool for more than a&lt;br&gt;
few weeks, you've hit this. The model was two files deep into a change,&lt;br&gt;
you had a plan in your head that never made it into a comment or a commit,&lt;br&gt;
and now the session is just... gone. You open a new one, and it knows&lt;br&gt;
nothing.&lt;/p&gt;

&lt;p&gt;I got tired of this happening to me, so I spent a while looking at what&lt;br&gt;
actually survives a dead AI session and what doesn't — and building a tool&lt;br&gt;
around the answer. This post is about the "what doesn't survive" part,&lt;br&gt;
because I think it's more interesting than the tool itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's actually lost when a session dies
&lt;/h2&gt;

&lt;p&gt;Three different things get conflated under "context," and they behave&lt;br&gt;
completely differently when a session ends:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. What's on disk.&lt;/strong&gt; Your git diff, the files you touched, your commit&lt;br&gt;
history. This survives everything — a crash, a rate limit, an accidental&lt;br&gt;
window close. It's also the &lt;em&gt;least&lt;/em&gt; useful part on its own, because a diff&lt;br&gt;
tells you &lt;em&gt;what&lt;/em&gt; changed, not &lt;em&gt;why&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. What was in the model's context window.&lt;/strong&gt; Prior turns, tool calls,&lt;br&gt;
files it read. This is gone the instant the session ends, full stop.&lt;br&gt;
There's no API that hands you back a dead session's context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. What was in your head.&lt;/strong&gt; The plan, the constraint you were working&lt;br&gt;
around, the two approaches you already tried and rejected. This is the&lt;br&gt;
part that actually matters for picking up where you left off — and it's&lt;br&gt;
the part that was never written down anywhere, in disk or in the model's&lt;br&gt;
memory.&lt;/p&gt;

&lt;p&gt;Most "session recovery" approaches focus on #1 because it's the only one&lt;br&gt;
that's technically easy — read the git diff, dump it into the next&lt;br&gt;
session's context, done. But a diff without the "why" behind it is why&lt;br&gt;
handoffs between AI tools (or between you and a fresh session of the same&lt;br&gt;
tool) feel so lossy: the new session can see &lt;em&gt;what&lt;/em&gt; changed, but has to&lt;br&gt;
re-derive &lt;em&gt;why&lt;/em&gt;, which is exactly the part that took the most thinking the&lt;br&gt;
first time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's actually recoverable, and how
&lt;/h2&gt;

&lt;p&gt;The disk-scan part is straightforward: diff, changed files, a dependency&lt;br&gt;
graph so the next session knows what's risky to touch (impact radius, not&lt;br&gt;
just "these files changed").&lt;/p&gt;

&lt;p&gt;The harder part is #3 — and the only way to get it back is if something&lt;br&gt;
was actually watching the conversation, not just the disk, before the&lt;br&gt;
session died. That's the piece most tooling skips, because it means&lt;br&gt;
hooking into each tool's session/transcript format individually rather&lt;br&gt;
than just reading files.&lt;/p&gt;

&lt;p&gt;I ended up building this as ShardStitch — the name is literal: it shards&lt;br&gt;
a session into its parts (diff, files, dependency graph, and the intent&lt;br&gt;
behind them) and stitches those back into a formatted handoff for&lt;br&gt;
whatever tool picks up next. It keeps a local, always-on vault of session&lt;br&gt;
transcripts too (so a rate-limit or crash doesn't also delete the&lt;br&gt;
conversation, which some tools do), and on handoff distills that into&lt;br&gt;
intent, decisions made, and things already tried and rejected — not just&lt;br&gt;
"here's the diff." It's local-only, 23 target tools, free CLI scan for&lt;br&gt;
anyone who just wants the git-diff-plus-dependency-graph part without the&lt;br&gt;
transcript layer.&lt;/p&gt;

&lt;p&gt;Repo's here if you want to see how the disk-scan side works:&lt;br&gt;
&lt;a href="https://github.com/shardstitch/shardstitch" rel="noopener noreferrer"&gt;https://github.com/shardstitch/shardstitch&lt;/a&gt; — and the tool itself is at&lt;br&gt;
&lt;a href="https://shardstitch.com" rel="noopener noreferrer"&gt;https://shardstitch.com&lt;/a&gt; if the transcript-recovery part is useful to you.&lt;/p&gt;

&lt;h2&gt;
  
  
  The actual question worth asking
&lt;/h2&gt;

&lt;p&gt;If you're building anything AI-agent-adjacent: what's your session losing&lt;br&gt;
right now that isn't on disk? For most setups the honest answer is "the&lt;br&gt;
reasoning," and that's usually the expensive part to reconstruct. Curious&lt;br&gt;
what other people have done here — CLAUDE.md/AGENTS.md conventions,&lt;br&gt;
custom hooks, anything else that's worked for you.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>showdev</category>
      <category>llm</category>
    </item>
    <item>
      <title>How I verified that an image resizer processes files locally</title>
      <dc:creator>Roshan</dc:creator>
      <pubDate>Mon, 31 Aug 2026 23:43:20 +0000</pubDate>
      <link>https://dev.to/roshandxt/how-i-verified-that-an-image-resizer-processes-files-locally-4j56</link>
      <guid>https://dev.to/roshandxt/how-i-verified-that-an-image-resizer-processes-files-locally-4j56</guid>
      <description>&lt;p&gt;Many online image tools begin with the same instruction: upload your file.&lt;/p&gt;

&lt;p&gt;That is convenient, but it also means trusting an unfamiliar server with profile photos, identity documents, application images, or private screenshots. When I built &lt;a href="https://shard.tools/" rel="noopener noreferrer"&gt;Shard Tools&lt;/a&gt;, I wanted the image-processing step to happen inside the browser instead.&lt;/p&gt;

&lt;p&gt;I also wanted that claim to be inspectable rather than another privacy slogan.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the resizer does
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://shard.tools/tools/resize-image-to-200x200" rel="noopener noreferrer"&gt;200×200 image resizer&lt;/a&gt; creates an image that is exactly 200 pixels wide and 200 pixels high.&lt;/p&gt;

&lt;p&gt;A rectangular image cannot become square without making a choice. The tool provides two:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Crop to fill&lt;/strong&gt; preserves the aspect ratio and removes the overflow around a centered square.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fit with background&lt;/strong&gt; preserves the complete image and fills the remaining space with a selected background color.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It does not stretch the width and height independently. That would technically produce a 200×200 file, but faces, logos, circles, and text would be distorted.&lt;/p&gt;

&lt;p&gt;The width and height remain editable for forms that require a different exact size.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens inside the browser
&lt;/h2&gt;

&lt;p&gt;After you choose a file, the browser decodes it locally and reads its visible orientation. This prevents phone photos from being processed sideways.&lt;/p&gt;

&lt;p&gt;Crop-to-fill enlarges the image until it covers the square, then removes the overflow. Fit-with-background scales the complete image into the square and fills the remaining space. Both approaches preserve the original aspect ratio.&lt;/p&gt;

&lt;p&gt;The browser draws the result onto a new 200×200 canvas and creates a temporary download link inside the current tab. The selected image does not need to be sent to Shard Tools for processing.&lt;/p&gt;

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

&lt;p&gt;During the latest release check, I processed a PNG and verified that the generated result reported an actual width and height of &lt;strong&gt;200×200 pixels&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The interface displays dimensions read from the generated output rather than assuming that the requested size was produced. It also reports the output file size before download.&lt;/p&gt;

&lt;p&gt;This test verifies the pixel dimensions. It does not claim that a 200×200 image meets passport or biometric-photo requirements, and it does not guarantee a particular file size in KB.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making the privacy claim testable
&lt;/h2&gt;

&lt;p&gt;I built a separate &lt;a href="https://shard.tools/privacy-proof" rel="noopener noreferrer"&gt;live privacy-proof page&lt;/a&gt; that performs a real 200×200 resize while measuring data-capable browser requests immediately before and after processing.&lt;/p&gt;

&lt;p&gt;The measurement watches requests initiated through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;fetch&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;XMLHttpRequest&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sendBeacon&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the difference is zero, the image-processing action added no request through those mechanisms that could carry the selected image away.&lt;/p&gt;

&lt;p&gt;You can check this independently:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open your browser’s developer tools.&lt;/li&gt;
&lt;li&gt;Select the Network panel and clear its request list.&lt;/li&gt;
&lt;li&gt;Run the built-in sample or choose an image.&lt;/li&gt;
&lt;li&gt;Inspect any requests added during processing.&lt;/li&gt;
&lt;li&gt;Confirm that the output uses a local &lt;code&gt;blob:&lt;/code&gt; URL rather than an upload response.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  An important limitation
&lt;/h2&gt;

&lt;p&gt;The proof does &lt;strong&gt;not&lt;/strong&gt; claim that the entire webpage makes zero network requests.&lt;/p&gt;

&lt;p&gt;The page still downloads its HTML, JavaScript, CSS, fonts, advertisements, and external directory badges. Those third-party hosts are disclosed in the live page report.&lt;/p&gt;

&lt;p&gt;The narrower claim is the useful one: selecting and processing an image should not add an upload request.&lt;/p&gt;

&lt;p&gt;The request counter is an observable browser measurement, not a formal security proof. That is why the page explains what it measures and encourages visitors to verify the result in the Network panel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this distinction matters
&lt;/h2&gt;

&lt;p&gt;“Runs locally” should describe an observable boundary, not just marketing copy.&lt;/p&gt;

&lt;p&gt;For this tool, selecting, decoding, resizing, previewing, encoding, and creating the download all happen through browser APIs. The server provides the application, but it does not need the selected image to produce the result.&lt;/p&gt;

&lt;p&gt;Try the &lt;a href="https://shard.tools/tools/resize-image-to-200x200" rel="noopener noreferrer"&gt;200×200 image resizer&lt;/a&gt;, or inspect the process using the &lt;a href="https://shard.tools/privacy-proof" rel="noopener noreferrer"&gt;privacy-proof page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I would especially appreciate feedback about the measurement, its limitations, and anything the disclosure should explain more clearly.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>privacy</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I asked 50+ developers what they do when their AI session dies mid-task. Here's what I found.</title>
      <dc:creator>Roshan</dc:creator>
      <pubDate>Thu, 02 Jul 2026 22:15:58 +0000</pubDate>
      <link>https://dev.to/roshandxt/i-asked-50-developers-what-they-do-when-their-ai-session-dies-mid-task-heres-what-i-found-495i</link>
      <guid>https://dev.to/roshandxt/i-asked-50-developers-what-they-do-when-their-ai-session-dies-mid-task-heres-what-i-found-495i</guid>
      <description>&lt;p&gt;Not a product pitch  just research notes from talking to a lot of people.&lt;br&gt;
I've been building in the AI coding tools space and wanted to understand one specific moment: your session hits a limit, gets deleted, or just goes stale. What do you actually do?&lt;/p&gt;

&lt;p&gt;I posted in a bunch of developer communities and talked to people directly. A few things surprised me.&lt;/p&gt;

&lt;p&gt;The power users aren't your best signal&lt;br&gt;
Developers with sophisticated workflows custom handoff skills, AGENTS.md discipline, tmux harnesses — described the pain clearly but had already built their own fix. They're not looking for a tool. They're looking for a better version of what they made.&lt;/p&gt;

&lt;p&gt;The people who described the pain most vividly were non-technical: a tax lawyer doing no-code projects, a school admin. No workaround, no jargon — just "I have to explain everything from scratch and it's exhausting."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nobody trusts the transcript&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Almost everyone said the same thing unprompted: the chat history isn't reliable. It carries old failed attempts, wrong assumptions, things the AI said confidently that turned out to be wrong. The people with the best workflows kept the working state outside the chat — git diff, changed files, a short note about what actually worked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The moment that resonates&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"What do you do when your AI session dies mid-task and you have to explain everything to a new tool from scratch?"&lt;/p&gt;

&lt;p&gt;That question got strong reactions every time. Not "context management" or "handoff tooling"  those got polite nods. The specific painful moment got people telling stories.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
