<?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: z</title>
    <description>The latest articles on DEV Community by z (@zmp).</description>
    <link>https://dev.to/zmp</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%2F4199214%2F823f7e04-4b8f-4476-a86d-4796dcf519d3.jpg</url>
      <title>DEV Community: z</title>
      <link>https://dev.to/zmp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zmp"/>
    <language>en</language>
    <item>
      <title>Claude, I'm right here.</title>
      <dc:creator>z</dc:creator>
      <pubDate>Mon, 26 Oct 2026 11:06:04 +0000</pubDate>
      <link>https://dev.to/zmp/claude-im-right-here-1dpc</link>
      <guid>https://dev.to/zmp/claude-im-right-here-1dpc</guid>
      <description>&lt;p&gt;I may be biased since I’ve primarily used ChatGPT over the years. But for the last six months I’ve been working with a mix of models, including Claude, and its way of communicating with the human in the loop sometimes feels a bit... pretentious.&lt;/p&gt;

&lt;p&gt;Especially when it’s “thinking” and I see wording along the lines of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“user gave a vague response.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m right here, man.&lt;/p&gt;

&lt;p&gt;And sure, maybe I was vague. Sometimes “go ahead” is the response because we already spent twenty minutes deciding what to do. I thought we had a plan. If something’s still unresolved, tell me which part.&lt;/p&gt;

&lt;p&gt;Instead, I’m reading what feels like a note left in my file.&lt;/p&gt;

&lt;p&gt;I want pushback. If my assumptions don’t hold up, say so. But watching it describe my participation to an imaginary observer is weird. We’re working together, and suddenly I feel like I’m being discussed at a meeting I wasn’t invited to.&lt;/p&gt;

&lt;p&gt;It also makes me curious about the people shaping these tools. I wouldn’t pretend one sentence reveals their private thoughts, and I doubt anyone specifically wrote that line. Still, people make decisions about training, instructions, and what gets shown on screen. The resulting voice deserves some scrutiny. What kind of relationship are they trying to create here?&lt;/p&gt;

&lt;p&gt;Maybe you read that phrase and see a completely normal assessment. Fair. For me, it adds this supervisory feeling to a tool I’m using to build things.&lt;/p&gt;

&lt;p&gt;ChatGPT has its own nonsense. I’ve had years to get used to it, so take my preference for what it is. Someone who primarily uses Claude probably has a complaint about ChatGPT that I barely notice anymore.&lt;/p&gt;

&lt;p&gt;Maybe my response was vague. You could’ve just asked, Claude.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>discuss</category>
      <category>claude</category>
      <category>ux</category>
    </item>
    <item>
      <title>A Prototype Is Not a Product</title>
      <dc:creator>z</dc:creator>
      <pubDate>Fri, 23 Oct 2026 20:25:41 +0000</pubDate>
      <link>https://dev.to/zmp/a-prototype-is-not-a-product-57pn</link>
      <guid>https://dev.to/zmp/a-prototype-is-not-a-product-57pn</guid>
      <description>&lt;p&gt;The CSV imports perfectly. Then someone asks, “What happens if it stops halfway through?”&lt;/p&gt;

&lt;p&gt;That is where this hypothetical demo gets interesting.&lt;/p&gt;

&lt;p&gt;The tool reads a sample file, maps the columns, and saves the expected records. Its local checks pass. There is something real to build on: those cases worked in that environment.&lt;/p&gt;

&lt;p&gt;But if the next person has to open the database to find out which rows were saved, handing over the tool also means handing over a problem.&lt;/p&gt;

&lt;p&gt;A prototype can become the software behind a product. The harder question is what someone can reasonably depend on it to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready for what?
&lt;/h2&gt;

&lt;p&gt;For this importer, the first offer could be modest: one person, one approved file format, and a preview before anything is saved. Rejected rows should be understandable. After an interruption, the person using it should be able to tell what happened and how to recover.&lt;/p&gt;

&lt;p&gt;That is a more useful starting point than “ready for production.” It gives you something specific to investigate without committing to every spreadsheet anyone might upload.&lt;/p&gt;

&lt;p&gt;It also changes what deserves attention next. Another supported format might be useful eventually. If an interrupted import can leave someone guessing whether a retry will create duplicates, recovery deserves attention now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let someone else try it
&lt;/h2&gt;

&lt;p&gt;Suppose you want to find out whether the intended user can handle an import without you explaining every error.&lt;/p&gt;

&lt;p&gt;Give them synthetic files: one valid, one with a row the tool should reject, and one for an import you deliberately interrupt. Decide beforehand what you need to see. In this case, you might want them to identify which records were saved and choose a safe next action without your help.&lt;/p&gt;

