主题
rvh/docs/plans/ — 活跃计划区(移动端)
这里放还没做完的一次性 plan,以及少数常驻文件。做完了就移进 archive/(归档节律写在那边)。
建于 2026-08-30。此前这个目录没有 README —— 根侧
docs/plans/从 2026-08-14 起就有一套治理约定(状态行纪律 / 归档节律 / 红线归属),rvh 侧一条都没有落。 直接后果是可量的:根侧一次性 plan 13/13 全有状态行,本目录 11/22 没有, 归档目录到 2026-08-30 才建(此前 29 份 plan 全堆在活跃区,做完的和没做的混在一起)。 本文件把根侧那套照搬过来 —— 约定同源,落点各自。
先看哪份
| 你想知道 | 去处 |
|---|---|
| 接下来做什么、零散待办 | backlog.md |
| 为什么否掉了某个方案 | backlog-archive.md(保留裁决推理,CHANGELOG 不记这个) |
| 做过什么、怎么做的(移动端 as-built) | ../../CHANGELOG.md |
| 做过什么(桌面端 / admin / supabase / 工程) | 仓根 CHANGELOG.md —— as-built 每端各一份,别只查一份 |
| 某功能为什么这么设计 | 先 grep archive/ |
| 跨端交接(对端改了什么、本端要跟什么) | 仓根 docs/cross-end/README.md 的编号总表(唯一一份,2026-08-29 T4-1 起两侧已归并) |
常驻文件(永不归档,持续追加):backlog.md · backlog-archive.md · quick-triage-roadmap.md(roadmap 型)。其余都是一次性的,有终点。
🔒 每份 plan 必须有状态行
紧跟标题写,格式随意但必须能一眼判断做没做完:
markdown
> 创建:2026-08-30 · 状态:**✅ Task A-D 完成(2026-08-30,schema v58)**;E 转 backlog没有状态行的 plan 无法分诊 —— 不读完全文加对代码,谁也不知道它还算不算待办。 本目录 2026-08-30 实测 11/22 一次性 plan 没有状态行,是归档节律断裂的先兆。
⚠️ 状态行只在创建时写一次、之后不维护,比没有更坏。 本仓两侧各栽过一次: archive/rvh-debug-mcp-plan.md 状态行写「未启动」而它早已建成运行; 根侧 docs/plans/rename-plan.md 写「仓改名待办」而同一份文件的勾选框记着已完成。
判完成看代码,不看文档自述:Dart 侧的硬证据是 lib/shared/data/database/app_database.dart 的 _schemaVersion、目录/文件是否存在、 rvh/CHANGELOG.md 的 as-built 段。
🚫 红线不许只写在这里
一次性 plan 会归档,红线不会 —— 一旦归档,那条约束就从活跃视野消失,而代码还在依赖它。 发现新不变量时先写进稳定归属,plan 里只留指针:
| 不变量的作用域 | 稳定归属 |
|---|---|
| 双端契约(两端同文的规则本体) | 仓根 CLAUDE.md §4 —— RB #5i / #6d / #9 / #10 |
| 本端 sync 协议的落地形状与守卫 | ../../lib/features/sync/CLAUDE.md(RVH 自己那套 #5x/#6x 编号) |
| Flutter / Clean Architecture / Material 3 约定 | ../../CLAUDE.md 与 ../ui-guidelines/README.md |
🔒 跨仓引用一律带仓名(写「RB #6d」或「RVH #6g」,不写裸 #6d)—— 6x 段有同号不同义的(RVH #6d = last_opened_at,RB #6d = 墓碑 synced_at)。
🔀 跨端条目落点 = 「谁执行谁持有」
正文只存一份,落在将来真正动手那一端的 backlog,另一端只留指针;两端都要动的落根侧。 规则本体写在 backlog.md 头部,别在这里记第二遍。
会话边界
改本目录下的 .md 不需要 Flutter,在 RB 会话做是安全的(验收是根侧脚本 check-doc-links / check-claude-md-paths)。 一旦要读 Dart 代码现状才能判(例如给 plan 分诊、确认某 Task 落没落地), 按仓根 CLAUDE.md §9 的会话隔离规则回到 RVH 会话 —— 判据是要不要动另一套工具链,不是目录。