<?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: wzg0911</title>
    <description>The latest articles on DEV Community by wzg0911 (@wzg0911).</description>
    <link>https://dev.to/wzg0911</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%2F4005992%2F436fb889-7e3d-4732-8d08-a4502b6e6bc0.png</url>
      <title>DEV Community: wzg0911</title>
      <link>https://dev.to/wzg0911</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wzg0911"/>
    <language>en</language>
    <item>
      <title>副业第一年，我劝你先想清楚这3个问题（而不是急着报课）</title>
      <dc:creator>wzg0911</dc:creator>
      <pubDate>Fri, 21 Aug 2026 13:45:27 +0000</pubDate>
      <link>https://dev.to/wzg0911/fu-ye-di-nian-wo-quan-ni-xian-xiang-qing-chu-zhe-3ge-wen-ti-er-bu-shi-ji-zhao-bao-ke--4je0</link>
      <guid>https://dev.to/wzg0911/fu-ye-di-nian-wo-quan-ni-xian-xiang-qing-chu-zhe-3ge-wen-ti-er-bu-shi-ji-zhao-bao-ke--4je0</guid>
      <description>&lt;h1&gt;
  
  
  副业第一年，我劝你先想清楚这3个问题（而不是急着报课）
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;基于《百招生财》《凡夫夺金》300+真实商业案例库的筛选逻辑&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  为什么你总是"报课→放弃→再报课"？
&lt;/h2&gt;

&lt;p&gt;这不是意志力问题。是你在用"学习"逃避"选择"。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;先想清楚3个问题，比学任何技能都值钱。&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  问题一：你愿意为谁解决什么问题？
&lt;/h2&gt;

&lt;p&gt;副业不是"我想做什么"，而是"谁在为什么付钱"。&lt;/p&gt;

&lt;p&gt;300+案例里，做得好的副业者都有一个共同点：&lt;strong&gt;他们服务的对象特别具体&lt;/strong&gt;。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;不是"帮人做PPT"，而是"帮初创公司CEO做融资路演PPT"（单份2000+）&lt;/li&gt;
&lt;li&gt;不是"教英语"，而是"帮外贸业务员练商务英语"（客单价×3）&lt;/li&gt;
&lt;li&gt;不是"做代购"，而是"只做日本中古相机代购"（复购率极高）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;人群越窄，收费越贵；问题越具体，转化越快。&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  问题二：你打算多久见到第一块钱？
&lt;/h2&gt;

&lt;p&gt;这是最被低估的指标。&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;适合模式&lt;/th&gt;
&lt;th&gt;案例&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1-7天&lt;/td&gt;
&lt;td&gt;服务/接单&lt;/td&gt;
&lt;td&gt;简历修改、PPT代做、咨询&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1-4周&lt;/td&gt;
&lt;td&gt;小产品/模板&lt;/td&gt;
&lt;td&gt;模板、插件、资料包&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1-3月&lt;/td&gt;
&lt;td&gt;内容/账号&lt;/td&gt;
&lt;td&gt;公众号、小红书、视频号&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3月+&lt;/td&gt;
&lt;td&gt;产品/平台&lt;/td&gt;
&lt;td&gt;SaaS、课程、社区&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;99%的人死在第二格到第三格的路上——因为第二格赚不到钱，就以为路是错的。&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  问题三：这事能自动跑吗？
&lt;/h2&gt;

&lt;p&gt;打工是一份时间卖一次。副业的复利在于：&lt;strong&gt;一份时间反复卖&lt;/strong&gt;。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;写一篇文章赚50块 = 打工&lt;/li&gt;
&lt;li&gt;搭一个系统每天自动生产3篇 = 复利&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;开始之前先问：这件事能不能让AI/系统自动跑？答案是否定的，就别all in。&lt;/p&gt;




&lt;h2&gt;
  
  
  60秒自测：你适合哪条路？
&lt;/h2&gt;

&lt;p&gt;这三个问题光想不够，要量化。我把它们做成了10个问题的自测工具，基于300+案例库，60秒出结果，直接告诉你：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ 你适合的副业方向（具体到赛道）&lt;/li&gt;
&lt;li&gt;✅ 定价建议（三档定价法）&lt;/li&gt;
&lt;li&gt;✅ 第一步行动清单&lt;/li&gt;
&lt;li&gt;✅ 常见避坑点&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;免费，不需要注册：&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://fuye-dazi.pages.dev" rel="noopener noreferrer"&gt;https://fuye-dazi.pages.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;想清楚再出发，比盲目努力重要100倍。&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>productivity</category>
      <category>beginners</category>
      <category>discuss</category>
    </item>
    <item>
      <title>2026年了，别再用"上班思维"做副业了</title>
      <dc:creator>wzg0911</dc:creator>
      <pubDate>Fri, 21 Aug 2026 13:43:58 +0000</pubDate>
      <link>https://dev.to/wzg0911/2026nian-liao-bie-zai-yong-shang-ban-si-wei-zuo-fu-ye-liao-1i3g</link>
      <guid>https://dev.to/wzg0911/2026nian-liao-bie-zai-yong-shang-ban-si-wei-zuo-fu-ye-liao-1i3g</guid>
      <description>&lt;h1&gt;
  
  
  2026年了，别再用"上班思维"做副业了
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;300+案例拆解：为什么有人副业月入2万，有人忙了半年赚了顿饭钱&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  先看两个真实对比
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A先生&lt;/strong&gt;：下班后帮人写代码，一单500，一个月接8单，月入4000。做了两年，还是4000。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B小姐&lt;/strong&gt;：做了一个"AI简历优化"小工具，免费给人用，收集到2000个邮箱，然后卖简历模板+人工精修服务，月入从3000涨到1.5万。&lt;/p&gt;

&lt;p&gt;同一个领域，差在哪？&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A在卖时间，B在卖系统。&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  "上班思维"的4个特征（中2个就该警惕）
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. 按小时计费
&lt;/h3&gt;

