<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Vibe-Coding on Youqing Han - DevOps Engineer</title>
    <link>https://hanyouqing.com/tags/vibe-coding/</link>
    <description>Recent content in Vibe-Coding on Youqing Han - DevOps Engineer</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <managingEditor>ihanyouqing#gmail.com (#->@) (Youqing Han)</managingEditor>
    <webMaster>ihanyouqing#gmail.com (#->@) (Youqing Han)</webMaster>
    <lastBuildDate>Mon, 14 Sep 2026 11:00:00 +0800</lastBuildDate>
    <atom:link href="https://hanyouqing.com/tags/vibe-coding/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Vibe Coding 上线之后：一次 150+ commit 的复盘</title>
      <link>https://hanyouqing.com/blog/2026/09/when-vibe-coding-hits-production/</link>
      <pubDate>Mon, 14 Sep 2026 11:00:00 +0800</pubDate><author>ihanyouqing#gmail.com (#->@) (Youqing Han)</author>
      <guid>https://hanyouqing.com/blog/2026/09/when-vibe-coding-hits-production/</guid>
      <description>&lt;p&gt;演示里 vibe coding 很爽：自然语言描述需求，几秒就出一版能跑的代码。真正麻烦的是上线以后。&lt;/p&gt;&#xA;&lt;p&gt;我参与的一个多服务集成功能：用 AI 辅助开发，功能第一周就能演示，但修到生产可用断断续续花了一个多月，累计 150+ commits，其中大约六成是 fix——回归、边界、字段名对不上、并发坑。能力不是问题，缺的是工作方式。&lt;/p&gt;&#xA;&lt;p&gt;一句话概括我后来信的原则：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;AI 写出来的代码，质量上限 ≈ 你给它的规格有多完整。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;下面是按那次复盘整理出来的经验和教训。&lt;/p&gt;&#xA;&lt;h2 id=&#34;六类常见翻车&#34;&gt;六类常见翻车&lt;/h2&gt;&#xA;&lt;p&gt;那次 post-mortem 里，问题大致落在这六类，后面复杂功能里也反复撞见：&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-接口契约漂移&#34;&gt;1. 接口契约漂移&lt;/h3&gt;&#xA;&lt;p&gt;同一概念拆到多个模块、多个 AI session 里实现时，命名各自为政。数据模型里是 &lt;code&gt;user_identifier&lt;/code&gt;，API 变成 &lt;code&gt;user_id&lt;/code&gt;，前端又写成 &lt;code&gt;userId&lt;/code&gt;。AI 没有跨会话记忆，没人盯就会散。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;表现：&lt;/strong&gt; 联调时才发现字段对不上；前端空白或显示错数据。&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-外部系统的边角料&#34;&gt;2. 外部系统的边角料&lt;/h3&gt;&#xA;&lt;p&gt;训练数据里有通用文档，没有你们线上那版 SDK 的怪脾气。空字符串被拒、锁名最长 64、非法 ID 抛的是 validation 而不是 not-found——文档往往写得轻描淡写。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;表现：&lt;/strong&gt; 本地 happy path 全绿，生产里冒出没处理过的异常。&lt;/p&gt;&#xA;&lt;h3 id=&#34;3-内部基础设施的隐性约定&#34;&gt;3. 内部基础设施的隐性约定&lt;/h3&gt;&#xA;&lt;p&gt;审批流在非生产环境会跳步、异步任务要等事务提交后再发、分布式锁 key 有长度限制……这些东西通常不在 AI 能读到的文档里。它会按「通用正确」来写。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;表现：&lt;/strong&gt; 单测/隔离测都过，进 staging 端到端就怪。&lt;/p&gt;&#xA;&lt;h3 id=&#34;4-并发语义想当然&#34;&gt;4. 并发语义想当然&lt;/h3&gt;&#xA;&lt;p&gt;看起来像有保护的 ORM 调用，常常没有。&lt;code&gt;update()&lt;/code&gt; 按状态过滤再改计数，可能返回「匹配 1 行」——匹配了，但未必改了。行锁挡不了两个并发 insert 同时通过 uniqueness 检查。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
