docs: migrate project memory governance

This commit is contained in:
inman
2026-08-30 15:31:12 +08:00
parent 7b5d855b09
commit e7aa58a203
37 changed files with 942 additions and 34 deletions

View File

@@ -1,29 +1,41 @@
# LTJT 项目文件治理规则
本文件约束所有后续维护会话。用户指令优先;在没有新的明确指令时,必须遵守以下位置、同步和归档规则。
本文件约束所有后续维护会话。用户指令优先;在没有新的明确指令时,必须遵守以下位置、所有权、同步和归档规则。
## 开始工作前
1. 依次读取根目录 `README.md``task_plan.md``findings.md``progress.md`
2. 运行 `git status --short`,保留所有既有未提交改动;禁止 `git reset --hard``git clean` 或批量回退
3. 通过 `agent设计规范/business-adaptation-registry.md` 定位业务再读取对应业务页、Skill、Schema、mapping 和实现代码
4. `archive/` 只供追溯,不能反向覆盖当前业务规则;若历史文件与活动源码冲突,以活动源码及当前契约为准
1. 运行 `git status --short`,保留所有既有未提交改动;禁止 `git reset --hard``git clean` 或批量回退
2. 加载 `maintain-project-docs` Skill先运行其 Concurrent Task Gate。任何代码或项目文档编辑前`task_context.py start` 必须成功,且 `status --json` 中的 task ID、mode、绝对 worktree、branch 与当前任务完全一致
3. 所有权门禁通过后,按 `.project-docs/05-agent-entry/read-before-planning.md` 的顺序加载当前任务和 canonical 项目记忆Feature 与 Integration 写入边界以该 Skill 和 `.project-docs/90-maintenance/doc-update-policy.md` 为准
4. 通过 `agent设计规范/business-adaptation-registry.md` 定位业务再读取对应业务页、Skill、Schema、mapping 和实现代码
5. `archive/` 只供追溯,不能反向覆盖当前业务规则;若历史文件与活动源码冲突,以活动源码及当前契约为准。
## 并发与子智能体
- 原则上不创建子智能体;确有必要时必须先取得用户明确同意。
- 一个活动任务只拥有一个 worktree不得在已被其他任务占用或归属不明的 dirty worktree 中继续。
- 不得用 Markdown 或口头约定模拟任务所有权;只能使用 `maintain-project-docs` 自带的 `task_context.py`
- 未知改动不得自动 stash、reset、移动、删除或认领采用 `--adopt-existing` 必须有用户对已知改动的明确接管授权。
## 根目录边界
允许的长期文件只有:
允许的长期文件和目录只有:
- 项目入口与约束:`README.md``AGENTS.md`
- Planning with Files`task_plan.md``findings.md``progress.md`
- 项目记忆:`.project-docs/`
- 构建与部署配置:`package.json`、锁文件、TypeScript、Docker、Compose、Git/Docker ignore 和环境示例;
- 下表登记的活动源码、发布、报告、隔离与历史目录;
- 本地秘密配置 `.env` 可以存在,但必须被 Git 忽略,不得读取、复制、归档或输出其内容。
旧根目录 `task_plan.md``findings.md``progress.md` 已退役并冻结在 `archive/project-history/2026-08-28/`;不得恢复为活动入口或与 `.project-docs/` 并行维护。
禁止在根目录新增临时说明、交接副本、测试输出、ZIP、DOCX、截图、日志、浏览器状态或一次性脚本。新增内容必须进入下表规定的位置。
## 唯一目录职责
| 位置 | 唯一职责 | 禁止内容 |
|---|---|---|
| `.project-docs/` | 任务作用域记录、canonical 项目记忆、证据索引、反思、承诺和文档维护状态 | 运行日志、秘密、业务附件、绕过所有权门禁的共享进度 |
| `agent设计规范/` | Agent Prompt、五个 Skill、业务模板、业务入口与稳定测试夹具的可编辑源 | 发布包、运行日志、历史版本副本 |
| `schemas/` | 当前解析态、执行态和 ERP 表单 Schema | 历史 Schema、运行结果 |
| `mappings/` | 当前 ERP 字段与生命周期 mapping | 探针输出、旧版本副本 |
@@ -39,13 +51,14 @@
| `quarantine/` | 无法安全解析的外部输入隔离边界 | 当前源码或已信任 fixture |
| `archive/` | 日期化、只读、可恢复的历史实现、证据、规划和发布物 | 当前入口或需要运行时读取的文件 |
## Planning with Files
## Maintain Project Docs
- `task_plan.md` 始终保留当前任务目标、阶段、决策和错误,建议不超过 16 KiB
- `findings.md` 只保留仍影响当前设计和执行的事实,建议不超过 32 KiB
- `progress.md` 只保留当前任务和最近有效里程碑,建议不超过 32 KiB
- 超过边界时,先把原文件完整冻结到 `archive/project-history/<日期>/`,再语义压缩根文件并链接归档;禁止直接丢弃历史
- 任务完成后不删除三文件。将计划状态收敛为完成,并保留足够信息让下一会话继续
- `.project-docs/30-worklog/tasks/<task_id>.md` 是任务局部范围、约束、结果、验证、后续项和 Promotion Candidates 的唯一记录
- Feature 模式只写当前 task ID 所属记录和允许的 task-prefixed supporting records不得更新 `current-state.md`、共享索引、accepted ADR、canonical 架构、业务规则或共享聚合
- Integration 模式必须独占 worktree 和集成锁,才能把已接受事实写入 canonical 项目记忆;冲突的产品行为、架构方向或真相源必须由用户决定
- `current-state.md` 是上次集成快照,不代表其他并行任务的实时状态;其他任务只通过其 task record 做只读范围评估
- 仓库变更任务完成前必须更新任务记录、运行 `check_doc_drift.py --task-id <task_id>`,再用 `task_context.py complete` 标记 `ready_for_integration`
- 历史 Planning with Files 只供追溯;不得从归档复制回活动项目记忆。
## 单一源与同步矩阵
@@ -59,14 +72,21 @@
## 历史与生成物处理
- 旧版本、旧交接、旧发布说明和完成的计划按日期移动到相应 `archive/` 分类,并更新该日期 README。
- 旧版本、旧交接、旧发布说明和退役文档按日期移动到相应 `archive/` 分类,并更新该日期 README。
- 可重建编译产物、完全相同的别名包、`.DS_Store`、日志和临时输出不进入历史上下文;确认无唯一信息后清理。
- 不把桌面作为当前源或发布源。桌面只允许用户主动需要的临时交付副本,项目内 `dist/` 才是当前交付位置。
- 移动前必须做引用扫描;移动后必须修复活动链接。归档内部允许保留原始历史措辞,但归档 README 必须声明其非当前规则。
## 验证
文件或目录调整后至少运行:
项目文档或仓库文件调整后,先按已加载的 `maintain-project-docs` Skill 运行:
```text
scripts/check_project_docs.py
scripts/check_doc_drift.py --task-id <task_id>
```
再至少运行:
```bash
node --run check:repo