&lt;p&gt;Then watch where they get stuck.&lt;/p&gt;

&lt;p&gt;If they need you to translate a rejection message, you have a concrete reason to improve it. If neither of you can tell what was saved after the interruption, the problem goes deeper than wording.&lt;/p&gt;

&lt;p&gt;And if they get through the tasks, you have learned something useful: this person could complete this workflow under the conditions you recorded. Keep the files, software version, and notes about any help you gave them. Those details make the result understandable later.&lt;/p&gt;

&lt;p&gt;You do not need to turn that result into a claim about every user or every file for it to matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting through it is only part of the story
&lt;/h2&gt;

&lt;p&gt;The importer might work exactly as intended and still offer little benefit over the person's existing workflow.&lt;/p&gt;

&lt;p&gt;Ask what they would otherwise do with the file. Where does the rework happen? Would the importer remove it, or move it somewhere else?&lt;/p&gt;

&lt;p&gt;“This would save me time” is useful feedback. It is also an expectation. To make a claim about time saved, you would need to compare the workflows and account for differences such as file complexity, manual cleanup, and help from you.&lt;/p&gt;

&lt;p&gt;A short note can preserve that distinction: what you observed, what the person reported, and what you still need to find out. Then write down what you will change or test next.&lt;/p&gt;

&lt;p&gt;That is enough structure to keep a promising conversation from becoming a success story you have not earned yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Someone has to own the bad day
&lt;/h2&gt;

&lt;p&gt;Before someone relies on the importer for actual work, there are less visible questions to settle. Who helps when it fails? How do they find and correct affected records? When should they stop using it?&lt;/p&gt;

&lt;p&gt;If it handles real data, you also need to decide what gets stored, who can access it, and when it gets deleted. Importing disposable personal notes and writing customer records carry different consequences. The promise should reflect that.&lt;/p&gt;

&lt;p&gt;The prototype does not become less valuable because these questions remain. It has given you a way to investigate them.&lt;/p&gt;

&lt;p&gt;Before adding the next feature, try finishing this sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It works for ___. Before someone depends on it for ___, I need to find out ___.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For the importer, that final blank might be whether someone can recover from an interruption without making the data worse.&lt;/p&gt;

&lt;p&gt;What belongs in the blank for yours?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: AI helped draft and structure this article. The importer and trial are hypothetical; no technical or customer results are reported.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>testing</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Commonfeed 1.4.1: keep the fictional sample clear through completion</title>
      <dc:creator>z</dc:creator>
      <pubDate>Thu, 22 Oct 2026 22:08:22 +0000</pubDate>
      <link>https://dev.to/zmp/commonfeed-141-keep-the-fictional-sample-clear-through-completion-1e0o</link>
      <guid>https://dev.to/zmp/commonfeed-141-keep-the-fictional-sample-clear-through-completion-1e0o</guid>
      <description>&lt;p&gt;Commonfeed is a local RSS and Atom reader built around finite reading sessions. I released 1.4.1 with a small completion-screen fix.&lt;/p&gt;

&lt;p&gt;The sample already labeled its items as fictional while you read them. At completion, it switched to “Private session receipt.” The explanation that no receipt was saved appeared only after feedback.&lt;/p&gt;

&lt;p&gt;Now the completion screen keeps &lt;strong&gt;“Fictional sample session”&lt;/strong&gt; visible, calls the totals a &lt;strong&gt;“Sample session summary,”&lt;/strong&gt; and says before feedback:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;No receipt is saved, even if you give feedback.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This changes the explanation, not the storage behavior. Sample sessions still leave no receipt, and real-session behavior is unchanged.&lt;/p&gt;

&lt;p&gt;I verified a fresh npm installation in the browser: the explanation appeared before feedback, and the isolated data file stayed empty afterward. All 94 tests passed before release.&lt;/p&gt;

&lt;p&gt;Those checks cover the tested sample flow. Long-term reliability and improved reading outcomes remain unproven.&lt;/p&gt;

&lt;p&gt;Try it with Node.js 22+:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx commonfeed@1.4.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://github.com/zacharymplace/commonfeed/releases/tag/v1.4.1" rel="noopener noreferrer"&gt;Read the 1.4.1 release notes&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>node</category>
    </item>
    <item>
      <title>Building inspectable systems: my portfolio, Sentra–Hermes, and five public projects</title>
      <dc:creator>z</dc:creator>
      <pubDate>Thu, 22 Oct 2026 20:41:06 +0000</pubDate>
      <link>https://dev.to/zmp/building-inspectable-systems-my-portfolio-sentra-hermes-and-five-public-projects-25c0</link>
      <guid>https://dev.to/zmp/building-inspectable-systems-my-portfolio-sentra-hermes-and-five-public-projects-25c0</guid>
      <description>&lt;p&gt;I build systems where authority, execution, and evidence stay connected.&lt;/p&gt;

