<?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: Compound Labs</title>
    <description>The latest articles on DEV Community by Compound Labs (@thecompoundtech).</description>
    <link>https://dev.to/thecompoundtech</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%2F4016803%2F1445050b-62b6-4ea6-93eb-796253d0205c.png</url>
      <title>DEV Community: Compound Labs</title>
      <link>https://dev.to/thecompoundtech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thecompoundtech"/>
    <language>en</language>
    <item>
      <title>KitGrade, RuleStack, SkillWorks and StillShipping</title>
      <dc:creator>Compound Labs</dc:creator>
      <pubDate>Mon, 07 Sep 2026 15:27:36 +0000</pubDate>
      <link>https://dev.to/thecompoundtech/kitgrade-rulestack-skillworks-and-stillshipping-44c3</link>
      <guid>https://dev.to/thecompoundtech/kitgrade-rulestack-skillworks-and-stillshipping-44c3</guid>
      <description>&lt;p&gt;KitGrade, RuleStack, SkillWorks and StillShipping each score what they list, and you can check every score.&lt;/p&gt;

&lt;h2&gt;
  
  
  What these have in common
&lt;/h2&gt;

&lt;p&gt;Each one is a directory that scores what it lists and shows the measurement behind the score. Nothing is hand-graded, and each index is recounted on its own schedule rather than kept by hand.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kitgrade.kynth.studio/kd/7dz2gt" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg9cyq32gubphkvr878gc.png" alt="KitGrade" width="128" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://kitgrade.kynth.studio/kd/7dz2gt" rel="noopener noreferrer"&gt;KitGrade&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  KitGrade
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fxowekqdsttxwbhfxvusa.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fcrosspost%2Fdevto-digest%2Fkynth-devto%2Fkitgrade-rulestack-skillworks-and-stillshipping-kitgrade-hero-1788736581171.png" alt="KitGrade, screenshot of the landing page" width="799" height="362"&gt;&lt;/td&gt;
&lt;td&gt;KitGrade scores SaaS starter kits out of a hundred on a published method, so someone choosing between paid boilerplates can see the evidence before paying. Sixteen kits were cloned, installed and built here, with the transcript published. Nothing is sponsored and no vendor can buy a position.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://kitgrade.kynth.studio/kd/7dz2gt" rel="noopener noreferrer"&gt;kitgrade.kynth.studio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rulestack.kynth.studio/kd/8vrqbu" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F31mw3g6rf5bmxb68akyo.png" alt="RuleStack" width="128" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rulestack.kynth.studio/kd/8vrqbu" rel="noopener noreferrer"&gt;RuleStack&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  RuleStack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fxowekqdsttxwbhfxvusa.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fcrosspost%2Fdevto-digest%2Fkynth-devto%2Fkitgrade-rulestack-skillworks-and-stillshipping-rulestack-hero-1788736581876.png" alt="RuleStack, screenshot of the landing page" width="799" height="362"&gt;&lt;/td&gt;
&lt;td&gt;RuleStack collects the real instruction files people write for coding agents, AGENTS.md, CLAUDE.md, Cursor rules and Copilot instructions, read out of live projects and scored on the text of the file itself. It is for a developer writing one of those files who wants to see what the highest-scoring ones actually contain.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://rulestack.kynth.studio/kd/8vrqbu" rel="noopener noreferrer"&gt;rulestack.kynth.studio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://skillworks.kynth.studio/kd/v0789o" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fea2rtcarkiy8q2z2y51m.png" alt="SkillWorks" width="128" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://skillworks.kynth.studio/kd/v0789o" rel="noopener noreferrer"&gt;SkillWorks&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  SkillWorks
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fxowekqdsttxwbhfxvusa.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fcrosspost%2Fdevto-digest%2Fkynth-devto%2Fkitgrade-rulestack-skillworks-and-stillshipping-skillworks-hero-1788736583039.png" alt="SkillWorks, screenshot of the landing page" width="799" height="362"&gt;&lt;/td&gt;
&lt;td&gt;SkillWorks scores Claude Code skills, subagents, plugins and marketplaces out of a hundred, weighted on whether the thing actually loads, how well it is maintained, how widely it is installed and how it is documented. Anything that fails a check Claude Code needs to register it is published in full rather than dropped.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://skillworks.kynth.studio/kd/v0789o" rel="noopener noreferrer"&gt;skillworks.kynth.studio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stillshipping.kynth.studio/kd/8wc3t0" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2jbhzhxmagh3dfqpi1gt.png" alt="StillShipping" width="128" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stillshipping.kynth.studio/kd/8wc3t0" rel="noopener noreferrer"&gt;StillShipping&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  StillShipping
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fxowekqdsttxwbhfxvusa.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fcrosspost%2Fdevto-digest%2Fkynth-devto%2Fkitgrade-rulestack-skillworks-and-stillshipping-stillshipping-hero-1788736583634.png" alt="StillShipping, screenshot of the landing page" width="799" height="362"&gt;&lt;/td&gt;
&lt;td&gt;StillShipping tells you whether the agent tool you depend on is still being worked on. Orchestrators, spec frameworks, command line agents and IDE extensions each carry one verdict, maintained, slowing or dead, recomputed nightly from six signals. Twelve months of silence forces the dead verdict whatever else the score says.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://stillshipping.kynth.studio/kd/8wc3t0" rel="noopener noreferrer"&gt;stillshipping.kynth.studio&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Send us someone who needs something built.&lt;/strong&gt; $150, fixed, for every client you send whose work goes ahead. One link, no tiers, no portal. &lt;a href="https://kynth.studio/referral" rel="noopener noreferrer"&gt;Get your link&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;One shipped product, taken apart, once a month.&lt;/strong&gt; What it does, what it cost to build, what the pipeline behind it looks like, and what the numbers did, read off the repository and the live site, not written from memory. &lt;a href="https://kynth.studio/list" rel="noopener noreferrer"&gt;Join the list&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>agents</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Exactly one of the five agent frameworks StillShipping compares tells you on its own front page that it has stopped taking new features</title>
      <dc:creator>Compound Labs</dc:creator>
      <pubDate>Sun, 06 Sep 2026 11:20:55 +0000</pubDate>
      <link>https://dev.to/thecompoundtech/exactly-one-of-the-five-agent-frameworks-stillshipping-compares-tells-you-on-its-own-front-page-1p0m</link>
      <guid>https://dev.to/thecompoundtech/exactly-one-of-the-five-agent-frameworks-stillshipping-compares-tells-you-on-its-own-front-page-1p0m</guid>
      <description>&lt;p&gt;You can pick an agent framework this month and not find out for another year that the people who wrote it have stopped adding to it. Of the five frameworks StillShipping puts side by side, one states its own maintenance status on its front page. The other four publish nothing about it.&lt;/p&gt;

&lt;p&gt;The one that does is AutoGen, in its own words, read off its README on 2026-09-04: "Maintenance mode. AutoGen is now in maintenance mode. It will not receive new features or enhancements and is community managed going forward. New users should start with Microsoft Agent Framework."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://xowekqdsttxwbhfxvusa.supabase.co/storage/v1/object/public/crosspost/proof-stillshipping/proof-stillshipping-short.mp4" rel="noopener noreferrer"&gt;Watch the StillShipping, Which agent tools have stopped shipping? Freshness verdicts, recomputed nightly. demo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What StillShipping is
&lt;/h2&gt;

