报尾的那几天

差不多是从 10 月 8 日那篇日报开始,我把它之前的失败倒回来查了一遍。一开始判的是请求体超过本地阈值被拦下来,二次重建后用原来那篇稿子和原来的运行记录重跑,这次换成了 MiniMax-M3,请求压到大约 23 万字节,结果给了 PASS。之后封面、视觉、发布和后台状态回写一并跟上,GitLab pipeline #454 也确认了验证和生产部署都通过。原先那两个失败标记留下来当作历史记录,没去硬改。

中间我还顺手收了一件 Signal Radar 的事:上线授权拿到了,/runs 页面被列为退役对象,清理报告里说公开历史、专用组件和读取接口都处理好了,173 项测试、Lint 和生产构建都过;我点了“提交吧”,但提交哈希、推送、部署的终态那会儿还没在记录里出现。再往后那个 Electron 工作台转向其实发生在 10 月 14 日,算下来是周三的事,不是周末的尾巴——我得提醒自己别把时间线拍扁了。

同期 Ajin 的事也不少。我把一份提醒事项里的 41 项待办整个搬进了 Codex,原本希望它能做一轮校对;实测下来 12 项算完成,29 项还各有缺口。一台叫 hostprobe 的独立宿主里 nihao、zhongguo 都能稳稳上屏,TextEdit 里依然只能打拉丁字母——所以 Build119 的“真实跨应用输入验收”一直还挂着。键盘焦点、长文本、模型效果、延迟,这些都还没拿到一组能收尾的证据。

Build119、Build120 与那些没成功的代码签名

那段时间我盯得最紧的输入大概就是 Build119。它从一开始被 Xcode 在解析本地依赖的 Package.swift 时拦下来,到 swiftc -print-target-info 在受限环境里失败,再到 SwiftPM 内层沙箱起不来——我看到的影响链条是这样:sandbox_apply: Operation not permitted 是其中一个关键词。后来通过绕开内层沙箱,7 个本地包清单的解析就先恢复了;Xcode 自身的 7 条 permissionDenied 是否完全同源,那时候还没拿到定论。

为了不卡在签名环节,我临时批了一个“仅本地使用”的无签名标准构建方案;接着是正式包构建、签名校验、补开发工作区残留的 LaunchServices 注册;再往后 Build119 装上、安装审计通过、源码推到 origin/codex/build119-delivery,提交短哈希是 e6e0809。仓库那边工作区状态一混,我就没动 ajin-blog 和 OpenClaw 的推送——ajin-blog 推 main 是直接打生产部署的,我宁可先让它晒在本地。

之后又换了一轮,到底用了 Build120 还是 Build125,其实我自己都对过口径。计划、TODO、已安装版本和源码分别挂在 122、123、124、125 这几个号上——这是事实,不是推导;至于哪一个更接近“当前可用”,周末这个时点不一定有答案。

设计工作流、Signal Radar 和那些页面

codex-design-director 这个 Skill 是为了把已有的设计工作流材料整合起来做的。我用它给 Signal Radar 整页做了一次方向收敛,最后选了“每日头版 · 编辑精选”:延续暖纸报刊的阅读感,配深色辅助页和语义状态色。189 项测试通过,外加两项旧私有输入测试被跳过。授权范围里包含页面改版和 2026-10-09 那天的日报,但每日自动发布那时还没进来。

我自己大致设计类的工作在这个阶段是两条线并行:一条是 ajin-blog 三页(首页、文章详情、/team 团队档案页)的视觉改版,另一条是个人官网的 Hero 肖像替换与首页样式调整。两边都走到了“隔离验证 + 提交 + 推送 + 流水线”这一步;官网的 Hero 替换最终落在 4f5bb6e,验证在 GitLab pipeline 479 里过。

我得诚实说一句:这里很多东西是事实摆在那里——提交哈希、流水线编号——至于我是不是在某个时间点盯着其中一项盯得最久,我不敢替你推。

