Files
STM32F4-Base/.gitignore
T
wandering1 a38f862fb9 chore(ui-golden): 像素黄金参考 ref/*.bin 入库(把门禁改成可移植)
问题:ui-golden 是逐字节比对(check_content_pages.py 里 data == refdata),
而基准 simulator/tests/ref/ 整目录被 .gitignore 忽略、从未入库。后果不是
"少几个文件",而是这条门禁在任何新克隆 / 新并行工作树里必然报「缺黄金
参考」——只在有老副本的机器上它才是真的回归门禁。本会话已两次实测踩到
(并行工作树里只能现场 --update 造基准,而现场造出来的基准恰好失去意义)。

入库前先证明基线可复现,否则等于把一条天天误报的门禁写进仓库:
- 主树 ref/ 生成于 2026-10-11,其间合入 B6~B9 与 UI 令牌化等多次改动;
  今天用刚重建的 lvgl_sim 重跑 → 11 页 + 开页-关页往返池水位逐字节全过
- 主树与新工作树两份**独立构建**的 lvgl_sim(不同构建目录、不同绝对路径)
  各自生成基准 → 11 个 .bin 的 SHA-256 全部一致
即渲染是 CPU 侧确定性输出,可以当仓库内容。

改动:
- .gitignore:整目录忽略 → 只忽略派生的目检 PNG。另加一条
  !simulator/tests/ref/*.bin 反选——第 115 行的全仓 *.bin 兜底(挡
  sim_netcfg.bin 之类运行产物)会把基线一起挡掉,且反选必须排在它之后
  才生效
- 不引入 LFS:11 x 3200 B = 34.4 KB(160x160 单色打包)。走 LFS 反而新增
  失效面——没拉 LFS 的克隆会拿 pointer 文本去比像素,把"缺基准"换成
  "比不中"。.gitattributes 已有 *.bin binary,check-attr 确认 text unset,
  不会被行尾转换改写
- 基线不会被改写型钩子毁掉:trailing-whitespace / end-of-file-fixer 声明
  types: [text],位图含 NUL 被判二进制 → 实测 Skipped;索引 blob、磁盘、
  主树参照三方哈希 11/11 一致
- 新增 11 个基线;同步 5 份文档与 3 处脚本口径:缺基准的提示从"首次/换机
  请加 --update"改为"检出不完整 → git checkout -- simulator/tests/ref/ 取回,
  不要用 --update 就地造基准"(旧提示正是自我实现型基准的来源)
- 顺带修掉 simulator/tests/README.md 两处与实现不符的描述:基准写成 PNG
  (实为 .bin)、regen_ref_png.py 写成"重建黄金参考"(它只出目检图,基准
  由 check_content_pages.py --update 刷)
- .pre-commit-config.yaml 只改注释(原文明确断言 ref/ "永远不会进 git
  索引",已被本改动推翻);ui-golden 的 files 面覆盖 simulator/tests/,
  基线被改即触发回归,刷参考从此在 git diff 里显形

历史口径按纪律冻结:UI_自动化测试流程 2026-09-10 的"整目录不入库"等 6 处
变更记录行不改写,以新行登记反转。

实测:@build 0 错 0 警(Code=213520,与内存台账一致);ui-golden Passed;
pre-commit run --all-files = 36 Passed / 0 Failed(RC=0)。
2026-10-22 06:17:00 +08:00

160 lines
5.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Keil MDK - Build artifacts
*.o
*.d
*.crf
*.axf
*.hex
*.map
*.lnp
*.dep
# Keil UV4 预处理列表文件("Generate preprocessed source file" 选项产生的构建中间物,勿入库)
*__i
*._ia
*.build_log.htm
*.htm
*.log
*.lst
*.dep
.workbuddy-ai/
# Keil MDK - Build log (regenerated by keil_build.py)
MDK-ARM/build_log.txt
# legacy: download.bat removed 2026-10-10; entry kept so stale leftovers on
# other machines do not surface as untracked files
MDK-ARM/download_log.txt
MDK-ARM/err.txt
MDK-ARM/out.txt
MDK-ARM/ret.txt
# Keil MDK - IDE settings (user-specific)
*.uvoptx
*.uvguix.*
# Keil MDK - Debug config
*.dbgconf
# Keil MDK - RTE auto-generated
MDK-ARM/RTE/
# STM32CubeMX (keep .ioc, it's the project source)
# *.ioc
# CubeMX 重生成时自动产生的旧文件备份(Src/Backup/、Inc/Backup/)——
# 纯本地临时物,内容 = 重生成前的快照;入库只会造成无意义的提交抖动
Src/Backup/
Inc/Backup/
# Visual Studio / IDE
.vs/
.vscode/
*.suo
*.njsproj
*.sln
*.suo
*.user
*.opensdf
*.cache
# Windows
Thumbs.db
ehthumbs.db
*.tmp
*.temp
# Linux / Mac
.DS_Store
# LVGL - Unused directories (only src/ is compiled)
Lib/lvgl/demos/
Lib/lvgl/tests/
Lib/lvgl/docs/
Lib/lvgl/libs/
Lib/lvgl/scripts/
Lib/lvgl/env_support/
Lib/lvgl/examples/
Lib/lvgl/.github/
Lib/lvgl/.devcontainer/
Lib/lvgl/zephyr/
Lib/lvgl/xmls/
Lib/lvgl/configs/
# LVGL - Build system files not needed for Keil
# NOTE: Lib/lvgl/CMakeLists.txt is REQUIRED by the PC simulator (simulator/),
# so it is tracked despite being a build-system file. Do not re-ignore it.
Lib/lvgl/CMakePresets.json
Lib/lvgl/component.mk
Lib/lvgl/idf_component.yml
Lib/lvgl/Kconfig
Lib/lvgl/library.json
Lib/lvgl/library.properties
Lib/lvgl/lvgl.mk
Lib/lvgl/lvgl.pc.in
Lib/lvgl/SConscript
Lib/lvgl/sconscript
# LVGL PC Simulator - build artifacts
simulator/build/
sim_dbg.log
# 模拟器宿主侧产物(lvgl_sim.exe / 测试脚本在 CWD 生成,不入库):
# sim_config.ini = net_cfg_load 首启工厂默认落盘;sim_*.log = syslog 后端宿主文件
sim_config.ini
sim_run.log
sim_selftest.log
# LVGL PC Simulator - screenshot outputs (generated, see simulator/i1_to_png.py)
simulator/shot*.png
simulator/shot*.bin
simulator/*.ppm
simulator/__pycache__/
# LVGL PC Simulator - SDL2 SDK (downloaded, see docs/UI 设计/LVGL模拟器部署与使用说明.md §3.1 与 docs/项目部署环境要求.md 第 3 步)
simulator/SDL2/
# Binary / large files
*.bin
# 主机侧单元测试产物(MSVC 中间物;test/host/**/run_unit_test.py 正常写 %TEMP%,
# 但手工直接调 cl.exe 调试时可能落在 CWD。统一兜底忽略)
*.obj
*.exe
*.pdb
*.ilk
# 内容页像素黄金参考 ref/*.bin **已入库**(2026-10-22):整目录不入库时,任何新克隆 /
# 新工作树跑 ui-golden 都必然 FAIL(缺基准),这条像素回归就只在老机器上真实存在。
# 交叉验证:两份各自独立构建的 lvgl_sim(不同构建目录、相隔 11 天的代码)对同一批 ref
# 逐字节一致 → 渲染可复现,基线可入库。派生的目检 PNG 仍是本地产物,继续忽略:
simulator/tests/ref/*.png
# ⚠ 上面第 115 行的全仓 `*.bin` 兜底(挡模拟器的 sim_netcfg.bin 之类运行产物)会连入库的
# 黄金参考一起挡掉 → 必须显式反选;反选只有排在 `*.bin` **之后**才生效(.gitignore 后者覆盖前者)
!simulator/tests/ref/*.bin
# 架构图 PNG 预览(源为 docs/images/*.svg,PNG 本地渲染生成,不入库)
docs/images/*.png
*.pyc
# Python venv (unified env, see AGENTS.md "Python 环境"; rebuild via requirements.txt)
.venv/
# Serial assistant runtime state (daemon log/meta, local runtime artifacts)
.dsh/skills/serial-assistant/scripts/state/
# agent 会话草稿(2026-10-14 定):提交信息草稿 / 门禁输出 / 台架日志 / 一次性改名
# 脚本 / 故障注入 patch —— 一律不入库。判据三条,命中任一就不值得留:
# ① 能重跑的(门禁输出、日志);② 内容已在 git 历史里的(已合并实现的过程 diff);
# ③ 离开已丢弃的任务分支就跑不通的(依赖 NET_FAULT_INJECT 的注入产物)——
# 这种提交进去是"看着有证据、实际不可复现"的假证据,**方法应沉淀成文档文字**
# (见 docs/网络/网络自愈架构设计.md §5.2 E18/E19)。
# ⚠ .dsh/skills/ 是**入库的项目知识**(skills = 子域方法论),必须放行。
.dsh/*
!.dsh/skills/
# 记忆工具(Mnemon)本地状态:项目文档索引 documents/ + 运行时记忆
# runtime/MEMORY.md、USER.md、memories.json。**只留本机、不进版本库**
# (2026-10-11 定):记忆是按机器/按人累积的私有状态,入库会让每次记忆
# 写入都变成提交抖动,还可能带出本机绝对路径与个人偏好。
.mnemon/
# CI 运行时产物(.gitea/workflows/ci.yml 的 S3 步骤在 runner 工作区落盘的日志;
# 零依赖存档方案——落在工作区目录而非上传 artifact,故必须忽略以免误提交)
ci-artifacts/