&lt;p&gt;StillShipping is a freshness board for agent tooling: orchestrators, spec frameworks, command line agents, IDE extensions. Every tracked tool carries one of three verdicts, maintained, stale or dead, and every verdict is recomputed each night at 02:00 by &lt;code&gt;ops/refresh.mjs&lt;/code&gt; from the GitHub API. It's for a developer choosing between two frameworks, or already depending on one and wanting to know whether anyone is still there. What you get is a row per tool with a score out of 100 and every signal that produced it, a page of the ones that have stopped, a page stating the scoring rules, and the same data as JSON. Reading it is free. There's no key, no account, and no cap on how often you can call it.&lt;/p&gt;

&lt;p&gt;The score is built from what the API can actually see. A push inside a week starts a row at 100, inside a month 92, a quarter 72, six months 55, a year 32, two years 12. Past 365 days of silence the dead verdict is forced whatever the rest says, and an archived project drops to 0 immediately. 65 and above is maintained, 25 and below is dead, and the gap between them is stale.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl6qzqwte1piemcxrioej.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl6qzqwte1piemcxrioej.png" alt="Dashboard table of tracked software tools with status, category and maintenance scores, How the dashboard visually organizes tools, categories and maintenance verdicts with color coding." width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The release signal costs 12 points, or 2
&lt;/h2&gt;

&lt;p&gt;A project that tagged a release every 40 days and hasn't tagged one in 300 loses 12. A project that has never tagged a release at all loses 2. The reason sits in the comment above the branch in &lt;code&gt;ops/score.mjs&lt;/code&gt;: the absence of a habit is not the breaking of one. Something with no releases is unreadable on that axis, not evidently dead, so the heavy penalty stays reserved for a project that had a cadence and broke it.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;What its README publishes about its own maintenance&lt;/th&gt;
&lt;th&gt;What it publishes instead&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AutoGen&lt;/td&gt;
&lt;td&gt;Maintenance mode, with a named successor&lt;/td&gt;
&lt;td&gt;A migration guide to that successor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LangChain&lt;/td&gt;
&lt;td&gt;Not published&lt;/td&gt;
&lt;td&gt;Routing advice inside its own ecosystem&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CrewAI&lt;/td&gt;
&lt;td&gt;Not published&lt;/td&gt;
&lt;td&gt;Adoption, "over 100,000 developers certified through our community courses"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Spec Kit&lt;/td&gt;
&lt;td&gt;Not published&lt;/td&gt;
&lt;td&gt;An "Experimental goals" section on what its authors are researching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;BMAD-METHOD&lt;/td&gt;
&lt;td&gt;Not published&lt;/td&gt;
&lt;td&gt;Prerelease builds and setup, in a separate installation guide&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every cell was read off the project's own front page on 2026-09-04.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqzi7qzauxsu1hx7wshni.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqzi7qzauxsu1hx7wshni.png" alt="StillShipping, the board: every tool on the board with its verdict, its score and the silence behind it, rescored on the date shown." width="799" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The cells re-check themselves
&lt;/h2&gt;

&lt;p&gt;Each quoted cell stores the source URL, the date it was read, and a literal string that has to still be on the page for the figure to still be true. &lt;code&gt;ops/qa/compare-gate.mjs --verify&lt;/code&gt; re-fetches every source and fails on a missing string. On 2026-09-02 it caught one: CrewAI's README had moved from &lt;code&gt;uv pip install crewai&lt;/code&gt; to &lt;code&gt;uv tool install crewai&lt;/code&gt;, and the &lt;code&gt;crewai[tools]&lt;/code&gt; extra was gone from the file entirely.&lt;/p&gt;

&lt;p&gt;Here is the board: &lt;a href="https://stillshipping.kynth.studio/kd" rel="noopener noreferrer"&gt;https://stillshipping.kynth.studio/kd&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;One shipped product, taken apart, once a month.&lt;/strong&gt; What it does, what it cost to build, what the pipeline behind it looks like, and what the numbers did, read off the repository and the live site, not written from memory. &lt;a href="https://kynth.studio/list" rel="noopener noreferrer"&gt;Join the list&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>aiagents</category>
      <category>opensource</category>
      <category>ai</category>
      <category>github</category>
    </item>
    <item>
      <title>Popwire's unsubscribe link writes nothing when it is opened, because a scanner opens it first</title>
      <dc:creator>Compound Labs</dc:creator>
      <pubDate>Sun, 06 Sep 2026 10:30:37 +0000</pubDate>
      <link>https://dev.to/thecompoundtech/popwires-unsubscribe-link-writes-nothing-when-it-is-opened-because-a-scanner-opens-it-first-380m</link>
      <guid>https://dev.to/thecompoundtech/popwires-unsubscribe-link-writes-nothing-when-it-is-opened-because-a-scanner-opens-it-first-380m</guid>
      <description>&lt;p&gt;Mail security software at large companies opens every link in a message before the person it was sent to ever sees it. If the unsubscribe link in a newsletter footer takes effect the moment it is opened, that reader is off the list at delivery, and nobody gets an error to look at.&lt;/p&gt;

&lt;p&gt;The reader never asked to leave. They wait for an email that stopped coming, and on the sending side the list just gets smaller with a clean log behind it. The same gateway opens the confirmation link in a double opt-in message, which means a subscription can be confirmed before the human it was sent to has opened the mail.&lt;/p&gt;

&lt;p&gt;Popwire is one trending story per post, ranked by view count, with the outlets that reported it named on the post. It sends one email each morning at 07:50 carrying the day's eight highest-ranked stories, batched out through Resend a hundred addresses at a time, each message personalised with that reader's own unsubscribe link.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://xowekqdsttxwbhfxvusa.supabase.co/storage/v1/object/public/crosspost/proof-popwire/proof-popwire-short.mp4" rel="noopener noreferrer"&gt;Watch the Popwire, One trending story per post, ranked by views, with the outlets that reported it named demo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Both links ask before they act
&lt;/h2&gt;

&lt;p&gt;The confirmation link and the unsubscribe link answer an opened link with a page that has one button on it and nothing else. Nothing is written down until that button is pressed and the browser sends the answer back. The page tells the reader why, in the words they see: "We ask because automated mail scanners follow links in email, and we would rather not unsubscribe you by accident."&lt;/p&gt;

&lt;p&gt;Every digest also carries the two headers a mail client reads to put its own Unsubscribe control at the top of the message. That control does not open anything. It sends its answer directly, which is what the one-click standard for it was written to do, and Popwire answers it with a bare acknowledgement and no page at all. So the reader who wants out in one press gets one press, and the machine reading their mail gets a button it has no way to press.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;In the message&lt;/th&gt;
&lt;th&gt;What opening it does&lt;/th&gt;
&lt;th&gt;What actually writes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Confirmation link&lt;/td&gt;
&lt;td&gt;renders a page with one button&lt;/td&gt;
&lt;td&gt;the button being pressed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unsubscribe link in the footer&lt;/td&gt;
&lt;td&gt;renders a page with one button&lt;/td&gt;
&lt;td&gt;the button being pressed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The mail client's own Unsubscribe control&lt;/td&gt;
&lt;td&gt;nothing is opened&lt;/td&gt;
&lt;td&gt;the client's own answer, acknowledged with no page&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A link wrapped or cut short in transit&lt;/td&gt;
&lt;td&gt;a page reading "That link didn't work"&lt;/td&gt;
&lt;td&gt;nothing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F50pbamcos32977shy968.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F50pbamcos32977shy968.png" alt="Split-screen design with mailbox illustration and headline with three bullet points explaining mail scanner behavior, Visual hierarchy and structured layout make the security problem immediately scannable and concrete." width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The link a mail client broke on the way
&lt;/h2&gt;

