chore: root cleanup + tracked state corrections (PR-2) - #169
Conversation
v5 (reset --hard 回退 v1 commit 后重做): 本仓库根 .gitignore HEAD 即为空 (blob e69de29), 自始至终没有 ignore 规则. v1 commit (fd1795f) 起草了 7 类规则, 但漏判 ui_dump.xml 路径——v3/v4 报告错误地 将 /INVESTIGATIONS.md /git-governance-report.md /ui_dump.xml 标为 untracked, 实际都是 main HEAD tracked. v5 (本 commit) 重新起草, 加上 **/ui_dump.xml 规则. 7 类规则 (PR-1 完成): 1. Flutter / Dart 构建产物 (12 条) - flutter create 模板 2. Android / iOS generated (4 条) - AGP / CocoaPods 标准 3. Python 工具链 (3 条) - ffx-cli 等 4. Agent / runtime artifacts (9 条) - REPO_POLICY.md §1 显式 5. Local / generated logs (3 条) - 避免 *.log 过宽 6. Flutter test artifacts (1 条) - Phase 3.11 E6/E8 防再生 7. **/ui_dump.xml (root + flutter_app/ 共同覆盖) - Android UI dump 防再生 已知限制: - ui_dump.xml 规则在 PR-1 阶段无法用 git check-ignore 验证 (tracked 文件 hide ignore 状态), 需 PR-2 git rm 后才能验证 - flutter_app/pubspec.lock 子目录 .gitignore 屏蔽根级规则, 留给 PR-2 处理 未在本 PR 处理 (PR-2): - /INVESTIGATIONS.md (tracked) -> docs/INVESTIGATIONS.md - /git-governance-report.md (tracked) -> docs/archive/2026-08-12-git-governance-snapshot.md - /ui_dump.xml (tracked) -> git rm - flutter_app/ui_dump.xml (tracked) -> git rm - .claude/settings.json / .github/workflows/openwiki-update.yml / tools/adi/pubspec.lock Task scope: ROADMAP repo-governance / PR-1
AGENTS.md §6.2.3 明确: App 项目不提交 pubspec.lock, 库项目需要提交. 根 .gitignore 的 flutter_app/pubspec.lock 规则被 flutter_app/.gitignore 屏蔽 (git 标准行为: 子目录 .gitignore 优先解析, 根级规则不参与匹配). 在 flutter_app/.gitignore 加 /pubspec.lock (路径以 / 开头限定到当前目录). 效果: - flutter_app/pubspec.lock -> ignored (App, 不入库) - tools/adi/pubspec.lock -> NOT ignored (Dart CLI 库项目, 需 commit) Task scope: ROADMAP repo-governance / PR-2
PR-1 起草 .gitignore 时漏了 /CLAUDE.md 规则. PR-2 补. CLAUDE.md (7 行) 与 AGENTS.md 末尾 OPENWIKI 块内容同源 (GitHub Action 注入), ignore 后: OpenWiki Action 仍能在 AGENTS.md 末追加, CLAUDE.md 不再被追踪为双源. 本次只 ignore 当前 untracked 的根目录 CLAUDE.md. 工作区 untracked 数 3 → 2. Task scope: ROADMAP repo-governance / PR-2
4 个 root cleanup 操作一次完成 (因为都涉及同区域根目录治理): **删除** (2 个): - ui_dump.xml: Android uiautomator dump, 19,152 B, 一次性. v3/v4 报告误判为 untracked, 实际是 main HEAD tracked (cd37248 blob). PR-1 已加 **/ui_dump.xml 规则防止再生. - flutter_app/ui_dump.xml: 同上, 8,467 B, main HEAD tracked (be8919d blob). 同一规则覆盖. **移动** (2 个, git rename detection 确认): - INVESTIGATIONS.md -> docs/INVESTIGATIONS.md - 文件头新增 8 行说明: 位置 / 定位 / 层级关系 / 临时状态归属 - git-governance-report.md -> docs/archive/2026-08-12-git-governance-snapshot.md - 文件头新增 4 行标注: 当前位置 / 迁移时间 /⚠️ 过期 / 原执行信息 注: docs/archive/ 目录已存在, 含 PHASE1_TEST_PLAN.md / REFACTOR_DESIGN.md. Task scope: ROADMAP repo-governance / PR-2
PR-2 描述文档, 含: 1. PR 改动说明 (4 个 commit, 真实状态) 2. v1 报告错误登记: 3 个 root md + ui_dump.xml 实际 tracked, 3 个项目资产实际不存在 3. v2 期间 commit 4b/4c 伪 move 问题已通过 v3 reset --hard 199a413 + git rm/mv 重做修复 4. 沙箱外 Human 必跑验证: flutter analyze / flutter test / git check-ignore / git fsck Task scope: ROADMAP repo-governance / PR-2
…26-08-25 # Conflicts: # .gitignore
|
Claude finished @Thy985's task in 3m 5s —— View job Code Review — PR #169
|
| Commit | 作用 | 评估 |
|---|---|---|
da6fd90 |
chore(flutter_app): ignore pubspec.lock | ✅ App-scoped,符合 AGENTS.md §6.2.3 |
98df27d |
chore: ignore /CLAUDE.md | ✅ 解决 OPENWIKI 双源 |
13dce58 |
chore: remove 2 ui_dump.xml + relocate 2 root md | ✅ 真 rm + 真 mv(与 v2 伪 move 的"撒谎 commit"明确区分) |
9f3bfeb |
docs: add PR-2_DESCRIPTION.md | ✅ 本 PR 描述存档 |
每个 commit 改动范围与 commit message 一致,未夹带未描述的修改。
✅ Rename detection(关键修复点)
git diff --name-status -M origin/main..HEAD 验证:
R063 INVESTIGATIONS.md → docs/INVESTIGATIONS.md
R089 git-governance-report.md → docs/archive/2026-08-12-git-governance-snapshot.md
D ui_dump.xml
D flutter_app/ui_dump.xml
是 真 rename(63% / 89% similarity 触发 git rename 检测),不是 v2 报告里"mv + git add 没 git rm"的伪 move。commit message 与实际改动一致。
✅ Ignore 规则覆盖检查
| 文件 | 规则 | 位置 | 命中? |
|---|---|---|---|
CLAUDE.md(根) |
/CLAUDE.md |
根 .gitignore |
✅ |
ui_dump.xml(根) |
**/ui_dump.xml |
根 .gitignore 行 67 |
✅ |
flutter_app/ui_dump.xml |
**/ui_dump.xml |
根 .gitignore(glob 跨目录) |
✅ |
flutter_app/pubspec.lock |
/pubspec.lock |
flutter_app/.gitignore(App-scoped) |
✅ |
tools/adi/pubspec.lock 不受影响(按 AGENTS.md §6.2.3,Library 项目保留锁文件)—— 这点在 PR-2 commit 1 的注释中有显式声明,规则粒度正确。
✅ 不动架构决策类文件
AGENTS.md未改动.agent/REPO_POLICY.md未改动.github/workflows/未改动- 没有改 Dart 业务代码
符合"PR-2 不影响公共 API"声明。
⚠️ 需要 Human 处理:分支 diff 混入 PR-1 内容
问题:当前 diff vs origin/main 包含 6 个 commit:
92e4c45 Merge remote-tracking branch 'origin/main' into chore/root-cleanup-2026-08-25
9f3bfeb docs: add PR-2_DESCRIPTION.md
13dce58 chore: remove 2 ui_dump.xml + relocate 2 root md files
98df27d chore: ignore /CLAUDE.md
da6fd90 chore(flutter_app): ignore pubspec.lock
0ae8d13 chore: restore root .gitignore (从 0 起草, 7 类规则 + ui_dump.xml 防再生) ← PR-1 内容
PR-1 已作为 #167 合入 main(commit 8b1c4b0 "7 类规则收敛")。但分支上的 0ae8d13 是带 **/ui_dump.xml 防再生规则的版本,与 main 的 8b1c4b0 在 .gitignore 内容上分歧。这也是为什么 .gitignore 还出现在 PR-2 的文件清单里(+15 行,包含 /CLAUDE.md + **/ui_dump.xml)—— 整个 PR-1 的 .gitignore 变动被作为 PR-2 diff 一部分呈现。
风险:
- merge 后 main HEAD 的 .gitignore 等于
8b1c4b0+0ae8d13的并集(如果三方合并无冲突),与 PR-1 + PR-2 的"分段叙述"不完全对齐 —— 历史溯源会读到8b1c4b0+0ae8d13+98df27d三次改动根部 .gitignore - PR-2 commit message 与 description 暗示"4 个 commit",但有效增量其实分布在 5 个 commit 上
建议(任选其一):
- [推荐] squash
0ae8d13进98df27d然后 rebase 到 origin/main 之后,让 PR-2 的 diff 只包含 4 个 PR-2 自有 commit - 或 在 PR description 中显式说明:PR-2 在分支内重放 PR-1 的 .gitignore,并交叉引用 chore: restore root .gitignore #167 解释为何不直接 rebase
⚠️ 文件头元数据需复核
docs/INVESTIGATIONS.md 头部新增了 4 段元数据(位置/定位/层级),但没有改动主文档模板(格式/活跃/已完成/notes 章节)—— diff 显示 +13/-0 是纯增量。
docs/archive/2026-08-12-git-governance-snapshot.md 新增 +5/-2:-2 来源可能是把原文里说"待合并"的临时表述调整成"
🧪 验证(沙箱外 Human 必跑)
PR-2 自检清单里这两个
-
cd flutter_app && bash tool/preflight.sh -
flutter analyze --no-fatal-infos --fatal-warnings(不改 Dart 代码,理论 trivially pass) -
flutter test(同上) -
git check-ignore -v ui_dump.xml flutter_app/ui_dump.xml CLAUDE.md flutter_app/pubspec.lock全部命中 -
git fsck --no-dangling零输出
📌 范围警示(不在本 PR,正确处理)
- PR-3:60 tracked modified PNG(golden failures)—— 需 Human pre-confirm golden test 当前状态
- PR-4:分支治理(7 本地 + 5 远程)
- PR-5:AGENTS.md §14.1 顶层目录清单同步
- 后续:
.atomcode/memory.md(1 个 untracked)—— 评估 ignore or add
PR-2 严格按 description 自限范围,未夹带。
最终结论
代码 Review 层面(commit hygiene / rename 真假 / ignore 覆盖 / 不动架构文件):全部 ✅。
流程层面(分支 diff 含 PR-1 内容与 description 4 commit 表述不一致):需要一次 rebase squash 收口,否则 git log 回溯时会有叙事前置的混乱。
核心修改是 非破坏性 + 范围清晰 + 修正 v1 报告错误的仓库治理收口,本身没有引入 bug 风险。建议 Human Owner 处理 rebase 后合入。
chore: root cleanup + tracked state corrections (PR-2)
关联文档
chore/restore-root-gitignore(必须先合入)改动说明
What:PR-2 由 4 个独立 commit 组成,每个 commit 单一职责。
Why(v5 修正):
git ls-files验证).claude/settings.json/.github/workflows/openwiki-update.yml/tools/adi/pubspec.lock)错误地列在 untrackedmv+git add,没git rm原文件,导致 6 个文件并存)—— commit message 撒谎git reset --hard 199a413回退 v2,重新按正确流程git rm/git mv重做Commits (4 个)
da6fd9098df27d13dce58关键 diff 摘要
flutter_app/.gitignore/pubspec.lockApp-scoped 规则).gitignore(根)/CLAUDE.mdignore 规则)ui_dump.xmlflutter_app/ui_dump.xmlINVESTIGATIONS.mddocs/INVESTIGATIONS.md(63% similarity, git rename detection)git-governance-report.mddocs/archive/2026-08-12-git-governance-snapshot.md(89% similarity)docs/INVESTIGATIONS.mddocs/archive/2026-08-12-git-governance-snapshot.md验证
git check-ignore -v ui_dump.xml命中(行 66)—— PR-1 起草的**/ui_dump.xml规则git check-ignore -v flutter_app/ui_dump.xml命中(行 66)git check-ignore -v CLAUDE.md命中(PR-2 commit 2)git check-ignore -v flutter_app/pubspec.lock命中(PR-2 commit 1)git fsck --no-dangling零输出chore/root-cleanup-2026-08-25分支,未推送(沙箱无 push 能力)根目录最终状态
ui_dump.xml+flutter_app/ui_dump.xmlgit-governance-report.md→docs/archive/2026-08-12-git-governance-snapshot.mdINVESTIGATIONS.md→docs/INVESTIGATIONS.md/CLAUDE.md+flutter_app/.gitignore: /pubspec.lock不在本 PR(待后续)
.atomcode/memory.md(1 个 untracked)— 评估 ignore 或 addv1 报告错误登记
本 PR 修正了 v1 调研报告的 2 处事实错误:
不影响公共 API
.agent/REPO_POLICY.md/AGENTS.md架构决策类文件测试方式
cd flutter_app && bash tool/preflight.sh(必跑)flutter analyze --no-fatal-infos --fatal-warnings通过(PR-2 不改 Dart 代码,应 trivially 通过)git check-ignore -v ui_dump.xml flutter_app/ui_dump.xml CLAUDE.md flutter_app/pubspec.lock全部命中git fsck --no-dangling零输出git log --oneline chore/root-cleanup-2026-08-25 ^chore/restore-root-gitignore应 = 4 commits自检清单(AGENTS.md §5.3)
flutter analyze --no-fatal-infos --fatal-warnings通过(沙箱 SSH 限制,需沙箱外 Human 跑)flutter test通过(同上)Task scope
ROADMAP repo-governance / PR-2