# Aide 项目文档管理

你正在执行 Aide 项目文档管理流程。创建和维护面向 LLM 的**完整深度**项目文档。

## 核心原则

> **完全深度探索**：不考虑过度设计、开销、效率问题。对项目中的每一个文件、每一个目录（包括空目录）都要完全覆盖，不允许遗漏。

## 前置准备

**首先触发 `aide` skill 学习 aide 命令的使用方法。**

---

## 开始

### 检查文档配置

```bash
aide config get docs.path
aide config get docs.block_plan_path
```

如果未配置，使用默认值：
- 文档目录：`.aide/project-docs`
- 区块计划：`.aide/project-docs/block-plan.md`

### 检查文档状态

检查文档目录是否存在及其内容：
- 不存在或为空 → 进入**创建流程**
- 已存在 → 进入**更新流程**

---

## 创建流程

### 阶段 1：完整目录扫描

**此阶段必须完整执行，不允许跳过任何目录或文件。**

#### 1.1 读取忽略规则

读取项目根目录的 `.gitignore` 文件，解析忽略规则。

#### 1.2 递归遍历所有目录

使用 `find` 或类似命令遍历项目所有目录和文件：

```bash
# 获取完整目录树（排除 .git）
find . -not -path './.git/*' -not -name '.git' | sort
```

**必须记录的信息**：
- 每个目录（包括空目录）
- 每个文件的路径
- 文件大小
- 文件类型（源码/配置/文档/二进制/其他）

#### 1.3 生成目录树结构

生成类似 `tree` 命令输出的完整目录结构，对于 .gitignore 中的项目标注 `[ignored]`：

**目录树必须完整**：
- 根目录下的**所有**子目录都必须列出（包括非代码目录如 docs/、assets/、discuss/ 等）
- 每个目录至少有简短说明
- 被忽略的目录也要列出并标注 `[ignored]`

```
project/
├── src/                     源码目录
│   ├── main.py
│   ├── utils/
│   │   ├── helper.py
│   │   └── config.py
│   └── __init__.py
├── tests/                   测试目录
│   └── test_main.py
├── docs/                    项目文档目录
│   ├── design.md
│   └── api.md
├── discuss/                 讨论记录目录
├── assets/                  [空目录] 资源文件
├── cache/                   [ignored]
├── node_modules/            [ignored]
├── .gitignore
├── README.md
└── requirements.txt
```

#### 1.4 统计项目信息

```
- 总目录数：xx（含 xx 个空目录）
- 总文件数：xx
- 源码文件：xx
- 被忽略项：xx
- 代码行数：约 xxx 行
```

### 阶段 2：初步区块划分

根据以下规则划分区块：

1. **按目录结构**：每个主要目录可作为一个区块
2. **按功能模块**：相关功能的文件归为一个区块
3. **包含空目录**：空目录也要归入相应区块
4. **低耦合**：区块间依赖关系尽量简单
5. **完整覆盖**：根目录下每个非忽略的子目录都必须归入某个区块

> **强制规则**：非代码目录（如 `docs/`、`assets/`、`discuss/` 等）同样必须作为区块进行覆盖，不能因为"非核心代码"而跳过。

生成初步区块计划：

```markdown
# 区块计划

## 项目概况
- 项目名称：xxx
- 主要语言：xxx
- 文件总数：xxx（含 xx 被忽略）
- 空目录数：xxx
- 代码行数：xxx

## 完整目录树（简化版）
[前两层目录结构]

## 区块划分

### 区块 1：[名称]
- 路径：xxx/
- 文件数：xx
- 空目录：xx
- 状态：待处理

### 区块 2：[名称]
...

### 区块 N：项目文档与资源
- 路径：docs/, assets/, discuss/, statements/
- 文件数：xx
- 空目录：xx
- 状态：待处理
- 说明：非代码资源文件（文档、讨论记录、声明等）

> 注：即使是非代码目录，也必须作为区块进行完整深度探索

## 进度追踪
- [ ] 区块 1
- [ ] 区块 2
...
```

### 阶段 3：区块验证

对每个区块进行浅层探索：
1. 确认区块包含的所有文件和目录
2. 验证区块划分是否合理
3. 调整区块边界（如需要）
4. 确保没有遗漏任何文件或目录

**强制完整性检查**：

```bash
# 列出根目录下所有子目录（排除 .git）
ls -d */ 2>/dev/null | sort
```

对照检查结果，确认：
- 每个子目录都出现在某个区块中，或被标记为 `[ignored]`
- 如有未归属的目录，必须补充区块或归入现有区块
- 运行以下验证：`所有区块覆盖的目录 ∪ 被忽略的目录 = 根目录下所有子目录`

### 阶段 4：逐区块完全深度探索

**对每个区块，必须完整阅读该区块内的每一个文件，从头到尾，不允许遗漏任何一行。**

#### 4.1 文件处理规则

| 文件类型 | 处理方式 |
|----------|----------|
| **源码文件** | 完整阅读，分析逻辑和结构，提取核心信息 |
| **配置文件** | 完整阅读，记录关键配置项 |
| **文档文件** | 完整阅读，提取主要内容 |
| **二进制文件** | 根据文件名、大小、关联文件信息进行上下文推断概括 |
| **被忽略文件** | 只记录文件名/目录名，标注 `[ignored]`，不分析内容 |
| **空目录** | 记录目录名，标注 `[空目录]`，根据名称推断用途 |

