- 新增 docs/audit/changes/2026-04-20__historical-batch-pre-audit.md 157 文件分批盘点审计(7 条主线 + 10 项高/中风险 + 2 份迁移 SQL DDL 清单) - 补追 docs/audit/changes/2026-04-15__meituan-settle-core-sync.md 原审计产物因 .gitignore 屏蔽长期未入仓,本次一并追回 - 刷新 docs/audit/audit_dashboard.md(33 条审计记录) - .gitignore 白名单放行 docs/audit/changes/*.md 与 audit_dashboard.md 同时屏蔽 changes/changes/ 嵌套误产物目录 - 新增 docs/specs/audit-gap-recovery/tasks.md 扫描嵌套目录发现 96 份 D 类孤本(从未入过 git history), 生成独立 PRD 供单开任务清理与补追 - 文档同步(高风险项): - apps/backend/docs/API-REFERENCE.md (+69) - apps/miniprogram/README.md (+50) - apps/etl/connectors/feiqiu/docs/architecture/data_flow.md (+52/-2) - apps/etl/connectors/feiqiu/docs/architecture/system_overview.md (+5/-3) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
227 lines
12 KiB
Markdown
227 lines
12 KiB
Markdown
# 审计记录补追与嵌套目录清理
|
||
|
||
**发现日期**:2026-04-20
|
||
**发现上下文**:2026-04-20 历史批次预审过程中,放宽 `.gitignore` 白名单后暴露出 `docs/audit/changes/changes/` 嵌套目录
|
||
|
||
## 背景
|
||
|
||
开发机迁移(79d3c2e 提交)前后,`docs/audit/changes/` 下意外出现了一个同名嵌套子目录 `docs/audit/changes/changes/`,其中堆积了 127 份审计记录 md 文件。推测原因是迁移脚本或某次批量拷贝时,误把 `docs/audit/changes/` 整个目录作为源,再次写入到了它自身下面,形成了 `changes/changes/` 的路径嵌套。
|
||
|
||
同时期 `.gitignore` 将 `docs/audit/` 整目录屏蔽(仅白名单少量文件),导致此后新增的审计记录长期无法入仓。主目录 `docs/audit/changes/` 当前仅有 33 份入仓 md,而嵌套目录累积了 127 份。
|
||
|
||
用户最初的设想是直接 `rm -rf docs/audit/changes/changes/` 了事。但实地核查发现:嵌套目录里相当一部分文件从未进入过 git 任何分支的 history(即未 commit 的孤本),一旦删除就永久丢失。因此需要先对 127 份做全量分类,再按类别分阶段处理,不能一删了之。
|
||
|
||
本 PRD 即用于指导后续清理动作,独立可执行。
|
||
|
||
## 扫描结果统计
|
||
|
||
| 分类 | 数量 | 含义 | 处理方式 |
|
||
|------|------|------|---------|
|
||
| A 纯副本 | 30 | 主目录同名同内容(diff 无输出) | 可直接删除嵌套版本 |
|
||
| B 内容漂移 | 1 | 主目录同名但内容不同 | 人工比对选最新 |
|
||
| C 已 commit 的孤本 | 0 | 主目录无,git history 有 | 无此类 |
|
||
| D 未 commit 的孤本 | 96 | 主目录无,git history 也无 | **最高优先级补追**,删除即永久丢失 |
|
||
| **合计** | 127 | | |
|
||
|
||
扫描方法:对 `docs/audit/changes/changes/*.md` 每个文件,先查 `docs/audit/changes/<同名>.md` 是否存在,存在则用 `diff -q` 比对内容;不存在则用 `git log --all --oneline -- docs/audit/changes/<文件名>` 查历史。扫描时主目录文件数 33,嵌套目录文件数 127。
|
||
|
||
## 类别 D:未 commit 的孤本清单(最高风险,共 96 份)
|
||
|
||
以下 96 份文件仅存在于 `docs/audit/changes/changes/`,且 git 所有分支 history 中均无记录。删除即永久丢失。
|
||
|
||
```
|
||
2026-02-26__etl-bugfix-dim-staff-rankname-assistant-daily-table-area.md
|
||
2026-02-26__p1-p2-p3-fullstack-integration.md
|
||
2026-02-26__retention-clue-refactor.md
|
||
2026-02-26__root-file-gitignore-h5ui-cleanup.md
|
||
2026-02-27__biz-day-cutoff-prd-sync-check.md
|
||
2026-02-27__p4-core-business-routes-triggers.md
|
||
2026-02-28__multi-module-accumulated-changes.md
|
||
2026-03-01__dwd-cleanup-ods-fix-dim-staff-repair.md
|
||
2026-03-01__dws-numeric-precision-ods-siteid-fix.md
|
||
2026-03-02__etl-unified-analysis-hook-merge.md
|
||
2026-03-02__spi-calibration-nonzero-median.md
|
||
2026-03-03__miniprogram-dev-debug-panel.md
|
||
2026-03-04__fullstack-accumulated-changes.md
|
||
2026-03-06__fix-api-client-post-method.md
|
||
2026-03-06__fix-db-operations-dsn-proxy.md
|
||
2026-03-07__task3-project-tag-docs-sync.md
|
||
2026-03-08__p5-ai-spec-review-category-enum-align.md
|
||
2026-03-10__multi-module-ai-apps-task-defense-miniprogram.md
|
||
2026-03-12__board-finance-overview-wxss-calibration.md
|
||
2026-03-12__miniprogram-dev-docs-finalize.md
|
||
2026-03-12__multi-module-ai-taskdefense-miniprogram-etl.md
|
||
2026-03-12__pixel-audit-structured-methodology.md
|
||
2026-03-13__board-finance-line-height-audit.md
|
||
2026-03-13__board-finance-rpx-formula-correction.md
|
||
2026-03-13__task-list-h5-rewrite.md
|
||
2026-03-15__ddl-baseline-consolidation-bd-manual-reorg.md
|
||
2026-03-18__rns1-e2e-fdw-direct-connect-bugfix.md
|
||
2026-03-19__card-type-id-doc-sync.md
|
||
2026-03-19__coach-tier-hardcode-fix.md
|
||
2026-03-19__level-map-hardcode-fix.md
|
||
2026-03-19__rns12-db-audit.md
|
||
2026-03-20__ai-prompt-refinement-board-coach-mock.md
|
||
2026-03-20__h2-fdw-to-direct-etl-unification.md
|
||
2026-03-20__miniprogram-docs-sync.md
|
||
2026-03-20__r3-skill-type-filter-rebuild.md
|
||
2026-03-20__rns1-ai-autonomous-decision-risk-audit.md
|
||
2026-03-20__rns13-board-apis-e2e-fix.md
|
||
2026-03-20__rns14-chat-fdw-filter-audit.md
|
||
2026-03-20__rns14-chat-module-r3-filter-rebuild.md
|
||
2026-03-22__db-field-walkthrough-batch-fix.md
|
||
2026-03-22__ddl-db-structure-diff-bd-manual-audit.md
|
||
2026-03-22__ddl_bd_manual_consistency_fix.md
|
||
2026-03-22__dev-trace-log-fullstack-feature.md
|
||
2026-03-22__ns4-ddl-merge-deleted-at.md
|
||
2026-03-22__p14-task15-final-checkpoint.md
|
||
2026-03-22__p16-spec-closing-doc-sync.md
|
||
2026-03-22__trace-path-fix-miniprogram-login-race.md
|
||
2026-03-22__zombie-task-graceful-shutdown-rerun.md
|
||
2026-03-23__ddl-merge-rejection-count-cancelled.md
|
||
2026-03-23__disable-to-remove-user-auth-model-fix.md
|
||
2026-03-23__mysites-tenant-filter-time-format-nickname-display.md
|
||
2026-03-23__review-modal-phone-display-auto-match-identity-label.md
|
||
2026-03-23__role-routing-page-guard.md
|
||
2026-03-23__tenant-admin-case-insensitive-username.md
|
||
2026-03-23__tenant-admin-review-modal-dynamic-roles.md
|
||
2026-03-23__tenant-admin-site-access-root-fix.md
|
||
2026-03-23__tenant-user-approval-site-filter.md
|
||
2026-03-23__trigger-jobs-admin-web-miniprogram-cleanup.md
|
||
2026-03-24__add_missing_cfg_skill_type.md
|
||
2026-03-24__ddl-migration-merge-and-archive.md
|
||
2026-03-24__fix-tier-nodes-empty-progress-bar.md
|
||
2026-03-24__lookback_days_60_to_90.md
|
||
2026-03-24__miniprogram-avatar-nickname-feature.md
|
||
2026-03-24__p17-assistant-ownership-task-engine.md
|
||
2026-03-24__p18-task-engine-dashboard.md
|
||
2026-03-24__perf-page-data-fix.md
|
||
2026-03-24__review-modal-avatar-layout.md
|
||
2026-03-24__soft-delete-user-site-roles-binding.md
|
||
2026-03-24__trigger-jobs-clear-task-interaction.md
|
||
2026-03-24_fix_cfg_skill_type_missing_records.md
|
||
2026-03-25__baseline-relationship-building-tasks.md
|
||
2026-03-25__baseline-task-independent-connection-fix.md
|
||
2026-03-25__perf-to-task-detail-member-query.md
|
||
2026-03-25__perf-wxml-missing-member-id.md
|
||
2026-03-25__task-detail-service-records-6-improvements.md
|
||
2026-03-25__tenant-users-soft-delete-upsert-fix.md
|
||
2026-03-26__etl-missing-fields-phase1-ddl-mappings.md
|
||
2026-03-26__net-income-calibration-all-pages.md
|
||
2026-03-27__board-finance-double-format-fix.md
|
||
2026-03-27__board-finance-integration-T2.md
|
||
2026-03-27__board-finance-phase2-t1-t6.md
|
||
2026-03-27__board-finance-wxml-format-tabs-cleanup.md
|
||
2026-03-27__miniprogram-permission-unification.md
|
||
2026-03-27__task-list-recent60d-and-wxml-formatting.md
|
||
2026-03-28__board-finance-5fixes.md
|
||
2026-03-28__board-finance-dws-area-refactor-audit.md
|
||
2026-03-28__fix-miniprogram-login-landing-page.md
|
||
2026-03-29__board-lazy-loading-pagination.md
|
||
2026-03-29__coach-detail-500-field-name-fix.md
|
||
2026-03-29__coach-detail-design-alignment.md
|
||
2026-03-29__coach-detail-style-aggregation-fix.md
|
||
2026-03-29__dws-task-engine-etl-orchestration.md
|
||
2026-03-29__fix-recall-completion-event-chain.md
|
||
2026-03-31__task-engine-overhaul.md
|
||
2026-04-05__kiro-to-claude-code-migration.md
|
||
2026-04-08__fix13-recall-events-refactor.md
|
||
```
|
||
|
||
注意其中一份为 `2026-03-24_fix_cfg_skill_type_missing_records.md`(单下划线),与同日的 `2026-03-24__add_missing_cfg_skill_type.md` 命名风格不同,疑似历史遗留命名,补追时保持原名即可。
|
||
|
||
## 类别 B:内容漂移清单(需人工比对,共 1 份)
|
||
|
||
```
|
||
2026-04-06__v1-cleanup-ddl-consolidation.md
|
||
```
|
||
|
||
处理提示:主目录版本与嵌套版本在 2026-04-06 的 v1 整理 commit(779b2f6)前后可能经历过修订,需逐行对比选最新信息最完整的一版。
|
||
|
||
## 类别 C:已 commit 的孤本清单(可恢复,共 0 份)
|
||
|
||
本次扫描未发现此类文件。主目录缺失的 94 份全部属于 D 类未 commit 孤本。
|
||
|
||
## 类别 A:纯副本清单(可直接删除,共 30 份)
|
||
|
||
以下 30 份文件在主目录有同名同内容版本,嵌套副本可安全删除。
|
||
|
||
```
|
||
2026-02-13__api-ods-comparison-v2.md
|
||
2026-02-13__api-ods-comparison.md
|
||
2026-02-13__api-reference-batch2.md
|
||
2026-02-13__api-reference-overhaul.md
|
||
2026-02-13__bd-manual-docs-consolidation-ddl-sync.md
|
||
2026-02-13__field-drift-report-update.md
|
||
2026-02-13__git-repo-reinit-push.md
|
||
2026-02-13__remove-legacy-index-cleanup.md
|
||
2026-02-14__api-doc-reorg-field-grouping.md
|
||
2026-02-14__api-ods-comparison-v3-fixed.md
|
||
2026-02-14__api-ods-comparison-v3.md
|
||
2026-02-14__api-param-audit-ods-design.md
|
||
2026-02-14__drop-dwd-settle-list.md
|
||
2026-02-14__drop-ods-settlelist.md
|
||
2026-02-14__dws-bugfix-tier-safedecimal.md
|
||
2026-02-14__json-refresh-md-patch.md
|
||
2026-02-14__json-vs-md-audit.md
|
||
2026-02-14__legacy-ods-dwd-cleanup.md
|
||
2026-02-14__md-placeholder-fix-cleanup.md
|
||
2026-02-14__ods-cleanup-doc-update.md
|
||
2026-02-14__ods-vs-summary-comparison.md
|
||
2026-02-14__recording-client-timezone-fix.md
|
||
2026-02-14__replace-role-area-new-api-doc.md
|
||
2026-02-14__skip-words-remark-fix.md
|
||
2026-02-15__admin-web-console-db-migration-audit-reorg.md
|
||
2026-02-15__audit-consolidation-doc-reorg.md
|
||
2026-02-15__backend-deps-bootstrap.md
|
||
2026-02-15__docs-database-merge.md
|
||
2026-02-15__docs-devnotes-index-cleanup.md
|
||
2026-02-15__monorepo-migration-phase1-8.md
|
||
```
|
||
|
||
## 建议的执行顺序
|
||
|
||
1. **阶段 1:先保全 D 类(96 份)**
|
||
- 在动任何东西前,先 `git add -A && git commit -m "WIP 清理前快照"` 做一次保护 commit
|
||
- 将 `docs/audit/changes/changes/` 下所有 D 类文件复制(不是移动)到 `docs/audit/changes/`
|
||
- 检查 `.gitignore` 是否放行 `docs/audit/changes/*.md`,若未放行则先调整白名单
|
||
- `git add docs/audit/changes/ && git commit -m "补追未入仓的 96 份审计孤本"`
|
||
|
||
2. **阶段 2:处理 B 类(1 份)**
|
||
- 针对 `2026-04-06__v1-cleanup-ddl-consolidation.md`,用 `diff docs/audit/changes/<该文件> docs/audit/changes/changes/<该文件>` 查看差异
|
||
- 选更完整的一版保留到主目录;将另一版备份到 `_DEL/audit-backup/2026-04-06__v1-cleanup-ddl-consolidation.嵌套版.md` 或类似路径
|
||
- commit 消息"内容漂移修正:v1-cleanup-ddl-consolidation"
|
||
|
||
3. **阶段 3:恢复 C 类(0 份,跳过)**
|
||
- 本次无 C 类,无需操作
|
||
|
||
4. **阶段 4:删除嵌套目录**
|
||
- 确认阶段 1、2 已 commit 入仓
|
||
- `rm -rf docs/audit/changes/changes/`
|
||
- `git add -A && git commit -m "清理嵌套目录 docs/audit/changes/changes/"`
|
||
|
||
## 风险与回滚
|
||
|
||
- 风险 1:D 类补追后,主目录审计时间线会出现大段 2026-02-26 至 2026-04-08 的批量入仓,commit 时间与文件日期不一致。可接受,目标是保全历史。
|
||
- 风险 2:B 类仅 1 份,若选错版本会丢失另一方内容。缓解:另一版强制先备份到 `_DEL/` 再删。
|
||
- 风险 3:`.gitignore` 可能仍然屏蔽 `docs/audit/changes/*.md`,导致 `git add` 静默忽略。阶段 1 第一次 `git add` 后必须 `git status` 核对文件是否真的进入了暂存区;若未进入,先修 `.gitignore` 白名单再重试。
|
||
- 风险 4:D 类中 `2026-03-24_fix_cfg_skill_type_missing_records.md` 为单下划线命名,可能与同日双下划线版本功能重叠,补追后若发现重复再单独合并。
|
||
- 回滚:所有删除前应已有"WIP 清理前快照"commit;任何阶段出问题 `git reset --hard <快照 hash>` 即可恢复。
|
||
|
||
## 验证
|
||
|
||
阶段 4 完成后执行以下验证:
|
||
|
||
- `ls docs/audit/changes/*.md | wc -l` 应等于 33(原)+ 96(D 补追)+ 0(C 恢复)= 129
|
||
- 若 B 类合并后主目录文件未增加,则仍为 129;若 B 类创建了新文件名则为 130
|
||
- `ls docs/audit/changes/changes/ 2>/dev/null` 应返回空或"目录不存在"
|
||
- `git log --oneline -- "docs/audit/changes/"` 应能看到至少 3 次本次操作 commit(快照 / 补追 / 清理)
|
||
- 抽查 D 类中的 3 份文件,确认 `git log --all -- "docs/audit/changes/<文件名>"` 返回非空
|
||
|
||
## 不在本次任务范围
|
||
|
||
- 审计内容本身的正确性复核(只做文件层面的保全,不审查内容)
|
||
- `.gitignore` 结构的长期设计(仅在本次清理中按需放行白名单)
|
||
- 其他模块的遗漏审计补追
|
||
- 审计看板 `docs/audit/audit_dashboard.md` 的刷新(阶段 4 完成后单独跑 `scripts/audit/gen_audit_dashboard.py`)
|