# 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，故必须忽略以免误提交）
# 子进程环境残缺时 Windows 会按字面量建目录（本会话实测两次复发：UV4 / 字体
# 工具在缺 SystemDrive、ProgramData 的环境里于仓库根创建
# %SystemDrive%/ProgramData/Microsoft/Windows/Caches/*.db，约 1 MB 字体缓存库）。
# 与"一次性中间产物不进 .gitignore"那条教训不同：这是任何一条道随时可能再生的环境
# 副产物，不兜住就会被某次 git add -A 带进历史。正解仍是继承完整环境跑这类工具。
%SystemDrive%/
ci-artifacts/