一些零碎,但不是噪声

视频那一段其实挺简单。IMG_5320.MOV 在 Insta360 Studio 里更新了 6.0.6,转出 IMG_5320_720p.mp4,再压成包放回原目录;分辨率留在 1280×720,编码从 HEVC 改到了 H.264。地理位置那条问完没有得到回答,原片本来带不带的都不影响交付。

ajin-blog 的发布回归其实出现过两次比较有趣的现象:一次是 unrelated_worktree_changed,另一次是 source_id_duplicate。前者是工作树里有未干净变更导致的发布中止,后者来自后台同时扫了主仓库和发布工作树,同一份 Git 提交被算两遍;封面的视觉合同冲突还会让人在 Cover 上反复改。两件事都修过,但封面那条直到周末还停在迭代。

清理那一边我做过两次独立尝试。一次用 Lemon Lite,扫描显示约 5.22 GB 候选项,清到一半我离开界面,最终回收量没有自己再去核验;另一次在 Codex 的清理对话里推进,期间我退出了 Edge 和微信,逻辑容量大约从 26.6 GB 涨到 42.6 GB——但这些都是对话给我的口径,是否有计入误差我没去独立量化。Time Machine 的本地快照、iOS 模拟器镜像、Edge 签名克隆、Codex 网页缓存,这些都列在后续排查范围里,我并不是说它们“已经被清掉”。

输入法候选取舍:让候选别再说话太“自动”

候选质量那一段,我跑了一轮多引擎对照,用 197 条合成输入、7 组固定配置,记下了 1,379 条候选;结论是:开源引擎在某些局部能改善,但要保住既有首选或前五召回的话,Ajin 当前的默认引擎还是不能换。libime 留作后续研究,libpinyin 在本轮诊断里偏弱。

候选列表尾部那种“自动组句生硬”的现象,我额外登记成 CAND-TAIL-01。我试过简拼直标和软惩罚,但都对关键中文召回有损;后来切到条件概率、冻结回归集和关键候选门槛这套方案。词组级条件概率做完一轮之后还有几个边角没收口,比如罕见词对的降权、未知词的回退路径怎么写,但这部分我也没在这些天里合并。

期间那些被切过来的事

中间我也研究过几个不大不小的对象:金铲铲 S18 的“五神谕”阵容、libpinyin/libime 等开源拼音方案、WeChatBridge、ChatGPT Intelligent UI、Mobbin 的 MCP 与 REST 边界、Dribbble 的 API 范围。Mobbin 那次对话里我特意让人把官方 MCP 搜索与 REST API 程序的门槛分开讲,原因是它们套餐不一样。这些都是“看了”,至于后续要不要正式接入,我没有动。

陪伴型那边涉及“养宠人”:原型 PDF 在 V2.1 上排到 P10“视频资料库”;用户侧视觉是青绿、奶油纸、暖棕,定位温暖田园、纸感阅读。中华田园猫和彭布罗克柯基的待机、招呼样稿过了背景检查;布偶猫待机源图也生成出来了。后面我会按 20 个角色分批扩展待机与招呼动画,工具预检在进行中。

反思:哪些是可以收口、哪些是要留给下一周

回过头看,我觉得这一周最该记住的两件事是:一是“日志里的事实”和“我后来推断的”不要混在一起说;二是“构建/安装/提交/推送”每一步都不要一口气推到终态,留一两个观察点看实际反馈,会比我硬冲更稳。Ajin 那个 Build120/Build125 的口径差,其实就是因为我开始没规定一个唯一权威号造成的;下一次我会把“已安装版本指纹”留作基线,其它全部对到它。

如果你下周打算接 Signal Radar /runs 的提交尾巴,或者继续把 TextEdit 的中文输入和端到端延迟拿下来——我只是把现状摆出来,不会替你决定先做哪个——可读、可控、可复演,是接下来我给自己提的最低线。