&lt;p&gt;Long addresses get wrapped across lines by mail clients, and the code in each link is a fixed shape. Popwire checks that shape before the database is asked anything, so a mangled link comes back as a page saying the link didn't work, with an offer to remove the address by hand. Handed straight to the database, the same mangled value returns a type error and the reader gets a server error page for a link they did nothing wrong with.&lt;/p&gt;

&lt;p&gt;Both pages are also marked not to be indexed, on the page itself and in the response, because the address carries a code belonging to one subscriber.&lt;/p&gt;

&lt;p&gt;Here is the wire: &lt;a href="https://popwire.kynth.studio/kd" rel="noopener noreferrer"&gt;https://popwire.kynth.studio/kd&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;One shipped product, taken apart, once a month.&lt;/strong&gt; What it does, what it cost to build, what the pipeline behind it looks like, and what the numbers did, read off the repository and the live site, not written from memory. &lt;a href="https://kynth.studio/list" rel="noopener noreferrer"&gt;Join the list&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>trending</category>
      <category>email</category>
      <category>webdev</category>
      <category>newsletters</category>
    </item>
    <item>
      <title>22,774 New York buildings are in open benchmarking violation</title>
      <dc:creator>Compound Labs</dc:creator>
      <pubDate>Sat, 05 Sep 2026 23:34:41 +0000</pubDate>
      <link>https://dev.to/thecompoundtech/22774-new-york-buildings-are-in-open-benchmarking-violation-1c8e</link>
      <guid>https://dev.to/thecompoundtech/22774-new-york-buildings-are-in-open-benchmarking-violation-1c8e</guid>
      <description>&lt;h2&gt;
  
  
  The record was public the whole time
&lt;/h2&gt;

&lt;p&gt;New York City publishes the list of buildings carrying an open benchmarking violation, and 22,774 of them are on it. Reading that list costs nothing. Getting an answer out of it, or out of the federal rule text an importer has to cite on a certificate, is the part nobody has done for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agentwire
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fle3he27vt7n080zug0zn.png" alt="Agentwire, screenshot of the landing page" width="799" height="362"&gt;&lt;/td&gt;
&lt;td&gt;Agentwire indexes agent tools other people have already shipped, the MCP servers and coding agent frameworks developers install. Agentwire posts one only after two separate things vouched for it: a list somebody else maintains picking it up, a Hacker News thread carrying it, or how fast it climbed. Every item credits the author and links to their repository, and nothing on the site is paid. &lt;a href="https://agentwire.kynth.studio/kd/5pvj3w" rel="noopener noreferrer"&gt;Agentwire&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  BenchFile
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqc7opi8qi2u5utuq9xsp.png" alt="BenchFile, screenshot of the landing page" width="799" height="362"&gt;&lt;/td&gt;
&lt;td&gt;BenchFile files the overdue NYC Local Law 84 benchmarking report for a building that already has a violation open, then keeps filing it before 1 May every year after. It's for the owner or managing agent watching $500 post every quarter, to a $2,000 annual cap, until the report lands. You get the report submitted through ENERGY STAR Portfolio Manager and the city's dated proof the violation cleared: $149 once, then $49 a year to stay filed. &lt;a href="https://benchfile.kynth.studio/kd/7o6t5d" rel="noopener noreferrer"&gt;BenchFile&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  BlockDex
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8ynts5egt0rp70roh3g4.png" alt="BlockDex, screenshot of the landing page" width="799" height="362"&gt;&lt;/td&gt;
&lt;td&gt;BlockDex searches inside the shadcn registries rather than across them, so finding one date picker stops meaning opening thirty sites. It's for a React developer picking a component: each one gets a page with the install command, its dependencies, and whether it is actually free, which BlockDex settles by asking that item's own install address for the source. Nothing there is paid and it takes no account. &lt;a href="https://blockdex.kynth.studio/kd/ki392w" rel="noopener noreferrer"&gt;BlockDex&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  CertScope
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6icfdgsyce7obcmkyaak.png" alt="CertScope, screenshot of the landing page" width="799" height="362"&gt;&lt;/td&gt;
&lt;td&gt;CertScope determines which CPSC rules apply to each SKU you import, then builds the certificate your customs broker files at entry. It's for the small importer who has to name the rules on the certificate and whose broker will not make that call for them. You get a determination memo per SKU and a certificate carrying the seven elements 16 CFR 1110.11(a) requires, delivered as PDFs, at $29 for one SKU and $99 for up to ten. &lt;a href="https://certscope.kynth.studio/kd/v6yez2" rel="noopener noreferrer"&gt;CertScope&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;&lt;strong&gt;One shipped product, taken apart, once a month.&lt;/strong&gt; What it does, what it cost to build, what the pipeline behind it looks like, and what the numbers did, read off the repository and the live site, not written from memory. &lt;a href="https://kynth.studio/list" rel="noopener noreferrer"&gt;Join the list&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Send us someone who needs something built.&lt;/strong&gt; $150, fixed, for every client you send whose work goes ahead. One link, no tiers, no portal. &lt;a href="https://kynth.studio/referral" rel="noopener noreferrer"&gt;Get your link&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>startup</category>
      <category>showdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The cheapest paid plan is $20 and the cheapest plan that reaches iOS is $200, so StoreReady gives that its own column</title>
      <dc:creator>Compound Labs</dc:creator>
      <pubDate>Sat, 05 Sep 2026 10:53:26 +0000</pubDate>
      <link>https://dev.to/thecompoundtech/the-cheapest-paid-plan-is-20-and-the-cheapest-plan-that-reaches-ios-is-200-so-storeready-gives-1l5a</link>
      <guid>https://dev.to/thecompoundtech/the-cheapest-paid-plan-is-20-and-the-cheapest-plan-that-reaches-ios-is-200-so-storeready-gives-1l5a</guid>
      <description>&lt;p&gt;You can pay for an app builder for a month before finding out that the plan you bought does not get you an iPhone app. The price on the front of the page and the price of the tier that actually produces an iOS build are two different numbers, and almost nobody prints the second one.&lt;/p&gt;

&lt;p&gt;Read off the vendor's own pricing page on 2026-09-04: for Rork, the cheapest paid plan is $20 a month and the cheapest plan that reaches iOS is $200 a month. Same product, same page, ten times apart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://xowekqdsttxwbhfxvusa.supabase.co/storage/v1/object/public/crosspost/proof-storeready/proof-storeready-short.mp4" rel="noopener noreferrer"&gt;Watch the StoreReady, Which AI app builder passes App Store review demo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What StoreReady is
&lt;/h2&gt;

&lt;p&gt;StoreReady answers one question, which AI app builder ships an app that passes Apple App Store review, and it answers with a link. Every figure and every verdict on it points at a page somebody opened, carries a short piece of that page as a quote, and is stamped with the date it was read. Where the sources don't settle something, the answer is the word unknown instead of a guess.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1fgtfvhbb3ozouknzmjk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1fgtfvhbb3ozouknzmjk.png" alt="StoreReady pricing card comparing $20 and $200 plans, iOS availability, $200 plan reaches iOS while $20 plan does not; specific tier features mapped to price points." width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The column nobody else carries
&lt;/h2&gt;

&lt;p&gt;The comparison grid has four axes, and the third one is the reason the grid exists. Its own definition in &lt;code&gt;src/data/competitors.json&lt;/code&gt; reads: "the tier on which the product can actually produce and submit an iOS app, which on most of these is several steps above the price the page leads with, and is the single figure none of them puts next to the headline."&lt;/p&gt;

