Project Index - Layered CLAUDE.md System
自动生成和维护大型项目的层次化 CLAUDE.md 索引系统。
📌 推荐使用 pi-cli
project-index 和 pi-cli 功能已统一。推荐使用 pi CLI 作为统一入口:
# 等效命令对照
node scripts/module-analyzer.js --stale → pi module analyze --llm --stale
node scripts/test-fix.js → pi test fix --llm
node scripts/dashboard.js --open → pi ui
⛔ 严禁操作 (CRITICAL - 必读)
2026-01-22 事故记录:执行
git checkout HEAD -- tests/和git checkout HEAD -- js/,导致用户一整天的手动工作(100+ 文件)永久丢失,无法恢复。
以下操作必须先询问用户确认,否则绝对禁止执行:
git checkout HEAD --/git checkout -- <path>— 会永久丢弃未提交修改git reset --hard— 会永久丢弃所有未提交修改git clean -fd— 会永久删除未跟踪文件git stash drop/git stash clear— 会永久删除 stash- 任何批量删除文件的操作 (
rm -rf,find -delete等)
批量任务进度保护:每完成一批任务后,必须提交或提醒用户提交。
功能清单
| 功能 | 脚本 | 说明 |
|---|---|---|
| 文档生成 | generate.js | 生成/更新 CLAUDE.md |
| 代码审计 | code-audit.js | 生成 AUDIT.md,检测安全问题 |
| 过期检测 | check-stale.js | 检测文档/审计/测试是否过期 |
| 依赖图构建 | dependency-graph.js | 构建文件级依赖图,检测循环依赖 |
| 影响分析 | impact-analyzer.js | 分析变更文件的下游影响范围 |
| stale 传播 | stale-propagate.js | 依赖传播 stale 状态 + 测试重跑列表 |
| 测试优先级 | test-prioritize.js | 智能排序:root cause 优先 + 并行批次 |
| 智能测试 | test-affected.js | 只运行受变更影响的测试 |
| 测试映射 | test-mapper.js | 源码↔测试映射,生成 .test-map.json |
| 测试生成 | test-generator.js | 批量生成缺失测试 |
| 测试修复 | test-fix.js | 并发修复测试错误 |
| 审计修复 | audit-fix.js | 并发修复审计问题 |
| 验收门禁 | acceptance-gate.js | DAG 分组验证 git 变更,仅提交通过文件 |
| Dashboard | dashboard.js | Web UI (http://localhost:3008) |
AI 交互指引
主动询问
完成批量任务后,应主动询问用户:
任务完成。是否打开 Dashboard 查看详细状态?
→ 运行: node scripts/dashboard.js --open
→ 访问: http://localhost:3008
任务前检查
执行文档/测试任务前,先检查状态:
node scripts/check-stale.js --stale-only --json
根据输出决定处理范围。
触发场景
- 新项目入驻 — 用户说"帮我分析这个项目"、"生成文档"
- 遗留项目理解 — 用户说"这个代码库怎么组织的"
- 代码修改后 — 检测到核心模块变更,提醒更新文档
- 测试维护 — 用户说"生成测试"、"修复测试"
- 审计需求 — 用户说"检查安全问题"、"代码审计"
- 提交前验收 — 用户说"验收门禁"、"检查变更"、"提交验证"
前置依赖
| 依赖 | 类型 | 用途 |
|---|---|---|
| codeagent-wrapper | 必需 | LLM 调用 |
| kanban | 可选 | 审计任务自动创建 |
核心概念
三层架构
project/CLAUDE.md # Layer 1: 概览 + 模块索引
↓
src/modules/auth/CLAUDE.md # Layer 2: 模块详情 + 子模块索引
↓
src/modules/auth/jwt/CLAUDE.md # Layer 3: 实现细节
智能覆盖策略
不是每个目录都需要独立 CLAUDE.md:
- 大目录 (≥5 文件或 ≥200 行) → 必须有独立 CLAUDE.md
- 小目录 + 父目录有 CLAUDE.md → 由父目录覆盖
- 小目录 + 父目录无 CLAUDE.md → 孤儿,需关注
层级依赖排序
批量生成时按目录深度从深到浅处理:
js/agents/core/sandbox/system → 先生成
js/agents/core/sandbox → 后生成
js/agents/core → 再后
js/agents → 最后
确保父目录生成时可引用子目录的 CLAUDE.md。
AUDIT.md 同策略
代码审计 (code-audit.js) 采用相同策略:
- 大目录生成独立 AUDIT.md
- 小目录由父目录审计覆盖
- 审计提示词包含未独立审计的小子目录代码
快速开始
# 1. 扫描项目
node scripts/scan.js
# 2. 生成 CLAUDE.md
node scripts/generate.js --auto
# 3. 安装 hooks
node scripts/hook.js init
# 4. 启动 Dashboard
node scripts/dashboard.js --open
常用命令
快速参考:
node scripts/module-analyzer.js # 日常维护
node scripts/module-analyzer.js --all # 全量处理
node scripts/check-stale.js --stale-only # 过期检测
node scripts/test-fix.js # 修复测试错误
node scripts/dashboard.js --open # Web UI
工作流
新项目
hook.js init- 安装 hooks + 创建配置scan.js- 分析结构generate.js --auto- 生成文档- 开始开发
遗留项目
scan.js- 理解结构hook.js init- 安装配置generate.js --auto- 生成文档module-analyzer.js- 初始审计- 按需调整
代码修改后
修改模块代码后,必须检查并更新对应的 CLAUDE.md 和 AUDIT.md:
-
检查 CLAUDE.md
- 内容需要更新 → 修改文档内容
- 内容仍然准确 →
touch CLAUDE.md更新时间戳
-
检查 AUDIT.md
- 新增安全问题 → 补充到 Issues 列表
- 问题已修复 → 使用
audit-archive.js归档 - 内容仍然准确 →
touch AUDIT.md更新时间戳
-
验证状态
node scripts/check-stale.js <module-path> --stale-only node scripts/audit-status.js <module-path>
重要:即使没有实质性改动,也必须 touch 文件以更新时间戳,否则 stale 检测会持续报告该模块过期。
详细文档
| 文档 | 内容 |
|---|---|
| docs/commands.md | 常用命令详解 |
| docs/coverage.md | 智能覆盖率策略、批量任务发现 |
| docs/dashboard.md | Web UI 仪表盘详解 |
| docs/scripts.md | 所有脚本参考 |
| docs/config.md | 配置文件说明 |
| docs/testing.md | 测试工具链详解 |
| docs/anti-patterns.md | ⚠️ 禁止的错误模式 |
| docs/dag-scheduling.md | DAG 依赖调度(目录层级处理) |
| docs/batch-best-practices.md | 批量任务最佳实践 |
硬约束(MUST READ)
执行以下功能前,必须先读取对应的最佳实践文档:
| 功能 | 必读文档 | 说明 |
|---|---|---|
| test-fix, test-generator | docs/testing.md, docs/anti-patterns.md | 测试修复和生成的最佳实践与禁止模式 |
| audit-fix, code-audit | docs/audit-best-practices.md | 审计修复流程、问题分类、归档规范 |
| module-analyzer --llm | docs/batch-best-practices.md | 批量 LLM 任务的并发设置、checkpoint、rate limit 处理 |
| dependency-graph, impact-analyzer, stale-propagate, test-prioritize | docs/dependency-best-practices.md | 依赖分析、影响范围、stale 传播、测试优先级排序 |
约束级别:
- ✅ MUST READ - 执行功能前必须读取对应文档
- ✅ MUST FOLLOW - 必须遵循文档中的硬约束规则(MUST/MUST NOT)
- ⚠️ 违反后果 - 可能导致数据丢失、测试失败、审计问题遗漏
AI 执行检查清单:
- 识别用户请求的功能类型
- 检查是否有对应的必读文档
- 读取并理解文档中的硬约束规则
- 执行功能时严格遵循约束
- 完成后验证是否符合最佳实践
配置
创建 .stale-config.json:
{
"include": ["js/agents/**"],
"ignore": ["tests/**", "docs/**"],
"features": { "doc": true, "audit": true, "kanban": true, "testAnalysis": true },
"concurrency": 6
}
测试追踪
测试状态与 CLAUDE.md/AUDIT.md 统一追踪:
# 检查测试覆盖状态
node scripts/check-stale.js --type=test --stale-only
# 检查所有类型(doc + audit + test)
node scripts/check-stale.js --type=all --stale-only
# 刷新测试映射
node scripts/test-mapper.js
# 查看模块测试详情
node scripts/test-view.js js/agents/core
测试状态类型:
- missing - 模块无测试覆盖
- stale - 源码已修改但测试未更新
- fresh - 测试与源码同步
与 Codex 集成
更新父目录时注入小子目录上下文:
context=$(node generate.js --prompt-context --module js/agents/ingest)
codex-wrapper - <<EOF
更新 js/agents/ingest/CLAUDE.md
$context
EOF
Kanban API
审计任务自动创建到 Kanban:
export KANBAN_URL=http://127.0.0.1:3007/api/v1
未运行 Kanban 服务时静默跳过。
依赖分析系统
构建文件级依赖图,支持影响分析和 stale 传播。
依赖图构建
# 扫描 js/agents 构建依赖图
node scripts/dependency-graph.js --module js/agents
# 查询单文件依赖
node scripts/dependency-graph.js --check shared/index.js
# JSON 输出
node scripts/dependency-graph.js --json
输出文件:.dep-graph.json
影响分析
分析变更文件的下游影响范围:
# 分析指定文件
node scripts/impact-analyzer.js shared/utils/logger.js core/event-bus.js
# 分析 git 变更
node scripts/impact-analyzer.js --since HEAD~5
node scripts/impact-analyzer.js --staged
# JSON 输出
node scripts/impact-analyzer.js --since HEAD~3 --json
Stale 传播
将 stale 状态沿依赖图向下游传播:
# 自动检测 + 传播
node scripts/stale-propagate.js
# 指定变更文件
node scripts/stale-propagate.js --changed core/event-bus.js
# 包含测试重跑列表
node scripts/stale-propagate.js --changed core/event-bus.js --tests
# 调整传播深度(默认 2)
node scripts/stale-propagate.js --depth 3
输出示例:
Direct stale: 2 files
Propagated stale: 45 files (L1: 12, L2: 33)
Tests to re-run: 40 files
典型工作流
# 1. 构建/更新依赖图
node scripts/dependency-graph.js --module js/agents
# 2. 代码修改后,分析影响
node scripts/impact-analyzer.js --staged
# 3. 检查 stale 传播
node scripts/stale-propagate.js --tests
# 4. 运行受影响的测试
node scripts/test-affected.js --staged
智能测试修复(100+ 错误场景)
当有大量测试失败时,智能排序修复顺序:
# 分析失败测试的优先级
node scripts/test-prioritize.js --from-file test-results.json
# 输出:
# Phase 1 - Root causes: shared/utils/logger.js (261 依赖)
# Phase 2 - Independent: 可并行修复的批次
# Phase 3 - Leaf nodes: 最后修复
修复策略:
- 先修 root cause — 被依赖最多的文件,一个修复解决多个错误
- 并行修独立集 — 无依赖关系的文件可以 60 开并发
- 最后修叶子节点 — 依赖链末端的文件
# 按优先级运行测试
node scripts/test-affected.js --staged --prioritized
验收门禁
提交前验证 git 变更,确保代码质量。
验证流程
- 扫描变更 — 获取 git diff 中的 JS/TS 文件
- DAG 分组 — 按依赖图分组,相关文件一起验证
- 并发验证 — 四维检查:lint、测试覆盖、功能测试、安全审计
- 结果汇总 — 标记通过/失败文件
- 选择性提交 — 仅提交通过验证的文件
使用方式
# 预览变更文件分组
node scripts/acceptance-gate.js --dry-run
# 运行验证
node scripts/acceptance-gate.js
# 验证并自动提交通过的文件
node scripts/acceptance-gate.js --commit
# 跳过部分检查
node scripts/acceptance-gate.js --skip-lint --skip-security
# 调整并发
node scripts/acceptance-gate.js --concurrency=8
安全约束
- 禁止
git checkout、git reset等危险操作 - 仅提交通过验证的文件
- 失败文件只标记,不自动修改
⚠️ 禁止的错误模式
测试修复和代码生成时必须避免的反模式。