#### 4.2 每个区块需要生成

1. **区块内完整目录树**：类似 tree 输出，包含该区块内所有文件和子目录
2. **文件清单及概括**：每个文件一行概括说明
3. **核心组件说明**：重要类/函数/模块的详细说明
4. **依赖关系**：与其他区块的依赖

### 阶段 5：生成总导览

整合所有区块信息，生成总导览文档。

**总导览使用简化版目录结构**（前两层），详细结构在各区块文档中展示。

---

## 更新流程

### 阶段 1：读取区块计划

读取现有的区块计划文档，了解当前文档结构和完整目录树。

### 阶段 2：重新扫描目录

1. 重新执行完整目录扫描
2. 对比当前目录结构与文档中记录的结构
3. 识别新增、删除、移动的文件和目录

### 阶段 3：分区块验证

对每个区块：
1. **完全重读**有变化的文件（从头到尾）
2. 识别差异（新增、删除、修改）
3. 更新区块内目录树

### 阶段 4：增量更新

1. 更新有变化的区块文档
2. 更新区块内完整目录树
3. 更新总导览的简化目录树（如有结构变化）
4. 更新区块计划的时间戳

---

## 文档格式规范

### 总导览文档格式

```markdown
# [项目名称] 项目导览

> 本文档面向 LLM，用于快速了解项目结构和脉络。
> 最后更新：YYYY-MM-DD

## 项目简介

[1-2 段简要描述项目目的和核心功能]

## 技术栈

- 语言：xxx
- 框架：xxx
- 主要依赖：xxx

## 项目结构（简化版）

[展示前两层目录结构，**必须包含所有顶层子目录**，包含空目录和忽略项标注]

```
project/
├── src/                     源码目录
├── tests/                   测试目录
├── docs/                    项目文档目录
├── discuss/                 讨论记录目录
├── assets/                  [空目录] 资源文件
├── cache/                   [ignored]
├── .gitignore
└── README.md
```

> 详细结构见各区块文档
> **注意**：此处必须列出根目录下的所有子目录，不能遗漏非代码目录

## 架构概述

[简要描述项目架构，可包含简单的 ASCII 图]

## 区块索引

| 区块 | 路径 | 文件数 | 说明 |
|------|------|--------|------|
| [区块名](./blocks/xxx.md) | xxx/ | xx | 简要说明 |
| ... | ... | ... | ... |

## 快速导航

- 想了解 xxx → 查看 [区块名](./blocks/xxx.md)
- 想修改 xxx → 查看 [区块名](./blocks/xxx.md)

## 统计信息

- 总目录数：xx（含 xx 个空目录）
- 总文件数：xx
- 被忽略项：xx
- 代码行数：约 xxx 行
```

### 子区块文档格式

```markdown
# [区块名称]

> 路径：xxx/
> 最后更新：YYYY-MM-DD

## 概述

[区块的职责和作用]

## 目录结构

[区块内完整目录树，类似 tree 输出]

```
xxx/
├── module1/
│   ├── __init__.py
│   ├── core.py
│   └── utils.py
├── module2/
│   ├── __init__.py
│   └── handler.py
├── empty_dir/               [空目录]
└── README.md
```

## 文件清单

| 文件 | 类型 | 说明 |
|------|------|------|
| module1/__init__.py | 源码 | 模块初始化 |
| module1/core.py | 源码 | 核心逻辑实现 |
| module1/utils.py | 源码 | 工具函数 |
| empty_dir/ | 目录 | [空目录] 用途推断 |
| data.bin | 二进制 | [根据上下文推断的说明] |
| ... | ... | ... |

## 核心组件

### [组件/类/函数名]

- **职责**：xxx
- **位置**：`文件:行号`
- **关键方法**：
  - `method1()` - 说明
  - `method2()` - 说明

## 接口说明

[对外暴露的接口、API、命令等]

## 依赖关系

- 依赖：[其他区块名]
- 被依赖：[其他区块名]

## 注意事项

[开发时需要注意的点]
```

---

## 多对话续接

如果项目过大，可能需要多次对话完成：

1. 每次开始时读取区块计划
2. 找到未完成的区块
3. **大小控制**：单个区块不超过 5000 行代码
4. **完全深度探索**该区块（每个文件从头到尾）
5. 生成区块内完整目录树
6. 更新区块计划的进度

---

## 完成

文档创建/更新完成后：

1. 确认所有区块已处理
2. 确认每个区块都有完整目录树
3. 确认总导览包含简化版目录结构
4. 确认没有遗漏任何文件或目录（包括空目录）
5. **运行目录完整性最终检查**：
   ```bash
   # 列出根目录下所有子目录
   ls -d */ 2>/dev/null | sort
   ```
   逐一核对每个子目录，确认都出现在项目文档中（区块覆盖或标记 [ignored]）
6. 向用户汇报完成情况

```
项目文档已更新：
- 总导览：.aide/project-docs/README.md
- 区块数：N 个
- 总目录数：xx（含 xx 个空目录）
- 总文件数：xx
- 被忽略项：xx
- 本次更新：[新增/更新的区块列表]
```
