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 有助于它们切换输出语言

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 状态

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 本应更早地映射数据流依赖关系

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。

Token Usage

AI Usage · 2026-04-20 Claude Code + Codex
Total cost
$152.93
Total tokens
328M
Output tokens
1M
Cache read
78.2%
Cost split Claude Code $107 · Codex $46
Token character Cache reads 78.2% · Active 21.8%

Most token volume came from cache reads.