平台工程

成稿链接存进库没人读 · 写入方不等于展示方

入档:2026-07-30 一句话:字段有人写、有库存、接口也返回了,但没有任何页面读它——发布方在管理台填完成稿链接,任务书详情页一个字都不变;缺口跨了两轮迭代没被发现,因为在此之前人一直在正文里手写「交付情况」替系统把这件事做了

事实记录(不可修改区)

缺口长什么样

任务系统的成稿链接有三条写入路径:承接人在站内点「提交交付」、发布方在管理台手填、md 里的 deliverable 首次入库时当初值。

读路径零条。详情页上那条「交付:链接」读的是 deliveries 流水表——只有第一条路径才会产生行。线下交付、发布方代填这两类,成稿链接就只躺在 tasks.deliverable_url 里,页面上不存在。

顺带查出同族第二个洞:syncTasksINSERT 分支写 deliverable_url,UPDATE 分支不写。md 里补了链接、而库里那行已存在时,链接永远进不来——表现得像「同步不工作」,实际是两条分支的字段集不对称。

为什么跨了两轮迭代没被发现

  1. 之前三份任务书的成稿链接,是手写进正文的「## 交付情况」小节的——页面看起来一直是对的;
  2. frontmatter 的 deliverable 确实有一条读路径(任务书首页的「教程类标杆」板块),所以「这字段没人用」的直觉不成立;
  3. 直到发布方第一次真的走「只在管理台填、正文一个字不改」这条从没跑过的路径,缺口才现形。

四条可复用 insight

1. 写入方不等于展示方(同族第三形态)

一个字段有人写、有库存、接口也返回,不等于有人读它。链路上任一环没接,功能就等于不存在。

边界:只写不读也可能是对的(审计、留痕字段本就不上页面)。判据是「这个字段存在的目的是给人看吗」。

2. 手工兜底会掩盖缺失的系统路径

人用手写内容替系统把事做了,缺口就永远暴露不出来。发现某个功能「靠人手写补上」时要记一笔——那是系统缺口的坐标,不是工作习惯。

新增字段后至少走一遍不靠手写的路径。本轮的判据就是「只在管理台填,正文一个字不改,页面变不变」。

边界:手工兜底本身没错,它是上线速度的合理代价;错的是把兜底当常态而不记账。

3. upsert 两条分支的字段集要对齐

INSERT 写了某列、UPDATE 没写,表现为「只有第一次同步生效」,最像「同步不工作」。

4. 运行时字段的验收要造出「真相源与库不一致」的那一格

md 与库一致时,看不出到底是谁在生效。本轮自测造了三格:

场景md期望
用户踩到的那个无链接管理台手填显示(修复前:不显示)
证明「库为准」有链接隐藏
常态有链接同一条显示

只有第二格能证明「数据库为准」这条设计真的成立。双源字段的验收矩阵至少这三格,造状态用临时库 + 管理台接口,不许动生产数据。

本机验证姿势(可直接复用)

要验的是浏览器侧注水逻辑,构建产物证明不了。本机没装 playwright 包,但 playwright 的浏览器二进制在 %LOCALAPPDATA%\ms-playwright\:

关联文档

方法论验证等级

本轮 insight等级
写入方不等于展示方(存进库不等于看得见)⭐⭐ 二次验证(同族第三形态)
手工兜底会掩盖缺失的系统路径⭐⭐ 二次验证
upsert 两条分支的字段集要对齐⚠️ 首次发现
双源字段验收要造出「只有库里有」那一格⚠️ 首次发现

没有三次验证的方法论,不用于指导下一次决策——只作为「值得继续观察的假设」。前两条已二次成立,下次做同类迭代时按它们先自查再动手。

类型/平台工程主题/版块工程主题/踩坑