<?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>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>