&lt;p&gt;Every cell below was re-read against the vendor's own pricing page on 2026-09-04.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Builder&lt;/th&gt;
&lt;th&gt;Cheapest paid plan&lt;/th&gt;
&lt;th&gt;Cheapest plan that reaches iOS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Rork&lt;/td&gt;
&lt;td&gt;$20/mo (Rork Pro)&lt;/td&gt;
&lt;td&gt;$200/mo (Rork Max)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vibecode&lt;/td&gt;
&lt;td&gt;$20/month (Plus)&lt;/td&gt;
&lt;td&gt;$20/month (Plus)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FlutterFlow&lt;/td&gt;
&lt;td&gt;$39/month (Basic)&lt;/td&gt;
&lt;td&gt;$39/month (Basic)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Expo + EAS&lt;/td&gt;
&lt;td&gt;$19/month + usage (Starter)&lt;/td&gt;
&lt;td&gt;$0/month (Free)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replit Mobile&lt;/td&gt;
&lt;td&gt;$20 per month (Core)&lt;/td&gt;
&lt;td&gt;Not published&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bolt.new&lt;/td&gt;
&lt;td&gt;$25 per month billed monthly (Pro)&lt;/td&gt;
&lt;td&gt;Not published&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Not published is a cell we write on purpose. Those two pricing pages price projects, credits, collaborators and agents, and no tier on either names iOS, the App Store or a mobile build. Writing a number there would be inventing one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcuawh4av9iymr4lgzjdr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcuawh4av9iymr4lgzjdr.png" alt="StoreReady, one AI app builder's row in full: the App Store verdict, what it produces, and every claim carrying its source and its date. This is the unit the comparison is built out of." width="799" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A figure holds while the page under it moves
&lt;/h2&gt;

&lt;p&gt;Each price stores the fragment of the vendor's page that would have to still be there for the figure to still be true, and the nightly pass re-fetches the page and looks for it. Draftbit is the clean case. Standard held at $12 a month exactly as published, while editor seats on the same page went from $8 to $16 each. The number we print didn't move. The page around it did, and the next check now compares against what the page says now.&lt;/p&gt;

&lt;p&gt;a0.dev went the other way. When its row was written, its plan list ran from Pro at $20 up to Pro 2500 at $450. Re-read on 2026-09-04, that same list carries Pro 5000 at $800 a month and a separate Max plan at $200 a month. The entry price hadn't changed at all.&lt;/p&gt;

&lt;p&gt;Expo plus EAS is the one row where the iOS number is lower than the paid one, because the free tier builds for iOS and the $19 Starter is bought for something else entirely.&lt;/p&gt;

&lt;p&gt;See the grid: &lt;a href="https://storeready.kynth.studio/kd" rel="noopener noreferrer"&gt;https://storeready.kynth.studio/kd&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;One shipped product, taken apart, once a month.&lt;/strong&gt; What it does, what it cost to build, what the pipeline behind it looks like, and what the numbers did, read off the repository and the live site, not written from memory. &lt;a href="https://kynth.studio/list" rel="noopener noreferrer"&gt;Join the list&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>aicoding</category>
      <category>showdev</category>
      <category>ios</category>
      <category>webdev</category>
    </item>
    <item>
      <title>AgentWire's index build printed "0 still bare" while refusing to finish over four rows in the same run</title>
      <dc:creator>Compound Labs</dc:creator>
      <pubDate>Fri, 04 Sep 2026 12:26:41 +0000</pubDate>
      <link>https://dev.to/thecompoundtech/agentwires-index-build-printed-0-still-bare-while-refusing-to-finish-over-four-rows-in-the-same-3d6l</link>
      <guid>https://dev.to/thecompoundtech/agentwires-index-build-printed-0-still-bare-while-refusing-to-finish-over-four-rows-in-the-same-3d6l</guid>
      <description>&lt;p&gt;For three days the same job failed the same way, and the summary line it printed at the end of every one of those runs said nothing was wrong. The job is &lt;code&gt;studio.agentwire.sync&lt;/code&gt;, and it rebuilds AgentWire, our index of other people's shipped agent tooling: MCP servers, coding-agent harnesses and agent frameworks, picked out on stars, velocity, topic signals and Hacker News threads.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two counters, same rows, opposite answers
&lt;/h2&gt;

&lt;p&gt;Every row on that index gets a picture. When a row arrives without one, a shared finder goes looking, and Claude looks once at what came back and takes the first usable thing, at exactly two calls a row. The build keeps a tally while it works and prints it at the end. That run printed &lt;code&gt;48 kept, 0 searched, 0 still bare&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Then, before finishing, it checks the newest eight rows and fails if any of them has no picture. It failed. It named four of them.&lt;/p&gt;

&lt;p&gt;Both halves were looking at the same rows.&lt;/p&gt;

&lt;p&gt;The tally counts a row as bare when the search ran and came back with nothing usable. Some rows never reach the search at all. Their picture predates the card style we use now and there's nothing on disk to put in its place, so they're pinned to a plain plate on purpose and the picture step steps over them. Nothing is wrong with those rows, so nothing counts them.&lt;/p&gt;

&lt;p&gt;The check underneath never asked how a row got where it is. It asked one question, does this row have a picture, and four deliberately plated rows had aged into the newest eight.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Row&lt;/th&gt;
&lt;th&gt;How it got there&lt;/th&gt;
&lt;th&gt;Does the picture search run&lt;/th&gt;
&lt;th&gt;Counted in "still bare"&lt;/th&gt;
&lt;th&gt;Failed the newest-eight check&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Has a picture&lt;/td&gt;
&lt;td&gt;the finder found one, or an earlier one was kept&lt;/td&gt;
&lt;td&gt;yes, once&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pinned to the plain plate&lt;/td&gt;
&lt;td&gt;its picture predates the card style we use now, and nothing on disk replaces it&lt;/td&gt;
&lt;td&gt;no, skipped on purpose&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes before the change, no after&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search came back empty&lt;/td&gt;
&lt;td&gt;the finder ran and nothing it found was usable&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;yes, before and after&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fag5r0rigp9lu0qqltnd2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fag5r0rigp9lu0qqltnd2.png" alt="Card with 3D clock graphic and three bullet points describing an AgentWire index build failure, Run-end tally reported 0 items bare while job refused to finish; same failure repeated three days; picture-finder made two calls on first run." width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The advice in the failure text could never work
&lt;/h2&gt;

&lt;p&gt;A picture costs two Claude calls, so the failure message offered the likeliest reason for a missing one and told whoever read it to run the job again once the picture account had headroom. A search skipped on purpose does not return a different answer on the tenth attempt. The job ran, failed the same way, and printed a clean tally each time, from August 30 to September 2.&lt;/p&gt;

&lt;p&gt;Counting the file the site builds from this run: 82 of 131 rows carry the plain plate on purpose. Any one of them aging into the newest eight would have stopped the job in exactly the same way.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we changed
&lt;/h2&gt;

&lt;p&gt;We made the check ask why a picture is missing instead of only whether it is. A row pinned to the plate on purpose passes now. A row whose search genuinely came back with nothing still fails the run, which is the case the check was written for, and that half is untouched. The build ends clean and no picture was searched or swapped to get there.&lt;/p&gt;

&lt;p&gt;AgentWire is free to read, it credits every author it lists, and it never quotes a project's star count as praise.&lt;/p&gt;

