开发哲学:最好的代码就是没有代码。次好的代码则是胶水代码。 本项目不造轮子,不重写依赖,只做编排、组合与适配。所有核心能力来自外部依赖的真实实现,代码只负责把它们粘在一起。
-
中文环境:界面文字、注释、报错提示必须使用中文。
-
极简主义:代码力求简洁,严禁过度设计,任务完成后必须清理无用代码和调试信息。优先直接复用成熟依赖的完整实现,仅编写最小必要的编排与适配代码。若依赖库已提供功能,禁止自行重写同类逻辑。
-
测试同步:所有功能变动或 Bug 修复,必须同步更新
test-cases.md并补齐对应的自动化测试代码。 -
依赖真实性:
-
所有被调用的能力必须来自依赖库的真实实现,禁止 Mock / Stub / Demo 替代、空逻辑占位
-
禁止"只导入不用"的伪集成,禁止路径遮蔽或重名模块导致加载非目标实现
-
禁止对依赖模块做功能裁剪、逻辑重写或降级封装
-
导入路径必须指向真实仓库源码,禁止复制代码到本项目后二次修改
-
-
完成即更新:任务结束时,将变更记录写入
changelog/YYYY-MM-DD.md(如changelog/2026-04-17.md),同一天多次修改追加到同一文件。(时间为北京时间) -
修改日志格式:
-
格式:【HH:mm】+【简述】+【修改文件】。时间为北京时间。
-
文件位置:
changelog/YYYY-MM-DD.md,每次新增条目加在文件末尾。
-
-
master 整合:合并至
master后,将changelog/下的记录整合进pd.md,新条目加在最顶部,然后删除已整合的 changelog 文件。 -
状态对齐:脚本说明、API 路径等必须与代码实际状态 100% 同步。
-
规范提交:使用约定式提交格式(
feat:,fix:,docs:,test:,refactor:)。 -
合并规则:合并至
master分支或执行强制推送(Force Push),必须经用户确认后方可执行。合并至 worktree 基础分支同样需用户确认。 -
交付流程:完成本地
commit后,只需告知用户分支名称,由用户进行最终审核与合并。
-
决策确认:凡涉及技术路径选择、方案设计、核心细节改动,必须先提问确认,获批后方可动手。凡涉及是否自行实现 vs 复用依赖的选择,同样必须先确认。
-
拒绝废话:输出内容仅限必要的变更清单、待办项或指令。禁止提供实现步骤说明、长篇代码解释或文件路径分析。
-
回复字数:回复必须简短、直接、中文。禁止生成任何长篇大论的文档或逻辑论证。
-
准准确性:保持抽象描述,除非我明确要求细节,否则禁止主动展示具体实现逻辑。
-
依赖标注:输出中必须标注哪些功能来自外部依赖,禁止生成依赖库内部实现代码。依赖库视为权威且不可修改的黑箱。
-
禁止
any:所有代码禁止使用any类型,用unknown+ 类型收窄替代。 -
禁止类型断言绕过:不得使用
as any或as unknown as X绕过类型检查。 -
严格模式:tsconfig 已开启
strict: true,不得降级。
-
KISS:实现需求的最窄解释,不在未明确要求时合并功能。
-
性能优先:避免不必要的渲染和重计算,列表使用虚拟化或分页。
-
消除魔法值:禁止硬编码数字和字符串,使用常量或枚举。
-
数据不可变:状态更新使用不可变方式,不直接修改对象/数组。
-
项目职责边界:本项目仅承担业务流程编排(Orchestration)、模块组合与调度、参数配置与调用组织、输入输出适配(不改变核心语义)。禁止重复实现算法、重写已有数据结构、将复杂逻辑从依赖库中拆出来自己写。
-
前端:React + Vite + Zustand + Tiptap,组件按功能分目录(notes/labels/layout/common)
-
后端:Express + SQLite(WAL 模式),按 routes → services → db 分层
-
共享类型:
shared/types.ts为唯一类型定义源,前后端共用 -
路径别名:前端使用
@shared/*引用共享模块 -
API 代理:开发环境 Vite 将
/api代理至localhost:3001