Daily Report — 2026-04-20
Daily Overview
- 完成工作: 修复了 gadget website build pipeline 中的关键问题,包括缺失的 daily chart images、English reports 中的 Chinese summaries、BUILD BLOCKED 错误以及 chart styling 问题
- 实现方式: 使用新的 validation rules 扩展了 preflight_check.py,优化了针对 small models 的 translation prompts,实现了 staging-aware fix functions,调整了 chart generation parameters,并添加了 chart backfill logic
- 影响: 恢复了 website 的完整性,所有 65 张 daily charts 均已正常显示,消除了 bilingual reports 中的语言不一致问题,并建立了一套稳健的两阶段修复机制 (website + staging) 以防止 sync overwrites
调试并修复了 gadget website build pipeline 中的多个问题:image sync、frontmatter language validation、translation prompt optimization 以及 chart styling
Tasks
Architecture & Strategy
- ✅ 修复 website 上缺失的 daily chart images — 在 sync_staging.py 中将 static/images/daily 添加到 MANAGED_PATHS,在 daily deploy 中实现了 chart backfill,并使用正确的 styling 重新生成了所有 65 张 charts
- ✅ 修复 English .md 文件中的 Chinese summaries — 扩展了 check_language() 以验证 summary/description 字段,将 en target 的 translation prompt 改为 English(修复了 1.8B model 的 context switching 问题),并使 fix_language_issues() 同时修复 staging sources
- ✅ 修复 relative chart image links — 添加了 check_chart_links(),将 en/zh 版本的相对路径 (2026-04-10-usage.png) 转换为绝对路径 (/images/daily/2026-04-10-usage.png)
Implementation & Fixes
- ✅ 修复 BUILD BLOCKED error — 将 Resume.md/Resume.zh.md 从 frontmatter validation 中排除,修复了 2026-03-25.zh.md 中损坏的 multi-line summary
- ✅ 标准化 bugJournal titles — 实现了 check_bug_journal_titles() 以强制执行格式:‘Bug Journal YYYY-MM-DD’, ‘Weekly Report YYYY-WXX’, ‘Monthly Report YYYY-MM’
- ✅ 调整 chart styling — 将字体更改为 Times New Roman,title 为 32pt / 其他为 24pt,固定 x-axis 始终显示 Claude Code + Codex(对于缺失数据显示 0),移除了 bar labels 的 bold 效果,设置了 xlim 以防止边缘挤压
Problems & Solutions
Critical Issues
1. Translation engine (1.8B model) 无法将长篇 Chinese summaries 翻译成 English,始终输出 Chinese
Solution: 修改 build_translation_prompt(),在 target_lang==‘en’ 时使用 English instructions 而不是全中文指令,从而允许模型脱离 Chinese context 并切换到 English output
Key Insight: Small translation models (1.8B) 对 context 非常敏感 —— Chinese prompts 会将它们困在 Chinese output mode 中。使用 target-language instructions 有助于它们切换输出语言
2. Preflight fixes (summary language, chart links) 在执行 update.sh 时不断被 sync_staging.py 还原
Solution: 修改了所有 fix functions (fix_language_issues, fix_title_issues, fix_chart_links),使其不仅修复 website/content/,同时也修复 staging source files (outputs/site/content/)
Key Insight: 在两阶段的 staging pipeline (staging → website) 中,修复措施必须同时应用于两侧才能在 sync overwrites 中幸存。Staging source 是权威副本 (authoritative copy)
3. 尽管在 outputs/images/summarize/ 中已生成,但 website 上仍缺失 daily charts
Solution: 在 cmd_deploy() 中添加了 chart backfill logic —— 在过滤已部署日期后,扫描 staging 中缺失的 charts,并在不重新翻译内容的情况下进行 regenerate+copy
Key Insight: Deploy 的 ‘already deployed’ 检查仅查看了 content 的存在性,忽略了 chart 的 staging 状态。Asset deployment 应当独立于 content deployment 状态
4. Deploy 的 image link replacement (../images/ → /images/daily/) 与实际的 markdown (bare filename) 不匹配
Solution: 修改了 replacement 以同时匹配两种模式:’(../images/xxx)’ 和 ‘(xxx-usage.png)’ → ‘(/images/daily/xxx)’,并在 translation 之前应用,以确保 en/zh 版本都获得 absolute paths
Key Insight: String replacements 必须匹配实际的数据模式,而不是假设的模式。Image link rewriting 应当在 pre-translation 阶段进行,以确保不同语言变体之间的一致性
General Issues
5. Chart x-axis 仅显示一个 platform (Claude Code),当无数据时 Codex 被挤压到右边缘
Solution: 固定了 platforms list 以始终包含 [‘Claude Code’, ‘Codex’],添加了 ax.set_xlim(-0.5, 1.5) 以保持 bars 居中,并为缺失数据显示 ‘0.0M’/’$0.00’
Key Insight: Matplotlib 的 tight_layout + right legend 会导致动态 platform lists 下的 x-axis 压缩。通过固定 xlim + 固定 platform order 可以防止 layout shifts
Human vs AI Approaches
Strategic Level
意识到 preflight fixes 需要针对 staging sources
| Role | Approach |
|---|---|
| Human | 在多次修复尝试后,用户指出 ‘summary 中文问题又出现了’ |
| AI | AI 一直在修复 website/content/ 文件,没有意识到 sync_staging.py 每次都会从 outputs/site/content/ 覆盖它们 |
Difference Analysis: Human 的模式识别能力(问题反复出现)迫使 AI 追踪完整的 sync pipeline 并发现了 staging source 问题。AI 本应更早地映射数据流依赖关系
诊断为什么 deploy 后 chart links 仍然是 relative 的
| Role | Approach |
|---|---|
| Human | 用户直接检查 HTML output 并报告 links 仍然错误,直接切中了问题的核心,跳过了中间的 debugging 过程 |
| AI | AI 假设 deploy-time replace logic 是有效的,并试图验证中间状态 |
Difference Analysis: Human 的经验验证(检查最终的 HTML)比 AI 基于假设的 debugging 更快地抓住了问题。AI 在庆祝中间修复成功之前应当验证最终状态 (end state)
Implementation Level
Chart font size 迭代
| Role | Approach |
|---|---|
| Human | 用户通过 trial-and-error 的视觉检查,请求了特定的 font size (2.5x, 然后 1.5x, 然后 32pt) |
| AI | AI 字面执行了每一次 scaling request,而没有预先建议 optimal values |
Difference Analysis: Human 基于视觉反馈进行 iterative refinement,而 AI 采用 execute-then-wait 的方式。对于主观的 styling,迭代是必要的,但 AI 可以尝试建议参考范围
AI Limitations
Critical Limitations
- 未能立即意识到 preflight fixes 必须覆盖 staging sources,导致在理解两阶段 sync architecture 之前,经历了多次 ‘fix → gets overwritten → fix again’ 的循环
- 诊断 translation prompt 问题耗时过长 —— 最初在意识到根源是 Chinese instructions 将模型困在 Chinese output mode 之前,尝试了 chunking、model parameters 和 fallback strategies
General Limitations
- 没有主动为 chart styling 建议 optimal font sizes 或参考标准,需要用户通过多次 size requests 进行迭代
Learnings
Key Learnings- 对于 multi-stage pipelines (staging → deployment),修复必须应用于 authoritative source (staging),而不仅仅是 deployment target,以在 sync operations 中得以保留
- 小型 translation models (~1-2B params) 对 context 非常敏感:instruction language 比显式的 target language specification 更重要。使用 target-language instructions 以获得更好的 output switching 效果
- 在调试 recurring issues 时,追踪从 generation → staging → sync → deployment 的完整 data flow,以识别 state 在何处被 overwrite
- Asset deployment (images, static files) 应独立于 content deployment state。使用独立的 ‘asset exists’ checks,而不是通过 content existence 进行推断
- 对于 bilingual content,在 translation 之前应用 path normalization (relative → absolute),以便两种语言变体都能继承一致的 references。URL/path rewriting 是 language-agnostic 的,应在 pre-translation 阶段完成
Conversation Summaries
✅ Multi-system debugging: image sync, language validation, chart styling 04:42:09.324 | claude_code 用户报告网站上缺失 daily chart images。调查发现了一系列级联问题:sync_staging.py 中缺失 MANAGED_PATHS entry,preflight_check 中的 language validation 不充分(仅检查了 body/title,未检查 summary/description),Chinese translation prompts 导致 small model 无法输出 English,relative chart image links,以及 chart fonts 过小。通过扩展 preflight checks、优化 translation prompts、实现 staging-aware fix functions、添加 chart backfill logic 以及调整 chart styling (Times New Roman, 32pt title / 24pt body, fixed x-axis) 完成了修复。最终结果:所有 65 张 daily charts 均正确显示,并具备完善的 bilingual support 和一致的 absolute paths。