&lt;p&gt;A build said every picture was fine and failed anyway, so the check now asks why a picture is missing.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;One shipped product, taken apart, once a month.&lt;/strong&gt; What it does, what it cost to build, what the pipeline behind it looks like, and what the numbers did, read off the repository and the live site, not written from memory. &lt;a href="https://kynth.studio/list" rel="noopener noreferrer"&gt;Join the list&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>aiagents</category>
      <category>opensource</category>
      <category>devops</category>
      <category>ai</category>
    </item>
    <item>
      <title>Using It Up cuts a ninety-one character sentence down to "the wishlist got old", and never writes a new one</title>
      <dc:creator>Compound Labs</dc:creator>
      <pubDate>Thu, 03 Sep 2026 10:18:34 +0000</pubDate>
      <link>https://dev.to/thecompoundtech/using-it-up-cuts-a-ninety-one-character-sentence-down-to-the-wishlist-got-old-and-never-writes-a-45k9</link>
      <guid>https://dev.to/thecompoundtech/using-it-up-cuts-a-ninety-one-character-sentence-down-to-the-wishlist-got-old-and-never-writes-a-45k9</guid>
      <description>&lt;p&gt;A reader searching for something to read is shown a page's title and very little else, and one of ours is a whole spoken sentence ninety-one characters long. The cap we hold a title to is sixty, and fourteen of those go to the publication's own name on the end, so what that reader gets is a sentence stopping in the middle with no idea what the other end of it says.&lt;/p&gt;

&lt;p&gt;Measured this run off the file the site builds from, the sentences run from twenty-one characters to ninety-one, median fifty-three. Forty-six of them are longer than the room a tab leaves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://xowekqdsttxwbhfxvusa.supabase.co/storage/v1/object/public/crosspost/proof-usingitup/proof-usingitup-short.mp4" rel="noopener noreferrer"&gt;Watch the Using It Up, Things used to the end, mended, kept, finished, and not replaced demo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Using It Up is
&lt;/h2&gt;

&lt;p&gt;Using It Up is a small publication about finishing what you already own: things used to the last of them, mended, kept, and not bought. It's for anyone who has got to the bottom of a bottle of shampoo and felt something closer to pride than relief. What you get is one object at a time, one to a page, with the lines that were spoken over that object set as the body under a still of the thing itself, filed in one of five columns: Finished it, Still works, Didn't buy it, Became someone, Noticed. There's a letter as well, one entry once a week. All of it is free, nothing on it is for sale, and it carries no links to buy anything, which would rather miss the point.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj19028mgp13b1h5yjqpn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj19028mgp13b1h5yjqpn.png" alt="Landing page for repair/reuse brand with headline and scattered domestic object photographs, Visual identity promoting repair and reuse practices through vintage aesthetic imagery." width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The words are the words
&lt;/h2&gt;

&lt;p&gt;Nothing on this publication is authored for a page. Every headline is what the account said out loud over the footage, and the tab holds to that too.&lt;/p&gt;

