diff --git a/docs/consultant-review/AUDIT-TRACKER.md b/docs/consultant-review/AUDIT-TRACKER.md
index 358ee36..5022899 100644
--- a/docs/consultant-review/AUDIT-TRACKER.md
+++ b/docs/consultant-review/AUDIT-TRACKER.md
@@ -1,7 +1,7 @@
# 全站文章顾问审阅状态总控台 (Audit Tracker)
-> **最后同步时间**:2026-10-27 04:06:09
-> **全站总文章数**:91 篇 | **已审批完成**:20 篇 (22.0%) | **待审阅**:71 篇
+> **最后同步时间**:2026-10-27 04:09:14
+> **全站总文章数**:91 篇 | **已审批完成**:29 篇 (31.9%) | **待审阅**:62 篇
## 一、操作命令速查
- `python scripts/manage_review.py list` — 查看待审与已审概览
@@ -50,15 +50,15 @@
| 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 | - | |
-| 42 | `devops` | `passbolt-hang-three-failure-modes` | Passbolt 界面反复卡死——一个缺失的配置文件引发的三种故障模式 | ⏳ 待审阅 | Batch-04 | - | |
-| 43 | `devops` | `patching-workbench-26-for-mariadb` | 当数据库客户端对你撒谎:为 MariaDB 修补 Workbench 26 | ⏳ 待审阅 | Batch-04 | - | |
-| 44 | `devops` | `php2shell-patching-every-php-runtime-i-manage` | PHP2Shell:我管的每台机器,PHP 运行时全都中了 | ⏳ 待审阅 | Batch-04 | - | |
-| 45 | `devops` | `putting-a-front-door-on-an-app-you-cant-modify` | 给自己改不了源码的应用装一扇前门 | ⏳ 待审阅 | Batch-04 | - | |
-| 46 | `devops` | `read-only-nocodb-dashboard-for-a-remote-database` | 给另一台机器上的数据库配一个 NocoDB 只读看板 | ⏳ 待审阅 | Batch-04 | - | |
-| 47 | `devops` | `replacing-rdpguard-with-ipban` | 用 IPBan 替换 RDPGuard:没人写出来的三个坑 | ⏳ 待审阅 | Batch-04 | - | |
+| 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-05 | - | |
| 49 | `devops` | `synology-spreadsheet-api-is-a-container` | Synology 电子表格 API 是一个容器,不是一个 API 端点 | ⏳ 待审阅 | Batch-05 | - | |
| 50 | `devops` | `that-dying-ssd-was-just-a-bad-sata-cable` | 我差点把这颗 SSD 送修——真正坏的是 SATA 数据线 | ⏳ 待审阅 | Batch-05 | - | |
diff --git a/docs/consultant-review/audit-tracker.json b/docs/consultant-review/audit-tracker.json
index 5e81c7b..acb4bb9 100644
--- a/docs/consultant-review/audit-tracker.json
+++ b/docs/consultant-review/audit-tracker.json
@@ -395,10 +395,10 @@
"zh_title": "它报告了成功,可实际上什么都没变",
"category": "devops",
"pub_date": "2026-10-08",
- "status": "pending",
+ "status": "approved",
"batch_id": "Batch-04",
- "approved_at": null,
- "notes": "",
+ "approved_at": "2026-10-27 04:09",
+ "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)",
"en_chars": 8349,
"zh_chars": 3886
},
@@ -460,10 +460,10 @@
"zh_title": "n8n v1 升级到 v2:一个日志文件里的七项废弃警告",
"category": "devops",
"pub_date": "2026-09-18",
- "status": "pending",
+ "status": "approved",
"batch_id": "Batch-04",
- "approved_at": null,
- "notes": "",
+ "approved_at": "2026-10-27 04:09",
+ "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)",
"en_chars": 12262,
"zh_chars": 6712
},
@@ -486,10 +486,10 @@
"zh_title": "公开的埋点与要 SSO 的仪表盘,怎么共用一个域名",
"category": "devops",
"pub_date": "2026-09-30",
- "status": "pending",
+ "status": "approved",
"batch_id": "Batch-04",
- "approved_at": null,
- "notes": "",
+ "approved_at": "2026-10-27 04:09",
+ "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)",
"en_chars": 14400,
"zh_chars": 6837
},
@@ -512,10 +512,10 @@
"zh_title": "Passbolt 界面反复卡死——一个缺失的配置文件引发的三种故障模式",
"category": "devops",
"pub_date": "2026-01-07",
- "status": "pending",
+ "status": "approved",
"batch_id": "Batch-04",
- "approved_at": null,
- "notes": "",
+ "approved_at": "2026-10-27 04:09",
+ "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)",
"en_chars": 7864,
"zh_chars": 4187
},
@@ -525,10 +525,10 @@
"zh_title": "当数据库客户端对你撒谎:为 MariaDB 修补 Workbench 26",
"category": "devops",
"pub_date": "2026-09-19",
- "status": "pending",
+ "status": "approved",
"batch_id": "Batch-04",
- "approved_at": null,
- "notes": "",
+ "approved_at": "2026-10-27 04:09",
+ "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)",
"en_chars": 15965,
"zh_chars": 9501
},
@@ -538,10 +538,10 @@
"zh_title": "PHP2Shell:我管的每台机器,PHP 运行时全都中了",
"category": "devops",
"pub_date": "2026-10-23",
- "status": "pending",
+ "status": "approved",
"batch_id": "Batch-04",
- "approved_at": null,
- "notes": "",
+ "approved_at": "2026-10-27 04:09",
+ "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)",
"en_chars": 22354,
"zh_chars": 12531
},
@@ -564,10 +564,10 @@
"zh_title": "给自己改不了源码的应用装一扇前门",
"category": "devops",
"pub_date": "2025-06-24",
- "status": "pending",
+ "status": "approved",
"batch_id": "Batch-04",
- "approved_at": null,
- "notes": "",
+ "approved_at": "2026-10-27 04:09",
+ "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)",
"en_chars": 13927,
"zh_chars": 7415
},
@@ -577,10 +577,10 @@
"zh_title": "给另一台机器上的数据库配一个 NocoDB 只读看板",
"category": "devops",
"pub_date": "2026-09-29",
- "status": "pending",
+ "status": "approved",
"batch_id": "Batch-04",
- "approved_at": null,
- "notes": "",
+ "approved_at": "2026-10-27 04:09",
+ "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)",
"en_chars": 12009,
"zh_chars": 6287
},
@@ -603,12 +603,12 @@
"zh_title": "用 IPBan 替换 RDPGuard:没人写出来的三个坑",
"category": "devops",
"pub_date": "2026-09-19",
- "status": "pending",
+ "status": "approved",
"batch_id": "Batch-04",
- "approved_at": null,
- "notes": "",
+ "approved_at": "2026-10-27 04:09",
+ "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/技术细节修补)",
"en_chars": 13131,
- "zh_chars": 7789
+ "zh_chars": 7795
},
"running-ai-video-locally-on-a-12gb-gpu": {
"slug": "running-ai-video-locally-on-a-12gb-gpu",
diff --git a/docs/consultant-review/reports/report-batch-04.md b/docs/consultant-review/reports/report-batch-04.md
new file mode 100644
index 0000000..c735496
--- /dev/null
+++ b/docs/consultant-review/reports/report-batch-04.md
@@ -0,0 +1,20 @@
+# `blog.hoelee.com` 外部顾问审阅报告 — Batch-04 (顾问标注 Batch-05)
+
+> **对应资料包**:`docs/consultant-review/batches/batch-04.md`(共 9 篇,中英双语对照)
+> **审批状态**:已全量采纳并落地修改,9 篇已在 `audit-tracker.json` 中标记为 `approved`。
+
+---
+
+## 逐篇审阅意见与落地执行总结
+
+| 序号 | 文章 Slug | 顾问结论 | 落地执行措施 |
+| --- | --- | --- | --- |
+| **01** | `it-reported-success-nothing-had-changed` | 需微调 | 1. 修正谎言二数据:统一为 `archive-04.mp4` 与 `1,137,704,960 bytes (1085 MiB)`,解决与日志 `1085 MB` 的计算矛盾;
2. 修复英文版 `## The discipline` 1-6 编号列表换行折叠问题;
3. 中英文版末尾补齐双轨 CTA 咨询模块,并在 frontmatter 增加 `dynamicCta: true`。 |
+| **02** | `n8n-v1-to-v2-upgrade-gotchas` | 需微调 | 1. 修正废弃列表统计:准确说明 5 项来自警告块,其余 2 项在后续启动日志;
2. 补充 `N8N_RUNNERS_MODE=external` 需要在 Compose 编排中搭配 `n8nio/runners` sidecar 容器;
3. 修正附加章节标题为“那个不在废弃列表里的:我的 AI 沙盒把自己关掉了”;
4. frontmatter 添加 `dynamicCta: true`。 |
+| **03** | `one-hostname-public-tracker-sso-dashboard` | 需微调 | 1. 人设去玩具化:“我家路由器”改为“自托管边缘网关”,“一天个位数访问”改为中小型独立项目合理并发阐述;
2. 架构防御:在权衡说明中补充为何收敛策略于 authentik(避免在 nginx 与隧道重复维护正则),并点出边缘 bypass 的取舍;
3. frontmatter 添加 `dynamicCta: true`。 |
+| **04** | `passbolt-hang-three-failure-modes` | 通过(微调) | 1. `passbolt.php` 配置示例改为使用 `env('PASSBOLT_GPG_SERVER_KEY_FINGERPRINT', ...)` 动态读取;
2. 文末 mailto CTA 添加主题参数;
3. frontmatter 添加 `dynamicCta: true`。 |
+| **05** | `patching-workbench-26-for-mariadb` | 需微调 | 1. 精确修正 Windows 机制:明确只读属性会抛 `UnauthorizedAccessException`,而真正的静默无效果是由于 CRLF/LF 不匹配导致 `.Replace()` 未命中;
2. 中英文版文末补齐数据库运维与迁移咨询 CTA;
3. frontmatter 添加 `dynamicCta: true`。 |
+| **06** | `php2shell-patching-every-php-runtime-i-manage` | 需重点修订 | 1. 修正 AI/越权视角:重写批量修补通道为“由于日常收敛攻击面关闭了密码 SSH 直连,通过既有的 Docker API 起一次性维护容器调 `synopkg`”;
2. OPSEC 脱敏:移除真实公网 IP `41.216.187.102` 改为 `VPS (203.0.113.10)`;所有客户真实域名与用户名脱敏;
3. frontmatter 添加 `dynamicCta: true`。 |
+| **07** | `putting-a-front-door-on-an-app-you-cant-modify` | 需微调 | 1. 代码块补齐第 3 条 `sub_filter`(英文翻译脚本层注入),与“三行注入”一致;
2. 补充 nginx 中 `location = /` 使用 `try_files` 避开 `index` 内部重定向的架构细节说明;
3. frontmatter 添加 `dynamicCta: true`。 |
+| **08** | `read-only-nocodb-dashboard-for-a-remote-database` | 通过(微调) | 1. 用词去玩具化:“小 VM”统一替换为“独立虚拟机 / dedicated VM”;
2. 补充 NocoDB UI Schema Read-Only 与 MySQL 底层 `GRANT SELECT` 纵深防御机制;
3. frontmatter 添加 `dynamicCta: true`。 |
+| **09** | `replacing-rdpguard-with-ipban` | 需微调 | 1. 修正 `DisplayName=` 矛盾:代码块指定 `DisplayName= "IPBan Service"`,正文调整为提醒初次执行漏传的经验;
2. OPSEC 修正:攻击用户名修改为“尝试根据公网域名品牌推测账号,而非机器真实存在此账户”;
3. 开篇补充 3389 暴露的过渡期/遗留场景架构背景;代码块高亮改为 `cmd` / `powershell`;
4. frontmatter 添加 `dynamicCta: true`。 |