本文件回答:文档与代码的组织规则、文档与代码的主从关系、以及本项目的硬性禁令清单。 依赖:无
本文件是给 opencode + DeepSeek 生成代码时的护栏。每次生成跑偏,就把对应的禁令追加到本文件,不另起新文件。
文档按“约束谁”划分目录,不按“代码在哪”划分:
docs/backend/:只约束后端的文档docs/frontend/:只约束前端的文档(含 TUI / Neovim 客户端)docs/ 根:前后端共享的契约,或项目级文档当前文件归属:
docs/overview.md — 项目定位、场景、非目标(项目级)docs/architecture.md — 整体架构、目录结构、部署形态(项目级)docs/conventions.md — 本文件(项目级)docs/api.md — HTTP 接口契约,前后端共享,固定放根目录docs/backend/data-model.md — 数据库 schemadocs/backend/auth.md — 鉴权与权限模型docs/backend/audit.md — 审计日志docs/backend/llm-extension.md — LLM 抽象层预留docs/frontend/frontend.md — Web 前端页面与交互docs/frontend/clients.md — TUI 与 Neovim 插件新增文档时,先判断它约束谁,再决定放哪个目录。
docs/ 是唯一事实来源。所有代码由 opencode + DeepSeek 依据文档生成,不以代码反推文档。docs/ 生成代码,不得写入或修改 docs/ 下任何文件。文档的增删改一律由项目维护者手动完成。每个文档文件开头固定两行:
本文件回答:<一句话,这个问题只有本文件回答> 依赖:<前置文件,没有就写“无”>
Haven/ ├── docs/ # 唯一事实来源 ├── backend/ # Go 后端,代码只写在这里 ├── frontend/ # Vue 前端,代码只写在这里 ├── deploy/ # 部署脚本(systemd unit、构建脚本等),如需要 └── README.md
backend/ 下,前端代码只写在 frontend/ 下,不得交叉。docs/ 根下项目级文件 + docs/backend/ + docs/api.md。docs/ 根下项目级文件 + docs/frontend/ + docs/api.md。本清单只锁“不做什么”,不锁“具体怎么做”。具体实现方式以 architecture.md 为准。
以下事项本项目明确不做。opencode 生成代码时不得自行添加,发现即视为生成错误。
visibility 参数,新建笔记一律为 private;公开走独立的 publish 动作。visibility 的默认值在数据库层固化(DEFAULT 'private' + NOT NULL),不依赖应用层传值。read / read_write 两档 scope,不做细粒度权限。LLMProvider 接口,不实现任何 LLM 调用。docs/ 下任何文件,也不得自行向禁令清单追加条目。