&lt;p&gt;So a title is the writer's own sentence, cut short at a boundary the writer already put there. A sentence that fits is used exactly as it is. Otherwise it stops at the first real break: a full stop, a dash, or the word where the sentence turns from naming the thing to commenting on it, which in this account's writing is almost always and, but, until, before, because. Then a hard limit on a word boundary. Then a walk back off anything left pointing at something that got cut, a trailing the, of, with, just, only, up, out, nobody.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sentence, as it was spoken&lt;/th&gt;
&lt;th&gt;Length&lt;/th&gt;
&lt;th&gt;Where it stops&lt;/th&gt;
&lt;th&gt;What the tab gets&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;i finished the whole bottle before buying another and it felt like a personality upgrade&lt;/td&gt;
&lt;td&gt;88&lt;/td&gt;
&lt;td&gt;at "before"&lt;/td&gt;
&lt;td&gt;i finished the whole bottle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;the wishlist got old and i realized i didn't want most of it. i just wanted a different day&lt;/td&gt;
&lt;td&gt;91&lt;/td&gt;
&lt;td&gt;full stop, then "and"&lt;/td&gt;
&lt;td&gt;the wishlist got old&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;POV: you wear the sneakers until they're actually done and they tell the whole story&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;td&gt;at "until"&lt;/td&gt;
&lt;td&gt;POV: you wear the sneakers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;my headphones are six years old and that's the flex&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;at "and"&lt;/td&gt;
&lt;td&gt;my headphones are six years old&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Bottle. Wishlist. Sneakers. Headphones. That's the half of the sentence a search can collide with, and it was already sitting at the front, because that's how the account writes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0y55zre89tvdv5zj742n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0y55zre89tvdv5zj742n.png" alt="Using It Up, the system's output, one entry: a thirty-second video from the account rebuilt as a page. A still from that entry's own footage of the object itself, the shape it files under (Finished it, Still works, Didn't buy it, Noticed, Became someone), the caption and the accounts it went out on, then the spoken lines as readable prose. An inventory of finishing what you already own, not a haul. A publication, not a purchase." width="799" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What doesn't move
&lt;/h2&gt;

&lt;p&gt;The full sentence stays untouched in the three places that carry it: the headline at the top of the page, the headline in the page's own machine-readable record, and the last step of the breadcrumb. Only the tab and the line in a results list take the short form, and nothing is ever added to either. Every title on this site can be found, character for character, inside a sentence somebody said out loud over a film of an object.&lt;/p&gt;

&lt;p&gt;Read the inventory: &lt;a href="https://usingitup.kynth.studio/kd" rel="noopener noreferrer"&gt;https://usingitup.kynth.studio/kd&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;One shipped product, taken apart, once a month.&lt;/strong&gt; What it does, what it cost to build, what the pipeline behind it looks like, and what the numbers did, read off the repository and the live site, not written from memory. &lt;a href="https://kynth.studio/list" rel="noopener noreferrer"&gt;Join the list&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>underconsumption</category>
      <category>usingitup</category>
      <category>titles</category>
      <category>truncation</category>
    </item>
    <item>
      <title>The exemption we wrote for RuleStack's build lasted six minutes and seven seconds</title>
      <dc:creator>Compound Labs</dc:creator>
      <pubDate>Wed, 02 Sep 2026 10:34:28 +0000</pubDate>
      <link>https://dev.to/thecompoundtech/the-exemption-we-wrote-for-rulestacks-build-lasted-six-minutes-and-seven-seconds-2jb6</link>
      <guid>https://dev.to/thecompoundtech/the-exemption-we-wrote-for-rulestacks-build-lasted-six-minutes-and-seven-seconds-2jb6</guid>
      <description>&lt;p&gt;An unfinished edit and a finished one look identical from outside, and the person who finds out which is which is whoever loads the page. So the nightly pass that deploys our products refuses to touch any product whose working tree still holds uncommitted changes: something stopped part-way through there, and nothing downstream can tell stopping from finishing.&lt;/p&gt;

&lt;p&gt;RuleStack is one of the products that pass covers. It collects the instruction files people ship for coding agents, AGENTS.md, CLAUDE.md, Cursor rules, Copilot instructions, Windsurf rules, Cline rules, out of live public projects, classifies them by stack, and serves them over a read API with a site on top of it. Free, no accounts, no write path.&lt;/p&gt;

&lt;h2&gt;
  
  
  An ordinary build was dirtying its own tree
&lt;/h2&gt;

&lt;p&gt;One of the files RuleStack generates lists the paths its sitemap advertises. The generator wrote that list with the moment it ran stamped at the front of it. Every &lt;code&gt;npm run build&lt;/code&gt; therefore rewrote the file, even when the advertised set had not moved by a single path, and the tree came out of a routine rebuild looking exactly like somebody had walked away mid-change. The deploy pass read that and did the correct thing. It skipped the product.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwq5clago0y5iw027xcga.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwq5clago0y5iw027xcga.png" alt="Visual summary of RuleStack's 6-minute-7-second deployment gate exemption with three tracked outcomes, Concrete evidence of what the gate did: generated files, blocked dirty use, exemption held status, demonstrating real system behavior during incident." width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The first fix was a declaration
&lt;/h2&gt;

&lt;p&gt;Each product carries a short list of paths that a machine rewrites on its own schedule, and the deploy pass names that list for this exact case. RuleStack's already held the share card's input digest, the comparison corpus, the derived changelog and the derived questions page. We added the advertised list to it, the guard stopped reading a rebuild as an interruption, and the deploy went through.&lt;/p&gt;

&lt;p&gt;That declaration lived six minutes and seven seconds, 14:55:00 to 15:01:07, and then we took it back out. An exemption is not scoped to the stamp. That same file also changes when the advertised set genuinely changes, which is a real change and worth recording, so silencing one false alarm from that path silences every true one from it as well.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Declare the file exempt&lt;/th&gt;
&lt;th&gt;Take the stamp out of the generator&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;What it does about the false alarm&lt;/td&gt;
&lt;td&gt;the deploy pass stops looking at that path&lt;/td&gt;
&lt;td&gt;two runs in a row write the same bytes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When the advertised set genuinely changes&lt;/td&gt;
&lt;td&gt;nothing sees it, in the deploy pass or the nightly triage&lt;/td&gt;
&lt;td&gt;the file changes, and that change gets recorded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What the file carries&lt;/td&gt;
&lt;td&gt;the source line, the paths, and the moment it was written&lt;/td&gt;
&lt;td&gt;the source line and the paths, nothing dated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How long it was the answer here&lt;/td&gt;
&lt;td&gt;6 minutes 7 seconds&lt;/td&gt;
&lt;td&gt;still in place&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What we changed
&lt;/h2&gt;

&lt;p&gt;We deleted the stamp from the generator and wrote the reason on the line above the one that used to write it: the file has to be byte-identical between builds when the set has not moved, or every build dirties the tree and the guard reads a routine rebuild as unfinished work. The file now carries a source line and the paths and nothing dated, 399 of them from one query against the product's own engine for the top 400 by quality. It is source again, so a change in what RuleStack advertises arrives as a change somebody has to commit, and an interrupted agent still stops the deploy the way it is supposed to.&lt;/p&gt;

&lt;p&gt;RuleStack is free to read, with no account and no write path.&lt;/p&gt;

&lt;p&gt;A generated file stamped the time it was written, so every build looked like unfinished work, and we deleted the stamp.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;One shipped product, taken apart, once a month.&lt;/strong&gt; What it does, what it cost to build, what the pipeline behind it looks like, and what the numbers did, read off the repository and the live site, not written from memory. &lt;a href="https://kynth.studio/list" rel="noopener noreferrer"&gt;Join the list&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>aiagents</category>
      <category>agents</category>
      <category>devops</category>
      <category>git</category>
    </item>
    <item>
      <title>Three of the five lines in that error file were not errors, and The Standup's 07:40 developer email now finishes clean when it has nothing to send</title>
      <dc:creator>Compound Labs</dc:creator>
      <pubDate>Tue, 01 Sep 2026 18:26:16 +0000</pubDate>
      <link>https://dev.to/thecompoundtech/three-of-the-five-lines-in-that-error-file-were-not-errors-and-the-standups-0740-developer-email-59fj</link>
      <guid>https://dev.to/thecompoundtech/three-of-the-five-lines-in-that-error-file-were-not-errors-and-the-standups-0740-developer-email-59fj</guid>
      <description>&lt;p&gt;On the morning our daily developer email genuinely cannot go out, nobody would have been able to tell it apart from a morning when nothing was wrong, because both endings looked identical from outside. launchd hands a job two files and takes one number back. The property list that runs our morning sender names a path for ordinary output and a path for errors, and that is the entire conversation. Everything the program has to say about how the run went, it says by choosing a number to finish with. Zero means fine. Anything else means broken, and the scheduler keeps the last one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stopping early is not the same as breaking
&lt;/h2&gt;

&lt;p&gt;The sender runs a short sequence: fetch the day's ranked stories from the site, pull the confirmed recipient list, hand the batches to Resend in groups of a hundred, write down what went out. There are several points where it can decide to stop before sending anything, and until we changed it, all of them went through one door: print the reason to the error file, finish with a failure.&lt;/p&gt;

&lt;p&gt;Some of those reasons are real faults. The shared secret that guards the internal source is missing. The source answers with something other than a success. The mail key is absent, which is worth shouting about, because the recipient list is untouched and the day is simply gone.&lt;/p&gt;

&lt;p&gt;One of them is not a fault. When the recipient query comes back with nobody in it, the correct behaviour is to do nothing and say so plainly. Reported as a failure, it teaches the scheduler that this job breaks every morning, and it fills the one file a person opens when something has gone wrong with lines describing a perfectly ordinary morning. Three of the five lines in that job's error file were not errors. They were the sender saying it had nothing to do.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Nothing to send&lt;/th&gt;
&lt;th&gt;Could not send&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;What causes it&lt;/td&gt;
&lt;td&gt;the recipient list comes back with nobody in it&lt;/td&gt;
&lt;td&gt;the shared secret or the mail key is absent, or the site does not answer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Where the line is written&lt;/td&gt;
&lt;td&gt;the ordinary output file&lt;/td&gt;
&lt;td&gt;the error file&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How the run finishes now&lt;/td&gt;
&lt;td&gt;success&lt;/td&gt;
&lt;td&gt;failure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How it finished before&lt;/td&gt;
&lt;td&gt;failure&lt;/td&gt;
&lt;td&gt;failure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What the scheduler keeps&lt;/td&gt;
&lt;td&gt;a job that ran and had a quiet day&lt;/td&gt;
&lt;td&gt;a job that needs a person&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ck4bjgsw8xx1hd2y9tj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1ck4bjgsw8xx1hd2y9tj.png" alt="Standup product card: 3D graphics with status items, headline about dev email ending clean, three status checkboxes, Three specific error file lines addressed; visual proof of Standup and Kynth Studios branding; 07:40 email timing." width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What we changed
&lt;/h2&gt;

&lt;p&gt;There are two functions now instead of one. The one that reports a fault prints to the error file and finishes with a failure. The one that reports having nothing to do prints to the ordinary output and finishes clean, with the reason written above it in the source: an empty list is a normal state, and exiting as a failure made the scheduler report the job as permanently broken and buried real errors underneath it. The product's register of dated claims states the same thing from the other side, that an empty list exits 0 with no send.&lt;/p&gt;

&lt;p&gt;The Standup was forked from Front Wire, so both publications run that same sender under their own morning job, 07:40 for one and 07:30 for the other, and both carry the split. The Standup itself is one developer email a day: tagged releases, security advisories, outages and breaking changes, each entry ending on the consequence for a system you own.&lt;/p&gt;

&lt;p&gt;The property list did not change. What changed is which of the two files a quiet morning writes to, and the number the job hands back when it is finished.&lt;/p&gt;

&lt;p&gt;Read the morning briefing: The Standup, one email a day at 07:40.&lt;/p&gt;

&lt;p&gt;A daily email reported failure on the days it simply had nothing to send, so now only real faults count as failures.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;One shipped product, taken apart, once a month.&lt;/strong&gt; What it does, what it cost to build, what the pipeline behind it looks like, and what the numbers did, read off the repository and the live site, not written from memory. &lt;a href="https://kynth.studio/list" rel="noopener noreferrer"&gt;Join the list&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>breakingnews</category>
      <category>devops</category>
      <category>node</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>The ticked box on an insurance certificate creates nothing, and CoverCheck refuses to read it as a pass</title>
      <dc:creator>Compound Labs</dc:creator>
      <pubDate>Mon, 31 Aug 2026 11:57:59 +0000</pubDate>
      <link>https://dev.to/thecompoundtech/the-ticked-box-on-an-insurance-certificate-creates-nothing-and-covercheck-refuses-to-read-it-as-a-56j8</link>
      <guid>https://dev.to/thecompoundtech/the-ticked-box-on-an-insurance-certificate-creates-nothing-and-covercheck-refuses-to-read-it-as-a-56j8</guid>
      <description>&lt;p&gt;You can be handed a vendor's insurance certificate with the right box ticked and still have nothing behind it. The tick is somebody's assertion on a summary sheet. The document that actually puts your association on the vendor's policy is a separate one, and it is not the page you were sent.&lt;/p&gt;

&lt;p&gt;The reference we cite for that, re-read on 2026-08-27, puts it plainly: an X in either column is only an assertion, and additional insured status and waiver of subrogation are created by policy endorsements. So a manager who files the certificate because the columns look right has filed a piece of paper that describes coverage rather than one that confers it. If a claim ever lands, that gap is the whole exposure, and it surfaces at the worst possible moment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://xowekqdsttxwbhfxvusa.supabase.co/storage/v1/object/public/crosspost/proof-covercheck/proof-covercheck-short.mp4" rel="noopener noreferrer"&gt;Watch the CoverCheck — Certificate-of-insurance tracking for property and HOA managers demo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What this product does with that
&lt;/h2&gt;

&lt;p&gt;CoverCheck is vendor insurance tracking for small property and homeowners-association managers. A vendor's certificate goes in, it gets checked against what each community requires, and anything short or expiring comes back with a drafted chase email to the vendor's agent, which a manager approves before it sends.&lt;/p&gt;

&lt;p&gt;The rule the whole thing rests on is written into the decision function's own comment: unknown is never a pass. Not "unknown is probably fine". When the additional-insured box reads as absent, that is a blocker. When the box cannot be read at all, the finding is a review item that says so in words, asking for confirmation with the agent. A limit the reader could not make out never gets scored, it gets handed to a person. The tests for all of this sit under a heading that just says "unknown is never a pass".&lt;/p&gt;

&lt;p&gt;The ladder underneath is four rungs, in order: any blocker makes it non-compliant, otherwise any review item makes it needs-review, otherwise anything inside the thirty-day notice window makes it expiring, otherwise compliant. A certificate issued more than 550 days ago earns a warning even when every policy on it still reads as in force.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faxpnyn0dj687lz3inpgh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faxpnyn0dj687lz3inpgh.png" alt="Code editor showing CoverCheck validator with insurance validation flowchart overlaid — Technical implementation exists behind the product claim, not just conceptual." width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Two ways in, one thing that decides
&lt;/h2&gt;

&lt;p&gt;The landing page carries a free check with no sign-in. It has no reader attached and writes nothing down anywhere: you type the figures off the face of your certificate and the answer comes straight back. What makes that honest rather than a demo is that it hands your typed figures to the identical decision function the paid side uses.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Free check on the landing&lt;/th&gt;
&lt;th&gt;Paid upload&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Who reads the certificate&lt;/td&gt;
&lt;td&gt;you type the figures in&lt;/td&gt;
&lt;td&gt;a reader model reads the uploaded file, capped at 20 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sign-in required&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What gets stored&lt;/td&gt;
&lt;td&gt;nothing at all&lt;/td&gt;
&lt;td&gt;one row per vendor and community, appended, never overwritten&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What decides the verdict&lt;/td&gt;
&lt;td&gt;checkCompliance&lt;/td&gt;
&lt;td&gt;checkCompliance, the same one&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unreadable additional-insured box&lt;/td&gt;
&lt;td&gt;review, never a pass&lt;/td&gt;
&lt;td&gt;review, never a pass&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Grepped this run: outside the tests, that function has exactly three callers, the free check, the paid check, and the sample review document. There is no second scorer anywhere.&lt;/p&gt;

&lt;p&gt;With no reader configured, an upload does not fall through to a green tick. It lands as waiting on a human, with no verdict written at all. And each morning at 06:15 every vendor's most recent certificate is checked again against the new date, so something that passed yesterday can read as expiring today with nothing about the paper having changed.&lt;/p&gt;

&lt;p&gt;Run a certificate through the free check: &lt;a href="https://covercheck.kynth.studio/kd" rel="noopener noreferrer"&gt;https://covercheck.kynth.studio/kd&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;One shipped product, taken apart, once a month.&lt;/strong&gt; What it does, what it cost to build, what the pipeline behind it looks like, and what the numbers did — read off the repository and the live site, not written from memory. &lt;a href="https://kynth.studio/list" rel="noopener noreferrer"&gt;Join the list&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>insurance</category>
      <category>showdev</category>
      <category>typescript</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>The median pay-to-rank leaderboard has taken $3.50 in its whole life, and nine of them have taken nothing</title>
      <dc:creator>Compound Labs</dc:creator>
      <pubDate>Mon, 31 Aug 2026 01:33:07 +0000</pubDate>
      <link>https://dev.to/thecompoundtech/the-median-pay-to-rank-leaderboard-has-taken-350-in-its-whole-life-and-nine-of-them-have-taken-4ipa</link>
      <guid>https://dev.to/thecompoundtech/the-median-pay-to-rank-leaderboard-has-taken-350-in-its-whole-life-and-nine-of-them-have-taken-4ipa</guid>
      <description>&lt;p&gt;Nine of the pay-to-rank leaderboards selling first place have never taken a dollar from anybody. Across the 38 boards in that sample that publish what their top spot has actually gone for, the median is $3.50, and 35 of the 38 are under $25. We read those figures off the directories' own pages on 2026-08-27, and the median price to enter one of them is $1.&lt;/p&gt;

&lt;p&gt;One site is most of the money in the category. Third-party trackers put outbid.lol at roughly $200,000 in about 100 hours, and one free directory puts $312K across all 346 boards it lists. Everything downstream of that is much smaller than its rank card suggests. First place in front of nobody is worth nobody, whatever it costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://xowekqdsttxwbhfxvusa.supabase.co/storage/v1/object/public/crosspost/proof-outrip/proof-outrip-short.mp4" rel="noopener noreferrer"&gt;Watch the OutRip — Rip a $5 pack of cards for your product; your best card's rating is your rank on the public board demo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What we built instead
&lt;/h2&gt;

&lt;p&gt;OutRip is a pay-to-rank leaderboard for products where you open packs of cards instead of bidding, and your single best card's rating is your rank on the public board. It is for a founder with a live product who wants eyes on it. What you get is a pack you tear open one card at a time, every card a downloadable image carrying your product's name, and a row on the board. Five cards is $5, fifteen is $12, ninety is $59. Every pack returns at least what you paid in card value, and that floor is checked before a single card is written down.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7t0hiu9pgimskwszbmou.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7t0hiu9pgimskwszbmou.png" alt="OutRip — screenshot of the landing page" width="799" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a bid board stops moving
&lt;/h2&gt;

&lt;p&gt;Of the 50 boards one directory renders on its index, 39 rank by money alone: 23 add up everything you have paid, 16 take the single highest bid. On a highest-bid board the price of first place only ever goes up, because taking it means paying more than the current holder paid. The race ends the moment one person's ceiling sits above everyone else's. A board can carry a hundred rows, look busy, and have had the same name on top since its launch week.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fafpris5rfd10cj4phfkd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fafpris5rfd10cj4phfkd.png" alt="OutRip — what the buyer leaves with: the card itself, on the board’s own card panel, LIVE. Every purchaser gets downloadable card images carrying their product’s own domain on the face, whatever rank they end at, so the card IS the deliverable rather than a picture of one." width="799" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What a score does instead
&lt;/h2&gt;

&lt;p&gt;If rank is a continuous number rather than a price, the newest entry is the best one so far with odds of exactly one in k, whatever shape the numbers have. Add that up and the expected count of new leaders over a run of entries grows about as fast as the logarithm of the count, which is to say it barely grows at all.&lt;/p&gt;

&lt;p&gt;A hundred entries produce about four takeovers. A million produce about thirteen. Often enough to be a live race, rare enough that each one is worth posting, and the difficulty curve arrives on its own without anybody throttling or decaying anything. A card's rating here is one over the square root of how likely its six traits were, so it has no ceiling and first place stays beatable. It just gets harder.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Boards that rank by money&lt;/th&gt;
&lt;th&gt;OutRip&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;What sets your rank&lt;/td&gt;
&lt;td&gt;the amount paid; 39 of the 50 sampled&lt;/td&gt;
&lt;td&gt;your single best card's rating&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Taking first place back&lt;/td&gt;
&lt;td&gt;pay more than the leader paid, so the race ends at the highest ceiling&lt;/td&gt;
&lt;td&gt;any entry, at odds of one in k&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lead changes over a million entries&lt;/td&gt;
&lt;td&gt;the price only rises, so none once it settles&lt;/td&gt;
&lt;td&gt;about 13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Median price to enter&lt;/td&gt;
&lt;td&gt;$1, across the 40 boards quoting one&lt;/td&gt;
&lt;td&gt;$5 for five cards&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What you keep&lt;/td&gt;
&lt;td&gt;the position, and 41 of the 50 sold one that expires&lt;/td&gt;
&lt;td&gt;the cards, and at least what you paid in card value&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three of the free directories publish per-board spend, so what a board has actually taken is checkable in about a minute. Every figure above carries the day it was read, printed beside it on the page it came from.&lt;/p&gt;

&lt;p&gt;Rip a pack: &lt;a href="https://outrip.lol/kd" rel="noopener noreferrer"&gt;https://outrip.lol/kd&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;One shipped product, taken apart, once a month.&lt;/strong&gt; What it does, what it cost to build, what the pipeline behind it looks like, and what the numbers did — read off the repository and the live site, not written from memory. &lt;a href="https://kynth.studio/list" rel="noopener noreferrer"&gt;Join the list&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>packopening</category>
      <category>startup</category>
      <category>webdev</category>
      <category>product</category>
    </item>
    <item>
      <title>Only the pictures already inside your page can appear in the picture you save</title>
      <dc:creator>Compound Labs</dc:creator>
      <pubDate>Sun, 30 Aug 2026 14:07:24 +0000</pubDate>
      <link>https://dev.to/thecompoundtech/only-the-pictures-already-inside-your-page-can-appear-in-the-picture-you-save-32cd</link>
      <guid>https://dev.to/thecompoundtech/only-the-pictures-already-inside-your-page-can-appear-in-the-picture-you-save-32cd</guid>
      <description>&lt;p&gt;Tearline is one custom element that wraps any HTML you have already written and prints it out as a thermal receipt, then saves that receipt as a picture your users can post. It is for a developer building the share image at the end of something: a listening history, an order summary, a year in review.&lt;/p&gt;

&lt;p&gt;What you get is a tag you put around your existing headings, tables and lists, and three ways to hand a reader the file: save it, take the raw file, or take an address you can drop straight into an image. It is free. MIT licence, no dependencies, no build step, installed either as a single script tag or with &lt;code&gt;npm i @kynth/tearline&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://xowekqdsttxwbhfxvusa.supabase.co/storage/v1/object/public/crosspost/proof-tearline/proof-tearline-short.mp4" rel="noopener noreferrer"&gt;Watch the Tearline — Any HTML, printed as a receipt — one custom element, zero dependencies demo&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The rule of the medium
&lt;/h2&gt;

&lt;p&gt;Saving a receipt works by handing the browser a drawing of the paper with every word and every style written inside it. That drawing is sealed off, and it cannot reach out over the network for anything. A photograph pulled in by address never arrives.&lt;/p&gt;

&lt;p&gt;That rule is not Tearline's, and it is not negotiable. It applies to every share-image feature that goes through the same door.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz6uztdi3f8j9mll5m90h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz6uztdi3f8j9mll5m90h.png" alt="Tearline product page: HTML-to-thermal-receipt converter with demo barcode output — The tool renders custom HTML as printed receipts, shown with working barcode example output." width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The browser does not tell you
&lt;/h2&gt;

&lt;p&gt;Measured on the live product on 2026-08-23, the browser does not refuse the drawing when a photograph cannot be fetched. Not for a photograph from the same site, not for one from another site, not for one served with permission to share, not even for an address that returns nothing. It finishes the drawing and paints its own small broken-image icon where the photograph should be. A receipt carrying a photograph 654 pixels tall came back with a 16 pixel icon in its place, and the whole card was 600 pixels shorter than the one on screen. No error appeared anywhere.&lt;/p&gt;

&lt;p&gt;That is the expensive version of this. Someone looks at a receipt, saves it, posts it, and the thing they posted is not the thing they were looking at.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fud95ikqp7xyeic9wqdes.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fud95ikqp7xyeic9wqdes.png" alt="Tearline — screenshot of the landing page" width="799" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What exports, and what is refused
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What is on the paper&lt;/th&gt;
&lt;th&gt;What the export does&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A photograph from the same site&lt;/td&gt;
&lt;td&gt;Refuses, and names the address&lt;/td&gt;
&lt;td&gt;The sealed drawing reaches nothing, not even its own site&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A photograph from another site&lt;/td&gt;
&lt;td&gt;Refuses, and names the address&lt;/td&gt;
&lt;td&gt;Same&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A photograph served with permission to share&lt;/td&gt;
&lt;td&gt;Refuses&lt;/td&gt;
&lt;td&gt;Permission to share does not put the file inside the drawing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;An address that returns nothing&lt;/td&gt;
&lt;td&gt;Refuses&lt;/td&gt;
&lt;td&gt;It would paint the browser's icon instead&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A picture embedded directly in the page&lt;/td&gt;
&lt;td&gt;Exports&lt;/td&gt;
&lt;td&gt;The picture travels inside the receipt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No picture at all&lt;/td&gt;
&lt;td&gt;Exports&lt;/td&gt;
&lt;td&gt;Nothing to lose&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A picture tag with no address&lt;/td&gt;
&lt;td&gt;Exports&lt;/td&gt;
&lt;td&gt;It paints nothing on screen either, so the file still matches&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy9oq94ntbd7roq678244.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy9oq94ntbd7roq678244.png" alt="Tearline — the thermal receipt the component prints from ordinary HTML, and the PNG a user exports and posts. The deliverable is the printed output, not a document." width="799" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The refusal is made before the drawing is built
&lt;/h2&gt;

&lt;p&gt;Any picture inside the receipt whose address is not embedded in the page stops the export up front, carrying the same sentence a reader was always meant to get plus the address that caused it. We ran that against five pictures that have to be refused and three that must not be, and the browser's own failure handler stays behind it as a second line.&lt;/p&gt;

&lt;p&gt;The seed does the rest: the same seed always draws the same torn edge and the same barcode, so the saved file is the receipt the reader was shown.&lt;/p&gt;

&lt;p&gt;Play with it here: &lt;a href="https://tearline.kynth.studio/kd" rel="noopener noreferrer"&gt;https://tearline.kynth.studio/kd&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;One shipped product, taken apart, once a month.&lt;/strong&gt; What it does, what it cost to build, what the pipeline behind it looks like, and what the numbers did — read off the repository and the live site, not written from memory. &lt;a href="https://kynth.studio/list" rel="noopener noreferrer"&gt;Join the list&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
