From 01c55805fb45eff4e9dd59cb08fa35409f68a119 Mon Sep 17 00:00:00 2001 From: hoelee Date: Tue, 27 Oct 2026 06:10:59 +0800 Subject: [PATCH] docs(review): record consultant batch-05 re-review for the 11 devops posts Second pass on articles already approved in Batch-02. Real fixes landed in 19de315; this commit records the outcome, the items that were already fixed before the reviewer's snapshot, and four reviewer misjudgements (the $TOKEN '***' artefact comes from the batch-packaging scrubber, not the posts; 06's User Scripts explanation was already correct; 11's Round 3 was already closed; the 'missing CTA' claims are false). One open question: 01's physical hardware anchor is unverified and was deliberately not invented. Tracker also carries the concurrently approved posts from the sibling session. --- docs/consultant-review/AUDIT-TRACKER.md | 34 ++++---- docs/consultant-review/audit-tracker.json | 62 +++++++------- .../reports/report-batch-05-rereview.md | 85 +++++++++++++++++++ 3 files changed, 133 insertions(+), 48 deletions(-) create mode 100644 docs/consultant-review/reports/report-batch-05-rereview.md diff --git a/docs/consultant-review/AUDIT-TRACKER.md b/docs/consultant-review/AUDIT-TRACKER.md index d8d9a33..8eed326 100644 --- a/docs/consultant-review/AUDIT-TRACKER.md +++ b/docs/consultant-review/AUDIT-TRACKER.md @@ -1,6 +1,6 @@ # 全站文章顾问审阅状态总控台 (Audit Tracker) -> **最后同步时间**:2026-10-27 06:09:07 +> **最后同步时间**:2026-10-27 06:10:48 > **全站总文章数**:91 篇 | **已审批完成**:86 篇 (94.5%) | **待审阅**:5 篇 ## 一、操作命令速查 @@ -59,17 +59,17 @@ | 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 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 49 | `devops` | `synology-spreadsheet-api-is-a-container` | Synology 电子表格 API 是一个容器,不是一个 API 端点 | ✅ 已通过 | Batch-02 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 50 | `devops` | `that-dying-ssd-was-just-a-bad-sata-cable` | 我差点把这颗 SSD 送修——真正坏的是 SATA 数据线 | ✅ 已通过 | Batch-02 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 51 | `devops` | `the-cause-was-trim-not-the-ssds` | 换了不同的硬盘,同样的损坏又来了——真凶是 TRIM,不是 SSD | ✅ 已通过 | Batch-02 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 52 | `devops` | `the-upstream-was-deleted-then-came-back-rewritten` | 上游被删了,然后带着一个重写版回来 | ✅ 已通过 | Batch-02 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 53 | `devops` | `unraid-stop-array-hangs-on-swapfile` | Unraid 停止阵列时卡死的真相:Swapfile 锁住挂载点 — 附修复方案 | ✅ 已通过 | Batch-02 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 54 | `devops` | `uploading-large-videos-to-youtube-via-cdp` | 用 CDP 自动化上传百兆视频到 YouTube:跨越 DevTools 内存墙的 Docker 归档法 | ✅ 已通过 | Batch-02 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 55 | `devops` | `vetting-an-open-source-dependency-before-you-bet-on-it` | 如何在押注前验证一个开源依赖:我用的六项检查 | ✅ 已通过 | Batch-02 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 56 | `devops` | `when-smart-says-healthy-but-your-raid-is-corrupting-data` | SMART 显示健康,RAID 却在悄悄损坏数据 | ✅ 已通过 | Batch-02 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 57 | `devops` | `why-chrome-forgets-its-tabs-in-a-container` | 为什么容器里的 Chrome 会忘记标签页 —— 以及我是怎么修好的 | ✅ 已通过 | Batch-02 | 2026-10-27 05:21 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理) | -| 58 | `devops` | `why-telegram-bot-notifications-die` | Telegram 机器人通知为什么发不出去:IPv6、DNS 和一个追查了一整天的 400 | ✅ 已通过 | Batch-02 | 2026-10-27 05:23 | 外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/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补齐) | @@ -98,8 +98,8 @@ | 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-02 | - | | -| 88 | `tutorials` | `how-to-verify-a-hosting-provider-before-you-buy` | 购买主机前,如何核实一家服务商的真实情况 | ⏳ 待审阅 | Batch-02 | - | | -| 89 | `web3` | `chainlink-vrf-v2-lottery-contract` | 一个基于 Chainlink VRF v2.5 与 Automation 的自动化彩票合约 | ⏳ 待审阅 | Batch-02 | - | | -| 90 | `web3` | `fully-on-chain-svg-nfts` | 全链上 SVG NFT:把艺术作品放进合约里 | ⏳ 待审阅 | Batch-02 | - | | -| 91 | `web3` | `why-my-on-chain-nft-art-changed-on-windows` | 为什么在 Windows 上克隆后,我的链上 NFT 图像变了 | ⏳ 待审阅 | Batch-02 | - | | +| 87 | `tutorials` | `generating-subtitles-for-songs-without-timestamps` | 给没有时间戳的歌曲自动生成字幕 | ⏳ 待审阅 | Batch-01 | - | | +| 88 | `tutorials` | `how-to-verify-a-hosting-provider-before-you-buy` | 购买主机前,如何核实一家服务商的真实情况 | ⏳ 待审阅 | Batch-01 | - | | +| 89 | `web3` | `chainlink-vrf-v2-lottery-contract` | 一个基于 Chainlink VRF v2.5 与 Automation 的自动化彩票合约 | ⏳ 待审阅 | Batch-01 | - | | +| 90 | `web3` | `fully-on-chain-svg-nfts` | 全链上 SVG NFT:把艺术作品放进合约里 | ⏳ 待审阅 | Batch-01 | - | | +| 91 | `web3` | `why-my-on-chain-nft-art-changed-on-windows` | 为什么在 Windows 上克隆后,我的链上 NFT 图像变了 | ⏳ 待审阅 | Batch-01 | - | | diff --git a/docs/consultant-review/audit-tracker.json b/docs/consultant-review/audit-tracker.json index c34aa8a..1cb4e87 100644 --- a/docs/consultant-review/audit-tracker.json +++ b/docs/consultant-review/audit-tracker.json @@ -123,7 +123,7 @@ "category": "web3", "pub_date": "2024-12-10", "status": "pending", - "batch_id": "Batch-02", + "batch_id": "Batch-01", "approved_at": null, "notes": "", "en_chars": 16252, @@ -227,7 +227,7 @@ "category": "web3", "pub_date": "2024-10-08", "status": "pending", - "batch_id": "Batch-02", + "batch_id": "Batch-01", "approved_at": null, "notes": "", "en_chars": 16205, @@ -253,11 +253,11 @@ "category": "tutorials", "pub_date": "2026-10-20", "status": "pending", - "batch_id": "Batch-02", + "batch_id": "Batch-01", "approved_at": null, "notes": "", - "en_chars": 47487, - "zh_chars": 42626 + "en_chars": 47576, + "zh_chars": 42677 }, "giving-ai-your-mouse-and-keyboard-safely": { "slug": "giving-ai-your-mouse-and-keyboard-safely", @@ -370,11 +370,11 @@ "category": "tutorials", "pub_date": "2025-11-26", "status": "pending", - "batch_id": "Batch-02", + "batch_id": "Batch-01", "approved_at": null, "notes": "", - "en_chars": 7567, - "zh_chars": 3351 + "en_chars": 7710, + "zh_chars": 3405 }, "i-let-an-agent-manage-my-shopee-vouchers": { "slug": "i-let-an-agent-manage-my-shopee-vouchers", @@ -761,8 +761,8 @@ "pub_date": "2026-10-14", "status": "approved", "batch_id": "Batch-02", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "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 }, @@ -813,8 +813,8 @@ "pub_date": "2025-08-20", "status": "approved", "batch_id": "Batch-02", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "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 }, @@ -826,8 +826,8 @@ "pub_date": "2026-09-16", "status": "approved", "batch_id": "Batch-02", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "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 }, @@ -839,8 +839,8 @@ "pub_date": "2026-09-18", "status": "approved", "batch_id": "Batch-02", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "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 }, @@ -878,8 +878,8 @@ "pub_date": "2026-10-06", "status": "approved", "batch_id": "Batch-02", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "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 }, @@ -904,8 +904,8 @@ "pub_date": "2026-09-15", "status": "approved", "batch_id": "Batch-02", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "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 }, @@ -930,8 +930,8 @@ "pub_date": "2025-08-22", "status": "approved", "batch_id": "Batch-02", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "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 }, @@ -969,8 +969,8 @@ "pub_date": "2026-09-29", "status": "approved", "batch_id": "Batch-02", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "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 }, @@ -982,8 +982,8 @@ "pub_date": "2026-09-16", "status": "approved", "batch_id": "Batch-02", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "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 }, @@ -1021,8 +1021,8 @@ "pub_date": "2026-09-29", "status": "approved", "batch_id": "Batch-02", - "approved_at": "2026-10-27 05:21", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "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 }, @@ -1085,7 +1085,7 @@ "category": "web3", "pub_date": "2026-08-19", "status": "pending", - "batch_id": "Batch-02", + "batch_id": "Batch-01", "approved_at": null, "notes": "", "en_chars": 8423, @@ -1099,8 +1099,8 @@ "pub_date": "2026-03-25", "status": "approved", "batch_id": "Batch-02", - "approved_at": "2026-10-27 05:23", - "notes": "外部顾问审阅完成,已采纳并落地全量修改意见(含数字矛盾/OPSEC脱敏/双语CTA/排版折叠/禁用词清理)", + "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 }, diff --git a/docs/consultant-review/reports/report-batch-05-rereview.md b/docs/consultant-review/reports/report-batch-05-rereview.md new file mode 100644 index 0000000..d6658bc --- /dev/null +++ b/docs/consultant-review/reports/report-batch-05-rereview.md @@ -0,0 +1,85 @@ +# `blog.hoelee.com` 顾问二次审阅落地报告 — 同一批 11 篇 DevOps(顾问侧编号 Batch-05 / 内部 Batch-02) + +> **对应资料包**:顾问本轮报告的 11 篇 slug,全部为 `audit-tracker.json` 中本已 `approved` 的 Batch-02 文章 +> **性质**:**二次审阅(re-review)**。顾问手上的文本快照早于上一轮修复,因此本轮报告中有相当比例的意见属于「已修好」的重复项。本文只记录**真实增量修复**与**顾问误判澄清**。 +> **审批状态**:11 篇维持 `approved`,`notes` 已更新为二次审阅记录。 + +--- + +## 一、结论摘要 + +| 分类 | 数量 | 说明 | +| --- | --- | --- | +| 真实技术硬伤,本轮已修 | 6 项 | 集中在 11、04/09、06、03、02、01 | +| 上一轮已修好,顾问看到的是旧快照 | 9 项 | 标题 `折腾`、`homelabs`、`rig`/`home server`、英文有序列表坍塌、`四周`→`三周`、ZH 内链 `/zh/`、文末 CTA、代码 `
` 折叠、09 的 `updatedDate` | +| 顾问误判(站上正文无此问题) | 4 项 | `Bearer ***`、06 的 User Scripts 解释「说反了」、11 的第三轮悬念「未闭环」、多篇「缺文末 CTA」 | +| 需要作者本人给数字(未代填) | 1 项 | 01 的物理机型锚点 | + +--- + +## 二、真实增量修复(本轮 commit `19de315`) + +### 1. `why-telegram-bot-notifications-die`(最重的一处) + +- **源码级缺陷**:`b"\r\n".join(body_lines)` 里的 `\r` 转义在历史流水线中被吃掉,导致行内代码跨行断裂、`parts[]` 示例里的 `\r\n\r\n` 全部退化成 `\r\n\n`。已用正确的转义重建该章节与示例代码。 +- **原理解释改写**:原文暗示 `bytes.join()` 会改写元素内部的 `\r\n`(错误)。现在明确两点真实机制:① 二进制流若先经过 `.splitlines()` 之类的按行处理,JPEG 内部的 `0x0D`/`0x0A` 会被改写为 `\r\n`,同时与 `Content-Length` 失配;② 片段自带末尾 `\r\n` 时再 join 会得到 `--boundary\r\n\r\nContent-Disposition`,在 MIME 里等于头部提前结束,`nginx/1.30.1` 在 Bot API 之前就以 400 拒绝。 +- **第三轮悬念**:原文其实已有闭环段落,本轮把它写得更准(`PID 1` 跑内存中旧拼接路径、`docker exec` 用刚改的脚本 + 最小 payload)。 +- **人设**:文末「internal production tool」表述上一轮已改好;本轮补物理锚点(Synology NAS / Portainer / Docker bridge / `PID 1`)。 +- **Takeaway #4** 同步改写,与新的机制解释一致。 + +### 2. `the-cause-was-trim-not-the-ssds` / `when-smart-says-healthy-but-your-raid-is-corrupting-data` + +- **`0x8941f998` 字段位置**:确实是硬伤。盘读回全零块时,该值出现在 **`found`** 一侧(= 内核按盘上实际返回字节算出的值),`wanted` 是 csum tree 里的期望值。两篇的日志行均改为 `wanted found 0x8941f998`,并补上「看它落在哪一侧」的解释。 +- **字节序说明**(本轮新增的实测结论):4 KiB 全零块的规范 CRC32C 是 `0x98f94189`,内核按磁盘小端序打印出来才是 `0x8941f998`。两篇都补了这一句,避免被资深读者当成「算错了」。 +- **04 的时间线**:`2026-09-22` 复核已过期,改为已发生的事实叙述(`corrected_errors: 0`、无新增 `csum failed`、`corruption_errs` 停在 sdd1=27 / sdb1=31)。 +- **09 的闭环**:`## The result` / `## 结果` 补上「转接卡也洗清了 → 根因是异步 TRIM」的最终更新与续篇链接;`description` 同步为已定论版本(原文写着「仍未定论」)。 + +### 3. `unraid-stop-array-hangs-on-swapfile` + +- **`losetup -p 100`**:确认是错的,`-p` 是 `--pass-fd`(loop 加密遗留参数),与优先级无关。`/boot/config/go` 示例与「脚本 2」均改为 `losetup "$LOOP" ...` + `swapon -p 1 "$LOOP"`。 +- **`/proc/swaps` 显示 `-2`**:这是「创建时未指定优先级」的内核默认值,与脚本里的 `swapon -p 1` 冲突。已补一段说明,说明那段输出来自加 `-p` 之前的那次运行,不伪造单一时间线的证据。 + +### 4. `that-dying-ssd-was-just-a-bad-sata-cable` + +- **`UDMA_CRC` 机制**:改为「属性 199 只统计到帧时接口校验和出错(ICRC);劣质线材通常走的是 `WRITE FPDMA QUEUED` 命令超时 + 链路重置,这类 I/O 在算出帧级 CRC 之前就被丢弃,所以计数器可以全程为 0」。 +- **破坏性写入警示**:`fio --filename=/dev/sdd --rw=write` 代码块加了裸盘覆写警告(中英双语)。 + +### 5. `synology-spreadsheet-api-is-a-container` + +- **DSM 的 `cpus:` 失效原因**:由「内核没有 CPU CFS 调度器」改为「内核未编译开启 `CONFIG_CFS_BANDWIDTH`(cgroup CPU 带宽控制),默认 CFS 调度器照常运行、只是没有配额可执行」。 +- ZH CTA 的「小企业」→「中小企业(SME)」。 + +### 6. `space-reclamation-wasnt-stuck-it-was-waiting` + +- `-344 GiB over 8 days` = `1.79 GiB/h`,正文与趋势块由 `-1.5 GiB/h` 统一为 `-1.8 GiB/h`。 +- `description` 里残留的「分两步 / in two steps」改为「分三笔 / three separate reclaims」,与表格 3 条回收项对齐。 +- frontmatter 补 `blueprint: self-hosted-infrastructure` + `blueprintLayer: L1-compute-storage-network`。 + +### 7. frontmatter / 小项 + +- `uploading-large-videos-to-youtube-via-cdp`:补 `blueprint: ai-agent-automation` + `L1-deterministic-orchestration`;`CONTAINER_ID` 注释说明可直接填容器名(容器重建后短 ID 会变)。 +- `the-upstream-was-deleted-then-came-back-rewritten`:补 `blueprint: sme-digital-suite` + `L4-managed-ops-handover`;首段「给我家人 / for my family」改为「付费订阅读者与内部用户」。 +- `why-chrome-forgets-its-tabs-in-a-container`:`saved` 列表补空行过滤;补「空快照覆盖」边界条件与该护栏(`/json/version` 的 `webSocketDebuggerUrl` 变化时才允许重开/覆盖);补 blueprint 字段。 + +--- + +## 三、顾问误判澄清(站上正文无此问题,勿再改) + +1. **`Bearer ***` 不存在**:中英四篇的 `curl` 一直是 `$TOKEN`。顾问看到的是**批次打包文件的脱敏产物**——生成批次时把 `$TOKEN` 当密钥抹成了 `***`。这也是「中文版被误脱敏」这条意见反复出现的原因。 +2. **06 的 User Scripts 解释没有说反**:正文本来就写着「`At First Array Start Only` 只在开机后第一次触发、会跳过 GUI 停止→启动循环」,与顾问的纠正完全一致;真正错的只有 `losetup -p 100`。 +3. **11 的第三轮悬念上一轮已闭环**,不是断头线索。 +4. **「缺文末 CTA」不成立**:01、03、04、09 等篇文末均有 `me@hoelee.com` + WhatsApp `+60 12-797 2969` 双轨联系栏。 + +--- + +## 四、需要作者本人确认的一项 + +- **01 的物理硬件锚点**:全文只写 `volume1 42 TB` / DSM 日志,没有机型号。仓库内其它文章(02、mem0 篇)写的是 `Synology DS1821+`,但本文未出现机型,**没有代为填写**——避免把两台不同设备合并。若确认是同一台,建议在首段补 `Synology DS1821+ (DSM 7.x)` 一句。 + +--- + +## 五、验证 + +- `npm run build` 通过(Pagefind 索引 319 页 / 35,341 词,零错误)。 +- 11 篇 × 双语 22 个文件跑过禁用词扫描(`homelab` / `home server` / `rig` / `家用` / `折腾` / `玩具` / `personal project` / `给我家人` / `小企业`)与双向内链前缀检查(ZH 必须 `/posts/zh/`,EN 不得含 `/zh/`),0 命中。 +- 代码围栏配对检查通过,无跨行断裂的行内代码。