From c0ea7ea06621eca574f18a13ca60a90c28bab217 Mon Sep 17 00:00:00 2001 From: hoelee Date: Thu, 29 Oct 2026 13:31:32 +0800 Subject: [PATCH] docs(review): hygiene cleanup and review preparation for 3 pending posts --- docs/consultant-review/AUDIT-TRACKER.md | 192 +- docs/consultant-review/audit-tracker.json | 2483 +++++++++-------- ...payment-and-offline-licensing-pipelines.md | 6 +- ...rating-80-technical-covers-with-comfyui.md | 14 +- .../traefik-yaegi-plugin-package-name-trap.md | 12 +- ...payment-and-offline-licensing-pipelines.md | 6 +- ...rating-80-technical-covers-with-comfyui.md | 8 +- .../traefik-yaegi-plugin-package-name-trap.md | 4 +- 8 files changed, 1385 insertions(+), 1340 deletions(-) diff --git a/docs/consultant-review/AUDIT-TRACKER.md b/docs/consultant-review/AUDIT-TRACKER.md index 05689f9..a393028 100644 --- a/docs/consultant-review/AUDIT-TRACKER.md +++ b/docs/consultant-review/AUDIT-TRACKER.md @@ -1,7 +1,7 @@ # 全站文章顾问审阅状态总控台 (Audit Tracker) -> **最后同步时间**:2026-10-27 06:14:26 -> **全站总文章数**:91 篇 | **已审批完成**:91 篇 (100.0%) | **待审阅**:0 篇 +> **最后同步时间**:2026-10-29 13:18:48 +> **全站总文章数**:97 篇 | **已审批完成**:94 篇 (96.9%) | **待审阅**:3 篇 ## 一、操作命令速查 - `python scripts/manage_review.py list` — 查看待审与已审概览 @@ -12,94 +12,100 @@ ## 二、文章审核状态总表 | # | 分类 | 文章 Slug | 中文标题 | 状态 | 所在批次 | 审批时间 | 顾问备注 | |---|---|---|---|:---:|:---:|:---:|---| -| 1 | `ai` | `best-ai-video-generators-2026` | 2026 年最佳 AI 视频生成器:免费与付费对比,以及我的 LTX-2.3 实测 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 2 | `ai` | `five-step-ai-roadmap-what-i-actually-run` | 全网都在转的 AI 五步学习路线 —— 我真正在生产里跑的是哪几步 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 3 | `ai` | `giving-ai-your-mouse-and-keyboard-safely` | 把鼠标和键盘交给 AI 之前:Windows 桌面 MCP 的安全边界与实战防线 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 4 | `ai` | `i-let-an-agent-manage-my-shopee-vouchers` | 我让 AI 助手管我的 Shopee 优惠券 —— 它建了一张我没批准的券 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 5 | `ai` | `plugging-windows-desktop-control-into-four-ai-agents` | 把 Windows 桌面控制接进 4 款 AI Agent:Hermes、OpenCode、Claw 与 Claude 的实战架构 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 6 | `ai` | `running-ai-video-locally-on-a-12gb-gpu` | 12GB 显卡跑本地 AI 视频:Wan 2.2 加 SeedVR2 的真实数据 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 7 | `ai` | `running-tts-as-a-service-with-token-sidecars` | 我用两个 Cron 容器跑了一年的语音合成服务 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 8 | `ai` | `slashing-agent-context-with-a-code-graph` | 别再把整个 Repo 喂给 Agent:用 Code Graph 斩断 Token 膨胀与遗忘陷阱 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 9 | `ai` | `using-chinese-llm-apis-from-malaysia` | 从马来西亚使用中国大模型 API:真正可行的方法 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 10 | `ai` | `why-i-still-bought-a-local-gpu` | Claude 和 GPT 明明更强,我为什么还是买了 GPU 跑本地 AI | ✅ 已通过 | Batch-01 | 2026-10-27 05:26 | 外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换) | -| 11 | `ai` | `yue2-on-a-12gb-gpu-songs-that-lost-their-endings` | 为什么我的 AI 歌曲总是丢结尾:在 12GB 显卡上跑 YuE2 | ✅ 已通过 | Batch-01 | 2026-10-27 05:26 | 外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换) | -| 12 | `case-studies` | `ai-furniture-compositing-with-flux-kontext` | 我如何用 FLUX.1 Kontext 打造 AI 家具合成演示 | ✅ 已通过 | Batch-01 | 2026-10-27 05:26 | 外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换) | -| 13 | `case-studies` | `from-audio-to-a-4-minute-ai-music-video` | 从一首歌到 4 分钟完整 MV:我如何用 Gemini、AI 生成与 Filmora 剪辑串起全流程实操 | ✅ 已通过 | Batch-01 | 2026-10-27 05:26 | 外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换) | -| 14 | `case-studies` | `how-i-built-an-automated-music-video-pipeline` | 我是如何用 Remotion 与 Docker CDP 打造全自动 MV 生成与多语种油管发布流的 | ✅ 已通过 | Batch-01 | 2026-10-27 05:26 | 外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换) | -| 15 | `case-studies` | `how-i-built-the-digikedai-telegram-bot` | 我是如何构建 DigiKedai Telegram AI 客服机器人的 | ✅ 已通过 | Batch-01 | 2026-10-27 05:26 | 外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换) | -| 16 | `case-studies` | `how-i-host-this-blog` | 我是如何托管这个博客的:Astro、Gitea Actions 与自托管 CI/CD | ✅ 已通过 | Batch-01 | 2026-10-27 05:26 | 外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换) | -| 17 | `case-studies` | `how-i-made-my-own-songs-with-suno-ai` | 我用 Suno AI 做出自己的歌 | ✅ 已通过 | Batch-01 | 2026-10-27 05:26 | 外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换) | -| 18 | `case-studies` | `how-i-vetted-20-vps-providers-with-parallel-subagents` | 如何用并行子代理在三小时内核查 20 家 VPS 服务商 | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | -| 19 | `case-studies` | `loop-engineering-without-a-coding-agent` | 没有 Coding Agent 的 Loop Engineering:撑起我这套基础设施的 11 个定时任务 | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | -| 20 | `case-studies` | `one-prometheus-for-unraid-synology-and-a-vps` | 用一个 Prometheus 监控 unRaid、群晖 NAS 和 VPS:我做错的四件事 | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | -| 21 | `case-studies` | `running-production-infrastructure-solo` | 一个人跑生产基础设施:三台主机、162 个容器 | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | -| 22 | `case-studies` | `self-healing-digital-goods-entitlements` | 数字商品的自愈式访问控制:NocoDB、n8n 与 AList | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | -| 23 | `case-studies` | `self-hosted-speech-to-text-api` | 自建语音转文字服务:打字速度的 3 倍以上,而且数据不出内网 | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | -| 24 | `case-studies` | `self-hosted-tts-cosyvoice2-n8n-gpu` | 从云端转本地:在 12GB 显卡与群晖 N8N 上搭建中英混读高保真 TTS 语音栈 | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | -| 25 | `case-studies` | `self-hosting-mem0-memory-stack` | 我如何在私有存储节点上自托管 Mem0 记忆栈(让 AI 助手拥有持久记忆) | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | -| 26 | `case-studies` | `shipping-an-ai-photo-editor-as-a-wordpress-plugin` | 把 AI 修图工具做成 WordPress 插件:22 个版本换来的经验 | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | -| 27 | `case-studies` | `syncing-a-self-improving-ai-agent-across-machines` | 在多台机器之间同步一个会自我学习的 AI Agent | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | -| 28 | `case-studies` | `the-single-writer-rule-for-coding-agents` | 代码只让一个 AI 改:我是如何避开多 Agent 协同踩坑的「单写多审」架构 | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 29 | `case-studies` | `when-to-give-your-agent-physical-clicks` | 什么时候该让 AI 操控物理鼠标(以及什么时候绝对不要用) | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 30 | `case-studies` | `why-i-built-a-video-knowledge-base` | 为什么我要做视频精读知识库:把收藏夹吃灰的短视频变成可检索笔记 | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 31 | `case-studies` | `why-your-headless-browser-cant-scrape-everything` | 为什么你的无头浏览器不是万能爬虫 | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 32 | `devops` | `authentik-css-greater-than-bug` | 一个字符让我的 authentik CSS 静默失效 | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 33 | `devops` | `authentik-forward-auth-gate-wasnt-live` | 验证完全正确的 Forward-Auth 网关——其实并未上线 | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 34 | `devops` | `authentik-major-upgrade-gotchas` | Authentik 从 2025.8 升级到 2026.8:那些没人提醒你会坏掉的部分 | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 35 | `devops` | `automating-cyberpanel-without-the-ui` | 不用界面管理 CyberPanel:逆向一个没有文档的 v2 API | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 36 | `devops` | `docker-reported-exit-0-the-oom-killer-disagreed` | Docker 报告退出码 0,内核却早已执行 OOM-Kill | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 37 | `devops` | `every-player-stuttered-the-file-was-fine` | 每个播放器都在同一个视频上卡顿,而文件本身是无辜的 | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 38 | `devops` | `hardening-a-tor-onion-service` | 加固 Tor 洋葱服务:真正重要的是什么 | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | -| 39 | `devops` | `it-reported-success-nothing-had-changed` | 它报告了成功,可实际上什么都没变 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | -| 40 | `devops` | `n8n-v1-to-v2-upgrade-gotchas` | n8n v1 升级到 v2:一个日志文件里的七项废弃警告 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | -| 41 | `devops` | `one-hostname-public-tracker-sso-dashboard` | 公开的埋点与要 SSO 的仪表盘,怎么共用一个域名 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | -| 42 | `devops` | `passbolt-hang-three-failure-modes` | Passbolt 界面反复卡死——一个缺失的配置文件引发的三种故障模式 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | -| 43 | `devops` | `patching-workbench-26-for-mariadb` | 当数据库客户端对你撒谎:为 MariaDB 修补 Workbench 26 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | -| 44 | `devops` | `php2shell-patching-every-php-runtime-i-manage` | PHP2Shell:我管的每台机器,PHP 运行时全都中了 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | -| 45 | `devops` | `putting-a-front-door-on-an-app-you-cant-modify` | 给自己改不了源码的应用装一扇前门 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | -| 46 | `devops` | `read-only-nocodb-dashboard-for-a-remote-database` | 给另一台机器上的数据库配一个 NocoDB 只读看板 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | -| 47 | `devops` | `replacing-rdpguard-with-ipban` | 用 IPBan 替换 RDPGuard:没人写出来的三个坑 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | -| 48 | `devops` | `space-reclamation-wasnt-stuck-it-was-waiting` | 空间回收没卡住,它只是在等明天早上 09:29 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | -| 49 | `devops` | `synology-spreadsheet-api-is-a-container` | Synology 电子表格 API 是一个容器,不是一个 API 端点 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | -| 50 | `devops` | `that-dying-ssd-was-just-a-bad-sata-cable` | 我差点把这颗 SSD 送修——真正坏的是 SATA 数据线 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | -| 51 | `devops` | `the-cause-was-trim-not-the-ssds` | 换了不同的硬盘,同样的损坏又来了——真凶是 TRIM,不是 SSD | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | -| 52 | `devops` | `the-upstream-was-deleted-then-came-back-rewritten` | 上游被删了,然后带着一个重写版回来 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | -| 53 | `devops` | `unraid-stop-array-hangs-on-swapfile` | Unraid 停止阵列时卡死的真相:Swapfile 锁住挂载点 — 附修复方案 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | -| 54 | `devops` | `uploading-large-videos-to-youtube-via-cdp` | 用 CDP 自动化上传百兆视频到 YouTube:跨越 DevTools 内存墙的 Docker 归档法 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | -| 55 | `devops` | `vetting-an-open-source-dependency-before-you-bet-on-it` | 如何在押注前验证一个开源依赖:我用的六项检查 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | -| 56 | `devops` | `when-smart-says-healthy-but-your-raid-is-corrupting-data` | SMART 显示健康,RAID 却在悄悄损坏数据 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | -| 57 | `devops` | `why-chrome-forgets-its-tabs-in-a-container` | 为什么容器里的 Chrome 会忘记标签页 —— 以及我是怎么修好的 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | -| 58 | `devops` | `why-telegram-bot-notifications-die` | Telegram 机器人通知为什么发不出去:IPv6、DNS 和一个追查了一整天的 400 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | -| 59 | `devops` | `why-your-cdp-clicks-silently-fail` | 为什么你的 CDP 点击会静默失效:平滑滚动、最小化窗口与 JS 派发事件 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | -| 60 | `devops` | `why-your-grafana-dashboard-shows-no-data` | Prometheus 明明有数据,Grafana 面板却全是 No data 的原因 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | -| 61 | `devops` | `your-disk-full-alert-is-lying` | 你的“磁盘将满”告警在说谎:别再按百分比告警 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | -| 62 | `engineering` | `adding-english-mode-to-a-chinese-only-web-app` | 浏览器翻译没有 API:我给一个纯中文网页应用加上了英文模式 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | -| 63 | `engineering` | `debugging-remotion-video-jitter` | 排查 Remotion 视频抽搐:为什么在背景图挂载音频低频 Scale 会毁了转场 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | -| 64 | `engineering` | `embedding-fonts-so-a-pdf-looks-the-same-everywhere` | 把字体嵌进 PDF,让它在任何机器上都长一样 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | -| 65 | `engineering` | `jpa-version-field-lost-update` | 那个把静默丢失更新变成 409 的 JPA 字段:@Version 乐观锁 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | -| 66 | `engineering` | `migrating-codeigniter-iis-to-openlitespeed` | 把 CodeIgniter 4 应用从 IIS 迁移到 OpenLiteSpeed | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | -| 67 | `engineering` | `scraping-bot-walled-marketplace-warm-browser-session` | 用「热浏览器会话」爬取有反爬墙的电商网站 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | -| 68 | `engineering` | `two-ways-a-javascript-file-stops-working-and-looks-fine` | JavaScript 文件静默失效的两种方式:而页面看上去一切正常 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | -| 69 | `engineering` | `verifying-a-pdf-report-page-by-page` | 逐页验证一份 19 页的 PDF 报告 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | -| 70 | `engineering` | `why-500000-lines-of-commit-churn-only-left-230000-in-production` | 30 天提交 51.8 万行,生产环境只留下 23.5 万行 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 71 | `notes` | `adding-a-domain-to-someone-elses-mail-server` | 给别人家的邮件服务器加一个域名 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 72 | `notes` | `hello-world` | 你好,世界 —— 关于这个博客 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 73 | `notes` | `my-backup-was-using-someone-elses-api-quota` | 我的备份爬得比爬虫还慢,因为我在用别人的 API 配额 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 74 | `notes` | `nocodb-sso-is-a-licensed-feature` | NocoDB SSO 是授权功能:环境变量不会告诉你的事 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 75 | `notes` | `reading-a-containers-own-api-docs` | 与其看供应商文档,不如直接读容器自带的 API 文档 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 76 | `notes` | `smartctl-exit-code-32-skips-the-disks-that-matter` | smartctl 退出码 32:专门跳过你最该看的硬盘的那个“错误” | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 77 | `notes` | `stop-writing-agent-prompts-for-deterministic-work` | 确定性的活,别再用 Agent Prompt 去跑 | ✅ 已通过 | Batch-03 | 2026-10-27 05:22 | 外部顾问审阅通过并落地修改 | -| 78 | `notes` | `synology-api-401-with-the-correct-password` | 密码正确,Synology API 登录却返回 401,问题出在哪 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 79 | `notes` | `the-nocodb-attachment-that-wouldnt-update` | NocoDB 附件字段怎么改都不生效,和一个漏网的正则 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 80 | `notes` | `upgrading-codeigniter-46-to-47` | CodeIgniter 4.6 升级到 4.7:官方指南没说到的破坏性变更 | ✅ 已通过 | Batch-03 | 2026-10-27 05:22 | 外部顾问审阅通过并落地修改 | -| 81 | `notes` | `why-is-my-tts-model-repeating-percent` | 为什么本地语音合成一直在念 “Percent”?语音管线里的 URL 编码与沙盒避坑记 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 82 | `notes` | `why-multi-agent-coding-fails` | 为什么多个 AI 一起写代码总会烂尾?传话失真与隐式决策困境 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 83 | `notes` | `why-your-windows-mcp-calls-silently-fail` | 为什么你的 Windows 桌面 MCP 调用会静默失败:攻破 10 秒空闲门禁与避坑实录 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 84 | `tutorials` | `calibrating-intel-quick-sync-hevc-quality` | 校准 Intel Quick Sync HEVC:28 与 30 之间的悬崖,和一个毫无作用的 preset | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 85 | `tutorials` | `does-hevc-actually-shrink-your-files` | 转成 HEVC 到底会不会让文件变小?我实测了 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 86 | `tutorials` | `generating-full-length-songs-with-yue2-comfyui` | 用 YuE2 BF16 生成完整长歌:突破时长限制与音频硬截断 | ✅ 已通过 | Batch-03 | 2026-10-27 06:04 | 第3批微调项落地并通过:时长校正283.1s/单调时间戳与防死锁/专业人设去二次元俚语/B2B转化增强 | -| 87 | `tutorials` | `generating-subtitles-for-songs-without-timestamps` | 给没有时间戳的歌曲自动生成字幕 | ✅ 已通过 | Batch-01 | 2026-10-27 06:11 | Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta | -| 88 | `tutorials` | `how-to-verify-a-hosting-provider-before-you-buy` | 购买主机前,如何核实一家服务商的真实情况 | ✅ 已通过 | Batch-01 | 2026-10-27 06:11 | Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta | -| 89 | `web3` | `chainlink-vrf-v2-lottery-contract` | 一个基于 Chainlink VRF v2.5 与 Automation 的自动化彩票合约 | ✅ 已通过 | Batch-01 | 2026-10-27 06:11 | Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta | -| 90 | `web3` | `fully-on-chain-svg-nfts` | 全链上 SVG NFT:把艺术作品放进合约里 | ✅ 已通过 | Batch-01 | 2026-10-27 06:11 | Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta | -| 91 | `web3` | `why-my-on-chain-nft-art-changed-on-windows` | 为什么在 Windows 上克隆后,我的链上 NFT 图像变了 | ✅ 已通过 | Batch-01 | 2026-10-27 06:11 | Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta | +| 1 | `ai` | `batch-generating-80-technical-covers-with-comfyui` | 用 ComfyUI 批量闭环 80+ 张技术图文封面:设计规范约束、留白控制与批处理工作流 | ⏳ 待审阅 | 未分配 | - | | +| 2 | `ai` | `best-ai-video-generators-2026` | 2026 年最佳 AI 视频生成器:免费与付费对比,以及我的 LTX-2.3 实测 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 3 | `ai` | `five-step-ai-roadmap-what-i-actually-run` | 全网都在转的 AI 五步学习路线 —— 我真正在生产里跑的是哪几步 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 4 | `ai` | `giving-ai-your-mouse-and-keyboard-safely` | 把鼠标和键盘交给 AI 之前:Windows 桌面 MCP 的安全边界与实战防线 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 5 | `ai` | `i-let-an-agent-manage-my-shopee-vouchers` | 我让 AI 助手管我的 Shopee 优惠券 —— 它建了一张我没批准的券 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 6 | `ai` | `plugging-windows-desktop-control-into-four-ai-agents` | 把 Windows 桌面控制接进 4 款 AI Agent:Hermes、OpenCode、Claw 与 Claude 的实战架构 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 7 | `ai` | `running-ai-video-locally-on-a-12gb-gpu` | 12GB 显卡跑本地 AI 视频:Wan 2.2 加 SeedVR2 的真实数据 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 8 | `ai` | `running-tts-as-a-service-with-token-sidecars` | 我用两个 Cron 容器跑了一年的语音合成服务 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 9 | `ai` | `slashing-agent-context-with-a-code-graph` | 别再把整个 Repo 喂给 Agent:用 Code Graph 斩断 Token 膨胀与遗忘陷阱 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 10 | `ai` | `using-chinese-llm-apis-from-malaysia` | 从马来西亚使用中国大模型 API:真正可行的方法 | ✅ 已通过 | Batch-01 | 2026-10-27 03:00 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 11 | `ai` | `why-i-still-bought-a-local-gpu` | Claude 和 GPT 明明更强,我为什么还是买了 GPU 跑本地 AI | ✅ 已通过 | Batch-01 | 2026-10-27 05:26 | 外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换) | +| 12 | `ai` | `yue2-on-a-12gb-gpu-songs-that-lost-their-endings` | 为什么我的 AI 歌曲总是丢结尾:在 12GB 显卡上跑 YuE2 | ✅ 已通过 | Batch-01 | 2026-10-27 05:26 | 外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换) | +| 13 | `case-studies` | `ai-furniture-compositing-with-flux-kontext` | 我如何用 FLUX.1 Kontext 打造 AI 家具合成演示 | ✅ 已通过 | Batch-01 | 2026-10-27 05:26 | 外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换) | +| 14 | `case-studies` | `architecting-sea-payment-and-offline-licensing-pipelines` | 在东南亚交付桌面商业软件:对接 toyyibPay 本地网银与 Keygate 机器码离线授权 | ⏳ 待审阅 | 未分配 | - | | +| 15 | `case-studies` | `from-audio-to-a-4-minute-ai-music-video` | 从一首歌到 4 分钟完整 MV:我如何用 Gemini、AI 生成与 Filmora 剪辑串起全流程实操 | ✅ 已通过 | Batch-01 | 2026-10-27 05:26 | 外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换) | +| 16 | `case-studies` | `how-i-built-an-automated-music-video-pipeline` | 我是如何用 Remotion 与 Docker CDP 打造全自动 MV 生成与多语种油管发布流的 | ✅ 已通过 | Batch-01 | 2026-10-27 05:26 | 外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换) | +| 17 | `case-studies` | `how-i-built-the-digikedai-telegram-bot` | 我是如何构建 DigiKedai Telegram AI 客服机器人的 | ✅ 已通过 | Batch-01 | 2026-10-27 05:26 | 外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换) | +| 18 | `case-studies` | `how-i-host-this-blog` | 我是如何托管这个博客的:Astro、Gitea Actions 与自托管 CI/CD | ✅ 已通过 | Batch-01 | 2026-10-27 05:26 | 外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换) | +| 19 | `case-studies` | `how-i-made-my-own-songs-with-suno-ai` | 我用 Suno AI 做出自己的歌 | ✅ 已通过 | Batch-01 | 2026-10-27 05:26 | 外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换) | +| 20 | `case-studies` | `how-i-vetted-20-vps-providers-with-parallel-subagents` | 如何用并行子代理在三小时内核查 20 家 VPS 服务商 | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | +| 21 | `case-studies` | `loop-engineering-without-a-coding-agent` | 没有 Coding Agent 的 Loop Engineering:撑起我这套基础设施的 11 个定时任务 | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | +| 22 | `case-studies` | `one-prometheus-for-unraid-synology-and-a-vps` | 用一个 Prometheus 监控 unRaid、群晖 NAS 和 VPS:我做错的四件事 | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | +| 23 | `case-studies` | `running-production-infrastructure-solo` | 一个人跑生产基础设施:三台主机、162 个容器 | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | +| 24 | `case-studies` | `self-healing-digital-goods-entitlements` | 数字商品的自愈式访问控制:NocoDB、n8n 与 AList | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | +| 25 | `case-studies` | `self-hosted-speech-to-text-api` | 自建语音转文字服务:打字速度的 3 倍以上,而且数据不出内网 | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | +| 26 | `case-studies` | `self-hosted-tts-cosyvoice2-n8n-gpu` | 从云端转本地:在 12GB 显卡与群晖 N8N 上搭建中英混读高保真 TTS 语音栈 | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | +| 27 | `case-studies` | `self-hosting-mem0-memory-stack` | 我如何在私有存储节点上自托管 Mem0 记忆栈(让 AI 助手拥有持久记忆) | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | +| 28 | `case-studies` | `shipping-an-ai-photo-editor-as-a-wordpress-plugin` | 把 AI 修图工具做成 WordPress 插件:22 个版本换来的经验 | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | +| 29 | `case-studies` | `syncing-a-self-improving-ai-agent-across-machines` | 在多台机器之间同步一个会自我学习的 AI Agent | ✅ 已通过 | Batch-02 | 2026-10-27 04:22 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠) | +| 30 | `case-studies` | `the-single-writer-rule-for-coding-agents` | 代码只让一个 AI 改:我是如何避开多 Agent 协同踩坑的「单写多审」架构 | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 31 | `case-studies` | `when-to-give-your-agent-physical-clicks` | 什么时候该让 AI 操控物理鼠标(以及什么时候绝对不要用) | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 32 | `case-studies` | `why-i-built-a-video-knowledge-base` | 为什么我要做视频精读知识库:把收藏夹吃灰的短视频变成可检索笔记 | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 33 | `case-studies` | `why-your-headless-browser-cant-scrape-everything` | 为什么你的无头浏览器不是万能爬虫 | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 34 | `devops` | `authentik-css-greater-than-bug` | 一个字符让我的 authentik CSS 静默失效 | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 35 | `devops` | `authentik-forward-auth-gate-wasnt-live` | 验证完全正确的 Forward-Auth 网关——其实并未上线 | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 36 | `devops` | `authentik-major-upgrade-gotchas` | Authentik 从 2025.8 升级到 2026.8:那些没人提醒你会坏掉的部分 | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 37 | `devops` | `automating-cyberpanel-without-the-ui` | 不用界面管理 CyberPanel:逆向一个没有文档的 v2 API | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 38 | `devops` | `docker-reported-exit-0-the-oom-killer-disagreed` | Docker 报告退出码 0,内核却早已执行 OOM-Kill | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 39 | `devops` | `every-player-stuttered-the-file-was-fine` | 每个播放器都在同一个视频上卡顿,而文件本身是无辜的 | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 40 | `devops` | `hardening-a-tor-onion-service` | 加固 Tor 洋葱服务:真正重要的是什么 | ✅ 已通过 | Batch-03 | 2026-10-27 03:49 | 外部顾问审阅完成,已采纳并落地全量修改意见 | +| 41 | `devops` | `it-reported-success-nothing-had-changed` | 它报告了成功,可实际上什么都没变 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | +| 42 | `devops` | `n8n-v1-to-v2-upgrade-gotchas` | n8n v1 升级到 v2:一个日志文件里的七项废弃警告 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | +| 43 | `devops` | `one-hostname-public-tracker-sso-dashboard` | 公开的埋点与要 SSO 的仪表盘,怎么共用一个域名 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | +| 44 | `devops` | `passbolt-hang-three-failure-modes` | Passbolt 界面反复卡死——一个缺失的配置文件引发的三种故障模式 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | +| 45 | `devops` | `patching-workbench-26-for-mariadb` | 当数据库客户端对你撒谎:为 MariaDB 修补 Workbench 26 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | +| 46 | `devops` | `php2shell-patching-every-php-runtime-i-manage` | PHP2Shell:我管的每台机器,PHP 运行时全都中了 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | +| 47 | `devops` | `putting-a-front-door-on-an-app-you-cant-modify` | 给自己改不了源码的应用装一扇前门 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | +| 48 | `devops` | `read-only-nocodb-dashboard-for-a-remote-database` | 给另一台机器上的数据库配一个 NocoDB 只读看板 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | +| 49 | `devops` | `replacing-rdpguard-with-ipban` | 用 IPBan 替换 RDPGuard:没人写出来的三个坑 | ✅ 已通过 | Batch-04 | 2026-10-27 04:09 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补) | +| 50 | `devops` | `space-reclamation-wasnt-stuck-it-was-waiting` | 空间回收没卡住,它只是在等明天早上 09:29 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | +| 51 | `devops` | `synology-spreadsheet-api-is-a-container` | Synology 电子表格 API 是一个容器,不是一个 API 端点 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | +| 52 | `devops` | `that-dying-ssd-was-just-a-bad-sata-cable` | 我差点把这颗 SSD 送修——真正坏的是 SATA 数据线 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | +| 53 | `devops` | `the-cause-was-trim-not-the-ssds` | 换了不同的硬盘,同样的损坏又来了——真凶是 TRIM,不是 SSD | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | +| 54 | `devops` | `the-upstream-was-deleted-then-came-back-rewritten` | 上游被删了,然后带着一个重写版回来 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | +| 55 | `devops` | `unraid-stop-array-hangs-on-swapfile` | Unraid 停止阵列时卡死的真相:Swapfile 锁住挂载点 — 附修复方案 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | +| 56 | `devops` | `uploading-large-videos-to-youtube-via-cdp` | 用 CDP 自动化上传百兆视频到 YouTube:跨越 DevTools 内存墙的 Docker 归档法 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | +| 57 | `devops` | `vetting-an-open-source-dependency-before-you-bet-on-it` | 如何在押注前验证一个开源依赖:我用的六项检查 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | +| 58 | `devops` | `when-lowering-crf-does-nothing-maxrate-deadlock` | 当降低 CRF 毫无效果:视频转码中 -maxrate 封顶与 SSIM 质量门禁的死锁 | ✅ 已通过 | Batch-07 | 2026-10-28 09:32 | Batch-07 外部顾问审阅「需微调 → 通过」(事实4.8/人设4.7/CRO4.8/OPSEC4.7)。已落地:清日志残留符号、499 跨跳因果改写、I/O 余量措辞、details class+行数、双语第二人称清零、three→four、中文与含反引号标题补显式锚点;详见 report-batch-07.md | +| 59 | `devops` | `when-smart-says-healthy-but-your-raid-is-corrupting-data` | SMART 显示健康,RAID 却在悄悄损坏数据 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | +| 60 | `devops` | `why-chrome-forgets-its-tabs-in-a-container` | 为什么容器里的 Chrome 会忘记标签页 —— 以及我是怎么修好的 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | +| 61 | `devops` | `why-telegram-bot-notifications-die` | Telegram 机器人通知为什么发不出去:IPv6、DNS 和一个追查了一整天的 400 | ✅ 已通过 | Batch-02 | 2026-10-27 06:10 | 顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md | +| 62 | `devops` | `why-your-cdp-clicks-silently-fail` | 为什么你的 CDP 点击会静默失效:平滑滚动、最小化窗口与 JS 派发事件 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | +| 63 | `devops` | `why-your-grafana-dashboard-shows-no-data` | Prometheus 明明有数据,Grafana 面板却全是 No data 的原因 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | +| 64 | `devops` | `your-disk-full-alert-is-lying` | 你的“磁盘将满”告警在说谎:别再按百分比告警 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | +| 65 | `engineering` | `adding-english-mode-to-a-chinese-only-web-app` | 浏览器翻译没有 API:我给一个纯中文网页应用加上了英文模式 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | +| 66 | `engineering` | `debugging-remotion-video-jitter` | 排查 Remotion 视频抽搐:为什么在背景图挂载音频低频 Scale 会毁了转场 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | +| 67 | `engineering` | `embedding-fonts-so-a-pdf-looks-the-same-everywhere` | 把字体嵌进 PDF,让它在任何机器上都长一样 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | +| 68 | `engineering` | `jpa-version-field-lost-update` | 那个把静默丢失更新变成 409 的 JPA 字段:@Version 乐观锁 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | +| 69 | `engineering` | `migrating-codeigniter-iis-to-openlitespeed` | 把 CodeIgniter 4 应用从 IIS 迁移到 OpenLiteSpeed | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | +| 70 | `engineering` | `scraping-bot-walled-marketplace-warm-browser-session` | 用「热浏览器会话」爬取有反爬墙的电商网站 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | +| 71 | `engineering` | `two-ways-a-javascript-file-stops-working-and-looks-fine` | JavaScript 文件静默失效的两种方式:而页面看上去一切正常 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | +| 72 | `engineering` | `verifying-a-pdf-report-page-by-page` | 逐页验证一份 19 页的 PDF 报告 | ✅ 已通过 | Batch-01 | 2026-10-27 06:09 | 第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐) | +| 73 | `engineering` | `when-a-proxy-timeout-returns-html-instead-of-json` | 反代超时返回 HTML,前端报 SyntaxError:一次 499 事故复盘 | ✅ 已通过 | Batch-07 | 2026-10-28 09:32 | Batch-07 外部顾问审阅「需微调 → 通过」(事实4.8/人设4.7/CRO4.8/OPSEC4.7)。已落地:清日志残留符号、499 跨跳因果改写、I/O 余量措辞、details class+行数、双语第二人称清零、three→four、中文与含反引号标题补显式锚点;详见 report-batch-07.md | +| 74 | `engineering` | `why-500000-lines-of-commit-churn-only-left-230000-in-production` | 30 天提交 51.8 万行,生产环境只留下 23.5 万行 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | +| 75 | `engineering` | `why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux` | 为什么 ffmpeg -map 0 会搞崩混流:跨容器多音轨、字幕与字体的深水区 | ✅ 已通过 | Batch-07 | 2026-10-28 09:32 | Batch-07 外部顾问审阅「需微调 → 通过」(事实4.8/人设4.7/CRO4.8/OPSEC4.7)。已落地:清日志残留符号、499 跨跳因果改写、I/O 余量措辞、details class+行数、双语第二人称清零、three→four、中文与含反引号标题补显式锚点;详见 report-batch-07.md | +| 76 | `notes` | `adding-a-domain-to-someone-elses-mail-server` | 给别人家的邮件服务器加一个域名 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | +| 77 | `notes` | `hello-world` | 你好,世界 —— 关于这个博客 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | +| 78 | `notes` | `my-backup-was-using-someone-elses-api-quota` | 我的备份爬得比爬虫还慢,因为我在用别人的 API 配额 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | +| 79 | `notes` | `nocodb-sso-is-a-licensed-feature` | NocoDB SSO 是授权功能:环境变量不会告诉你的事 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | +| 80 | `notes` | `reading-a-containers-own-api-docs` | 与其看供应商文档,不如直接读容器自带的 API 文档 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | +| 81 | `notes` | `smartctl-exit-code-32-skips-the-disks-that-matter` | smartctl 退出码 32:专门跳过你最该看的硬盘的那个“错误” | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | +| 82 | `notes` | `stop-writing-agent-prompts-for-deterministic-work` | 确定性的活,别再用 Agent Prompt 去跑 | ✅ 已通过 | Batch-03 | 2026-10-27 05:22 | 外部顾问审阅通过并落地修改 | +| 83 | `notes` | `synology-api-401-with-the-correct-password` | 密码正确,Synology API 登录却返回 401,问题出在哪 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | +| 84 | `notes` | `the-nocodb-attachment-that-wouldnt-update` | NocoDB 附件字段怎么改都不生效,和一个漏网的正则 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | +| 85 | `notes` | `traefik-yaegi-plugin-package-name-trap` | Traefik 自定义插件启动崩溃:Yaegi 解释器的连字符与下划线陷阱 | ⏳ 待审阅 | 未分配 | - | | +| 86 | `notes` | `upgrading-codeigniter-46-to-47` | CodeIgniter 4.6 升级到 4.7:官方指南没说到的破坏性变更 | ✅ 已通过 | Batch-03 | 2026-10-27 05:22 | 外部顾问审阅通过并落地修改 | +| 87 | `notes` | `why-is-my-tts-model-repeating-percent` | 为什么本地语音合成一直在念 “Percent”?语音管线里的 URL 编码与沙盒避坑记 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | +| 88 | `notes` | `why-multi-agent-coding-fails` | 为什么多个 AI 一起写代码总会烂尾?传话失真与隐式决策困境 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | +| 89 | `notes` | `why-your-windows-mcp-calls-silently-fail` | 为什么你的 Windows 桌面 MCP 调用会静默失败:攻破 10 秒空闲门禁与避坑实录 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | +| 90 | `tutorials` | `calibrating-intel-quick-sync-hevc-quality` | 校准 Intel Quick Sync HEVC:28 与 30 之间的悬崖,和一个毫无作用的 preset | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | +| 91 | `tutorials` | `does-hevc-actually-shrink-your-files` | 转成 HEVC 到底会不会让文件变小?我实测了 | ✅ 已通过 | Batch-04 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | +| 92 | `tutorials` | `generating-full-length-songs-with-yue2-comfyui` | 用 YuE2 BF16 生成完整长歌:突破时长限制与音频硬截断 | ✅ 已通过 | Batch-03 | 2026-10-27 06:04 | 第3批微调项落地并通过:时长校正283.1s/单调时间戳与防死锁/专业人设去二次元俚语/B2B转化增强 | +| 93 | `tutorials` | `generating-subtitles-for-songs-without-timestamps` | 给没有时间戳的歌曲自动生成字幕 | ✅ 已通过 | Batch-01 | 2026-10-27 06:11 | Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta | +| 94 | `tutorials` | `how-to-verify-a-hosting-provider-before-you-buy` | 购买主机前,如何核实一家服务商的真实情况 | ✅ 已通过 | Batch-01 | 2026-10-27 06:11 | Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta | +| 95 | `web3` | `chainlink-vrf-v2-lottery-contract` | 一个基于 Chainlink VRF v2.5 与 Automation 的自动化彩票合约 | ✅ 已通过 | Batch-01 | 2026-10-27 06:11 | Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta | +| 96 | `web3` | `fully-on-chain-svg-nfts` | 全链上 SVG NFT:把艺术作品放进合约里 | ✅ 已通过 | Batch-01 | 2026-10-27 06:11 | Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta | +| 97 | `web3` | `why-my-on-chain-nft-art-changed-on-windows` | 为什么在 Windows 上克隆后,我的链上 NFT 图像变了 | ✅ 已通过 | Batch-01 | 2026-10-27 06:11 | Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta | diff --git a/docs/consultant-review/audit-tracker.json b/docs/consultant-review/audit-tracker.json index a73e0fc..b2dcf8f 100644 --- a/docs/consultant-review/audit-tracker.json +++ b/docs/consultant-review/audit-tracker.json @@ -1,1224 +1,1263 @@ { - "adding-a-domain-to-someone-elses-mail-server": { - "slug": "adding-a-domain-to-someone-elses-mail-server", - "title": "Adding a Domain to Someone Else's Mail Server", - "zh_title": "给别人家的邮件服务器加一个域名", - "category": "notes", - "pub_date": "2025-05-06", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", - "en_chars": 7886, - "zh_chars": 3603 - }, - "adding-english-mode-to-a-chinese-only-web-app": { - "slug": "adding-english-mode-to-a-chinese-only-web-app", - "title": "No API for Browser Translation: Adding an English Mode to a Chinese-Only Web App", - "zh_title": "浏览器翻译没有 API:我给一个纯中文网页应用加上了英文模式", - "category": "engineering", - "pub_date": "2025-06-11", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 06:09", - "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", - "en_chars": 11914, - "zh_chars": 6253 - }, - "ai-furniture-compositing-with-flux-kontext": { - "slug": "ai-furniture-compositing-with-flux-kontext", - "title": "How I Built an AI Furniture Compositing Demo With FLUX.1 Kontext", - "zh_title": "我如何用 FLUX.1 Kontext 打造 AI 家具合成演示", - "category": "case-studies", - "pub_date": "2026-09-11", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 05:26", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换)", - "en_chars": 12512, - "zh_chars": 7237 - }, - "authentik-css-greater-than-bug": { - "slug": "authentik-css-greater-than-bug", - "title": "The Character That Silently Broke My authentik CSS", - "zh_title": "一个字符让我的 authentik CSS 静默失效", - "category": "devops", - "pub_date": "2026-09-20", - "status": "approved", - "batch_id": "Batch-03", - "approved_at": "2026-10-27 03:49", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 9317, - "zh_chars": 5589 - }, - "authentik-forward-auth-gate-wasnt-live": { - "slug": "authentik-forward-auth-gate-wasnt-live", - "title": "The Forward-Auth Gate That Verified Perfectly — and Wasn't Live", - "zh_title": "验证完全正确的 Forward-Auth 网关——其实并未上线", - "category": "devops", - "pub_date": "2026-08-12", - "status": "approved", - "batch_id": "Batch-03", - "approved_at": "2026-10-27 03:49", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 16526, - "zh_chars": 8746 - }, - "authentik-major-upgrade-gotchas": { - "slug": "authentik-major-upgrade-gotchas", - "title": "Authentik 2025.8 to 2026.8: The Breakable Parts Nobody Warns You About", - "zh_title": "Authentik 从 2025.8 升级到 2026.8:那些没人提醒你会坏掉的部分", - "category": "devops", - "pub_date": "2026-09-09", - "status": "approved", - "batch_id": "Batch-03", - "approved_at": "2026-10-27 03:49", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 11710, - "zh_chars": 6147 - }, - "automating-cyberpanel-without-the-ui": { - "slug": "automating-cyberpanel-without-the-ui", - "title": "Automating CyberPanel Without the UI: Reverse-Engineering an Undocumented v2 API", - "zh_title": "不用界面管理 CyberPanel:逆向一个没有文档的 v2 API", - "category": "devops", - "pub_date": "2026-09-09", - "status": "approved", - "batch_id": "Batch-03", - "approved_at": "2026-10-27 03:49", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 8474, - "zh_chars": 5205 - }, - "best-ai-video-generators-2026": { - "slug": "best-ai-video-generators-2026", - "title": "Best AI Video Generators in 2026: Free vs Paid, and My LTX-2.3 Test", - "zh_title": "2026 年最佳 AI 视频生成器:免费与付费对比,以及我的 LTX-2.3 实测", - "category": "ai", - "pub_date": "2026-09-11", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 03:00", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 24245, - "zh_chars": 12700 - }, - "calibrating-intel-quick-sync-hevc-quality": { - "slug": "calibrating-intel-quick-sync-hevc-quality", - "title": "Calibrating Intel Quick Sync HEVC: A Cliff at 28, and a Preset That Does Nothing", - "zh_title": "校准 Intel Quick Sync HEVC:28 与 30 之间的悬崖,和一个毫无作用的 preset", - "category": "tutorials", - "pub_date": "2026-10-14", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", - "en_chars": 10968, - "zh_chars": 5968 - }, - "chainlink-vrf-v2-lottery-contract": { - "slug": "chainlink-vrf-v2-lottery-contract", - "title": "An Automated Lottery Contract on Chainlink VRF v2.5 and Automation", - "zh_title": "一个基于 Chainlink VRF v2.5 与 Automation 的自动化彩票合约", - "category": "web3", - "pub_date": "2024-12-10", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 06:11", - "notes": "Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta", - "en_chars": 16252, - "zh_chars": 9707 - }, - "debugging-remotion-video-jitter": { - "slug": "debugging-remotion-video-jitter", - "title": "Debugging Remotion Video Jitter: Why Bass Scaling Ruins Background Transitions", - "zh_title": "排查 Remotion 视频抽搐:为什么在背景图挂载音频低频 Scale 会毁了转场", - "category": "engineering", - "pub_date": "2025-11-26", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 06:09", - "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", - "en_chars": 9836, - "zh_chars": 5653 - }, - "docker-reported-exit-0-the-oom-killer-disagreed": { - "slug": "docker-reported-exit-0-the-oom-killer-disagreed", - "title": "Docker Reported Exit 0. The Kernel Had Already OOM-Killed It.", - "zh_title": "Docker 报告退出码 0,内核却早已执行 OOM-Kill", - "category": "devops", - "pub_date": "2026-10-16", - "status": "approved", - "batch_id": "Batch-03", - "approved_at": "2026-10-27 03:49", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 10200, - "zh_chars": 5488 - }, - "does-hevc-actually-shrink-your-files": { - "slug": "does-hevc-actually-shrink-your-files", - "title": "Does Re-encoding to HEVC Actually Shrink Your Files? I Measured It.", - "zh_title": "转成 HEVC 到底会不会让文件变小?我实测了", - "category": "tutorials", - "pub_date": "2026-10-08", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", - "en_chars": 8042, - "zh_chars": 4159 - }, - "embedding-fonts-so-a-pdf-looks-the-same-everywhere": { - "slug": "embedding-fonts-so-a-pdf-looks-the-same-everywhere", - "title": "Embedding Fonts So a PDF Looks the Same on Every Machine", - "zh_title": "把字体嵌进 PDF,让它在任何机器上都长一样", - "category": "engineering", - "pub_date": "2026-10-15", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 06:09", - "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", - "en_chars": 8591, - "zh_chars": 3747 - }, - "every-player-stuttered-the-file-was-fine": { - "slug": "every-player-stuttered-the-file-was-fine", - "title": "Every Player Stuttered on the Same Video. The File Was Blameless.", - "zh_title": "每个播放器都在同一个视频上卡顿,而文件本身是无辜的", - "category": "devops", - "pub_date": "2026-10-08", - "status": "approved", - "batch_id": "Batch-03", - "approved_at": "2026-10-27 03:49", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 8459, - "zh_chars": 4296 - }, - "five-step-ai-roadmap-what-i-actually-run": { - "slug": "five-step-ai-roadmap-what-i-actually-run", - "title": "The Five-Step AI Roadmap Everyone Shares — and What I Actually Run in Production", - "zh_title": "全网都在转的 AI 五步学习路线 —— 我真正在生产里跑的是哪几步", - "category": "ai", - "pub_date": "2026-10-13", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 03:00", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 13155, - "zh_chars": 5483 - }, - "from-audio-to-a-4-minute-ai-music-video": { - "slug": "from-audio-to-a-4-minute-ai-music-video", - "title": "From Audio to a 4-Minute Music Video: Orchestrating Gemini, AI Diffusion, and Filmora Editing", - "zh_title": "从一首歌到 4 分钟完整 MV:我如何用 Gemini、AI 生成与 Filmora 剪辑串起全流程实操", - "category": "case-studies", - "pub_date": "2026-10-25", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 05:26", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换)", - "en_chars": 11027, - "zh_chars": 5168 - }, - "fully-on-chain-svg-nfts": { - "slug": "fully-on-chain-svg-nfts", - "title": "Fully On-Chain SVG NFTs: Putting the Artwork Inside the Contract", - "zh_title": "全链上 SVG NFT:把艺术作品放进合约里", - "category": "web3", - "pub_date": "2024-10-08", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 06:11", - "notes": "Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta", - "en_chars": 16205, - "zh_chars": 10281 - }, - "generating-full-length-songs-with-yue2-comfyui": { - "slug": "generating-full-length-songs-with-yue2-comfyui", - "title": "Generating Full-Length Songs with YuE2 BF16: Overcoming Duration Limits and Audio Truncation", - "zh_title": "用 YuE2 BF16 生成完整长歌:突破时长限制与音频硬截断", - "category": "tutorials", - "pub_date": "2026-10-26", - "status": "approved", - "batch_id": "Batch-03", - "approved_at": "2026-10-27 06:04", - "notes": "第3批微调项落地并通过:时长校正283.1s/单调时间戳与防死锁/专业人设去二次元俚语/B2B转化增强", - "en_chars": 134821, - "zh_chars": 127730 - }, - "generating-subtitles-for-songs-without-timestamps": { - "slug": "generating-subtitles-for-songs-without-timestamps", - "title": "Generating Subtitles for Songs That Ship Without Timestamps", - "zh_title": "给没有时间戳的歌曲自动生成字幕", - "category": "tutorials", - "pub_date": "2026-10-20", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 06:11", - "notes": "Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta", - "en_chars": 47576, - "zh_chars": 42677 - }, - "giving-ai-your-mouse-and-keyboard-safely": { - "slug": "giving-ai-your-mouse-and-keyboard-safely", - "title": "Giving AI Your Mouse and Keyboard: Safe Guardrails for Windows Desktop MCP", - "zh_title": "把鼠标和键盘交给 AI 之前:Windows 桌面 MCP 的安全边界与实战防线", - "category": "ai", - "pub_date": "2025-10-22", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 03:00", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 5906, - "zh_chars": 3149 - }, - "hardening-a-tor-onion-service": { - "slug": "hardening-a-tor-onion-service", - "title": "Hardening a Tor Onion Service: What Actually Matters", - "zh_title": "加固 Tor 洋葱服务:真正重要的是什么", - "category": "devops", - "pub_date": "2025-12-10", - "status": "approved", - "batch_id": "Batch-03", - "approved_at": "2026-10-27 03:49", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 14907, - "zh_chars": 7041 - }, - "hello-world": { - "slug": "hello-world", - "title": "Hello, World — About This Blog", - "zh_title": "你好,世界 —— 关于这个博客", - "category": "notes", - "pub_date": "2024-09-24", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", - "en_chars": 1938, - "zh_chars": 1074 - }, - "how-i-built-an-automated-music-video-pipeline": { - "slug": "how-i-built-an-automated-music-video-pipeline", - "title": "How I Built an Automated Music Video Pipeline with Remotion and Dockerized YouTube CDP", - "zh_title": "我是如何用 Remotion 与 Docker CDP 打造全自动 MV 生成与多语种油管发布流的", - "category": "case-studies", - "pub_date": "2025-04-18", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 05:26", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换)", - "en_chars": 9265, - "zh_chars": 4931 - }, - "how-i-built-the-digikedai-telegram-bot": { - "slug": "how-i-built-the-digikedai-telegram-bot", - "title": "How I Built the DigiKedai Telegram AI Bot", - "zh_title": "我是如何构建 DigiKedai Telegram AI 客服机器人的", - "category": "case-studies", - "pub_date": "2026-09-06", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 05:26", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换)", - "en_chars": 10719, - "zh_chars": 5271 - }, - "how-i-host-this-blog": { - "slug": "how-i-host-this-blog", - "title": "How I Host This Blog: Astro, Gitea Actions, and Self-Hosted CI/CD", - "zh_title": "我是如何托管这个博客的:Astro、Gitea Actions 与自托管 CI/CD", - "category": "case-studies", - "pub_date": "2026-09-04", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 05:26", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换)", - "en_chars": 5908, - "zh_chars": 4145 - }, - "how-i-made-my-own-songs-with-suno-ai": { - "slug": "how-i-made-my-own-songs-with-suno-ai", - "title": "How I Made My Own Songs with Suno AI", - "zh_title": "我用 Suno AI 做出自己的歌", - "category": "case-studies", - "pub_date": "2026-09-11", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 05:26", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换)", - "en_chars": 16935, - "zh_chars": 11737 - }, - "how-i-vetted-20-vps-providers-with-parallel-subagents": { - "slug": "how-i-vetted-20-vps-providers-with-parallel-subagents", - "title": "How I Vetted 20 VPS Providers in Three Hours with Parallel Subagents", - "zh_title": "如何用并行子代理在三小时内核查 20 家 VPS 服务商", - "category": "case-studies", - "pub_date": "2025-11-12", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 04:22", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", - "en_chars": 8593, - "zh_chars": 3613 - }, - "how-to-verify-a-hosting-provider-before-you-buy": { - "slug": "how-to-verify-a-hosting-provider-before-you-buy", - "title": "How to Verify a Hosting Provider Before You Buy", - "zh_title": "购买主机前,如何核实一家服务商的真实情况", - "category": "tutorials", - "pub_date": "2025-11-26", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 06:11", - "notes": "Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta", - "en_chars": 7710, - "zh_chars": 3405 - }, - "i-let-an-agent-manage-my-shopee-vouchers": { - "slug": "i-let-an-agent-manage-my-shopee-vouchers", - "title": "I Let an Agent Manage My Shopee Vouchers — And It Created One I Never Approved", - "zh_title": "我让 AI 助手管我的 Shopee 优惠券 —— 它建了一张我没批准的券", - "category": "ai", - "pub_date": "2025-07-08", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 03:00", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 9981, - "zh_chars": 4824 - }, - "it-reported-success-nothing-had-changed": { - "slug": "it-reported-success-nothing-had-changed", - "title": "It Reported Success. Nothing Had Changed.", - "zh_title": "它报告了成功,可实际上什么都没变", - "category": "devops", - "pub_date": "2026-10-08", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 04:09", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", - "en_chars": 8349, - "zh_chars": 3886 - }, - "jpa-version-field-lost-update": { - "slug": "jpa-version-field-lost-update", - "title": "The JPA Field That Turns a Silent Lost Update Into a 409", - "zh_title": "那个把静默丢失更新变成 409 的 JPA 字段:@Version 乐观锁", - "category": "engineering", - "pub_date": "2026-08-19", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 06:09", - "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", - "en_chars": 12536, - "zh_chars": 7506 - }, - "loop-engineering-without-a-coding-agent": { - "slug": "loop-engineering-without-a-coding-agent", - "title": "Loop Engineering Without a Coding Agent: The 11 Cron Jobs That Run My Infrastructure", - "zh_title": "没有 Coding Agent 的 Loop Engineering:撑起我这套基础设施的 11 个定时任务", - "category": "case-studies", - "pub_date": "2026-10-01", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 04:22", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", - "en_chars": 14249, - "zh_chars": 6609 - }, - "migrating-codeigniter-iis-to-openlitespeed": { - "slug": "migrating-codeigniter-iis-to-openlitespeed", - "title": "Migrating a CodeIgniter 4 App From IIS to OpenLiteSpeed", - "zh_title": "把 CodeIgniter 4 应用从 IIS 迁移到 OpenLiteSpeed", - "category": "engineering", - "pub_date": "2026-09-27", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 06:09", - "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", - "en_chars": 14943, - "zh_chars": 8425 - }, - "my-backup-was-using-someone-elses-api-quota": { - "slug": "my-backup-was-using-someone-elses-api-quota", - "title": "My Backup Was Crawling Because I Was Using Someone Else's API Quota", - "zh_title": "我的备份爬得比爬虫还慢,因为我在用别人的 API 配额", - "category": "notes", - "pub_date": "2026-10-15", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", - "en_chars": 8572, - "zh_chars": 4527 - }, - "n8n-v1-to-v2-upgrade-gotchas": { - "slug": "n8n-v1-to-v2-upgrade-gotchas", - "title": "Upgrading n8n v1 to v2: Seven Deprecations in One Log File", - "zh_title": "n8n v1 升级到 v2:一个日志文件里的七项废弃警告", - "category": "devops", - "pub_date": "2026-09-18", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 04:09", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", - "en_chars": 12262, - "zh_chars": 6712 - }, - "nocodb-sso-is-a-licensed-feature": { - "slug": "nocodb-sso-is-a-licensed-feature", - "title": "NocoDB SSO Is a Licensed Feature — and the Env Vars Won't Tell You", - "zh_title": "NocoDB SSO 是授权功能:环境变量不会告诉你的事", - "category": "notes", - "pub_date": "2026-09-29", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", - "en_chars": 9937, - "zh_chars": 5421 - }, - "one-hostname-public-tracker-sso-dashboard": { - "slug": "one-hostname-public-tracker-sso-dashboard", - "title": "One Hostname for a Public Tracker and an SSO-Gated Dashboard", - "zh_title": "公开的埋点与要 SSO 的仪表盘,怎么共用一个域名", - "category": "devops", - "pub_date": "2026-09-30", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 04:09", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", - "en_chars": 14400, - "zh_chars": 6837 - }, - "one-prometheus-for-unraid-synology-and-a-vps": { - "slug": "one-prometheus-for-unraid-synology-and-a-vps", - "title": "One Prometheus for unRaid, a Synology NAS, and a VPS: What I Got Wrong", - "zh_title": "用一个 Prometheus 监控 unRaid、群晖 NAS 和 VPS:我做错的四件事", - "category": "case-studies", - "pub_date": "2026-07-29", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 04:22", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", - "en_chars": 8358, - "zh_chars": 4690 - }, - "passbolt-hang-three-failure-modes": { - "slug": "passbolt-hang-three-failure-modes", - "title": "Passbolt UI Kept Hanging — Three Failure Modes From One Missing Config File", - "zh_title": "Passbolt 界面反复卡死——一个缺失的配置文件引发的三种故障模式", - "category": "devops", - "pub_date": "2026-01-07", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 04:09", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", - "en_chars": 7864, - "zh_chars": 4187 - }, - "patching-workbench-26-for-mariadb": { - "slug": "patching-workbench-26-for-mariadb", - "title": "When Your Database Client Lies to You: Patching Workbench 26 for MariaDB", - "zh_title": "当数据库客户端对你撒谎:为 MariaDB 修补 Workbench 26", - "category": "devops", - "pub_date": "2026-09-19", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 04:09", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", - "en_chars": 15965, - "zh_chars": 9501 - }, - "php2shell-patching-every-php-runtime-i-manage": { - "slug": "php2shell-patching-every-php-runtime-i-manage", - "title": "PHP2Shell: I Measured Every PHP Runtime I Manage. All of Them Were Vulnerable.", - "zh_title": "PHP2Shell:我管的每台机器,PHP 运行时全都中了", - "category": "devops", - "pub_date": "2026-10-23", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 04:09", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", - "en_chars": 22354, - "zh_chars": 12531 - }, - "plugging-windows-desktop-control-into-four-ai-agents": { - "slug": "plugging-windows-desktop-control-into-four-ai-agents", - "title": "Plugging Windows Desktop Control into Four AI Agents: Hermes, OpenCode, Claw, and Claude", - "zh_title": "把 Windows 桌面控制接进 4 款 AI Agent:Hermes、OpenCode、Claw 与 Claude 的实战架构", - "category": "ai", - "pub_date": "2025-12-23", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 03:00", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 6554, - "zh_chars": 5030 - }, - "putting-a-front-door-on-an-app-you-cant-modify": { - "slug": "putting-a-front-door-on-an-app-you-cant-modify", - "title": "Putting a Front Door on an App You Can't Modify", - "zh_title": "给自己改不了源码的应用装一扇前门", - "category": "devops", - "pub_date": "2025-06-24", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 04:09", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", - "en_chars": 13927, - "zh_chars": 7415 - }, - "read-only-nocodb-dashboard-for-a-remote-database": { - "slug": "read-only-nocodb-dashboard-for-a-remote-database", - "title": "A Read-Only NocoDB Dashboard for a Database on Another Machine", - "zh_title": "给另一台机器上的数据库配一个 NocoDB 只读看板", - "category": "devops", - "pub_date": "2026-09-29", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 04:09", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", - "en_chars": 12009, - "zh_chars": 6287 - }, - "reading-a-containers-own-api-docs": { - "slug": "reading-a-containers-own-api-docs", - "title": "Read a Container's Own API Docs Instead of the Vendor's", - "zh_title": "与其看供应商文档,不如直接读容器自带的 API 文档", - "category": "notes", - "pub_date": "2025-10-01", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", - "en_chars": 8382, - "zh_chars": 5489 - }, - "replacing-rdpguard-with-ipban": { - "slug": "replacing-rdpguard-with-ipban", - "title": "Replacing RDPGuard With IPBan: The Traps Nobody Documents", - "zh_title": "用 IPBan 替换 RDPGuard:没人写出来的三个坑", - "category": "devops", - "pub_date": "2026-09-19", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 04:09", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", - "en_chars": 13131, - "zh_chars": 7795 - }, - "running-ai-video-locally-on-a-12gb-gpu": { - "slug": "running-ai-video-locally-on-a-12gb-gpu", - "title": "Running AI Video Locally on a 12 GB GPU: Real Numbers for Wan 2.2 and SeedVR2", - "zh_title": "12GB 显卡跑本地 AI 视频:Wan 2.2 加 SeedVR2 的真实数据", - "category": "ai", - "pub_date": "2026-10-20", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 03:00", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 18508, - "zh_chars": 12878 - }, - "running-production-infrastructure-solo": { - "slug": "running-production-infrastructure-solo", - "title": "Running Production Infrastructure Solo: 162 Containers Across Three Hosts", - "zh_title": "一个人跑生产基础设施:三台主机、162 个容器", - "category": "case-studies", - "pub_date": "2026-10-06", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 04:22", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", - "en_chars": 7975, - "zh_chars": 3722 - }, - "running-tts-as-a-service-with-token-sidecars": { - "slug": "running-tts-as-a-service-with-token-sidecars", - "title": "I Ran a Text-to-Speech Service for a Year on Two Cron Containers", - "zh_title": "我用两个 Cron 容器跑了一年的语音合成服务", - "category": "ai", - "pub_date": "2026-09-18", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 03:00", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 14141, - "zh_chars": 7929 - }, - "scraping-bot-walled-marketplace-warm-browser-session": { - "slug": "scraping-bot-walled-marketplace-warm-browser-session", - "title": "Scraping a Bot-Walled Marketplace With a Warm Browser Session", - "zh_title": "用「热浏览器会话」爬取有反爬墙的电商网站", - "category": "engineering", - "pub_date": "2026-09-13", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 06:09", - "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", - "en_chars": 11313, - "zh_chars": 5734 - }, - "self-healing-digital-goods-entitlements": { - "slug": "self-healing-digital-goods-entitlements", - "title": "Self-Healing Access Control for Digital Goods: NocoDB, n8n, and AList", - "zh_title": "数字商品的自愈式访问控制:NocoDB、n8n 与 AList", - "category": "case-studies", - "pub_date": "2026-09-18", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 04:22", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", - "en_chars": 14765, - "zh_chars": 6819 - }, - "self-hosted-speech-to-text-api": { - "slug": "self-hosted-speech-to-text-api", - "title": "Your Own Speech-to-Text Server: Faster Than Typing, Private by Default", - "zh_title": "自建语音转文字服务:打字速度的 3 倍以上,而且数据不出内网", - "category": "case-studies", - "pub_date": "2026-09-19", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 04:22", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", - "en_chars": 14708, - "zh_chars": 7794 - }, - "self-hosted-tts-cosyvoice2-n8n-gpu": { - "slug": "self-hosted-tts-cosyvoice2-n8n-gpu", - "title": "How I Replaced Cloud TTS with a Self-Hosted Neural Voice Stack on an RTX 3060", - "zh_title": "从云端转本地:在 12GB 显卡与群晖 N8N 上搭建中英混读高保真 TTS 语音栈", - "category": "case-studies", - "pub_date": "2026-10-22", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 04:22", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", - "en_chars": 8913, - "zh_chars": 4773 - }, - "self-hosting-mem0-memory-stack": { - "slug": "self-hosting-mem0-memory-stack", - "title": "How I Self-Hosted a Mem0 Memory Stack (So My AI Agent Remembers)", - "zh_title": "我如何在私有存储节点上自托管 Mem0 记忆栈(让 AI 助手拥有持久记忆)", - "category": "case-studies", - "pub_date": "2026-09-16", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 04:22", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", - "en_chars": 8057, - "zh_chars": 4849 - }, - "shipping-an-ai-photo-editor-as-a-wordpress-plugin": { - "slug": "shipping-an-ai-photo-editor-as-a-wordpress-plugin", - "title": "Shipping an AI Photo Editor as a WordPress Plugin: 22 Versions of Hard Lessons", - "zh_title": "把 AI 修图工具做成 WordPress 插件:22 个版本换来的经验", - "category": "case-studies", - "pub_date": "2026-09-18", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 04:22", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", - "en_chars": 13879, - "zh_chars": 6861 - }, - "slashing-agent-context-with-a-code-graph": { - "slug": "slashing-agent-context-with-a-code-graph", - "title": "Slashing Agent Context and Token Churn With a Code Graph", - "zh_title": "别再把整个 Repo 喂给 Agent:用 Code Graph 斩断 Token 膨胀与遗忘陷阱", - "category": "ai", - "pub_date": "2026-04-28", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 03:00", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 8122, - "zh_chars": 5040 - }, - "smartctl-exit-code-32-skips-the-disks-that-matter": { - "slug": "smartctl-exit-code-32-skips-the-disks-that-matter", - "title": "smartctl Exit Code 32: The Code That Skips the Disks You Care About", - "zh_title": "smartctl 退出码 32:专门跳过你最该看的硬盘的那个“错误”", - "category": "notes", - "pub_date": "2026-04-14", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", - "en_chars": 5475, - "zh_chars": 2881 - }, - "space-reclamation-wasnt-stuck-it-was-waiting": { - "slug": "space-reclamation-wasnt-stuck-it-was-waiting", - "title": "Space Reclamation Wasn't Stuck. It Was Waiting for Tomorrow at 09:29.", - "zh_title": "空间回收没卡住,它只是在等明天早上 09:29", - "category": "devops", - "pub_date": "2026-10-14", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 06:10", - "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", - "en_chars": 6574, - "zh_chars": 3505 - }, - "stop-writing-agent-prompts-for-deterministic-work": { - "slug": "stop-writing-agent-prompts-for-deterministic-work", - "title": "Stop Writing Agent Prompts for Deterministic Work", - "zh_title": "确定性的活,别再用 Agent Prompt 去跑", - "category": "notes", - "pub_date": "2026-10-01", - "status": "approved", - "batch_id": "Batch-03", - "approved_at": "2026-10-27 05:22", - "notes": "外部顾问审阅通过并落地修改", - "en_chars": 4951, - "zh_chars": 2216 - }, - "syncing-a-self-improving-ai-agent-across-machines": { - "slug": "syncing-a-self-improving-ai-agent-across-machines", - "title": "Syncing a Self-Improving AI Agent Across Machines", - "zh_title": "在多台机器之间同步一个会自我学习的 AI Agent", - "category": "case-studies", - "pub_date": "2026-02-18", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 04:22", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", - "en_chars": 8861, - "zh_chars": 4541 - }, - "synology-api-401-with-the-correct-password": { - "slug": "synology-api-401-with-the-correct-password", - "title": "Why Your Synology API Login Returns 401 With the Correct Password", - "zh_title": "密码正确,Synology API 登录却返回 401,问题出在哪", - "category": "notes", - "pub_date": "2025-09-10", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", - "en_chars": 5053, - "zh_chars": 3063 - }, - "synology-spreadsheet-api-is-a-container": { - "slug": "synology-spreadsheet-api-is-a-container", - "title": "The Synology Spreadsheet API Is a Container, Not an API Endpoint", - "zh_title": "Synology 电子表格 API 是一个容器,不是一个 API 端点", - "category": "devops", - "pub_date": "2025-08-20", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 06:10", - "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", - "en_chars": 16101, - "zh_chars": 9200 - }, - "that-dying-ssd-was-just-a-bad-sata-cable": { - "slug": "that-dying-ssd-was-just-a-bad-sata-cable", - "title": "I Was About to RMA This SSD — the Fault Was a SATA Cable", - "zh_title": "我差点把这颗 SSD 送修——真正坏的是 SATA 数据线", - "category": "devops", - "pub_date": "2026-09-16", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 06:10", - "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", - "en_chars": 7471, - "zh_chars": 3940 - }, - "the-cause-was-trim-not-the-ssds": { - "slug": "the-cause-was-trim-not-the-ssds", - "title": "The Corruption Came Back on Different Drives — the Cause Was TRIM, Not the SSDs", - "zh_title": "换了不同的硬盘,同样的损坏又来了——真凶是 TRIM,不是 SSD", - "category": "devops", - "pub_date": "2026-09-18", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 06:10", - "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", - "en_chars": 13042, - "zh_chars": 7310 - }, - "the-nocodb-attachment-that-wouldnt-update": { - "slug": "the-nocodb-attachment-that-wouldnt-update", - "title": "The NocoDB Attachment That Wouldn't Update (and a Regex That Missed)", - "zh_title": "NocoDB 附件字段怎么改都不生效,和一个漏网的正则", - "category": "notes", - "pub_date": "2026-02-04", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", - "en_chars": 3798, - "zh_chars": 2312 - }, - "the-single-writer-rule-for-coding-agents": { - "slug": "the-single-writer-rule-for-coding-agents", - "title": "The Single-Writer Rule: Orchestrating Coding Agents Without Multi-Agent Chaos", - "zh_title": "代码只让一个 AI 改:我是如何避开多 Agent 协同踩坑的「单写多审」架构", - "category": "case-studies", - "pub_date": "2026-08-26", - "status": "approved", - "batch_id": "Batch-03", - "approved_at": "2026-10-27 03:49", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 13331, - "zh_chars": 6954 - }, - "the-upstream-was-deleted-then-came-back-rewritten": { - "slug": "the-upstream-was-deleted-then-came-back-rewritten", - "title": "The Upstream Was Deleted, Then Came Back as a Rewrite", - "zh_title": "上游被删了,然后带着一个重写版回来", - "category": "devops", - "pub_date": "2026-10-06", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 06:10", - "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", - "en_chars": 11636, - "zh_chars": 5229 - }, - "two-ways-a-javascript-file-stops-working-and-looks-fine": { - "slug": "two-ways-a-javascript-file-stops-working-and-looks-fine", - "title": "Two Ways a JavaScript File Stops Working and Looks Fine", - "zh_title": "JavaScript 文件静默失效的两种方式:而页面看上去一切正常", - "category": "engineering", - "pub_date": "2025-02-20", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 06:09", - "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", - "en_chars": 8293, - "zh_chars": 3881 - }, - "unraid-stop-array-hangs-on-swapfile": { - "slug": "unraid-stop-array-hangs-on-swapfile", - "title": "Why Unraid Hangs When You Stop the Array With a Swapfile — and the Fix", - "zh_title": "Unraid 停止阵列时卡死的真相:Swapfile 锁住挂载点 — 附修复方案", - "category": "devops", - "pub_date": "2026-09-15", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 06:10", - "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", - "en_chars": 10470, - "zh_chars": 6376 - }, - "upgrading-codeigniter-46-to-47": { - "slug": "upgrading-codeigniter-46-to-47", - "title": "Upgrading CodeIgniter 4.6 to 4.7: The Breaking Changes the Guide Misses", - "zh_title": "CodeIgniter 4.6 升级到 4.7:官方指南没说到的破坏性变更", - "category": "notes", - "pub_date": "2026-09-27", - "status": "approved", - "batch_id": "Batch-03", - "approved_at": "2026-10-27 05:22", - "notes": "外部顾问审阅通过并落地修改", - "en_chars": 9469, - "zh_chars": 5411 - }, - "uploading-large-videos-to-youtube-via-cdp": { - "slug": "uploading-large-videos-to-youtube-via-cdp", - "title": "Uploading 100MB+ Videos to YouTube via CDP: The Docker Archive Pattern", - "zh_title": "用 CDP 自动化上传百兆视频到 YouTube:跨越 DevTools 内存墙的 Docker 归档法", - "category": "devops", - "pub_date": "2025-08-22", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 06:10", - "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", - "en_chars": 11267, - "zh_chars": 7173 - }, - "using-chinese-llm-apis-from-malaysia": { - "slug": "using-chinese-llm-apis-from-malaysia", - "title": "Using Chinese LLM APIs From Malaysia: What Actually Works", - "zh_title": "从马来西亚使用中国大模型 API:真正可行的方法", - "category": "ai", - "pub_date": "2026-09-11", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 03:00", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 7540, - "zh_chars": 3536 - }, - "verifying-a-pdf-report-page-by-page": { - "slug": "verifying-a-pdf-report-page-by-page", - "title": "Verifying a 19-Page PDF Report Page by Page", - "zh_title": "逐页验证一份 19 页的 PDF 报告", - "category": "engineering", - "pub_date": "2026-09-28", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 06:09", - "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", - "en_chars": 12525, - "zh_chars": 6685 - }, - "vetting-an-open-source-dependency-before-you-bet-on-it": { - "slug": "vetting-an-open-source-dependency-before-you-bet-on-it", - "title": "How I Vet an Open-Source Dependency Before Betting On It", - "zh_title": "如何在押注前验证一个开源依赖:我用的六项检查", - "category": "devops", - "pub_date": "2026-09-29", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 06:10", - "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", - "en_chars": 8512, - "zh_chars": 4201 - }, - "when-smart-says-healthy-but-your-raid-is-corrupting-data": { - "slug": "when-smart-says-healthy-but-your-raid-is-corrupting-data", - "title": "When SMART Says Healthy and Your RAID Is Silently Corrupting Data", - "zh_title": "SMART 显示健康,RAID 却在悄悄损坏数据", - "category": "devops", - "pub_date": "2026-09-16", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 06:10", - "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", - "en_chars": 14160, - "zh_chars": 6246 - }, - "when-to-give-your-agent-physical-clicks": { - "slug": "when-to-give-your-agent-physical-clicks", - "title": "When to Give Your Agent Physical Clicks (And When to Never Touch Them)", - "zh_title": "什么时候该让 AI 操控物理鼠标(以及什么时候绝对不要用)", - "category": "case-studies", - "pub_date": "2026-05-28", - "status": "approved", - "batch_id": "Batch-03", - "approved_at": "2026-10-27 03:49", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 6882, - "zh_chars": 3608 - }, - "why-500000-lines-of-commit-churn-only-left-230000-in-production": { - "slug": "why-500000-lines-of-commit-churn-only-left-230000-in-production", - "title": "I Committed 518,000 Lines in 30 Days. Production Kept 235,000.", - "zh_title": "30 天提交 51.8 万行,生产环境只留下 23.5 万行", - "category": "engineering", - "pub_date": "2026-10-18", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", - "en_chars": 8949, - "zh_chars": 4197 - }, - "why-chrome-forgets-its-tabs-in-a-container": { - "slug": "why-chrome-forgets-its-tabs-in-a-container", - "title": "Why Chrome Forgets Its Tabs in a Container — And How I Fixed It", - "zh_title": "为什么容器里的 Chrome 会忘记标签页 —— 以及我是怎么修好的", - "category": "devops", - "pub_date": "2026-09-29", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 06:10", - "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", - "en_chars": 15430, - "zh_chars": 9234 - }, - "why-i-built-a-video-knowledge-base": { - "slug": "why-i-built-a-video-knowledge-base", - "title": "Why I Built a Video Knowledge Base: Turning Saved Short Videos into Searchable Notes", - "zh_title": "为什么我要做视频精读知识库:把收藏夹吃灰的短视频变成可检索笔记", - "category": "case-studies", - "pub_date": "2024-11-28", - "status": "approved", - "batch_id": "Batch-03", - "approved_at": "2026-10-27 03:49", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 5770, - "zh_chars": 2924 - }, - "why-i-still-bought-a-local-gpu": { - "slug": "why-i-still-bought-a-local-gpu", - "title": "Why I Still Bought a GPU to Run AI When Claude and GPT Are Obviously Stronger", - "zh_title": "Claude 和 GPT 明明更强,我为什么还是买了 GPU 跑本地 AI", - "category": "ai", - "pub_date": "2026-09-21", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 05:26", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换)", - "en_chars": 11811, - "zh_chars": 4924 - }, - "why-is-my-tts-model-repeating-percent": { - "slug": "why-is-my-tts-model-repeating-percent", - "title": "Why Is My TTS Model Repeating \\\"Percent\\\"? The URL-Encoding Trap in Speech Pipelines", - "zh_title": "为什么本地语音合成一直在念 “Percent”?语音管线里的 URL 编码与沙盒避坑记", - "category": "notes", - "pub_date": "2026-10-22", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", - "en_chars": 7728, - "zh_chars": 4968 - }, - "why-multi-agent-coding-fails": { - "slug": "why-multi-agent-coding-fails", - "title": "Why Multi-Agent Coding Fails: The Telephone Game and Architectural Drift", - "zh_title": "为什么多个 AI 一起写代码总会烂尾?传话失真与隐式决策困境", - "category": "notes", - "pub_date": "2025-07-29", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", - "en_chars": 6364, - "zh_chars": 3353 - }, - "why-my-on-chain-nft-art-changed-on-windows": { - "slug": "why-my-on-chain-nft-art-changed-on-windows", - "title": "Why My On-Chain NFT Art Changed When I Cloned It on Windows", - "zh_title": "为什么在 Windows 上克隆后,我的链上 NFT 图像变了", - "category": "web3", - "pub_date": "2026-08-19", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 06:11", - "notes": "Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta", - "en_chars": 8423, - "zh_chars": 4585 - }, - "why-telegram-bot-notifications-die": { - "slug": "why-telegram-bot-notifications-die", - "title": "Why Telegram Bot Notifications Die: IPv6, DNS, and a 400 That Took a Day", - "zh_title": "Telegram 机器人通知为什么发不出去:IPv6、DNS 和一个追查了一整天的 400", - "category": "devops", - "pub_date": "2026-03-25", - "status": "approved", - "batch_id": "Batch-02", - "approved_at": "2026-10-27 06:10", - "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", - "en_chars": 10753, - "zh_chars": 6005 - }, - "why-your-cdp-clicks-silently-fail": { - "slug": "why-your-cdp-clicks-silently-fail", - "title": "Why Your CDP Clicks Silently Fail: Smooth Scroll, Minimised Windows, and JS-Dispatched Events", - "zh_title": "为什么你的 CDP 点击会静默失效:平滑滚动、最小化窗口与 JS 派发事件", - "category": "devops", - "pub_date": "2025-03-19", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 06:09", - "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", - "en_chars": 8054, - "zh_chars": 4536 - }, - "why-your-grafana-dashboard-shows-no-data": { - "slug": "why-your-grafana-dashboard-shows-no-data", - "title": "Why Your Grafana Dashboard Shows No Data (When Prometheus Is Fine)", - "zh_title": "Prometheus 明明有数据,Grafana 面板却全是 No data 的原因", - "category": "devops", - "pub_date": "2026-05-17", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 06:09", - "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", - "en_chars": 7456, - "zh_chars": 3919 - }, - "why-your-headless-browser-cant-scrape-everything": { - "slug": "why-your-headless-browser-cant-scrape-everything", - "title": "Why Your Headless Browser Can't Scrape Everything", - "zh_title": "为什么你的无头浏览器不是万能爬虫", - "category": "case-studies", - "pub_date": "2026-01-21", - "status": "approved", - "batch_id": "Batch-03", - "approved_at": "2026-10-27 03:49", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", - "en_chars": 8076, - "zh_chars": 3792 - }, - "why-your-windows-mcp-calls-silently-fail": { - "slug": "why-your-windows-mcp-calls-silently-fail", - "title": "Why Your Windows Desktop MCP Calls Silently Fail: Taming the 10-Second Idle Gate", - "zh_title": "为什么你的 Windows 桌面 MCP 调用会静默失败:攻破 10 秒空闲门禁与避坑实录", - "category": "notes", - "pub_date": "2026-03-12", - "status": "approved", - "batch_id": "Batch-04", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", - "en_chars": 5663, - "zh_chars": 3857 - }, - "your-disk-full-alert-is-lying": { - "slug": "your-disk-full-alert-is-lying", - "title": "Your Disk-Full Alert Is Lying: Stop Alerting on Percentages", - "zh_title": "你的“磁盘将满”告警在说谎:别再按百分比告警", - "category": "devops", - "pub_date": "2026-06-24", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 06:09", - "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", - "en_chars": 6139, - "zh_chars": 3090 - }, - "yue2-on-a-12gb-gpu-songs-that-lost-their-endings": { - "slug": "yue2-on-a-12gb-gpu-songs-that-lost-their-endings", - "title": "Why My AI Songs Kept Losing Their Endings: Running YuE2 on a 12 GB GPU", - "zh_title": "为什么我的 AI 歌曲总是丢结尾:在 12GB 显卡上跑 YuE2", - "category": "ai", - "pub_date": "2026-10-20", - "status": "approved", - "batch_id": "Batch-01", - "approved_at": "2026-10-27 05:26", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换)", - "en_chars": 28955, - "zh_chars": 24414 - }, - "when-lowering-crf-does-nothing-maxrate-deadlock": { - "slug": "when-lowering-crf-does-nothing-maxrate-deadlock", - "title": "When Lowering CRF Does Nothing: The -maxrate Ceiling and the SSIM Quality Deadlock", - "zh_title": "当降低 CRF 毫无效果:视频转码中 -maxrate 封顶与 SSIM 质量门禁的死锁", - "category": "devops", - "pub_date": "2026-10-27", - "status": "approved", - "batch_id": "Batch-07", - "approved_at": "2026-10-28 09:32", - "notes": "Batch-07 外部顾问审阅「需微调 → 通过」(事实4.8/人设4.7/CRO4.8/OPSEC4.7)。已落地:清日志残留符号、499 跨跳因果改写、I/O 余量措辞、details class+行数、双语第二人称清零、three→four、中文与含反引号标题补显式锚点;详见 report-batch-07.md", - "en_chars": 8906, - "zh_chars": 5042 - }, - "why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux": { - "slug": "why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux", - "title": "Why ffmpeg -map 0 Breaks Your Remux: The Hidden Matrix of Multi-Track MP4 and Matroska", - "zh_title": "为什么 ffmpeg -map 0 会搞崩混流:跨容器多音轨、字幕与字体的深水区", - "category": "engineering", - "pub_date": "2026-10-27", - "status": "approved", - "batch_id": "Batch-07", - "approved_at": "2026-10-28 09:32", - "notes": "Batch-07 外部顾问审阅「需微调 → 通过」(事实4.8/人设4.7/CRO4.8/OPSEC4.7)。已落地:清日志残留符号、499 跨跳因果改写、I/O 余量措辞、details class+行数、双语第二人称清零、three→four、中文与含反引号标题补显式锚点;详见 report-batch-07.md", - "en_chars": 10877, - "zh_chars": 7332 - }, - "when-a-proxy-timeout-returns-html-instead-of-json": { - "slug": "when-a-proxy-timeout-returns-html-instead-of-json", - "title": "When a Proxy Timeout Returns HTML Instead of JSON: A 499 Post-Mortem", - "zh_title": "反代超时返回 HTML,前端报 SyntaxError:一次 499 事故复盘", - "category": "engineering", - "pub_date": "2026-10-28", - "status": "approved", - "batch_id": "Batch-07", - "approved_at": "2026-10-28 09:32", - "notes": "Batch-07 外部顾问审阅「需微调 → 通过」(事实4.8/人设4.7/CRO4.8/OPSEC4.7)。已落地:清日志残留符号、499 跨跳因果改写、I/O 余量措辞、details class+行数、双语第二人称清零、three→four、中文与含反引号标题补显式锚点;详见 report-batch-07.md", - "en_chars": 15520, - "zh_chars": 8813 - } + "adding-a-domain-to-someone-elses-mail-server": { + "slug": "adding-a-domain-to-someone-elses-mail-server", + "title": "Adding a Domain to Someone Else's Mail Server", + "zh_title": "给别人家的邮件服务器加一个域名", + "category": "notes", + "pub_date": "2025-05-06", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 05:21", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "en_chars": 7886, + "zh_chars": 3603 + }, + "adding-english-mode-to-a-chinese-only-web-app": { + "slug": "adding-english-mode-to-a-chinese-only-web-app", + "title": "No API for Browser Translation: Adding an English Mode to a Chinese-Only Web App", + "zh_title": "浏览器翻译没有 API:我给一个纯中文网页应用加上了英文模式", + "category": "engineering", + "pub_date": "2025-06-11", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 06:09", + "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", + "en_chars": 11914, + "zh_chars": 6253 + }, + "ai-furniture-compositing-with-flux-kontext": { + "slug": "ai-furniture-compositing-with-flux-kontext", + "title": "How I Built an AI Furniture Compositing Demo With FLUX.1 Kontext", + "zh_title": "我如何用 FLUX.1 Kontext 打造 AI 家具合成演示", + "category": "case-studies", + "pub_date": "2026-09-11", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 05:26", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换)", + "en_chars": 12512, + "zh_chars": 7237 + }, + "authentik-css-greater-than-bug": { + "slug": "authentik-css-greater-than-bug", + "title": "The Character That Silently Broke My authentik CSS", + "zh_title": "一个字符让我的 authentik CSS 静默失效", + "category": "devops", + "pub_date": "2026-09-20", + "status": "approved", + "batch_id": "Batch-03", + "approved_at": "2026-10-27 03:49", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 9317, + "zh_chars": 5589 + }, + "authentik-forward-auth-gate-wasnt-live": { + "slug": "authentik-forward-auth-gate-wasnt-live", + "title": "The Forward-Auth Gate That Verified Perfectly — and Wasn't Live", + "zh_title": "验证完全正确的 Forward-Auth 网关——其实并未上线", + "category": "devops", + "pub_date": "2026-08-12", + "status": "approved", + "batch_id": "Batch-03", + "approved_at": "2026-10-27 03:49", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 16526, + "zh_chars": 8746 + }, + "authentik-major-upgrade-gotchas": { + "slug": "authentik-major-upgrade-gotchas", + "title": "Authentik 2025.8 to 2026.8: The Breakable Parts Nobody Warns You About", + "zh_title": "Authentik 从 2025.8 升级到 2026.8:那些没人提醒你会坏掉的部分", + "category": "devops", + "pub_date": "2026-09-09", + "status": "approved", + "batch_id": "Batch-03", + "approved_at": "2026-10-27 03:49", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 11710, + "zh_chars": 6147 + }, + "automating-cyberpanel-without-the-ui": { + "slug": "automating-cyberpanel-without-the-ui", + "title": "Automating CyberPanel Without the UI: Reverse-Engineering an Undocumented v2 API", + "zh_title": "不用界面管理 CyberPanel:逆向一个没有文档的 v2 API", + "category": "devops", + "pub_date": "2026-09-09", + "status": "approved", + "batch_id": "Batch-03", + "approved_at": "2026-10-27 03:49", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 8474, + "zh_chars": 5205 + }, + "best-ai-video-generators-2026": { + "slug": "best-ai-video-generators-2026", + "title": "Best AI Video Generators in 2026: Free vs Paid, and My LTX-2.3 Test", + "zh_title": "2026 年最佳 AI 视频生成器:免费与付费对比,以及我的 LTX-2.3 实测", + "category": "ai", + "pub_date": "2026-09-11", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 03:00", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 24245, + "zh_chars": 12700 + }, + "calibrating-intel-quick-sync-hevc-quality": { + "slug": "calibrating-intel-quick-sync-hevc-quality", + "title": "Calibrating Intel Quick Sync HEVC: A Cliff at 28, and a Preset That Does Nothing", + "zh_title": "校准 Intel Quick Sync HEVC:28 与 30 之间的悬崖,和一个毫无作用的 preset", + "category": "tutorials", + "pub_date": "2026-10-14", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 05:21", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "en_chars": 10968, + "zh_chars": 5968 + }, + "chainlink-vrf-v2-lottery-contract": { + "slug": "chainlink-vrf-v2-lottery-contract", + "title": "An Automated Lottery Contract on Chainlink VRF v2.5 and Automation", + "zh_title": "一个基于 Chainlink VRF v2.5 与 Automation 的自动化彩票合约", + "category": "web3", + "pub_date": "2024-12-10", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 06:11", + "notes": "Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta", + "en_chars": 16252, + "zh_chars": 9707 + }, + "debugging-remotion-video-jitter": { + "slug": "debugging-remotion-video-jitter", + "title": "Debugging Remotion Video Jitter: Why Bass Scaling Ruins Background Transitions", + "zh_title": "排查 Remotion 视频抽搐:为什么在背景图挂载音频低频 Scale 会毁了转场", + "category": "engineering", + "pub_date": "2025-11-26", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 06:09", + "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", + "en_chars": 9836, + "zh_chars": 5653 + }, + "docker-reported-exit-0-the-oom-killer-disagreed": { + "slug": "docker-reported-exit-0-the-oom-killer-disagreed", + "title": "Docker Reported Exit 0. The Kernel Had Already OOM-Killed It.", + "zh_title": "Docker 报告退出码 0,内核却早已执行 OOM-Kill", + "category": "devops", + "pub_date": "2026-10-16", + "status": "approved", + "batch_id": "Batch-03", + "approved_at": "2026-10-27 03:49", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 10200, + "zh_chars": 5488 + }, + "does-hevc-actually-shrink-your-files": { + "slug": "does-hevc-actually-shrink-your-files", + "title": "Does Re-encoding to HEVC Actually Shrink Your Files? I Measured It.", + "zh_title": "转成 HEVC 到底会不会让文件变小?我实测了", + "category": "tutorials", + "pub_date": "2026-10-08", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 05:21", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "en_chars": 8042, + "zh_chars": 4159 + }, + "embedding-fonts-so-a-pdf-looks-the-same-everywhere": { + "slug": "embedding-fonts-so-a-pdf-looks-the-same-everywhere", + "title": "Embedding Fonts So a PDF Looks the Same on Every Machine", + "zh_title": "把字体嵌进 PDF,让它在任何机器上都长一样", + "category": "engineering", + "pub_date": "2026-10-15", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 06:09", + "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", + "en_chars": 8591, + "zh_chars": 3747 + }, + "every-player-stuttered-the-file-was-fine": { + "slug": "every-player-stuttered-the-file-was-fine", + "title": "Every Player Stuttered on the Same Video. The File Was Blameless.", + "zh_title": "每个播放器都在同一个视频上卡顿,而文件本身是无辜的", + "category": "devops", + "pub_date": "2026-10-08", + "status": "approved", + "batch_id": "Batch-03", + "approved_at": "2026-10-27 03:49", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 8459, + "zh_chars": 4296 + }, + "five-step-ai-roadmap-what-i-actually-run": { + "slug": "five-step-ai-roadmap-what-i-actually-run", + "title": "The Five-Step AI Roadmap Everyone Shares — and What I Actually Run in Production", + "zh_title": "全网都在转的 AI 五步学习路线 —— 我真正在生产里跑的是哪几步", + "category": "ai", + "pub_date": "2026-10-13", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 03:00", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 13155, + "zh_chars": 5483 + }, + "from-audio-to-a-4-minute-ai-music-video": { + "slug": "from-audio-to-a-4-minute-ai-music-video", + "title": "From Audio to a 4-Minute Music Video: Orchestrating Gemini, AI Diffusion, and Filmora Editing", + "zh_title": "从一首歌到 4 分钟完整 MV:我如何用 Gemini、AI 生成与 Filmora 剪辑串起全流程实操", + "category": "case-studies", + "pub_date": "2026-10-25", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 05:26", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换)", + "en_chars": 11027, + "zh_chars": 5168 + }, + "fully-on-chain-svg-nfts": { + "slug": "fully-on-chain-svg-nfts", + "title": "Fully On-Chain SVG NFTs: Putting the Artwork Inside the Contract", + "zh_title": "全链上 SVG NFT:把艺术作品放进合约里", + "category": "web3", + "pub_date": "2024-10-08", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 06:11", + "notes": "Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta", + "en_chars": 16205, + "zh_chars": 10281 + }, + "generating-full-length-songs-with-yue2-comfyui": { + "slug": "generating-full-length-songs-with-yue2-comfyui", + "title": "Generating Full-Length Songs with YuE2 BF16: Overcoming Duration Limits and Audio Truncation", + "zh_title": "用 YuE2 BF16 生成完整长歌:突破时长限制与音频硬截断", + "category": "tutorials", + "pub_date": "2026-10-26", + "status": "approved", + "batch_id": "Batch-03", + "approved_at": "2026-10-27 06:04", + "notes": "第3批微调项落地并通过:时长校正283.1s/单调时间戳与防死锁/专业人设去二次元俚语/B2B转化增强", + "en_chars": 134821, + "zh_chars": 127730 + }, + "generating-subtitles-for-songs-without-timestamps": { + "slug": "generating-subtitles-for-songs-without-timestamps", + "title": "Generating Subtitles for Songs That Ship Without Timestamps", + "zh_title": "给没有时间戳的歌曲自动生成字幕", + "category": "tutorials", + "pub_date": "2026-10-20", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 06:11", + "notes": "Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta", + "en_chars": 47576, + "zh_chars": 42677 + }, + "giving-ai-your-mouse-and-keyboard-safely": { + "slug": "giving-ai-your-mouse-and-keyboard-safely", + "title": "Giving AI Your Mouse and Keyboard: Safe Guardrails for Windows Desktop MCP", + "zh_title": "把鼠标和键盘交给 AI 之前:Windows 桌面 MCP 的安全边界与实战防线", + "category": "ai", + "pub_date": "2025-10-22", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 03:00", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 5906, + "zh_chars": 3149 + }, + "hardening-a-tor-onion-service": { + "slug": "hardening-a-tor-onion-service", + "title": "Hardening a Tor Onion Service: What Actually Matters", + "zh_title": "加固 Tor 洋葱服务:真正重要的是什么", + "category": "devops", + "pub_date": "2025-12-10", + "status": "approved", + "batch_id": "Batch-03", + "approved_at": "2026-10-27 03:49", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 14907, + "zh_chars": 7041 + }, + "hello-world": { + "slug": "hello-world", + "title": "Hello, World — About This Blog", + "zh_title": "你好,世界 —— 关于这个博客", + "category": "notes", + "pub_date": "2024-09-24", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 05:21", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "en_chars": 1938, + "zh_chars": 1074 + }, + "how-i-built-an-automated-music-video-pipeline": { + "slug": "how-i-built-an-automated-music-video-pipeline", + "title": "How I Built an Automated Music Video Pipeline with Remotion and Dockerized YouTube CDP", + "zh_title": "我是如何用 Remotion 与 Docker CDP 打造全自动 MV 生成与多语种油管发布流的", + "category": "case-studies", + "pub_date": "2025-04-18", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 05:26", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换)", + "en_chars": 9265, + "zh_chars": 4931 + }, + "how-i-built-the-digikedai-telegram-bot": { + "slug": "how-i-built-the-digikedai-telegram-bot", + "title": "How I Built the DigiKedai Telegram AI Bot", + "zh_title": "我是如何构建 DigiKedai Telegram AI 客服机器人的", + "category": "case-studies", + "pub_date": "2026-09-06", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 05:26", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换)", + "en_chars": 10719, + "zh_chars": 5271 + }, + "how-i-host-this-blog": { + "slug": "how-i-host-this-blog", + "title": "How I Host This Blog: Astro, Gitea Actions, and Self-Hosted CI/CD", + "zh_title": "我是如何托管这个博客的:Astro、Gitea Actions 与自托管 CI/CD", + "category": "case-studies", + "pub_date": "2026-09-04", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 05:26", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换)", + "en_chars": 5908, + "zh_chars": 4145 + }, + "how-i-made-my-own-songs-with-suno-ai": { + "slug": "how-i-made-my-own-songs-with-suno-ai", + "title": "How I Made My Own Songs with Suno AI", + "zh_title": "我用 Suno AI 做出自己的歌", + "category": "case-studies", + "pub_date": "2026-09-11", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 05:26", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换)", + "en_chars": 16935, + "zh_chars": 11737 + }, + "how-i-vetted-20-vps-providers-with-parallel-subagents": { + "slug": "how-i-vetted-20-vps-providers-with-parallel-subagents", + "title": "How I Vetted 20 VPS Providers in Three Hours with Parallel Subagents", + "zh_title": "如何用并行子代理在三小时内核查 20 家 VPS 服务商", + "category": "case-studies", + "pub_date": "2025-11-12", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 04:22", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", + "en_chars": 8593, + "zh_chars": 3613 + }, + "how-to-verify-a-hosting-provider-before-you-buy": { + "slug": "how-to-verify-a-hosting-provider-before-you-buy", + "title": "How to Verify a Hosting Provider Before You Buy", + "zh_title": "购买主机前,如何核实一家服务商的真实情况", + "category": "tutorials", + "pub_date": "2025-11-26", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 06:11", + "notes": "Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta", + "en_chars": 7710, + "zh_chars": 3405 + }, + "i-let-an-agent-manage-my-shopee-vouchers": { + "slug": "i-let-an-agent-manage-my-shopee-vouchers", + "title": "I Let an Agent Manage My Shopee Vouchers — And It Created One I Never Approved", + "zh_title": "我让 AI 助手管我的 Shopee 优惠券 —— 它建了一张我没批准的券", + "category": "ai", + "pub_date": "2025-07-08", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 03:00", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 9981, + "zh_chars": 4824 + }, + "it-reported-success-nothing-had-changed": { + "slug": "it-reported-success-nothing-had-changed", + "title": "It Reported Success. Nothing Had Changed.", + "zh_title": "它报告了成功,可实际上什么都没变", + "category": "devops", + "pub_date": "2026-10-08", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 04:09", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", + "en_chars": 8349, + "zh_chars": 3886 + }, + "jpa-version-field-lost-update": { + "slug": "jpa-version-field-lost-update", + "title": "The JPA Field That Turns a Silent Lost Update Into a 409", + "zh_title": "那个把静默丢失更新变成 409 的 JPA 字段:@Version 乐观锁", + "category": "engineering", + "pub_date": "2026-08-19", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 06:09", + "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", + "en_chars": 12536, + "zh_chars": 7506 + }, + "loop-engineering-without-a-coding-agent": { + "slug": "loop-engineering-without-a-coding-agent", + "title": "Loop Engineering Without a Coding Agent: The 11 Cron Jobs That Run My Infrastructure", + "zh_title": "没有 Coding Agent 的 Loop Engineering:撑起我这套基础设施的 11 个定时任务", + "category": "case-studies", + "pub_date": "2026-10-01", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 04:22", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", + "en_chars": 14249, + "zh_chars": 6609 + }, + "migrating-codeigniter-iis-to-openlitespeed": { + "slug": "migrating-codeigniter-iis-to-openlitespeed", + "title": "Migrating a CodeIgniter 4 App From IIS to OpenLiteSpeed", + "zh_title": "把 CodeIgniter 4 应用从 IIS 迁移到 OpenLiteSpeed", + "category": "engineering", + "pub_date": "2026-09-27", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 06:09", + "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", + "en_chars": 14943, + "zh_chars": 8425 + }, + "my-backup-was-using-someone-elses-api-quota": { + "slug": "my-backup-was-using-someone-elses-api-quota", + "title": "My Backup Was Crawling Because I Was Using Someone Else's API Quota", + "zh_title": "我的备份爬得比爬虫还慢,因为我在用别人的 API 配额", + "category": "notes", + "pub_date": "2026-10-15", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 05:21", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "en_chars": 8572, + "zh_chars": 4527 + }, + "n8n-v1-to-v2-upgrade-gotchas": { + "slug": "n8n-v1-to-v2-upgrade-gotchas", + "title": "Upgrading n8n v1 to v2: Seven Deprecations in One Log File", + "zh_title": "n8n v1 升级到 v2:一个日志文件里的七项废弃警告", + "category": "devops", + "pub_date": "2026-09-18", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 04:09", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", + "en_chars": 12262, + "zh_chars": 6712 + }, + "nocodb-sso-is-a-licensed-feature": { + "slug": "nocodb-sso-is-a-licensed-feature", + "title": "NocoDB SSO Is a Licensed Feature — and the Env Vars Won't Tell You", + "zh_title": "NocoDB SSO 是授权功能:环境变量不会告诉你的事", + "category": "notes", + "pub_date": "2026-09-29", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 05:21", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "en_chars": 9937, + "zh_chars": 5421 + }, + "one-hostname-public-tracker-sso-dashboard": { + "slug": "one-hostname-public-tracker-sso-dashboard", + "title": "One Hostname for a Public Tracker and an SSO-Gated Dashboard", + "zh_title": "公开的埋点与要 SSO 的仪表盘,怎么共用一个域名", + "category": "devops", + "pub_date": "2026-09-30", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 04:09", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", + "en_chars": 14400, + "zh_chars": 6837 + }, + "one-prometheus-for-unraid-synology-and-a-vps": { + "slug": "one-prometheus-for-unraid-synology-and-a-vps", + "title": "One Prometheus for unRaid, a Synology NAS, and a VPS: What I Got Wrong", + "zh_title": "用一个 Prometheus 监控 unRaid、群晖 NAS 和 VPS:我做错的四件事", + "category": "case-studies", + "pub_date": "2026-07-29", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 04:22", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", + "en_chars": 8358, + "zh_chars": 4690 + }, + "passbolt-hang-three-failure-modes": { + "slug": "passbolt-hang-three-failure-modes", + "title": "Passbolt UI Kept Hanging — Three Failure Modes From One Missing Config File", + "zh_title": "Passbolt 界面反复卡死——一个缺失的配置文件引发的三种故障模式", + "category": "devops", + "pub_date": "2026-01-07", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 04:09", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", + "en_chars": 7864, + "zh_chars": 4187 + }, + "patching-workbench-26-for-mariadb": { + "slug": "patching-workbench-26-for-mariadb", + "title": "When Your Database Client Lies to You: Patching Workbench 26 for MariaDB", + "zh_title": "当数据库客户端对你撒谎:为 MariaDB 修补 Workbench 26", + "category": "devops", + "pub_date": "2026-09-19", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 04:09", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", + "en_chars": 15965, + "zh_chars": 9501 + }, + "php2shell-patching-every-php-runtime-i-manage": { + "slug": "php2shell-patching-every-php-runtime-i-manage", + "title": "PHP2Shell: I Measured Every PHP Runtime I Manage. All of Them Were Vulnerable.", + "zh_title": "PHP2Shell:我管的每台机器,PHP 运行时全都中了", + "category": "devops", + "pub_date": "2026-10-23", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 04:09", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", + "en_chars": 22354, + "zh_chars": 12531 + }, + "plugging-windows-desktop-control-into-four-ai-agents": { + "slug": "plugging-windows-desktop-control-into-four-ai-agents", + "title": "Plugging Windows Desktop Control into Four AI Agents: Hermes, OpenCode, Claw, and Claude", + "zh_title": "把 Windows 桌面控制接进 4 款 AI Agent:Hermes、OpenCode、Claw 与 Claude 的实战架构", + "category": "ai", + "pub_date": "2025-12-23", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 03:00", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 6554, + "zh_chars": 5030 + }, + "putting-a-front-door-on-an-app-you-cant-modify": { + "slug": "putting-a-front-door-on-an-app-you-cant-modify", + "title": "Putting a Front Door on an App You Can't Modify", + "zh_title": "给自己改不了源码的应用装一扇前门", + "category": "devops", + "pub_date": "2025-06-24", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 04:09", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", + "en_chars": 13927, + "zh_chars": 7415 + }, + "read-only-nocodb-dashboard-for-a-remote-database": { + "slug": "read-only-nocodb-dashboard-for-a-remote-database", + "title": "A Read-Only NocoDB Dashboard for a Database on Another Machine", + "zh_title": "给另一台机器上的数据库配一个 NocoDB 只读看板", + "category": "devops", + "pub_date": "2026-09-29", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 04:09", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", + "en_chars": 12009, + "zh_chars": 6287 + }, + "reading-a-containers-own-api-docs": { + "slug": "reading-a-containers-own-api-docs", + "title": "Read a Container's Own API Docs Instead of the Vendor's", + "zh_title": "与其看供应商文档,不如直接读容器自带的 API 文档", + "category": "notes", + "pub_date": "2025-10-01", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 05:21", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "en_chars": 8382, + "zh_chars": 5489 + }, + "replacing-rdpguard-with-ipban": { + "slug": "replacing-rdpguard-with-ipban", + "title": "Replacing RDPGuard With IPBan: The Traps Nobody Documents", + "zh_title": "用 IPBan 替换 RDPGuard:没人写出来的三个坑", + "category": "devops", + "pub_date": "2026-09-19", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 04:09", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)", + "en_chars": 13131, + "zh_chars": 7795 + }, + "running-ai-video-locally-on-a-12gb-gpu": { + "slug": "running-ai-video-locally-on-a-12gb-gpu", + "title": "Running AI Video Locally on a 12 GB GPU: Real Numbers for Wan 2.2 and SeedVR2", + "zh_title": "12GB 显卡跑本地 AI 视频:Wan 2.2 加 SeedVR2 的真实数据", + "category": "ai", + "pub_date": "2026-10-20", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 03:00", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 18508, + "zh_chars": 12878 + }, + "running-production-infrastructure-solo": { + "slug": "running-production-infrastructure-solo", + "title": "Running Production Infrastructure Solo: 162 Containers Across Three Hosts", + "zh_title": "一个人跑生产基础设施:三台主机、162 个容器", + "category": "case-studies", + "pub_date": "2026-10-06", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 04:22", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", + "en_chars": 7975, + "zh_chars": 3722 + }, + "running-tts-as-a-service-with-token-sidecars": { + "slug": "running-tts-as-a-service-with-token-sidecars", + "title": "I Ran a Text-to-Speech Service for a Year on Two Cron Containers", + "zh_title": "我用两个 Cron 容器跑了一年的语音合成服务", + "category": "ai", + "pub_date": "2026-09-18", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 03:00", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 14141, + "zh_chars": 7929 + }, + "scraping-bot-walled-marketplace-warm-browser-session": { + "slug": "scraping-bot-walled-marketplace-warm-browser-session", + "title": "Scraping a Bot-Walled Marketplace With a Warm Browser Session", + "zh_title": "用「热浏览器会话」爬取有反爬墙的电商网站", + "category": "engineering", + "pub_date": "2026-09-13", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 06:09", + "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", + "en_chars": 11313, + "zh_chars": 5734 + }, + "self-healing-digital-goods-entitlements": { + "slug": "self-healing-digital-goods-entitlements", + "title": "Self-Healing Access Control for Digital Goods: NocoDB, n8n, and AList", + "zh_title": "数字商品的自愈式访问控制:NocoDB、n8n 与 AList", + "category": "case-studies", + "pub_date": "2026-09-18", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 04:22", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", + "en_chars": 14765, + "zh_chars": 6819 + }, + "self-hosted-speech-to-text-api": { + "slug": "self-hosted-speech-to-text-api", + "title": "Your Own Speech-to-Text Server: Faster Than Typing, Private by Default", + "zh_title": "自建语音转文字服务:打字速度的 3 倍以上,而且数据不出内网", + "category": "case-studies", + "pub_date": "2026-09-19", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 04:22", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", + "en_chars": 14708, + "zh_chars": 7794 + }, + "self-hosted-tts-cosyvoice2-n8n-gpu": { + "slug": "self-hosted-tts-cosyvoice2-n8n-gpu", + "title": "How I Replaced Cloud TTS with a Self-Hosted Neural Voice Stack on an RTX 3060", + "zh_title": "从云端转本地:在 12GB 显卡与群晖 N8N 上搭建中英混读高保真 TTS 语音栈", + "category": "case-studies", + "pub_date": "2026-10-22", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 04:22", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", + "en_chars": 8913, + "zh_chars": 4773 + }, + "self-hosting-mem0-memory-stack": { + "slug": "self-hosting-mem0-memory-stack", + "title": "How I Self-Hosted a Mem0 Memory Stack (So My AI Agent Remembers)", + "zh_title": "我如何在私有存储节点上自托管 Mem0 记忆栈(让 AI 助手拥有持久记忆)", + "category": "case-studies", + "pub_date": "2026-09-16", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 04:22", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", + "en_chars": 8057, + "zh_chars": 4849 + }, + "shipping-an-ai-photo-editor-as-a-wordpress-plugin": { + "slug": "shipping-an-ai-photo-editor-as-a-wordpress-plugin", + "title": "Shipping an AI Photo Editor as a WordPress Plugin: 22 Versions of Hard Lessons", + "zh_title": "把 AI 修图工具做成 WordPress 插件:22 个版本换来的经验", + "category": "case-studies", + "pub_date": "2026-09-18", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 04:22", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", + "en_chars": 13879, + "zh_chars": 6861 + }, + "slashing-agent-context-with-a-code-graph": { + "slug": "slashing-agent-context-with-a-code-graph", + "title": "Slashing Agent Context and Token Churn With a Code Graph", + "zh_title": "别再把整个 Repo 喂给 Agent:用 Code Graph 斩断 Token 膨胀与遗忘陷阱", + "category": "ai", + "pub_date": "2026-04-28", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 03:00", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 8122, + "zh_chars": 5040 + }, + "smartctl-exit-code-32-skips-the-disks-that-matter": { + "slug": "smartctl-exit-code-32-skips-the-disks-that-matter", + "title": "smartctl Exit Code 32: The Code That Skips the Disks You Care About", + "zh_title": "smartctl 退出码 32:专门跳过你最该看的硬盘的那个“错误”", + "category": "notes", + "pub_date": "2026-04-14", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 05:21", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "en_chars": 5475, + "zh_chars": 2881 + }, + "space-reclamation-wasnt-stuck-it-was-waiting": { + "slug": "space-reclamation-wasnt-stuck-it-was-waiting", + "title": "Space Reclamation Wasn't Stuck. It Was Waiting for Tomorrow at 09:29.", + "zh_title": "空间回收没卡住,它只是在等明天早上 09:29", + "category": "devops", + "pub_date": "2026-10-14", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 06:10", + "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", + "en_chars": 6574, + "zh_chars": 3505 + }, + "stop-writing-agent-prompts-for-deterministic-work": { + "slug": "stop-writing-agent-prompts-for-deterministic-work", + "title": "Stop Writing Agent Prompts for Deterministic Work", + "zh_title": "确定性的活,别再用 Agent Prompt 去跑", + "category": "notes", + "pub_date": "2026-10-01", + "status": "approved", + "batch_id": "Batch-03", + "approved_at": "2026-10-27 05:22", + "notes": "外部顾问审阅通过并落地修改", + "en_chars": 4951, + "zh_chars": 2216 + }, + "syncing-a-self-improving-ai-agent-across-machines": { + "slug": "syncing-a-self-improving-ai-agent-across-machines", + "title": "Syncing a Self-Improving AI Agent Across Machines", + "zh_title": "在多台机器之间同步一个会自我学习的 AI Agent", + "category": "case-studies", + "pub_date": "2026-02-18", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 04:22", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/架构蓝图对齐/排版折叠)", + "en_chars": 8861, + "zh_chars": 4541 + }, + "synology-api-401-with-the-correct-password": { + "slug": "synology-api-401-with-the-correct-password", + "title": "Why Your Synology API Login Returns 401 With the Correct Password", + "zh_title": "密码正确,Synology API 登录却返回 401,问题出在哪", + "category": "notes", + "pub_date": "2025-09-10", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 05:21", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "en_chars": 5053, + "zh_chars": 3063 + }, + "synology-spreadsheet-api-is-a-container": { + "slug": "synology-spreadsheet-api-is-a-container", + "title": "The Synology Spreadsheet API Is a Container, Not an API Endpoint", + "zh_title": "Synology 电子表格 API 是一个容器,不是一个 API 端点", + "category": "devops", + "pub_date": "2025-08-20", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 06:10", + "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", + "en_chars": 16101, + "zh_chars": 9200 + }, + "that-dying-ssd-was-just-a-bad-sata-cable": { + "slug": "that-dying-ssd-was-just-a-bad-sata-cable", + "title": "I Was About to RMA This SSD — the Fault Was a SATA Cable", + "zh_title": "我差点把这颗 SSD 送修——真正坏的是 SATA 数据线", + "category": "devops", + "pub_date": "2026-09-16", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 06:10", + "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", + "en_chars": 7471, + "zh_chars": 3940 + }, + "the-cause-was-trim-not-the-ssds": { + "slug": "the-cause-was-trim-not-the-ssds", + "title": "The Corruption Came Back on Different Drives — the Cause Was TRIM, Not the SSDs", + "zh_title": "换了不同的硬盘,同样的损坏又来了——真凶是 TRIM,不是 SSD", + "category": "devops", + "pub_date": "2026-09-18", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 06:10", + "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", + "en_chars": 13042, + "zh_chars": 7310 + }, + "the-nocodb-attachment-that-wouldnt-update": { + "slug": "the-nocodb-attachment-that-wouldnt-update", + "title": "The NocoDB Attachment That Wouldn't Update (and a Regex That Missed)", + "zh_title": "NocoDB 附件字段怎么改都不生效,和一个漏网的正则", + "category": "notes", + "pub_date": "2026-02-04", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 05:21", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "en_chars": 3798, + "zh_chars": 2312 + }, + "the-single-writer-rule-for-coding-agents": { + "slug": "the-single-writer-rule-for-coding-agents", + "title": "The Single-Writer Rule: Orchestrating Coding Agents Without Multi-Agent Chaos", + "zh_title": "代码只让一个 AI 改:我是如何避开多 Agent 协同踩坑的「单写多审」架构", + "category": "case-studies", + "pub_date": "2026-08-26", + "status": "approved", + "batch_id": "Batch-03", + "approved_at": "2026-10-27 03:49", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 13331, + "zh_chars": 6954 + }, + "the-upstream-was-deleted-then-came-back-rewritten": { + "slug": "the-upstream-was-deleted-then-came-back-rewritten", + "title": "The Upstream Was Deleted, Then Came Back as a Rewrite", + "zh_title": "上游被删了,然后带着一个重写版回来", + "category": "devops", + "pub_date": "2026-10-06", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 06:10", + "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", + "en_chars": 11636, + "zh_chars": 5229 + }, + "two-ways-a-javascript-file-stops-working-and-looks-fine": { + "slug": "two-ways-a-javascript-file-stops-working-and-looks-fine", + "title": "Two Ways a JavaScript File Stops Working and Looks Fine", + "zh_title": "JavaScript 文件静默失效的两种方式:而页面看上去一切正常", + "category": "engineering", + "pub_date": "2025-02-20", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 06:09", + "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", + "en_chars": 8293, + "zh_chars": 3881 + }, + "unraid-stop-array-hangs-on-swapfile": { + "slug": "unraid-stop-array-hangs-on-swapfile", + "title": "Why Unraid Hangs When You Stop the Array With a Swapfile — and the Fix", + "zh_title": "Unraid 停止阵列时卡死的真相:Swapfile 锁住挂载点 — 附修复方案", + "category": "devops", + "pub_date": "2026-09-15", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 06:10", + "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", + "en_chars": 10470, + "zh_chars": 6376 + }, + "upgrading-codeigniter-46-to-47": { + "slug": "upgrading-codeigniter-46-to-47", + "title": "Upgrading CodeIgniter 4.6 to 4.7: The Breaking Changes the Guide Misses", + "zh_title": "CodeIgniter 4.6 升级到 4.7:官方指南没说到的破坏性变更", + "category": "notes", + "pub_date": "2026-09-27", + "status": "approved", + "batch_id": "Batch-03", + "approved_at": "2026-10-27 05:22", + "notes": "外部顾问审阅通过并落地修改", + "en_chars": 9469, + "zh_chars": 5411 + }, + "uploading-large-videos-to-youtube-via-cdp": { + "slug": "uploading-large-videos-to-youtube-via-cdp", + "title": "Uploading 100MB+ Videos to YouTube via CDP: The Docker Archive Pattern", + "zh_title": "用 CDP 自动化上传百兆视频到 YouTube:跨越 DevTools 内存墙的 Docker 归档法", + "category": "devops", + "pub_date": "2025-08-22", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 06:10", + "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", + "en_chars": 11267, + "zh_chars": 7173 + }, + "using-chinese-llm-apis-from-malaysia": { + "slug": "using-chinese-llm-apis-from-malaysia", + "title": "Using Chinese LLM APIs From Malaysia: What Actually Works", + "zh_title": "从马来西亚使用中国大模型 API:真正可行的方法", + "category": "ai", + "pub_date": "2026-09-11", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 03:00", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 7540, + "zh_chars": 3536 + }, + "verifying-a-pdf-report-page-by-page": { + "slug": "verifying-a-pdf-report-page-by-page", + "title": "Verifying a 19-Page PDF Report Page by Page", + "zh_title": "逐页验证一份 19 页的 PDF 报告", + "category": "engineering", + "pub_date": "2026-09-28", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 06:09", + "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", + "en_chars": 12525, + "zh_chars": 6685 + }, + "vetting-an-open-source-dependency-before-you-bet-on-it": { + "slug": "vetting-an-open-source-dependency-before-you-bet-on-it", + "title": "How I Vet an Open-Source Dependency Before Betting On It", + "zh_title": "如何在押注前验证一个开源依赖:我用的六项检查", + "category": "devops", + "pub_date": "2026-09-29", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 06:10", + "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", + "en_chars": 8512, + "zh_chars": 4201 + }, + "when-smart-says-healthy-but-your-raid-is-corrupting-data": { + "slug": "when-smart-says-healthy-but-your-raid-is-corrupting-data", + "title": "When SMART Says Healthy and Your RAID Is Silently Corrupting Data", + "zh_title": "SMART 显示健康,RAID 却在悄悄损坏数据", + "category": "devops", + "pub_date": "2026-09-16", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 06:10", + "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", + "en_chars": 14160, + "zh_chars": 6246 + }, + "when-to-give-your-agent-physical-clicks": { + "slug": "when-to-give-your-agent-physical-clicks", + "title": "When to Give Your Agent Physical Clicks (And When to Never Touch Them)", + "zh_title": "什么时候该让 AI 操控物理鼠标(以及什么时候绝对不要用)", + "category": "case-studies", + "pub_date": "2026-05-28", + "status": "approved", + "batch_id": "Batch-03", + "approved_at": "2026-10-27 03:49", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 6882, + "zh_chars": 3608 + }, + "why-500000-lines-of-commit-churn-only-left-230000-in-production": { + "slug": "why-500000-lines-of-commit-churn-only-left-230000-in-production", + "title": "I Committed 518,000 Lines in 30 Days. Production Kept 235,000.", + "zh_title": "30 天提交 51.8 万行,生产环境只留下 23.5 万行", + "category": "engineering", + "pub_date": "2026-10-18", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 05:21", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "en_chars": 8949, + "zh_chars": 4197 + }, + "why-chrome-forgets-its-tabs-in-a-container": { + "slug": "why-chrome-forgets-its-tabs-in-a-container", + "title": "Why Chrome Forgets Its Tabs in a Container — And How I Fixed It", + "zh_title": "为什么容器里的 Chrome 会忘记标签页 —— 以及我是怎么修好的", + "category": "devops", + "pub_date": "2026-09-29", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 06:10", + "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", + "en_chars": 15430, + "zh_chars": 9234 + }, + "why-i-built-a-video-knowledge-base": { + "slug": "why-i-built-a-video-knowledge-base", + "title": "Why I Built a Video Knowledge Base: Turning Saved Short Videos into Searchable Notes", + "zh_title": "为什么我要做视频精读知识库:把收藏夹吃灰的短视频变成可检索笔记", + "category": "case-studies", + "pub_date": "2024-11-28", + "status": "approved", + "batch_id": "Batch-03", + "approved_at": "2026-10-27 03:49", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 5770, + "zh_chars": 2924 + }, + "why-i-still-bought-a-local-gpu": { + "slug": "why-i-still-bought-a-local-gpu", + "title": "Why I Still Bought a GPU to Run AI When Claude and GPT Are Obviously Stronger", + "zh_title": "Claude 和 GPT 明明更强,我为什么还是买了 GPU 跑本地 AI", + "category": "ai", + "pub_date": "2026-09-21", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 05:26", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换)", + "en_chars": 11811, + "zh_chars": 4924 + }, + "why-is-my-tts-model-repeating-percent": { + "slug": "why-is-my-tts-model-repeating-percent", + "title": "Why Is My TTS Model Repeating \\\"Percent\\\"? The URL-Encoding Trap in Speech Pipelines", + "zh_title": "为什么本地语音合成一直在念 “Percent”?语音管线里的 URL 编码与沙盒避坑记", + "category": "notes", + "pub_date": "2026-10-22", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 05:21", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "en_chars": 7728, + "zh_chars": 4968 + }, + "why-multi-agent-coding-fails": { + "slug": "why-multi-agent-coding-fails", + "title": "Why Multi-Agent Coding Fails: The Telephone Game and Architectural Drift", + "zh_title": "为什么多个 AI 一起写代码总会烂尾?传话失真与隐式决策困境", + "category": "notes", + "pub_date": "2025-07-29", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 05:21", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "en_chars": 6364, + "zh_chars": 3353 + }, + "why-my-on-chain-nft-art-changed-on-windows": { + "slug": "why-my-on-chain-nft-art-changed-on-windows", + "title": "Why My On-Chain NFT Art Changed When I Cloned It on Windows", + "zh_title": "为什么在 Windows 上克隆后,我的链上 NFT 图像变了", + "category": "web3", + "pub_date": "2026-08-19", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 06:11", + "notes": "Batch-04 review: performUpkeep external-callable correction, _ownerOf dead-code fix, storage vs EIP-170 split, RDAP -L + ASN blocklist, subs-15 retimed from re-run ASR, cross-links, dynamicCta", + "en_chars": 8423, + "zh_chars": 4585 + }, + "why-telegram-bot-notifications-die": { + "slug": "why-telegram-bot-notifications-die", + "title": "Why Telegram Bot Notifications Die: IPv6, DNS, and a 400 That Took a Day", + "zh_title": "Telegram 机器人通知为什么发不出去:IPv6、DNS 和一个追查了一整天的 400", + "category": "devops", + "pub_date": "2026-03-25", + "status": "approved", + "batch_id": "Batch-02", + "approved_at": "2026-10-27 06:10", + "notes": "顾问二次审阅(其编号Batch-05)已落地:修正Multipart join原理解释与源码转义、Btrfs csum字段位置与字节序、losetup -p误用、UDMA_CRC机制、CONFIG_CFS_BANDWIDTH、GiB/h算术;补齐blueprint与机型待确认。详见 reports/report-batch-05-rereview.md", + "en_chars": 10753, + "zh_chars": 6005 + }, + "why-your-cdp-clicks-silently-fail": { + "slug": "why-your-cdp-clicks-silently-fail", + "title": "Why Your CDP Clicks Silently Fail: Smooth Scroll, Minimised Windows, and JS-Dispatched Events", + "zh_title": "为什么你的 CDP 点击会静默失效:平滑滚动、最小化窗口与 JS 派发事件", + "category": "devops", + "pub_date": "2025-03-19", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 06:09", + "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", + "en_chars": 8054, + "zh_chars": 4536 + }, + "why-your-grafana-dashboard-shows-no-data": { + "slug": "why-your-grafana-dashboard-shows-no-data", + "title": "Why Your Grafana Dashboard Shows No Data (When Prometheus Is Fine)", + "zh_title": "Prometheus 明明有数据,Grafana 面板却全是 No data 的原因", + "category": "devops", + "pub_date": "2026-05-17", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 06:09", + "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", + "en_chars": 7456, + "zh_chars": 3919 + }, + "why-your-headless-browser-cant-scrape-everything": { + "slug": "why-your-headless-browser-cant-scrape-everything", + "title": "Why Your Headless Browser Can't Scrape Everything", + "zh_title": "为什么你的无头浏览器不是万能爬虫", + "category": "case-studies", + "pub_date": "2026-01-21", + "status": "approved", + "batch_id": "Batch-03", + "approved_at": "2026-10-27 03:49", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见", + "en_chars": 8076, + "zh_chars": 3792 + }, + "why-your-windows-mcp-calls-silently-fail": { + "slug": "why-your-windows-mcp-calls-silently-fail", + "title": "Why Your Windows Desktop MCP Calls Silently Fail: Taming the 10-Second Idle Gate", + "zh_title": "为什么你的 Windows 桌面 MCP 调用会静默失败:攻破 10 秒空闲门禁与避坑实录", + "category": "notes", + "pub_date": "2026-03-12", + "status": "approved", + "batch_id": "Batch-04", + "approved_at": "2026-10-27 05:21", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "en_chars": 5663, + "zh_chars": 3857 + }, + "your-disk-full-alert-is-lying": { + "slug": "your-disk-full-alert-is-lying", + "title": "Your Disk-Full Alert Is Lying: Stop Alerting on Percentages", + "zh_title": "你的“磁盘将满”告警在说谎:别再按百分比告警", + "category": "devops", + "pub_date": "2026-06-24", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 06:09", + "notes": "第一批外部顾问审阅完成,已全量采纳并落地修改(含数字矛盾纠正/OPSEC与禁用词清理/并发异常409映射/双语CTA补齐)", + "en_chars": 6139, + "zh_chars": 3090 + }, + "yue2-on-a-12gb-gpu-songs-that-lost-their-endings": { + "slug": "yue2-on-a-12gb-gpu-songs-that-lost-their-endings", + "title": "Why My AI Songs Kept Losing Their Endings: Running YuE2 on a 12 GB GPU", + "zh_title": "为什么我的 AI 歌曲总是丢结尾:在 12GB 显卡上跑 YuE2", + "category": "ai", + "pub_date": "2026-10-20", + "status": "approved", + "batch_id": "Batch-01", + "approved_at": "2026-10-27 05:26", + "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含GPU/Token成本算账、Gemini净化、双语CTA、代码折叠与简繁转换)", + "en_chars": 28955, + "zh_chars": 24414 + }, + "when-lowering-crf-does-nothing-maxrate-deadlock": { + "slug": "when-lowering-crf-does-nothing-maxrate-deadlock", + "title": "When Lowering CRF Does Nothing: The -maxrate Ceiling and the SSIM Quality Deadlock", + "zh_title": "当降低 CRF 毫无效果:视频转码中 -maxrate 封顶与 SSIM 质量门禁的死锁", + "category": "devops", + "pub_date": "2026-10-27", + "status": "approved", + "batch_id": "Batch-07", + "approved_at": "2026-10-28 09:32", + "notes": "Batch-07 外部顾问审阅「需微调 → 通过」(事实4.8/人设4.7/CRO4.8/OPSEC4.7)。已落地:清日志残留符号、499 跨跳因果改写、I/O 余量措辞、details class+行数、双语第二人称清零、three→four、中文与含反引号标题补显式锚点;详见 report-batch-07.md", + "en_chars": 8970, + "zh_chars": 5317 + }, + "why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux": { + "slug": "why-ffmpeg-map-0-breaks-your-mp4-and-mkv-remux", + "title": "Why ffmpeg -map 0 Breaks Your Remux: The Hidden Matrix of Multi-Track MP4 and Matroska", + "zh_title": "为什么 ffmpeg -map 0 会搞崩混流:跨容器多音轨、字幕与字体的深水区", + "category": "engineering", + "pub_date": "2026-10-27", + "status": "approved", + "batch_id": "Batch-07", + "approved_at": "2026-10-28 09:32", + "notes": "Batch-07 外部顾问审阅「需微调 → 通过」(事实4.8/人设4.7/CRO4.8/OPSEC4.7)。已落地:清日志残留符号、499 跨跳因果改写、I/O 余量措辞、details class+行数、双语第二人称清零、three→four、中文与含反引号标题补显式锚点;详见 report-batch-07.md", + "en_chars": 11008, + "zh_chars": 7574 + }, + "when-a-proxy-timeout-returns-html-instead-of-json": { + "slug": "when-a-proxy-timeout-returns-html-instead-of-json", + "title": "When a Proxy Timeout Returns HTML Instead of JSON: A 499 Post-Mortem", + "zh_title": "反代超时返回 HTML,前端报 SyntaxError:一次 499 事故复盘", + "category": "engineering", + "pub_date": "2026-10-28", + "status": "approved", + "batch_id": "Batch-07", + "approved_at": "2026-10-28 09:32", + "notes": "Batch-07 外部顾问审阅「需微调 → 通过」(事实4.8/人设4.7/CRO4.8/OPSEC4.7)。已落地:清日志残留符号、499 跨跳因果改写、I/O 余量措辞、details class+行数、双语第二人称清零、three→four、中文与含反引号标题补显式锚点;详见 report-batch-07.md", + "en_chars": 15742, + "zh_chars": 8940 + }, + "architecting-sea-payment-and-offline-licensing-pipelines": { + "slug": "architecting-sea-payment-and-offline-licensing-pipelines", + "title": "Delivering Commercial Desktop Software in Southeast Asia: Multi-Gateway Billing with toyyibPay and Keygate Fulfillment", + "zh_title": "在东南亚交付桌面商业软件:对接 toyyibPay 本地网银与 Keygate 机器码离线授权", + "category": "case-studies", + "pub_date": "2026-10-27", + "status": "pending", + "batch_id": null, + "approved_at": null, + "notes": "", + "en_chars": 9252, + "zh_chars": 5620 + }, + "batch-generating-80-technical-covers-with-comfyui": { + "slug": "batch-generating-80-technical-covers-with-comfyui", + "title": "Batch Generating 80+ Technical Covers with ComfyUI: Constraining Style, Space, and Typography", + "zh_title": "用 ComfyUI 批量闭环 80+ 张技术图文封面:设计规范约束、留白控制与批处理工作流", + "category": "ai", + "pub_date": "2026-10-27", + "status": "pending", + "batch_id": null, + "approved_at": null, + "notes": "", + "en_chars": 10963, + "zh_chars": 7049 + }, + "traefik-yaegi-plugin-package-name-trap": { + "slug": "traefik-yaegi-plugin-package-name-trap", + "title": "Why Your Traefik Yaegi Plugin Fails on Boot: The Module Hyphen to Underscore Trap", + "zh_title": "Traefik 自定义插件启动崩溃:Yaegi 解释器的连字符与下划线陷阱", + "category": "notes", + "pub_date": "2026-10-27", + "status": "pending", + "batch_id": null, + "approved_at": null, + "notes": "", + "en_chars": 6896, + "zh_chars": 4766 + } } \ No newline at end of file diff --git a/src/content/posts/architecting-sea-payment-and-offline-licensing-pipelines.md b/src/content/posts/architecting-sea-payment-and-offline-licensing-pipelines.md index 59df765..6914fd1 100644 --- a/src/content/posts/architecting-sea-payment-and-offline-licensing-pipelines.md +++ b/src/content/posts/architecting-sea-payment-and-offline-licensing-pipelines.md @@ -33,7 +33,7 @@ When engineering commercial distribution for client-side desktop utilities acros Asian markets (specifically Malaysia, Singapore, and Indonesia), standard Western payment architectures fall short. -If you drop Stripe Elements or PayPal onto your checkout page, you immediately hit two walls: +Dropping standard Stripe Elements or PayPal onto a regional checkout page triggers two immediate barriers: 1. **Low Credit Card Penetration**: Across local businesses and independent operators in Malaysia, over **70% of digital transactions occur via FPX (Financial Process Exchange) direct online banking or DuitNow QR rails**, not Visa or Mastercard. 2. **Offline Software Piracy**: Desktop executables distributed as raw binaries suffer immediate redistribution unless tied to cryptographically verified, machine-specific hardware fingerprints. @@ -121,8 +121,8 @@ I implemented a dual-tier delivery architecture: No intermediary landing pages, no ad-supported download portals, and no third-party captcha friction: one purchase yields one cryptographically signed installer. -
-View multi-lingual checkout notification dispatch (Python excerpt) +
+🔍 View multi-lingual checkout notification dispatch (Python excerpt, 27 lines) ```python def notify_fulfillment(order_id, customer_email, bill_code, license_key, download_url): diff --git a/src/content/posts/batch-generating-80-technical-covers-with-comfyui.md b/src/content/posts/batch-generating-80-technical-covers-with-comfyui.md index 386396e..4b1d40a 100644 --- a/src/content/posts/batch-generating-80-technical-covers-with-comfyui.md +++ b/src/content/posts/batch-generating-80-technical-covers-with-comfyui.md @@ -37,8 +37,8 @@ and a third a photorealistic macro lens shot, the site feels like an uncurated c Recently, the technical learning portal I manage (`hoelee-learning`) needed 89 individual cover assets to replace generic SVG placeholders. -If you generate 89 covers by clicking around in WebUI interfaces or Discord bots, you immediately -confront three structural problems: +Attempting to generate 89 covers manually via WebUI interfaces or Discord bots introduces +three structural failure modes: 1. **Style Drift**: Different seeds and random prompts cause lighting, camera angles, and art directions to wander uncontrollably. 2. **Diffusion Text Hallucination**: Diffusion models notoriously struggle with text. They produce garbled alien glyphs, pseudo-English letters, and smeared gibberish across the focal plane. 3. **Zero Negative Space for Typography**: Models naturally fill the center and upper thirds of an image with busy visual noise, leaving no clean area to render readable article titles or badges. @@ -98,8 +98,8 @@ internal WebSocket API. └── (Commit Clean Asset directly into Git Repository) ``` -
-View batch automation orchestrator (Python excerpt) +
+🔍 View batch automation orchestrator (Python excerpt, 48 lines) ```python import json @@ -165,8 +165,8 @@ an automated **visual clearance audit** using Python Pillow with an explicit tol 2. **Mean Luminance vs. Laplacian Edge Variance**: Checking only average brightness creates a dangerous blind spot: high-contrast dark wireframes or glyph hallucinations still have low mean luminance, but utterly destroy title readability. To solve this without adding heavy OpenCV dependencies, the script convolves a 3×3 Laplacian high-pass kernel directly via pure Pillow (`ImageFilter.Kernel`) and measures standard deviation across the edge map. 3. **Dimension & Format Compression**: Output images are automatically resized to canonical Open Graph dimensions (`1200×630`), converted to 85%-quality WebP, and verified for sub-100KB file sizes. -
-View pure Pillow negative-space audit implementation (Python excerpt) +
+🔍 View pure Pillow negative-space audit implementation (Python excerpt, 33 lines) ```python from PIL import Image, ImageFilter, ImageStat @@ -215,4 +215,4 @@ By turning visual asset creation into a deterministic, API-driven engineering pi * **100% brand consistency**: Every single article shares the identical dark-mode color temperature, technical mood, and compositional negative space. * **Zero manual prompting**: Once the topic metadata was defined, the entire batch executed unattended, and the resulting WebP assets were verified and committed straight to Git. -Generative AI belongs in an automated build pipeline, not in a copy-paste web interface. When you constrain the model with hard contracts, consistency follows. +Generative AI belongs in an automated build pipeline, not in a copy-paste web interface. When the model is constrained by hard contracts, consistency follows. diff --git a/src/content/posts/traefik-yaegi-plugin-package-name-trap.md b/src/content/posts/traefik-yaegi-plugin-package-name-trap.md index a813804..ad3e757 100644 --- a/src/content/posts/traefik-yaegi-plugin-package-name-trap.md +++ b/src/content/posts/traefik-yaegi-plugin-package-name-trap.md @@ -60,7 +60,7 @@ Traefik does not load plugins as compiled `.so` C-shared libraries. Instead, it an interpreted Go runtime that parses, compiles, and evaluates raw Go source code on the fly inside the running Traefik daemon. -When you declare a plugin in your static configuration: +Declaring a plugin in static configuration: ```yaml experimental: @@ -124,8 +124,8 @@ plugins-local/ └── ... ``` -
-View corrected example dynamic Traefik configuration +
+🔍 View corrected dynamic Traefik configuration (YAML excerpt, 29 lines) ```yaml http: @@ -173,6 +173,6 @@ cleanly in **0.42 seconds**: 2026-10-23T04:48:44Z INF Plugin loaded successfully module=github.com/hoelee/traefik-botfilter ``` -If you are developing custom Traefik plugins, remember: **the Go compiler's acceptance is only half the battle.** -Always match your package declaration to the sanitized final segment of your Go module path, -or Yaegi will silently refuse to start your edge. +When developing custom Traefik plugins, remember: **the Go compiler's acceptance is only half the battle.** +Matching the package declaration to the sanitized final segment of the Go module path is mandatory, +or Yaegi will silently refuse to start the edge proxy. diff --git a/src/content/posts/zh/architecting-sea-payment-and-offline-licensing-pipelines.md b/src/content/posts/zh/architecting-sea-payment-and-offline-licensing-pipelines.md index 2f46895..79b6bcc 100644 --- a/src/content/posts/zh/architecting-sea-payment-and-offline-licensing-pipelines.md +++ b/src/content/posts/zh/architecting-sea-payment-and-offline-licensing-pipelines.md @@ -31,7 +31,7 @@ dynamicCta: true 在面向东南亚区域(尤其是马来西亚、新加坡和印尼)的企业客户与独立专业人员交付桌面客户端工具时,直接套用欧美的常规 SaaS 支付架构往往会在上线第一天遭遇滑铁卢。 -如果你的结账页面上只放了 Stripe Elements 或 PayPal,你会立即撞上两堵现实高墙: +如果在结账页面上直接套用常规的 Stripe Elements 或 PayPal,系统会立即撞上两堵现实高墙: 1. **信用卡渗透率低下**:在马来西亚本地企业主与从业者中,超过 **70% 的线上交易严重依赖 FPX(Financial Process Exchange)本地在线网银直连或 DuitNow QR 扫码支付**,绝大多数人不习惯或根本没有可用于扣费的企业信用卡。 2. **离线桌面软件的盗版风险**:如果是纯离线运行的高性能工具(例如批量视频转码器),二进制包一旦交付,如果缺乏基于物理硬件的授权签名机制,极易在团队内部被无限制复制扩散。 @@ -109,8 +109,8 @@ public function callback(): ResponseInterface 拒绝多层跳转诱导页,杜绝垃圾广告与冗长人机验证:**一次支付成功,一键拿到经过数字签名的专属安装包**。 -
-点击查看多渠道履约通知调度逻辑(Python 关键片段) +
+🔍 查看多渠道履约通知调度逻辑(Python 关键片段,27 行) ```python def notify_fulfillment(order_id, customer_email, bill_code, license_key, download_url): diff --git a/src/content/posts/zh/batch-generating-80-technical-covers-with-comfyui.md b/src/content/posts/zh/batch-generating-80-technical-covers-with-comfyui.md index 407d2f4..f9d607e 100644 --- a/src/content/posts/zh/batch-generating-80-technical-covers-with-comfyui.md +++ b/src/content/posts/zh/batch-generating-80-technical-covers-with-comfyui.md @@ -90,8 +90,8 @@ ComfyUI 的底层设计天然由节点图(Node Graph)驱动,其工作流 └── (直接提交合入 Git 仓库对应目录) ``` -
-点击查看批处理编排核心脚本(Python 关键片段) +
+🔍 查看批处理编排核心脚本(Python 关键片段,47 行) ```python import json @@ -155,8 +155,8 @@ def generate_cover(slug, topic_metaphor): 2. **平均亮度与拉普拉斯边缘方差双重门禁**:单纯检查平均亮度存在严重盲区——暗色背景上的高对比度青色线框或乱码文字同样具备极低的平均亮度,却会彻底摧毁大标题的可读性。为了避免引入 OpenCV 等重型依赖,审计脚本直接利用纯 Pillow 内置的 3×3 拉普拉斯卷积核(`ImageFilter.Kernel`)提取高频边缘图,并计算标准差(`stddev`)进行拦截。 3. **规范化转码**:统一缩放至 Open Graph 标准的 `1200×630` 规格,输出为 85% 质量等级的现代 WebP 格式,严格确保单张体积控制在 100KB 以内。 -
-点击查看纯 Pillow 留白净度审计算法实现(Python 关键片段) +
+🔍 查看纯 Pillow 留白净度审计算法实现(Python 关键片段,33 行) ```python from PIL import Image, ImageFilter, ImageStat diff --git a/src/content/posts/zh/traefik-yaegi-plugin-package-name-trap.md b/src/content/posts/zh/traefik-yaegi-plugin-package-name-trap.md index 326261e..f3c08b8 100644 --- a/src/content/posts/zh/traefik-yaegi-plugin-package-name-trap.md +++ b/src/content/posts/zh/traefik-yaegi-plugin-package-name-trap.md @@ -114,8 +114,8 @@ plugins-local/ └── ... ``` -
-点击查看修正后的动态 Traefik 中间件配置示例 +
+🔍 查看修正后的动态 Traefik 中间件配置示例(YAML 摘录,29 行) ```yaml http: