From a50b82eb69aa887ed9c4fe4ffb4de9beebd87a28 Mon Sep 17 00:00:00 2001 From: hoelee Date: Tue, 10 Nov 2026 09:33:26 +0800 Subject: [PATCH] docs(audit): track qr-gate post as Batch-10 approved --- docs/consultant-review/audit-tracker.json | 325 +++++++++++----------- 1 file changed, 169 insertions(+), 156 deletions(-) diff --git a/docs/consultant-review/audit-tracker.json b/docs/consultant-review/audit-tracker.json index 7135111..fe9132f 100644 --- a/docs/consultant-review/audit-tracker.json +++ b/docs/consultant-review/audit-tracker.json @@ -38,6 +38,32 @@ "en_chars": 12512, "zh_chars": 7237 }, + "apple-icloud-smtp-port-465-timeout-starttls-587-trap": { + "slug": "apple-icloud-smtp-port-465-timeout-starttls-587-trap", + "title": "Apple iCloud SMTP Times Out on Port 465: The 587 STARTTLS-Only Trap", + "zh_title": "Apple iCloud 邮箱发信 465 超时:仅支持 587 STARTTLS 的协议陷阱", + "category": "notes", + "pub_date": "2026-06-18", + "status": "approved", + "batch_id": "Batch-08", + "approved_at": "2026-11-01 14:55", + "notes": "Batch-08 顾问审阅「通过」:明确 Windows Winsock 10060 运行环境、校准 RFC 6409/3207 与 RFC 8314 演进史、中文标签去个人化、details 标注 11 行。", + "en_chars": 5070, + "zh_chars": 3550 + }, + "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 + }, "authentik-css-greater-than-bug": { "slug": "authentik-css-greater-than-bug", "title": "The Character That Silently Broke My authentik CSS", @@ -77,6 +103,19 @@ "en_chars": 11710, "zh_chars": 6147 }, + "authentik-oidc-redirect-loop-node-set-header-overwrite": { + "slug": "authentik-oidc-redirect-loop-node-set-header-overwrite", + "title": "The Authentik OIDC Redirect Loop: Why Node.js res.setHeader Overwrites Rather Than Appends", + "zh_title": "Authentik OIDC 重定向死循环:Node.js res.setHeader 整头覆盖机制与会话丢失排障", + "category": "engineering", + "pub_date": "2025-02-14", + "status": "approved", + "batch_id": "Batch-08", + "approved_at": "2026-11-01 14:55", + "notes": "Batch-08 顾问审阅「通过」:修正 Bento 卡片行数与摘要对齐、中文标题去个人化、details 标注 12 行。Playwright 真实测试通过。", + "en_chars": 6367, + "zh_chars": 3970 + }, "automating-cyberpanel-without-the-ui": { "slug": "automating-cyberpanel-without-the-ui", "title": "Automating CyberPanel Without the UI: Reverse-Engineering an Undocumented v2 API", @@ -90,6 +129,19 @@ "en_chars": 8474, "zh_chars": 5205 }, + "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 + }, "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", @@ -116,6 +168,19 @@ "en_chars": 10968, "zh_chars": 5968 }, + "cascading-docker-failures-nocodb-heap-limit-starved-n8n": { + "slug": "cascading-docker-failures-nocodb-heap-limit-starved-n8n", + "title": "Cascading Docker Failures: When a Node.js Heap Limit in NocoDB Starved an n8n Automation Stack", + "zh_title": "Docker 级联故障复盘:NocoDB 内存溢出如何拖垮整套 n8n 自动化栈", + "category": "devops", + "pub_date": "2025-04-12", + "status": "approved", + "batch_id": "Batch-08", + "approved_at": "2026-11-01 14:55", + "notes": "Batch-08 顾问审阅「通过」:校准 V8 堆内存与 cgroup 启发式机制描述、修正 details 为 17 行、对齐 Compose 语法。", + "en_chars": 5885, + "zh_chars": 3834 + }, "chainlink-vrf-v2-lottery-contract": { "slug": "chainlink-vrf-v2-lottery-contract", "title": "An Automated Lottery Contract on Chainlink VRF v2.5 and Automation", @@ -298,6 +363,19 @@ "en_chars": 1938, "zh_chars": 1074 }, + "home-assistant-container-upgrade-ladder-four-hops": { + "slug": "home-assistant-container-upgrade-ladder-four-hops", + "title": "Home Assistant Container: Upgrading Thirteen Releases Across a Four-Hop Ladder", + "zh_title": "Home Assistant 容器版跨版本升级:四阶安全平跳十三期迭代", + "category": "devops", + "pub_date": "2026-07-22", + "status": "approved", + "batch_id": "Batch-08", + "approved_at": "2026-11-01 14:55", + "notes": "Batch-08 顾问审阅「通过」:将智能家居升维为机房物联网动环监控、平滑 2026.8 反代表述、修正 details 为 14 行。", + "en_chars": 5593, + "zh_chars": 3422 + }, "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", @@ -571,6 +649,19 @@ "en_chars": 13927, "zh_chars": 7415 }, + "qr-gate-that-decodes-before-the-download": { + "slug": "qr-gate-that-decodes-before-the-download", + "title": "Why Printed QR Codes Fail to Scan: Building a Pre-Download Verification Gate", + "zh_title": "为什么印出来的二维码扫不出:在下载前建一道解码与物理校验闸门", + "category": "engineering", + "pub_date": "2026-11-10", + "status": "approved", + "batch_id": "Batch-10", + "approved_at": "2026-11-10 09:40", + "notes": "外部顾问审阅 94/96/88/100;采纳 10 项、拒绝 2 项,理由见 report-batch-10.md", + "en_chars": 18971, + "zh_chars": 10400 + }, "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", @@ -727,6 +818,19 @@ "en_chars": 13879, "zh_chars": 6861 }, + "six-chrome-containers-locked-my-nas-btrfs-d-state-igpu-offload": { + "slug": "six-chrome-containers-locked-my-nas-btrfs-d-state-igpu-offload", + "title": "Why Six Desktop Chrome Containers Locked a Production NAS: CPU WebGL Emulation, Btrfs D-State, and Offloading to iGPU", + "zh_title": "六个 Chrome 容器打崩存储 NAS:CPU 软解 WebGL、Btrfs D 状态死锁与核显架构迁移", + "category": "devops", + "pub_date": "2025-03-20", + "status": "approved", + "batch_id": "Batch-08", + "approved_at": "2026-11-01 14:55", + "notes": "Batch-08 顾问审阅「通过」:修正 7.5GB 提交内存空间、折叠 docker-compose 配置(17行)、正文对齐 unRaid 宿主、英文标题去个人化。", + "en_chars": 6351, + "zh_chars": 3892 + }, "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", @@ -883,6 +987,19 @@ "en_chars": 11636, "zh_chars": 5229 }, + "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 + }, "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", @@ -974,6 +1091,45 @@ "en_chars": 8512, "zh_chars": 4201 }, + "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 + }, + "when-a-self-hosted-model-router-tripped-trust-and-safety": { + "slug": "when-a-self-hosted-model-router-tripped-trust-and-safety", + "title": "When a Self-Hosted Model Gateway Tripped Trust & Safety: Six Seats, Nine Seconds", + "zh_title": "自建模型网关触发风控复盘:九秒之内,六个席位全部熔断", + "category": "ai", + "pub_date": "2026-11-06", + "status": "approved", + "batch_id": "Ad-hoc-2026-11-06", + "approved_at": "2026-11-06 08:05", + "notes": "Argon 两轮审阅(博客正文 + LinkedIn/dev.to 分发稿)完成并全量采纳:时间戳去具体化、席位watch流重定性、403->502 错误契约修复、双档成本可复算、wrapper 改称 task dispatcher", + "en_chars": 13600, + "zh_chars": 6639 + }, + "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 + }, "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", @@ -1026,6 +1182,19 @@ "en_chars": 15430, "zh_chars": 9234 }, + "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 + }, "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", @@ -1181,161 +1350,5 @@ "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 - }, - "authentik-oidc-redirect-loop-node-set-header-overwrite": { - "slug": "authentik-oidc-redirect-loop-node-set-header-overwrite", - "title": "The Authentik OIDC Redirect Loop: Why Node.js res.setHeader Overwrites Rather Than Appends", - "zh_title": "Authentik OIDC 重定向死循环:Node.js res.setHeader 整头覆盖机制与会话丢失排障", - "category": "engineering", - "pub_date": "2025-02-14", - "status": "approved", - "batch_id": "Batch-08", - "approved_at": "2026-11-01 14:55", - "notes": "Batch-08 顾问审阅「通过」:修正 Bento 卡片行数与摘要对齐、中文标题去个人化、details 标注 12 行。Playwright 真实测试通过。", - "en_chars": 6367, - "zh_chars": 3970 - }, - "six-chrome-containers-locked-my-nas-btrfs-d-state-igpu-offload": { - "slug": "six-chrome-containers-locked-my-nas-btrfs-d-state-igpu-offload", - "title": "Why Six Desktop Chrome Containers Locked a Production NAS: CPU WebGL Emulation, Btrfs D-State, and Offloading to iGPU", - "zh_title": "六个 Chrome 容器打崩存储 NAS:CPU 软解 WebGL、Btrfs D 状态死锁与核显架构迁移", - "category": "devops", - "pub_date": "2025-03-20", - "status": "approved", - "batch_id": "Batch-08", - "approved_at": "2026-11-01 14:55", - "notes": "Batch-08 顾问审阅「通过」:修正 7.5GB 提交内存空间、折叠 docker-compose 配置(17行)、正文对齐 unRaid 宿主、英文标题去个人化。", - "en_chars": 6351, - "zh_chars": 3892 - }, - "cascading-docker-failures-nocodb-heap-limit-starved-n8n": { - "slug": "cascading-docker-failures-nocodb-heap-limit-starved-n8n", - "title": "Cascading Docker Failures: When a Node.js Heap Limit in NocoDB Starved an n8n Automation Stack", - "zh_title": "Docker 级联故障复盘:NocoDB 内存溢出如何拖垮整套 n8n 自动化栈", - "category": "devops", - "pub_date": "2025-04-12", - "status": "approved", - "batch_id": "Batch-08", - "approved_at": "2026-11-01 14:55", - "notes": "Batch-08 顾问审阅「通过」:校准 V8 堆内存与 cgroup 启发式机制描述、修正 details 为 17 行、对齐 Compose 语法。", - "en_chars": 5885, - "zh_chars": 3834 - }, - "apple-icloud-smtp-port-465-timeout-starttls-587-trap": { - "slug": "apple-icloud-smtp-port-465-timeout-starttls-587-trap", - "title": "Apple iCloud SMTP Times Out on Port 465: The 587 STARTTLS-Only Trap", - "zh_title": "Apple iCloud 邮箱发信 465 超时:仅支持 587 STARTTLS 的协议陷阱", - "category": "notes", - "pub_date": "2026-06-18", - "status": "approved", - "batch_id": "Batch-08", - "approved_at": "2026-11-01 14:55", - "notes": "Batch-08 顾问审阅「通过」:明确 Windows Winsock 10060 运行环境、校准 RFC 6409/3207 与 RFC 8314 演进史、中文标签去个人化、details 标注 11 行。", - "en_chars": 5070, - "zh_chars": 3550 - }, - "home-assistant-container-upgrade-ladder-four-hops": { - "slug": "home-assistant-container-upgrade-ladder-four-hops", - "title": "Home Assistant Container: Upgrading Thirteen Releases Across a Four-Hop Ladder", - "zh_title": "Home Assistant 容器版跨版本升级:四阶安全平跳十三期迭代", - "category": "devops", - "pub_date": "2026-07-22", - "status": "approved", - "batch_id": "Batch-08", - "approved_at": "2026-11-01 14:55", - "notes": "Batch-08 顾问审阅「通过」:将智能家居升维为机房物联网动环监控、平滑 2026.8 反代表述、修正 details 为 14 行。", - "en_chars": 5593, - "zh_chars": 3422 - }, - "when-a-self-hosted-model-router-tripped-trust-and-safety": { - "slug": "when-a-self-hosted-model-router-tripped-trust-and-safety", - "title": "When a Self-Hosted Model Gateway Tripped Trust & Safety: Six Seats, Nine Seconds", - "zh_title": "自建模型网关触发风控复盘:九秒之内,六个席位全部熔断", - "category": "ai", - "pub_date": "2026-11-06", - "status": "approved", - "batch_id": "Ad-hoc-2026-11-06", - "approved_at": "2026-11-06 08:05", - "notes": "Argon 两轮审阅(博客正文 + LinkedIn/dev.to 分发稿)完成并全量采纳:时间戳去具体化、席位watch流重定性、403->502 错误契约修复、双档成本可复算、wrapper 改称 task dispatcher", - "en_chars": 13600, - "zh_chars": 6639 } } \ No newline at end of file