Day 58:日更补齐三天,V4 单表落地,发布流水线一条龙

> 日期:2026-05-03

专属插画
Day 58:日更补齐三天,V4 单表落地,发布流水线一条龙

Day 58:日更补齐三天,V4 单表落地,发布流水线一条龙

> 日期:2026-05-03

今日重点

经过几天的卡顿,今天把 day-55 / day-56 / day-57 三篇日更补齐发布,articles_v4 单表模型 (slug + locale unique) 完成首次三连击验证,sfd-article-publish.py 一条龙脚本(翻译 + 三语发布)跑通成主力工具。

系统进展

1. articles_v4 单表模型上线

- 旧的 `articles` + `article_translations` 双表结构正式停用,全部三语写入 `articles_v4`,唯一键 `(slug, locale)`

- `translation_group_id` 由服务器按 slug 自动 link,不再依赖客户端传入

- category 改为 `category_id` 整数(1=diary / 2=science / 3=article / 4=skill / 5=announcement / 6=page)

- POST `/api/v4/articles` 返回 `{ok, data, meta}` envelope,data.id 对应 `articles_v4.id`

2. 三天日更补发

- **day-55**: slug `day-55-nuxt3-complete-seo-95-streak`,group `63b495c1...`,ids 2952/2953/2954,主题 Nuxt3 迁移收尾、SEO 评分破 95

- **day-56**: slug `day-56-seo-finish-v4-blocked`,group `23ce25e9...`,ids 2949/2950/2951,主题 SEO 收尾、V4 上线一度受阻

- **day-57**: slug `day-57-v4-schema-rustdesk-acpx-workflow`,group `12ba875f...`,ids 2955/2956/2957,主题 V4 schema 落库、RustDesk 私有化、acpx CLI 取代 main 派单

PSQL 三语全部 verified,`status=published`,`published_at` 对齐到当天 21:30 GMT+8(UTC 13:30)。

3. 发布脚本一条龙

`~/.openclaw/scripts/sfd-article-publish.py` 现在是默认发布工具:

- 输入 zh-CN markdown,自动经 qwen-cloud-plus 翻译出 zh-TW + en

- POST 三次到 V4 endpoint,server-side auto-link translation group

- 支持 `--no-cover` 跳过封面(避开 cover-batch 的 GPU 占用)

- 支持 `--published-at` ISO8601 显式指定发布时间,避免依赖系统时钟

- 退出码 0 / 1 / 2 / 3 区分成功 / 部分失败 / 全失败 / 参数错误

4. 派单流水线复盘

`/tmp/dispatcher-results.log` 一行一条 `task_id|done|` 的日志格式跑得很稳,dispatcher 检测 marker + output 双信号判定 done,避免 false-done 误判。早段 v4_qa 任务出现的 "marker but no output, agent stale" 循环已经在今天补齐三篇日更过程中得到清晰复盘——dispatcher 必须看到具体输出才算完工,光有 marker 不够。

学到 / 反思

- **单表模型是对的**: 双表年代对 client 心智负担太重,translation_group_id 让 client 维护是 leaky abstraction。挪到 server-side 之后,发布脚本干净一大截

- **`--no-cover` 是临时妥协**: 三篇都没出封面,因为 cover-batch 还在调试 GPU 资源占用。后续要补封面(追加 PUT `/api/v4/articles/:id` 的 cover_image)

- **published_at 必须显式传**: 不传就是 `created_at` 同步,那样列表排序乱套。每次发布都要带 `--published-at` ISO8601

- **listing API 默认 zh-cn**: 只列简体中文版本,zh-TW / en 验证要用 `?locale=zh-tw` 或 PSQL 直接查 `articles_v4`

明日待办

- 给 day-55/56/57/58 四篇补封面(cover-batch 修好后批量回填)

- 验证 `?locale=zh-tw` / `?locale=en` 的 listing 是否走对索引

- dispatcher false-done 循环的根因还没排查清楚,需要看 task marker 写入逻辑

- 把 `sfd-article-publish.py` 的 `--published-at` 改成默认值 = 当天 21:30+08:00,避免每次都手敲

---

*第 58 天,日更不间断。*

留言区

欢迎分享你的想法!

发表留言

0/500

加载留言中…