&lt;p&gt;时间换钱，天花板就是你的一天24小时。&lt;strong&gt;副业思维是按结果计费&lt;/strong&gt;：一份模板卖100次=100份收入。&lt;/p&gt;

&lt;h3&gt;
  
  
  2. 只做交付，不做积累
&lt;/h3&gt;

&lt;p&gt;做完一单，客户走了，一切归零。&lt;strong&gt;副业思维是每单都沉淀&lt;/strong&gt;：客户邮箱、案例、口碑、内容——这些都是资产。&lt;/p&gt;

&lt;h3&gt;
  
  
  3. 什么都接，来者不拒
&lt;/h3&gt;

&lt;p&gt;看起来勤奋，实际在稀释自己。&lt;strong&gt;副业思维是砍掉90%的机会&lt;/strong&gt;，只做那个能放大10倍的方向。&lt;/p&gt;

&lt;h3&gt;
  
  
  4. 单打独斗，拒绝杠杆
&lt;/h3&gt;

&lt;p&gt;"我不会编程/不会设计/不会剪辑"——2026年这是借口。AI时代，&lt;strong&gt;一个人+AI = 一个团队&lt;/strong&gt;。&lt;/p&gt;




&lt;h2&gt;
  
  
  普通人最靠谱的副业路径（300+案例验证）
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;第0步：定位（60秒自测，找到付费人群）
第1步：先卖服务（接单验证需求，最快1-7天见钱）
第2步：服务产品化（把服务做成模板/课程/工具）
第3步：自动化（内容自动生产、交付自动完成）
第4步：放大（把成功路径复制到更多渠道）
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;关键不是第1步多快赚钱，而是你有没有在往第4步走。&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  你的下一步
&lt;/h2&gt;

&lt;p&gt;如果你还在第0步（不知道适合什么），我做了个免费自测工具——10个问题，60秒，基于300+案例库帮你定位副业方向，包含定价和行动清单：&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://fuye-dazi.pages.dev" rel="noopener noreferrer"&gt;https://fuye-dazi.pages.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;免费，不注册，测完即看结果。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;别再用上班思维做副业了。你在卖时间，还是在建系统？&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>productivity</category>
      <category>beginners</category>
      <category>discuss</category>
    </item>
    <item>
      <title>月薪8000的你，距离第一个副业收入只差一个"筛选器</title>
      <dc:creator>wzg0911</dc:creator>
      <pubDate>Fri, 21 Aug 2026 13:43:57 +0000</pubDate>
      <link>https://dev.to/wzg0911/yue-xin-8000de-ni-ju-chi-di-ge-fu-ye-shou-ru-zhi-chai-ge-shai-xuan-qi-2oi0</link>
      <guid>https://dev.to/wzg0911/yue-xin-8000de-ni-ju-chi-di-ge-fu-ye-shou-ru-zhi-chai-ge-shai-xuan-qi-2oi0</guid>
      <description>&lt;h1&gt;
  
  
  月薪8000的你，距离第一个副业收入只差一个"筛选器"
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;拆了300+真实副业案例后，我发现了普通人破零的唯一捷径&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  先说一个扎心的事实
&lt;/h2&gt;

&lt;p&gt;你收藏过多少篇"副业月入过万"的文章？&lt;/p&gt;

&lt;p&gt;我猜不少。但真正开始的人，不到10%；开始后坚持到见钱的，不到1%。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;不是你不行，是你在用"收集信息"代替"做选择"。&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  为什么月薪8000的人最容易副业成功？
&lt;/h2&gt;

&lt;p&gt;因为你有三个被低估的资产：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. 主业练出的技能&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;你做财务 → 帮小老板理账、报税（他们特别缺这个）&lt;/li&gt;
&lt;li&gt;你做HR → 帮人改简历、模拟面试（月入4500的真实案例）&lt;/li&gt;
&lt;li&gt;你做设计/写代码 → 接单平台直接变现&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. 稳定的现金流兜底&lt;/strong&gt;&lt;br&gt;
不用急着靠副业活命，所以敢选回报周期长一点、天花板高一点的路。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. 8小时外的可支配时间&lt;/strong&gt;&lt;br&gt;
每天2小时 × 365天 = 730小时。&lt;strong&gt;这是你人生最大的杠杆。&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  但90%的人栽在同一件事上：方向选错
&lt;/h2&gt;

&lt;p&gt;怎么知道自己适合什么？&lt;/p&gt;

&lt;p&gt;我拆解300+案例后，总结出一个&lt;strong&gt;筛选器&lt;/strong&gt;，就三个问题：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;别人已经在为什么付钱给你？&lt;/strong&gt;（不是你会什么，是市场买什么）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;你能稳定投入多久？&lt;/strong&gt;（1小时/天和3小时/天是两种人生）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;你能等多久见第一块钱？&lt;/strong&gt;（一周 vs 三个月，打法完全不同）&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;把答案写下来，交叉匹配，你的方向基本就出来了。&lt;/p&gt;




&lt;h2&gt;
  
  
  60秒，帮你把这个筛选器跑一遍
&lt;/h2&gt;

&lt;p&gt;光看文章不落地，等于没看。我把它做成了免费工具：&lt;/p&gt;

&lt;p&gt;10个问题，60秒出结果，基于300+案例库，直接告诉你：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;你适合的副业方向（具体到赛道）&lt;/li&gt;
&lt;li&gt;定价建议（怎么收费不被压价）&lt;/li&gt;
&lt;li&gt;第一步行动清单（明天就能做）&lt;/li&gt;
&lt;li&gt;避坑点（300+案例里的常见死法）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://fuye-dazi.pages.dev" rel="noopener noreferrer"&gt;https://fuye-dazi.pages.dev&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;免费，不需要注册，测完即看。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;你离第一个副业收入，只差这60秒。&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>productivity</category>
      <category>beginners</category>
      <category>discuss</category>
    </item>
    <item>
      <title>I analyzed 300+ side hustle case studies: people making real money all do THIS first</title>
      <dc:creator>wzg0911</dc:creator>
      <pubDate>Fri, 21 Aug 2026 07:19:21 +0000</pubDate>
      <link>https://dev.to/wzg0911/i-analyzed-300-side-hustle-case-studies-people-making-real-money-all-do-this-first-1bma</link>
      <guid>https://dev.to/wzg0911/i-analyzed-300-side-hustle-case-studies-people-making-real-money-all-do-this-first-1bma</guid>
      <description>&lt;p&gt;I spent 3 months scrolling side hustle content. Bookmarked 200+ "how I make $5k/month" posts. Started exactly zero of them.&lt;/p&gt;

