edit(content): review batch-2 editorial pass across 24 posts (EN + ZH)

Tracker at 20 approved / 71 pending. Same pass as batch 1: first person throughout,
no LAN IPs in prose, ZH twins normalised to simplified Chinese, dynamicCta where the
post ends on a concrete next step.
This commit is contained in:
hoelee committed 2026-10-27 04:07:00 +08:00
1 parent 041471d25e
commit 09596fe7a5
45 files changed
+418 -337

No files matched your search

+14 -14
View File
@@ -1,7 +1,7 @@
# 全站文章顾问审阅状态总控台 (Audit Tracker)
> **最后同步时间**:2026-10-27 03:22:38
> **全站总文章数**:91 篇 | **已审批完成**:9 篇 (9.9%) | **待审阅**:82 篇
> **最后同步时间**:2026-10-27 04:06:09
> **全站总文章数**:91 篇 | **已审批完成**:20 篇 (22.0%) | **待审阅**:71 篇
## 一、操作命令速查
- `python scripts/manage_review.py list` — 查看待审与已审概览
@@ -36,20 +36,20 @@
| 22 | `case-studies` | `self-healing-digital-goods-entitlements` | 数字商品的自愈式访问控制:NocoDB、n8n 与 AList | ⏳ 待审阅 | Batch-02 | - | |
| 23 | `case-studies` | `self-hosted-speech-to-text-api` | 自建语音转文字服务:打字速度的 3 倍以上,而且数据不出内网 | ⏳ 待审阅 | Batch-02 | - | |
| 24 | `case-studies` | `self-hosted-tts-cosyvoice2-n8n-gpu` | 从云端转本地:在 12GB 显卡与群晖 N8N 上搭建中英混读高保真 TTS 语音栈 | ⏳ 待审阅 | Batch-02 | - | |
| 25 | `case-studies` | `self-hosting-mem0-memory-stack` | 我如何在自家 NAS 上自托管 Mem0 记忆栈(让 AI 助手有记忆) | ⏳ 待审阅 | Batch-02 | - | |
| 25 | `case-studies` | `self-hosting-mem0-memory-stack` | 我如何在私有存储节点上自托管 Mem0 记忆栈(让 AI 助手拥有持久记忆) | ⏳ 待审阅 | Batch-02 | - | |
| 26 | `case-studies` | `shipping-an-ai-photo-editor-as-a-wordpress-plugin` | 把 AI 修图工具做成 WordPress 插件:22 个版本换来的经验 | ⏳ 待审阅 | Batch-02 | - | |
| 27 | `case-studies` | `syncing-a-self-improving-ai-agent-across-machines` | 在多台机器之间同步一个会自我学习的 AI Agent | ⏳ 待审阅 | Batch-02 | - | |
| 28 | `case-studies` | `the-single-writer-rule-for-coding-agents` | 代码只让一个 AI 改:我是如何避开多 Agent 协同踩坑的「单写多审」架构 | ⏳ 待审阅 | Batch-03 | - | |
| 29 | `case-studies` | `when-to-give-your-agent-physical-clicks` | 什么时候该让 AI 操控物理鼠标(以及什么时候绝对不要用) | ⏳ 待审阅 | Batch-03 | - | |
| 30 | `case-studies` | `why-i-built-a-video-knowledge-base` | 为什么我要做视频精读知识库:把收藏夹吃灰的短视频变成可检索笔记 | ⏳ 待审阅 | Batch-03 | - | |
| 31 | `case-studies` | `why-your-headless-browser-cant-scrape-everything` | 为什么你的无头浏览器不是万能爬虫 | ⏳ 待审阅 | Batch-03 | - | |
| 32 | `devops` | `authentik-css-greater-than-bug` | 一个字符让我的 authentik CSS 静默失效 | ⏳ 待审阅 | Batch-03 | - | |
| 33 | `devops` | `authentik-forward-auth-gate-wasnt-live` | 验证完全正确的 Forward-Auth 网关——其实并未上线 | ⏳ 待审阅 | Batch-03 | - | |
| 34 | `devops` | `authentik-major-upgrade-gotchas` | Authentik 从 2025.8 升级到 2026.8:那些没人提醒你会坏掉的部分 | ⏳ 待审阅 | Batch-03 | - | |
| 35 | `devops` | `automating-cyberpanel-without-the-ui` | 不用界面管理 CyberPanel:逆向一个没有文档的 v2 API | ⏳ 待审阅 | Batch-03 | - | |
| 36 | `devops` | `docker-reported-exit-0-the-oom-killer-disagreed` | Docker 报告退出码 0,内核却早已执行 OOM-Kill | ⏳ 待审阅 | Batch-03 | - | |
| 37 | `devops` | `every-player-stuttered-the-file-was-fine` | 每个播放器都在同一个视频上卡顿,而文件本身是无辜的 | ⏳ 待审阅 | Batch-03 | - | |
| 38 | `devops` | `hardening-a-tor-onion-service` | 加固 Tor 洋葱服务:真正重要的是什么 | ⏳ 待审阅 | Batch-03 | - | |
| 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 | - | |
| 40 | `devops` | `n8n-v1-to-v2-upgrade-gotchas` | n8n v1 升级到 v2:一个日志文件里的七项废弃警告 | ⏳ 待审阅 | Batch-04 | - | |
| 41 | `devops` | `one-hostname-public-tracker-sso-dashboard` | 公开的埋点与要 SSO 的仪表盘,怎么共用一个域名 | ⏳ 待审阅 | Batch-04 | - | |
+82 -82
View File
@@ -44,12 +44,12 @@
"zh_title": "一个字符让我的 authentik CSS 静默失效",
"category": "devops",
"pub_date": "2026-09-20",
"status": "pending",
"status": "approved",
"batch_id": "Batch-03",
"approved_at": null,
"notes": "",
"en_chars": 9206,
"zh_chars": 5485
"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",
@@ -57,12 +57,12 @@
"zh_title": "验证完全正确的 Forward-Auth 网关——其实并未上线",
"category": "devops",
"pub_date": "2026-08-12",
"status": "pending",
"status": "approved",
"batch_id": "Batch-03",
"approved_at": null,
"notes": "",
"en_chars": 16519,
"zh_chars": 8735
"approved_at": "2026-10-27 03:49",
"notes": "外部顾问审阅完成,已采纳并落地全量修改意见",
"en_chars": 16526,
"zh_chars": 8746
},
"authentik-major-upgrade-gotchas": {
"slug": "authentik-major-upgrade-gotchas",
@@ -70,12 +70,12 @@
"zh_title": "Authentik 从 2025.8 升级到 2026.8:那些没人提醒你会坏掉的部分",
"category": "devops",
"pub_date": "2026-09-09",
"status": "pending",
"status": "approved",
"batch_id": "Batch-03",
"approved_at": null,
"notes": "",
"en_chars": 11639,
"zh_chars": 6086
"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",
@@ -83,12 +83,12 @@
"zh_title": "不用界面管理 CyberPanel:逆向一个没有文档的 v2 API",
"category": "devops",
"pub_date": "2026-09-09",
"status": "pending",
"status": "approved",
"batch_id": "Batch-03",
"approved_at": null,
"notes": "",
"en_chars": 8495,
"zh_chars": 5223
"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",
@@ -148,12 +148,12 @@
"zh_title": "Docker 报告退出码 0,内核却早已执行 OOM-Kill",
"category": "devops",
"pub_date": "2026-10-16",
"status": "pending",
"status": "approved",
"batch_id": "Batch-03",
"approved_at": null,
"notes": "",
"en_chars": 10183,
"zh_chars": 5483
"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",
@@ -187,12 +187,12 @@
"zh_title": "每个播放器都在同一个视频上卡顿,而文件本身是无辜的",
"category": "devops",
"pub_date": "2026-10-08",
"status": "pending",
"status": "approved",
"batch_id": "Batch-03",
"approved_at": null,
"notes": "",
"en_chars": 7884,
"zh_chars": 3921
"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",
@@ -275,15 +275,15 @@
"hardening-a-tor-onion-service": {
"slug": "hardening-a-tor-onion-service",
"title": "Hardening a Tor Onion Service: What Actually Matters",
"zh_title": "加固 Tor 洋葱服务:真正重要的是什么",
"zh_title": "加固 Tor 洋葱服务:真正重要的是什么",
"category": "devops",
"pub_date": "2025-12-10",
"status": "pending",
"status": "approved",
"batch_id": "Batch-03",
"approved_at": null,
"notes": "",
"en_chars": 14882,
"zh_chars": 7031
"approved_at": "2026-10-27 03:49",
"notes": "外部顾问审阅完成,已采纳并落地全量修改意见",
"en_chars": 14907,
"zh_chars": 7041
},
"hello-world": {
"slug": "hello-world",
@@ -399,8 +399,8 @@
"batch_id": "Batch-04",
"approved_at": null,
"notes": "",
"en_chars": 7654,
"zh_chars": 3480
"en_chars": 8349,
"zh_chars": 3886
},
"jpa-version-field-lost-update": {
"slug": "jpa-version-field-lost-update",
@@ -464,8 +464,8 @@
"batch_id": "Batch-04",
"approved_at": null,
"notes": "",
"en_chars": 11892,
"zh_chars": 6540
"en_chars": 12262,
"zh_chars": 6712
},
"nocodb-sso-is-a-licensed-feature": {
"slug": "nocodb-sso-is-a-licensed-feature",
@@ -490,8 +490,8 @@
"batch_id": "Batch-04",
"approved_at": null,
"notes": "",
"en_chars": 13998,
"zh_chars": 6677
"en_chars": 14400,
"zh_chars": 6837
},
"one-prometheus-for-unraid-synology-and-a-vps": {
"slug": "one-prometheus-for-unraid-synology-and-a-vps",
@@ -516,8 +516,8 @@
"batch_id": "Batch-04",
"approved_at": null,
"notes": "",
"en_chars": 7740,
"zh_chars": 4063
"en_chars": 7864,
"zh_chars": 4187
},
"patching-workbench-26-for-mariadb": {
"slug": "patching-workbench-26-for-mariadb",
@@ -529,8 +529,8 @@
"batch_id": "Batch-04",
"approved_at": null,
"notes": "",
"en_chars": 15104,
"zh_chars": 9020
"en_chars": 15965,
"zh_chars": 9501
},
"php2shell-patching-every-php-runtime-i-manage": {
"slug": "php2shell-patching-every-php-runtime-i-manage",
@@ -542,8 +542,8 @@
"batch_id": "Batch-04",
"approved_at": null,
"notes": "",
"en_chars": 22273,
"zh_chars": 12465
"en_chars": 22354,
"zh_chars": 12531
},
"plugging-windows-desktop-control-into-four-ai-agents": {
"slug": "plugging-windows-desktop-control-into-four-ai-agents",
@@ -568,8 +568,8 @@
"batch_id": "Batch-04",
"approved_at": null,
"notes": "",
"en_chars": 13314,
"zh_chars": 6978
"en_chars": 13927,
"zh_chars": 7415
},
"read-only-nocodb-dashboard-for-a-remote-database": {
"slug": "read-only-nocodb-dashboard-for-a-remote-database",
@@ -581,8 +581,8 @@
"batch_id": "Batch-04",
"approved_at": null,
"notes": "",
"en_chars": 11723,
"zh_chars": 6166
"en_chars": 12009,
"zh_chars": 6287
},
"reading-a-containers-own-api-docs": {
"slug": "reading-a-containers-own-api-docs",
@@ -607,8 +607,8 @@
"batch_id": "Batch-04",
"approved_at": null,
"notes": "",
"en_chars": 12784,
"zh_chars": 7641
"en_chars": 13131,
"zh_chars": 7789
},
"running-ai-video-locally-on-a-12gb-gpu": {
"slug": "running-ai-video-locally-on-a-12gb-gpu",
@@ -699,20 +699,20 @@
"approved_at": null,
"notes": "",
"en_chars": 8913,
"zh_chars": 4402
"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": "我如何在自家 NAS 上自托管 Mem0 记忆栈(让 AI 助手有记忆)",
"zh_title": "我如何在私有存储节点上自托管 Mem0 记忆栈(让 AI 助手拥有持久记忆)",
"category": "case-studies",
"pub_date": "2026-09-16",
"status": "pending",
"batch_id": "Batch-02",
"approved_at": null,
"notes": "",
"en_chars": 7894,
"zh_chars": 4708
"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",
@@ -724,8 +724,8 @@
"batch_id": "Batch-02",
"approved_at": null,
"notes": "",
"en_chars": 13782,
"zh_chars": 6796
"en_chars": 13879,
"zh_chars": 6861
},
"slashing-agent-context-with-a-code-graph": {
"slug": "slashing-agent-context-with-a-code-graph",
@@ -789,8 +789,8 @@
"batch_id": "Batch-02",
"approved_at": null,
"notes": "",
"en_chars": 8918,
"zh_chars": 4599
"en_chars": 8861,
"zh_chars": 4541
},
"synology-api-401-with-the-correct-password": {
"slug": "synology-api-401-with-the-correct-password",
@@ -863,12 +863,12 @@
"zh_title": "代码只让一个 AI 改:我是如何避开多 Agent 协同踩坑的「单写多审」架构",
"category": "case-studies",
"pub_date": "2026-08-26",
"status": "pending",
"status": "approved",
"batch_id": "Batch-03",
"approved_at": null,
"notes": "",
"en_chars": 13268,
"zh_chars": 6916
"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",
@@ -993,12 +993,12 @@
"zh_title": "什么时候该让 AI 操控物理鼠标(以及什么时候绝对不要用)",
"category": "case-studies",
"pub_date": "2026-05-28",
"status": "pending",
"status": "approved",
"batch_id": "Batch-03",
"approved_at": null,
"notes": "",
"en_chars": 6853,
"zh_chars": 3594
"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",
@@ -1032,12 +1032,12 @@
"zh_title": "为什么我要做视频精读知识库:把收藏夹吃灰的短视频变成可检索笔记",
"category": "case-studies",
"pub_date": "2024-11-28",
"status": "pending",
"status": "approved",
"batch_id": "Batch-03",
"approved_at": null,
"notes": "",
"en_chars": 5728,
"zh_chars": 2903
"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",
@@ -1136,12 +1136,12 @@
"zh_title": "为什么你的无头浏览器不是万能爬虫",
"category": "case-studies",
"pub_date": "2026-01-21",
"status": "pending",
"status": "approved",
"batch_id": "Batch-03",
"approved_at": null,
"notes": "",
"en_chars": 8065,
"zh_chars": 3791
"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",