&lt;p&gt;A task can finish and still leave an operating problem. Was it authorized against the right state? Does the evidence support advancing? What happens if the next run inherits something it should not?&lt;/p&gt;

&lt;p&gt;Those are the problems behind my &lt;a href="https://z-systems-builder.zacharyplace.chatgpt.site" rel="noopener noreferrer"&gt;portfolio&lt;/a&gt;. &lt;a href="https://sentra-hermes-case-study.zacharyplace.chatgpt.site" rel="noopener noreferrer"&gt;Sentra–Hermes is the flagship case study&lt;/a&gt;. Five public repositories give you tools to inspect and try.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sentra–Hermes: authority before advancement
&lt;/h2&gt;

&lt;p&gt;Sentra–Hermes explores a bounded lifecycle for governed agent execution:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Readiness → Authorization → Execution → Verification → Advancement → Completion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Hermes name refers to &lt;a href="https://github.com/NousResearch/hermes-agent" rel="noopener noreferrer"&gt;Nous Research’s Hermes Agent&lt;/a&gt;. My contribution is the surrounding operating infrastructure: Sentra’s decision layer, authorization boundaries, readiness checks, verification, and preserved evidence for workflows involving Hermes agents.&lt;/p&gt;

&lt;p&gt;The case study examines this operating infrastructure and its bounded validation. The checkpoint evidence does not establish that Hermes Agent executed those tasks.&lt;/p&gt;

&lt;p&gt;Two failures make the operating problem concrete. One involved candidate selection treating a consumed authorization as live authority, blocking successor intake. Another involved successor state still referencing the predecessor’s execution. The corrections separated historical evidence from live authority and isolated successor activation within a rollback boundary.&lt;/p&gt;

&lt;p&gt;At the documented July 24, 2026 checkpoint:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;13 of 13 repository-integrity checks passed.&lt;/li&gt;
&lt;li&gt;Three of three governed tasks completed.&lt;/li&gt;
&lt;li&gt;Four single-transition authorizations were consumed.&lt;/li&gt;
&lt;li&gt;Predecessor and successor evidence was preserved.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A later &lt;strong&gt;read-only replay of that historical snapshot&lt;/strong&gt; found zero recovery issues. That result is separate from the original checkpoint results.&lt;/p&gt;

&lt;p&gt;This is evidence for a bounded prototype checkpoint. It does not establish general agent safety, production readiness, or current runtime health.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://sentra-hermes-case-study.zacharyplace.chatgpt.site/evidence/index.html" rel="noopener noreferrer"&gt;public evidence guide&lt;/a&gt; includes extracts and provenance. You can inspect the cited records, but the extracts are not the full implementation and are not sufficient to reproduce the entire system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five public projects
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Pick Up Here
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/zacharymplace/pick-up-here" rel="noopener noreferrer"&gt;Pick Up Here&lt;/a&gt; helps you resume work in a Git repository using saved evidence, change comparisons, and optional local AI guidance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prototype release candidate.&lt;/strong&gt; Facts and comparisons work without AI. They help establish what changed; they do not establish runtime correctness.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Commonfeed
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/zacharymplace/commonfeed" rel="noopener noreferrer"&gt;Commonfeed&lt;/a&gt; is a local RSS and Atom reader with finite reading sessions, explained selections, and private feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Published local reader; focused product probe.&lt;/strong&gt; The README includes a fictional sample session. Long-term reliability and improved reading outcomes remain unproven.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Backsolve
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/zacharymplace/backsolve" rel="noopener noreferrer"&gt;Backsolve&lt;/a&gt; records decisions, evidence, tests, and outcomes behind AI-assisted work in Whyfiles and portable archives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Local v0.1 CLI prototype.&lt;/strong&gt; Records are assembled deterministically from explicit captures. The confidence score is a heuristic, not independent verification.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. LineForge
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/zacharymplace/lineforge" rel="noopener noreferrer"&gt;LineForge&lt;/a&gt; turns chess games into annotations, mistake cards, review sessions, and portable study artifacts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Local v0.1 application prototype.&lt;/strong&gt; Coach lenses are deterministic; optional Stockfish analysis is separate. Learning gains and broader usability have not been established.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Hermes Observability
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/zacharymplace/hermes-observability" rel="noopener noreferrer"&gt;Hermes Observability&lt;/a&gt; provides observability standards, structured trace contracts, and local readiness reports for governed workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v0.1 standards and validation tooling.&lt;/strong&gt; A fixture PASS supports the behavior that fixture exercises. It does not establish live ingestion, another repository’s compliance, or production readiness.&lt;/p&gt;

&lt;p&gt;Each README has first-run steps, an example output or development screenshot, and the current limits.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I want feedback on
&lt;/h2&gt;

&lt;p&gt;The common thread is making the next action easier to judge: what can run, what changed, what evidence survives, and where a person needs to make the call.&lt;/p&gt;

&lt;p&gt;The public tools also need to earn their place in someone’s workflow. Passing checks cannot answer that on their own.&lt;/p&gt;

&lt;p&gt;If you try one, I’d like to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Could you follow the first-run instructions?&lt;/li&gt;
&lt;li&gt;Did the example make the intended behavior clear?&lt;/li&gt;
&lt;li&gt;Were the evidence and limits specific enough to judge the claims?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start with the &lt;a href="https://z-systems-builder.zacharyplace.chatgpt.site" rel="noopener noreferrer"&gt;portfolio&lt;/a&gt;, read the &lt;a href="https://sentra-hermes-case-study.zacharyplace.chatgpt.site" rel="noopener noreferrer"&gt;Sentra–Hermes case study&lt;/a&gt;, or pick a repository from my &lt;a href="https://github.com/zacharymplace" rel="noopener noreferrer"&gt;GitHub profile&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>ai</category>
      <category>opensource</category>
      <category>discuss</category>
    </item>
    <item>
      <title>What I learned about matching rows between CSV files</title>
      <dc:creator>z</dc:creator>
      <pubDate>Wed, 21 Oct 2026 22:09:28 +0000</pubDate>
      <link>https://dev.to/zmp/what-i-learned-about-matching-rows-between-csv-files-4edg</link>
      <guid>https://dev.to/zmp/what-i-learned-about-matching-rows-between-csv-files-4edg</guid>
      <description>&lt;h2&gt;
  
  
  Why I started
&lt;/h2&gt;

&lt;p&gt;I started building a CSV comparison tool for my own use and to explore a business idea. I wanted to see where I could improve on standard comparison tools.&lt;/p&gt;

&lt;p&gt;One thing I found frustrating was ambiguous matches. Before comparing values, you need to know which rows belong together.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes a match ambiguous?
&lt;/h2&gt;

&lt;p&gt;Here's a made-up example to illustrate the problem.&lt;/p&gt;

&lt;p&gt;Suppose these are two exports, and I'm using &lt;code&gt;customer_id&lt;/code&gt; to match rows.&lt;/p&gt;

&lt;h3&gt;
  
  
  First export
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;code&gt;customer_id&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;item&lt;/th&gt;
&lt;th&gt;amount&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;Hosting&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;Support&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Second export
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;code&gt;customer_id&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;item&lt;/th&gt;
&lt;th&gt;amount&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;Support&lt;/td&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;Hosting&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Both files have two rows with &lt;code&gt;customer_id&lt;/code&gt; 101. That ID identifies the customer, but it doesn't identify an individual row.&lt;/p&gt;

&lt;p&gt;Matching by row order would compare Hosting with Support and report misleading changes. Looking at the item names makes the likely matches clearer, but &lt;code&gt;customer_id&lt;/code&gt; alone doesn't provide enough information.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I approached it
&lt;/h2&gt;

&lt;p&gt;I settled on matching rows by unique keys, then showing additions, removals, and changes.&lt;/p&gt;

&lt;p&gt;For the example above, a subscription ID could identify each record:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;code&gt;subscription_id&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;customer_id&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;item&lt;/th&gt;
&lt;th&gt;amount&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;sub-001&lt;/td&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;Hosting&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sub-002&lt;/td&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;Support&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If those subscription IDs stay the same in the next export, the rows can be matched even when their order changes. The comparison can then show that Support changed from 50 to 55.&lt;/p&gt;

&lt;p&gt;The key needs to be unique within each file and identify the same record across both files. A row number might be unique, but it won't reliably identify the same record after rows are reordered.&lt;/p&gt;

&lt;p&gt;My approach is to reject duplicate keys rather than guess. The tradeoff is that the person comparing the files needs to find a suitable key or prepare the data first.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm still trying to understand
&lt;/h2&gt;

&lt;p&gt;Tracking rows by unique keys to show additions, removals, and changes is the part I find most useful so far.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What kinds of datasets do you compare repeatedly?&lt;/li&gt;
&lt;li&gt;How often do you compare them?&lt;/li&gt;
&lt;li&gt;What do you use to identify the same record across exports?&lt;/li&gt;
&lt;li&gt;What do you do with the differences afterward?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd be interested in concrete examples, especially where matching gets messy or your current tools fall short.&lt;/p&gt;




&lt;p&gt;Written from my own notes, with AI assistance for organization, wording, and the illustrative example.&lt;/p&gt;

</description>
      <category>csv</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
