Deploy / build (push) Successful in 22s
- performUpkeep: external callable, re-check is mandatory security (not stale-data hygiene) - BasicNft.tokenURI: ownerOf -> _ownerOf, dead custom error explained - storage (SSTORE) vs EIP-170 runtime bytecode separated, derived ~1.3M gas for the two SVGs - subs-15 retimed from a fresh faster-whisper word alignment (10.84s first line, was 28.22s) + SRT regenerated - RDAP needs curl -L (bootstrap 302), ASN/Spamhaus blocklist check added - learning-project framing -> Sepolia reference implementation / testnet validation build - dynamicCta on the two posts that ended with no conversion block - cross-links between the two NFT posts; tracker 91/91 approved
1185 lines
56 KiB
JSON
1185 lines
56 KiB
JSON
{
|
||
"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
|
||
}
|
||
} |