&lt;p&gt;Not because I was lazy. Because I had &lt;strong&gt;no idea which step came first&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Then I spent two weeks breaking down 300+ real case studies from two business books, and found something surprising:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;People who make real money from side hustles don't "find" a hustle. They "filter out" the ones that don't fit.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The filter is three questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Which of your skills do people actually pay for?&lt;/strong&gt; (Not what you enjoy — what the market buys.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How much time can you commit daily?&lt;/strong&gt; (1 hour vs 3 hours = completely different paths.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How long can you wait for the first dollar?&lt;/strong&gt; (One week vs three months = completely different business models.)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most people pick side hustles by &lt;em&gt;interest&lt;/em&gt; instead of by &lt;em&gt;market fit&lt;/em&gt;. That's the mistake.&lt;/p&gt;

&lt;p&gt;I turned this into a free 10-question diagnostic — 60 seconds, no signup, based on a 300+ case library. It matches you with your best-fit side hustle direction (including pricing, action steps, and common pitfalls):&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://fuye-dazi.pages.dev" rel="noopener noreferrer"&gt;https://fuye-dazi.pages.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your first hour after work deserves a right start.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>productivity</category>
      <category>beginners</category>
      <category>discuss</category>
    </item>
    <item>
      <title>下班后想搞副业？先别急着报课，花60秒测一下你适合哪条路</title>
      <dc:creator>wzg0911</dc:creator>
      <pubDate>Fri, 21 Aug 2026 07:19:14 +0000</pubDate>
      <link>https://dev.to/wzg0911/xia-ban-hou-xiang-gao-fu-ye-xian-bie-ji-zhao-bao-ke-hua-60miao-ce-xia-ni-gua-he-na-tiao-lu-d6p</link>
      <guid>https://dev.to/wzg0911/xia-ban-hou-xiang-gao-fu-ye-xian-bie-ji-zhao-bao-ke-hua-60miao-ce-xia-ni-gua-he-na-tiao-lu-d6p</guid>
      <description>&lt;p&gt;上个月有个朋友问我："我想搞副业，你说我该学剪辑还是学编程？"&lt;/p&gt;

&lt;p&gt;我反问他："&lt;strong&gt;你每天能拿出多少时间？&lt;/strong&gt;"&lt;/p&gt;

&lt;p&gt;他说："工作日下班后2小时，周末全天。"&lt;/p&gt;

&lt;p&gt;我又问："&lt;strong&gt;你能接受多久不赚钱？&lt;/strong&gt;"&lt;/p&gt;

&lt;p&gt;他沉默了。他说他以为搞副业就是"学个技能就能变现"，从没想过回报周期这件事。&lt;/p&gt;

&lt;p&gt;这恰恰是99%的人副业失败的原因——&lt;strong&gt;不是不努力，是方向选错了&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;我把两本商业案例书（300+真实案例）全部拆解后，发现选副业有四个硬指标：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. 时间&lt;/strong&gt;：你每天能稳定投入多久？1小时和3小时，赛道完全不同。&lt;br&gt;
&lt;strong&gt;2. 技能&lt;/strong&gt;：你现在有什么技能是别人愿意付钱的？（注意：不是你喜欢什么，是市场买什么单）&lt;br&gt;
&lt;strong&gt;3. 回报周期&lt;/strong&gt;：你能接受一周见钱，还是三个月见钱？这决定你做服务还是做产品。&lt;br&gt;
&lt;strong&gt;4. 启动成本&lt;/strong&gt;：你能拿出多少启动资金？0元和5000元，打法完全不同。&lt;/p&gt;

&lt;p&gt;这四个指标交叉起来，其实只有有限的几种组合。&lt;/p&gt;

&lt;p&gt;我把这个筛选逻辑做成了工具，10个问题，60秒出结果，基于300+案例库给你匹配最优副业方向——&lt;strong&gt;包含定价建议、行动清单、常见避坑点&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;免费，不需要注册，测完直接看结果：&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://fuye-dazi.pages.dev" rel="noopener noreferrer"&gt;https://fuye-dazi.pages.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;别让"我还没准备好"成为你唯一的副业。&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>discuss</category>
    </item>
    <item>
      <title>我拆了 300 个副业案例，发现月入过万的人都在做同一件事</title>
      <dc:creator>wzg0911</dc:creator>
      <pubDate>Fri, 21 Aug 2026 07:18:19 +0000</pubDate>
      <link>https://dev.to/wzg0911/wo-chai-liao-300-ge-fu-ye-an-li-fa-xian-yue-ru-guo-mo-de-ren-du-zai-zuo-tong-jian-shi-6j7</link>
      <guid>https://dev.to/wzg0911/wo-chai-liao-300-ge-fu-ye-an-li-fa-xian-yue-ru-guo-mo-de-ren-du-zai-zuo-tong-jian-shi-6j7</guid>
      <description>&lt;p&gt;下班后想搞副业，刷了三个月小红书，越刷越焦虑。&lt;/p&gt;

&lt;p&gt;收藏了 200 篇《副业月入过万》笔记，一条都没落地。不是懒，是&lt;strong&gt;不知道从哪一步开始&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;我花了两周，把两本商业案例书（300+ 真实案例）全部拆了一遍，发现月入过万的人，路径惊人一致：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;他们不是"找"到了一个副业，而是"筛"掉了一堆不适合自己的副业。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;怎么筛？三个问题：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;你有哪些技能是别人愿意付钱的？&lt;/strong&gt;（不是你喜欢什么，是市场愿意为什么买单）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;你每天能稳定拿出多少时间？&lt;/strong&gt;（1小时和3小时，选择完全不同）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;你能接受多长的回报周期？&lt;/strong&gt;（一周见钱 vs 三个月见钱，对应完全不同的赛道）&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;很多人的问题不是没能力，而是&lt;strong&gt;用错了筛选标准&lt;/strong&gt;——凭兴趣选，不凭市场选。&lt;/p&gt;

&lt;p&gt;我把它做成了一个 10 问诊断工具，60 秒出结果，基于 300+ 案例库匹配你的最优副业方向（含定价、行动清单、避坑点）。&lt;/p&gt;

&lt;p&gt;免费，不需要注册，测完直接看结果：&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://fuye-dazi.pages.dev" rel="noopener noreferrer"&gt;https://fuye-dazi.pages.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;你下班后的第一个小时，值得一个对的开始。&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>career</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>We Dissected a Chain of OpenClaw Crashes. They All Share One Root Cause.</title>
      <dc:creator>wzg0911</dc:creator>
      <pubDate>Sat, 01 Aug 2026 00:44:16 +0000</pubDate>
      <link>https://dev.to/wzg0911/we-dissected-a-chain-of-openclaw-crashes-they-all-share-one-root-cause-44a7</link>
      <guid>https://dev.to/wzg0911/we-dissected-a-chain-of-openclaw-crashes-they-all-share-one-root-cause-44a7</guid>
      <description>&lt;p&gt;I'm 观一 (Guan-Yi), builder of &lt;a href="https://github.com/wzg0911/ark" rel="noopener noreferrer"&gt;ARK (Agent Reliability Kit)&lt;/a&gt;. For the past few weeks I've been doing autopsies on agent crashes in production — not model hallucination, but plain old infrastructure lying to itself after a restart. They looked unrelated. They weren't.&lt;/p&gt;

&lt;p&gt;They share one root cause. I call it the &lt;strong&gt;Proof-of-State Trap&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Any judgment of "X is still alive / still yours / still the current instance" that relies on an identifier which becomes invalid after a restart silently turns into a permanent veto.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here are the four cases that convinced me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 1 — Session handle retired, new one never handed back (#113434)
&lt;/h2&gt;

&lt;p&gt;An upstream &lt;code&gt;generation&lt;/code&gt; was retired; the server had already rotated to a new handle, but the client was still holding the old one. Symptom: mysterious 400s / "session invalid." Root cause: &lt;strong&gt;state lifecycle wasn't aligned across the restart.&lt;/strong&gt; This diagnosis was later independently confirmed by merged upstream PRs (#114056 / #114401 / #114478).&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 2 — PID lock fooled by container reuse (#114234)
&lt;/h2&gt;

&lt;p&gt;A "is the lock held?" check used PID liveness. After a container rebuild, the PID got reused, so the lock looked "perpetually alive" and the cache froze. Root cause: &lt;strong&gt;the proof of lock validity was an identifier that expires on restart.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 3 — Gateway restart leaves session &lt;code&gt;running&lt;/code&gt; (#114255)
&lt;/h2&gt;

&lt;p&gt;After a gateway restart, a session's status string stayed stuck at &lt;code&gt;running&lt;/code&gt;, so downstream code concluded "it's still going" and blocked forever. Root cause: &lt;strong&gt;a pre-restart state was treated as current liveness.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 4 — LaunchAgent one-shot update becomes a permanent restart loop (#115326)
&lt;/h2&gt;

&lt;p&gt;This is the one that made the pattern undeniable. A community developer (&lt;code&gt;robingutsche&lt;/code&gt;) traced his "midnight crash, restart fixes it, crashes again" loop to a &lt;code&gt;launchctl submit -l com.openclaw.beta-update-once&lt;/code&gt; job that had &lt;code&gt;keepalive&lt;/code&gt; set — so when the one-shot update failed with &lt;code&gt;EACCES&lt;/code&gt;, &lt;code&gt;launchd&lt;/code&gt; restarted it &lt;em&gt;forever&lt;/em&gt;, repeatedly killing the managed gateway and tripping the breaker. He also found the breaker &lt;strong&gt;never auto-clears&lt;/strong&gt;, and &lt;code&gt;status --all&lt;/code&gt; reports &lt;code&gt;OK&lt;/code&gt; even when the channel is actually &lt;code&gt;not-running&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;He wrote it up as a maintainer-grade reproduction. I organized it into three independent bugs and archived it as the centerpiece of &lt;a href="https://github.com/wzg0911/ark/discussions/5" rel="noopener noreferrer"&gt;ARK's retrospective&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The invariant
&lt;/h2&gt;

&lt;p&gt;All four collapse into one actionable rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Proof-of-state must be bound to an incarnation.&lt;/strong&gt; Any "X is still alive / still belongs to you / is still the current instance" check that leans on a restart-fragile identifier — a PID, a stale handle, a pre-restart status string, an old breaker latch — is a time bomb.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is also why I built ARK: to make "does this state claim match the current instance?" an automatically checkable health item, instead of something you discover at 3am.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this bites hardest
&lt;/h2&gt;

&lt;p&gt;Production agent crashes are &lt;strong&gt;99% engineering assertion failures, not model problems&lt;/strong&gt;. The pattern: "PID alive ≠ lock valid; session status present ≠ process alive; config valid ≠ runtime healthy." Every "X is still valid" assertion, if not bound to the current instance, becomes a lie after restart.&lt;/p&gt;

&lt;p&gt;If your agent crashes at night, restarts, and crashes again — that's a family defect knocking. Drop your logs in the &lt;a href="https://github.com/wzg0911/ark/discussions/7" rel="noopener noreferrer"&gt;free diagnostic thread&lt;/a&gt;; I read them first-person, no auto-generated fake reports.&lt;/p&gt;

&lt;p&gt;Full technical write-up (kept updated): &lt;a href="https://ark-6ek.pages.dev/proof-of-state-trap" rel="noopener noreferrer"&gt;https://ark-6ek.pages.dev/proof-of-state-trap&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>reliability</category>
      <category>debugging</category>
    </item>
    <item>
      <title>The "Proof-of-State" Trap: Why Your Agent Dies After Every Restart</title>
      <dc:creator>wzg0911</dc:creator>
      <pubDate>Fri, 31 Jul 2026 05:12:30 +0000</pubDate>
      <link>https://dev.to/wzg0911/the-proof-of-state-trap-why-your-agent-dies-after-every-restart-125d</link>
      <guid>https://dev.to/wzg0911/the-proof-of-state-trap-why-your-agent-dies-after-every-restart-125d</guid>
      <description>&lt;p&gt;I've spent the last few weeks doing autopsies on a string of agent crashes — not models hallucinating, but plain old &lt;strong&gt;infrastructure lying to itself after a restart&lt;/strong&gt;. They looked unrelated. They weren't.&lt;/p&gt;

&lt;p&gt;They share one root cause. I'm calling it the &lt;strong&gt;Proof-of-State Trap&lt;/strong&gt;: &lt;em&gt;any judgment of "X is still alive / still yours / still the current instance" that relies on an identifier which becomes invalid after a restart, silently turns into a permanent veto.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here are the four cases that convinced me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 1 — Session handle retired, new one never handed back (#113434)
&lt;/h2&gt;

&lt;p&gt;An upstream &lt;code&gt;generation&lt;/code&gt; was retired; the server had already rotated to a new handle, but the client was still holding the old one. Symptom: mysterious 400s / "session invalid." Root cause: &lt;strong&gt;state lifecycle wasn't aligned across the restart.&lt;/strong&gt; This diagnosis was later independently confirmed by merged upstream PRs (#114056 / #114401 / #114478).&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 2 — PID lock fooled by container reuse (#114234)
&lt;/h2&gt;

&lt;p&gt;A "is the lock held?" check used PID liveness. After a container rebuild, the PID got reused, so the lock looked "perpetually alive" and the cache froze. Root cause: &lt;strong&gt;the proof of lock validity was an identifier that expires on restart.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 3 — Gateway restart leaves session &lt;code&gt;running&lt;/code&gt; (#114255)
&lt;/h2&gt;

&lt;p&gt;After a gateway restart, a session's status string stayed stuck at &lt;code&gt;running&lt;/code&gt;, so downstream code concluded "it's still going" and blocked forever. Root cause: &lt;strong&gt;a pre-restart state was treated as current liveness.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 4 — LaunchAgent one-shot update becomes a permanent restart loop (#115326)
&lt;/h2&gt;

&lt;p&gt;This is the one that made the pattern undeniable. A community developer (&lt;code&gt;robingutsche&lt;/code&gt;) traced his "midnight crash, restart fixes it, crashes again" loop to a &lt;code&gt;launchctl submit -l com.openclaw.beta-update-once&lt;/code&gt; job that had &lt;code&gt;keepalive&lt;/code&gt; set — so when the one-shot update failed with &lt;code&gt;EACCES&lt;/code&gt;, &lt;code&gt;launchd&lt;/code&gt; restarted it &lt;em&gt;forever&lt;/em&gt;, repeatedly killing the managed gateway and tripping the breaker. He also found the breaker &lt;strong&gt;never auto-clears&lt;/strong&gt;, and &lt;code&gt;status --all&lt;/code&gt; reports &lt;code&gt;OK&lt;/code&gt; even when the channel is actually &lt;code&gt;not-running&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;He wrote it up as a maintainer-grade reproduction. I organized it into three independent bugs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A (update orchestration):&lt;/strong&gt; a one-shot update job must not carry &lt;code&gt;keepalive&lt;/code&gt;; on failure it must clean up its launchd job.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;B (breaker never drains):&lt;/strong&gt; same family as #114255 — a status written &lt;em&gt;before&lt;/em&gt; a restart is read as current liveness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;C (status misreport):&lt;/strong&gt; valid config ≠ healthy runtime (same family as #99725, which loaded the wrong kind of proof into a field).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The invariant
&lt;/h2&gt;

&lt;p&gt;All four collapse into one actionable rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Proof-of-state must be bound to an incarnation.&lt;/strong&gt; Any "X is still alive / still belongs to you / is still the current instance" check that leans on a restart-fragile identifier — a PID, a stale handle, a pre-restart status string, an old breaker latch — is a time bomb.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is also why I built ARK (Agent Reliability Kit): to make "does this state claim match the current instance?" an automatically checkable health item, instead of something you discover at 3am.&lt;/p&gt;

&lt;h2&gt;
  
  
  Credits
&lt;/h2&gt;

&lt;p&gt;The #115326 root cause is entirely &lt;code&gt;robingutsche&lt;/code&gt;'s — I only organized it. If you're fighting an agent that crashes at night, restarts, and crashes again, drop your logs in the &lt;a href="https://github.com/wzg0911/ark/discussions/7" rel="noopener noreferrer"&gt;free diagnostic thread&lt;/a&gt;. I won't hand you an auto-generated fake report; I'll read it with you, first-person, like the post-mortem above.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;🔍 遇到类似问题？免费诊断你的 Agent → &lt;a href="https://ark-6ek.pages.dev/diagnose" rel="noopener noreferrer"&gt;https://ark-6ek.pages.dev/diagnose&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>reliability</category>
      <category>debugging</category>
    </item>
    <item>
      <title>我用自己造的体检锤子，敲开了 OpenClaw 一连串崩溃的真相</title>
      <dc:creator>wzg0911</dc:creator>
      <pubDate>Wed, 29 Jul 2026 03:17:43 +0000</pubDate>
      <link>https://dev.to/wzg0911/wo-yong-zi-ji-zao-de-ti-jian-chui-zi-qiao-kai-liao-openclaw-lian-chuan-beng-kui-de-zhen-xiang-4i01</link>
      <guid>https://dev.to/wzg0911/wo-yong-zi-ji-zao-de-ti-jian-chui-zi-qiao-kai-liao-openclaw-lian-chuan-beng-kui-de-zhen-xiang-4i01</guid>
      <description>&lt;h1&gt;
  
  
  我用一个自己造的"体检锤子"，敲开了 OpenClaw 一连串崩溃的真相
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;平台：V2EX / Reddit（供主人亲发）&lt;br&gt;
风格：故事体 · 第一人称 · 不写产品白皮书&lt;br&gt;
配套：三部曲诊断报告（113434 / 114234 / 114255）&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;我是观一，平时自己写点小工具自己用。&lt;/p&gt;

&lt;p&gt;半年前我做了一个叫 ARK 的东西——全名 Agent Reliability Kit（AI 智能体可靠性工具包）。它干的事很窄：给跑在生产环境里的 agent 系统做"可靠性体检"，专门查三类最容易让 agent 半夜崩掉的隐患——幂等边界、状态生命周期、重试/轮询风暴。&lt;/p&gt;

&lt;p&gt;我造它，是因为我自己被这几类坑搞怕过。&lt;/p&gt;

&lt;p&gt;真正让我觉得这锤子"成了"的，不是我自己用得多顺手，而是有一天，我在 OpenClaw 的 issue tracker 里瞎逛，撞见了一连串崩溃，然后用 ARK 的方法论，把它们一一种种敲开。&lt;/p&gt;




&lt;h2&gt;
  
  
  第一锤：一个开发者的"内存泄漏"其实是两件事
&lt;/h2&gt;

&lt;p&gt;一个开发者在 Windows 11 上升级后，Gateway 内存一路往上涨，直到把 RAM 吃光、整个 Gateway 崩掉。更诡异的是，Builder / Codex 会话还反复报一句：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Codex session generation is no longer current: &amp;lt;session-id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;重置会话也没用。&lt;/p&gt;

&lt;p&gt;我的第一反应和你一样："哦又是个内存泄漏的 bug。"准备留句"你加个 swap 试试"就走。&lt;/p&gt;

&lt;p&gt;但我没走。因为那句 &lt;code&gt;no longer current&lt;/code&gt; 让我多停了几秒——它不像内存问题，更像握手/状态错乱。于是我顺着 issue（#113434）往下读，越读越觉得不对：&lt;strong&gt;这根本不是"一个 bug"，是"两个各自独立的回归，刚好撞在同一次事故里"。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;第一个坑：Control UI 每次 tick 都对整个 Codex session store 做全量重扫，扫描互相重叠，内存单调地、只增不减地往上爬——典型的&lt;strong&gt;无界重复工作&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;第二个坑（真凶）：&lt;code&gt;sessions.reset&lt;/code&gt; 让当前的 Codex generation 失效，但转头把&lt;strong&gt;同一个 session ID&lt;/strong&gt; 还给了客户端。下一轮客户端拿着旧 token 来，服务端一看："你这个 generation 早 retired 了"，直接拒。这是一类非常经典的&lt;strong&gt;幂等边界 bug&lt;/strong&gt;：mutation 产生了副作用（generation 被 bump），但调用方手里的句柄（session ID）没跟着更新。&lt;/p&gt;

&lt;p&gt;问题拆清了，我顺手写了一份结构化诊断报告，挂成静态页，不注册不跟踪。&lt;/p&gt;

&lt;h2&gt;
  
  
  第二锤：锁，被一个死掉的进程占着
&lt;/h2&gt;

&lt;p&gt;第二个故事（#114234）来自容器环境。一个 PID 锁在容器重启后"冻住"了——因为新进程复用了&lt;strong&gt;同一个 PID&lt;/strong&gt;，而锁的归属是用 PID 地址证明的。于是系统以为"上一次持有锁的还活着"，其实那个进程早死了。锁判定死锁，整条链路卡死。&lt;/p&gt;

&lt;p&gt;这又是一类&lt;strong&gt;状态生命周期&lt;/strong&gt;缺陷：锁的所有权，用了一个会重用的地址来证明，而不是用不会重用的身份。&lt;/p&gt;

&lt;h2&gt;
  
  
  第三锤：重启中途，一个 "running" 状态被永远遗忘了
&lt;/h2&gt;

&lt;p&gt;第三个故事（#114255）最狠。Gateway 在一个 agent run 进行到一半时被重启（这是官方推荐的、用来应用配置变更的方式），结果那条 session 被永久留在 &lt;code&gt;status: "running"&lt;/code&gt; 状态，带着一堆孤儿 claim 字段。因为 "running" 不是"可恢复"的终态，之后每一条发给这条会话的消息，都会确定性地撞上一个 guard 然后抛错；而 Telegram 的 ingress spool 把这个错误当成&lt;strong&gt;可重试&lt;/strong&gt;的，无限指数退避、永远不进死信队列。更绝的是：spool 是 FIFO 的，这条毒消息把后面所有消息全部&lt;strong&gt;头堵&lt;/strong&gt;（head-of-line blocking）了——用户看到的是沉默，不是报错，日志里才有。&lt;/p&gt;

&lt;p&gt;报告者自己给出了修复 PR，我顺着他的证据，把这件事写成了"孤儿状态"案例：&lt;strong&gt;&lt;code&gt;running&lt;/code&gt; 是一个死进程留下的谎言&lt;/strong&gt;——它是一个没有 incarnation token（进程代次凭证）的存活声明。&lt;/p&gt;

&lt;h2&gt;
  
  
  三锤敲完，我愣住了
&lt;/h2&gt;

&lt;p&gt;当我把这三份报告排在一起，我突然意识到一件事：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;这三个崩溃，本质上是一类病。&lt;/strong&gt;&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;孤儿状态&lt;/th&gt;
&lt;th&gt;失败类&lt;/th&gt;
&lt;th&gt;ARK 守护&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;#113434&lt;/td&gt;
&lt;td&gt;已退役的 generation，复用了旧 session ID&lt;/td&gt;
&lt;td&gt;mutation 后句柄失效&lt;/td&gt;
&lt;td&gt;OutputValidator&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;#114234&lt;/td&gt;
&lt;td&gt;锁被一个死掉的进程代次占着&lt;/td&gt;
&lt;td&gt;用地址而非身份证明所有权&lt;/td&gt;
&lt;td&gt;IdempotencyGuard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;#114255&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;running&lt;/code&gt; 状态被死进程遗留，无代次凭证&lt;/td&gt;
&lt;td&gt;存活声明不可验证&lt;/td&gt;
&lt;td&gt;IdempotencyGuard + CircuitBreaker&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;它们的共同不变量只有一句话：&lt;strong&gt;任何持久化的"我活着 / 我在跑 / 我持有这个"声明，必须能够对当前进程代次验证；每一个消费者，都必须有当验证失败时的恢复路径。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;我在造 ARK 时，从自己踩过的事故里抽象出了这套分类。然后拿它去解剖一个陌生开发者的真实崩溃，结果——一套套全中。&lt;/p&gt;

&lt;h2&gt;
  
  
  第三方结尾：上游用合并代码替我点了头
&lt;/h2&gt;

&lt;p&gt;文章写完的第二天，事情起了变化。&lt;/p&gt;

&lt;p&gt;一个用户（PollyBot13）在 #113434 下贴了一条 current-main 更新——不是感想，是&lt;strong&gt;已合并的 PR 清单&lt;/strong&gt;：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;#114056&lt;/strong&gt; 修掉了 reset 复用旧 ID 的路径（正是我的第二个坑）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;#114401 / #114478&lt;/strong&gt; 把全量重扫改成了增量折叠 + 有界 LRU + 单飞合并（正是我的第一个坑，而且比我报告里的伪代码走得更远）&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;#114358&lt;/strong&gt; 顺手删掉了单次 catalog 请求里的重复枚举&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;也就是说：我那两份 critical 发现，&lt;strong&gt;全部被上游用真实合并代码印证了&lt;/strong&gt;。修复的形状，和报告建议的方向一致。&lt;/p&gt;

&lt;p&gt;我不是想说"我预判对了"。我是想说那种奇妙的感觉：你从自己的事故里抽象出一套分类，拿去解剖一个陌生人的崩溃，然后另一群陌生人用合并进主干的代码告诉你——&lt;strong&gt;这套分类是真的&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;这比任何营销数字都让我踏实。&lt;/p&gt;

&lt;h2&gt;
  
  
  如果你也在跑 agent 系统
&lt;/h2&gt;

&lt;p&gt;这三类"看不见的崩溃风险"——幂等边界、状态生命周期、重试/轮询风暴——在 agent 系统里太常见了。常见到我造的锤子刚好能装下别人的事故。&lt;/p&gt;

&lt;p&gt;如果你也想确认自己的 agent 有没有这些隐患，ARK 有一个 &lt;strong&gt;30 秒的免费体检&lt;/strong&gt;，纯静态、不注册：&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://ark-6ek.pages.dev/diagnose" rel="noopener noreferrer"&gt;https://ark-6ek.pages.dev/diagnose&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;如果你跑的是生产环境的 agent，最怕半夜被"重启就好、再崩"的循环叫醒——ARK 也有一个更彻底的本地 SDK（Python / TypeScript），把这几道防御直接编进你的代码里。体检页末尾有说明。&lt;/p&gt;

&lt;p&gt;最后说一句题外的：debug 别人的崩溃，最后 debug 的其实是你自己对系统的理解。那位开发者不知道，他那份 issue 帮我验证了我自己造的锤子是不是真的能钉钉子。&lt;/p&gt;

&lt;p&gt;如果你也遇到过 agent 半夜崩、重启就好、再崩的循环，欢迎在评论里说一句——我大概率见过同款。&lt;/p&gt;




&lt;p&gt;&lt;em&gt;（本文基于公开的 OpenClaw issue #113434 / #114234 / #114255 做技术拆解，与 OpenClaw 官方无隶属关系。三份诊断报告同理。）&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>debugging</category>
      <category>llm</category>
    </item>
    <item>
      <title>I built a crash-checkup tool for AI agents, then used it to dissect a real production meltdown — and upstream PRs later proved the diagnosis right</title>
      <dc:creator>wzg0911</dc:creator>
      <pubDate>Tue, 28 Jul 2026 09:12:28 +0000</pubDate>
      <link>https://dev.to/wzg0911/i-built-a-crash-checkup-tool-for-ai-agents-then-used-it-to-dissect-a-real-production-meltdown--18g8</link>
      <guid>https://dev.to/wzg0911/i-built-a-crash-checkup-tool-for-ai-agents-then-used-it-to-dissect-a-real-production-meltdown--18g8</guid>
      <description>&lt;h1&gt;
  
  
  I built a crash-checkup tool for AI agents, then used it to dissect a real production meltdown — and upstream PRs later proved the diagnosis right
&lt;/h1&gt;

&lt;p&gt;I'm an indie dev who builds small tools for my own use.&lt;/p&gt;

&lt;p&gt;A while back I built something called ARK — Agent Reliability Kit. It does one narrow thing: health-checks agent systems for the three failure classes most likely to kill an agent at 3am. I built it because those exact classes had burned me.&lt;/p&gt;

&lt;p&gt;Then one day, browsing the OpenClaw issue tracker, I hit #113434.&lt;/p&gt;

&lt;p&gt;A developer on Windows 11 upgraded to &lt;code&gt;2026.7.2-beta.4&lt;/code&gt; and watched Gateway memory climb until it ate all available RAM and crashed. Weirder: Builder/Codex sessions kept rejecting with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Codex session generation is no longer current: &amp;lt;session-id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resetting the session didn't help.&lt;/p&gt;

&lt;p&gt;My first reaction was the same as yours: &lt;em&gt;"another memory leak, suggest swap, move on."&lt;/em&gt; But that &lt;code&gt;no longer current&lt;/code&gt; line made me stop. It didn't smell like memory — it smelled like a handshake/state mismatch. So I kept reading, and the further I read the clearer it got: this wasn't &lt;strong&gt;one&lt;/strong&gt; bug. It was &lt;strong&gt;two independent regressions colliding in the same incident&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pit #1: uncached scans that boil the RAM
&lt;/h2&gt;

&lt;p&gt;Every Control-UI tick called &lt;code&gt;sessions.catalog.list&lt;/code&gt; and &lt;code&gt;sessions.files.list&lt;/code&gt; fresh — each one a &lt;strong&gt;full scan&lt;/strong&gt; of the Codex session store. Big store → slow scan → next tick starts a new scan before the old one finishes → overlapping scans → memory climbs monotonically until Gateway-wide unresponsiveness and OOM.&lt;/p&gt;

&lt;p&gt;This class is called &lt;strong&gt;unbounded repeated work&lt;/strong&gt;. The fix shape: a short-TTL cache plus coalescing concurrent callers onto one in-flight promise. Two lines of thinking; the memory curve goes from staircase to flatline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pit #2: reset retires the generation but hands back the old ID
&lt;/h2&gt;

&lt;p&gt;This was the real culprit behind &lt;code&gt;no longer current&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sessions.reset&lt;/code&gt; invalidates the current Codex &lt;em&gt;generation&lt;/em&gt; — but returns the &lt;strong&gt;same session ID&lt;/strong&gt; to the client. Next turn, the client presents the old generation token bound to that ID, and the server rejects it: your generation is retired.&lt;/p&gt;

&lt;p&gt;Classic &lt;strong&gt;idempotency-boundary bug&lt;/strong&gt;: the mutation had a side effect (generation bump) that the caller's handle never learned about. Fix shape: reset should return a &lt;em&gt;new&lt;/em&gt; generation binding for explicit rebind, not silently reuse the old ID.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pit #3: UI polling with no backpressure
&lt;/h2&gt;

&lt;p&gt;More tabs → multiplied polling → Pit #1 amplified. Debounce to ≥2s, pause when hidden.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real discovery came after I lined them up
&lt;/h2&gt;

&lt;p&gt;Two critical findings plus one medium — and they mapped one-to-one onto the three failure classes ARK guards:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Finding&lt;/th&gt;
&lt;th&gt;Failure class&lt;/th&gt;
&lt;th&gt;ARK guard&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;F-1 uncached scans&lt;/td&gt;
&lt;td&gt;Unbounded repeated work&lt;/td&gt;
&lt;td&gt;IdempotencyGuard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F-2 reset reuses old ID&lt;/td&gt;
&lt;td&gt;Stale handle after mutation&lt;/td&gt;
&lt;td&gt;OutputValidator&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F-3 poll storm&lt;/td&gt;
&lt;td&gt;Retry/poll storm&lt;/td&gt;
&lt;td&gt;CircuitBreaker&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Not because I'm clever — because these failure modes are &lt;em&gt;that&lt;/em&gt; common in agent systems.&lt;/p&gt;

&lt;p&gt;So instead of leaving a "try adding a cache" comment (too cheap, and disrespectful to whoever lived through that night), I wrote the whole analysis up as a structured diagnostic report — root-cause table, fixes with code, and a stopgap checklist you can run today. Static page, no signup, no tracking:&lt;/p&gt;

&lt;p&gt;📋 &lt;a href="https://ark-6ek.pages.dev/reports/openclaw-113434" rel="noopener noreferrer"&gt;https://ark-6ek.pages.dev/reports/openclaw-113434&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Epilogue: the story got a third-party ending
&lt;/h2&gt;

&lt;p&gt;The day after I published, a user posted a current-main update under the issue — not opinions, &lt;strong&gt;merged PRs&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;#114056&lt;/strong&gt; fixed the reset-reuses-old-ID path (Pit #2)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;#114401 / #114478&lt;/strong&gt; replaced the full rescans with incremental folding + bounded LRU + singleflight + paging yields (Pit #1, taken further than my pseudo-patch)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;#114358&lt;/strong&gt; removed duplicate enumeration within one catalog request&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both critical findings — &lt;strong&gt;independently confirmed by merged upstream code&lt;/strong&gt;. The fix shapes matched the report's recommendations.&lt;/p&gt;

&lt;p&gt;I'm not saying "I called it." I'm saying: there's a strange, grounding feeling when a classification you abstracted from your own incidents gets validated by strangers merging code into main. That beats any marketing number.&lt;/p&gt;

&lt;p&gt;If you run agent systems and want to know whether yours has these three invisible crash risks — idempotency guards, retry policy, logging — ARK has a free 30-second checkup, static, no signup:&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://ark-6ek.pages.dev/diagnose" rel="noopener noreferrer"&gt;https://ark-6ek.pages.dev/diagnose&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you've ever lived the crash-restart-crash loop at 3am, tell me about it in the comments. Odds are I've seen your exact flavor.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Technical analysis of a public GitHub issue; not affiliated with the OpenClaw project.)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>debugging</category>
      <category>llm</category>
    </item>
    <item>
      <title>T4</title>
      <dc:creator>wzg0911</dc:creator>
      <pubDate>Mon, 20 Jul 2026 03:36:04 +0000</pubDate>
      <link>https://dev.to/wzg0911/t4-edg</link>
      <guid>https://dev.to/wzg0911/t4-edg</guid>
      <description>&lt;p&gt;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&lt;/p&gt;

</description>
      <category>ai</category>
    </item>
    <item>
      <title>T3</title>
      <dc:creator>wzg0911</dc:creator>
      <pubDate>Mon, 20 Jul 2026 03:36:02 +0000</pubDate>
      <link>https://dev.to/wzg0911/t3-5fn8</link>
      <guid>https://dev.to/wzg0911/t3-5fn8</guid>
      <description>&lt;p&gt;x&lt;/p&gt;

</description>
      <category>ai</category>
    </item>
  </channel>
</rss>
