diff --git a/.blueprint/CONVENTIONS.md b/.blueprint/CONVENTIONS.md index c919d9f..847c41d 100644 --- a/.blueprint/CONVENTIONS.md +++ b/.blueprint/CONVENTIONS.md @@ -1,6 +1,6 @@ --- -version: 1.10.0 -updated: 2026-07-03 +version: 1.11.0 +updated: 2026-07-15 source: dev-manager-tauri --- @@ -136,6 +136,11 @@ acceptance 是 agent 自验的唯一判断依据,必须是**可执行断言** 最小结构:`[载体] 调用/运行什么(参数) → 断言什么`。 +**含 UI 操作路径时必须分层**: +- `agent_verify:` — 机器可断言(函数返回值、HTTP 状态码、数据库记录);stop hook / CI 只验此段 +- `human_verify:` — 需人眼判断(视觉效果、拖拽手势、动画);30 秒浏览器终验 +纯命令行 / API 任务可省略 `human_verify:`;UI 拖拽 / 视觉类必须拆,否则 stop hook 无法收敛。 + 含 Rust 业务逻辑的 M/L 卡,acceptance 还须包含(详见 Rust 代码可测试性规范): - `cargo test 通过` + 依赖注入写法确认 @@ -304,6 +309,8 @@ Claude 在每次对话中应遵循以下流程: | "开始做 XX" | 模块 status → in_progress | | "为什么选这个方案" | 记录到模块的 `## 决策记录` | +> 开始写代码前,先判断改动类型:**Bug Fix**(意外偏差,直接执行)还是 **Feature**(新增能力/主动改变行为,必须先输出确认卡等触发词)。完整触发规则见 AGENTS.md「需求对齐协议」章节。 + ### 阶段 3:实现功能 — 两阶段执行锁 任务卡执行遵循**两阶段提交**:开始写第一行代码前加锁(信息1),全部完成后解锁(信息2)。只有信息1没有信息2,说明任务被中断。 @@ -373,7 +380,7 @@ Claude 应关注这些信号来决定是否更新蓝图: > B) 现在拉清单,走 /architect 重新规划 > C) 继续执行,我在 session 结束前汇总成任务卡 -**Session 结束汇总**:任何有代码改动但无预建任务卡的会话,结束前 Claude 应输出: +**Session 结束汇总**(仅适用于漂移检测触发后用户主动选择 C 选项的场景,**不得作为跳过确认卡的通道**): > 📋 本次会话实际改动:[文件列表 + 简述] > 是否整理为蓝图任务卡? @@ -638,6 +645,8 @@ cp -r .claude/skills/splitter ~/.claude/skills/ ## Rust 代码可测试性规范 +> ⚠️ **本节仅适用于 Tauri / Rust 项目**,非 Tauri 项目跳过本节全部内容。 + > 本规范仅适用于**新增** Rust 函数,存量代码不强制回填。 ### 强制规则 diff --git a/src-tauri/resources/onboarding/lefthook.yml.tmpl b/src-tauri/resources/onboarding/lefthook.yml.tmpl index 4f9b7d3..b292980 100644 --- a/src-tauri/resources/onboarding/lefthook.yml.tmpl +++ b/src-tauri/resources/onboarding/lefthook.yml.tmpl @@ -9,8 +9,9 @@ pre-commit: typecheck: glob: "*.{ts,tsx}" run: pnpm typecheck - # ⚠️ 如果项目有 API / 后端层,必须在此补对应的 typecheck——否则后端类型错误不会被拦截。 - # 取消注释并按实际填写(留多余示例行删掉即可): + # 🚨 【必填项】项目有 API / 后端层时,必须取消注释并按实际路径配置—— + # 否则后端类型错误不会被 pre-commit 拦截(前端 typecheck 只覆盖 src/ 层)。 + # 按实际填写一行,其余示例行可删掉: # api-typecheck: # glob: "api/**/*.{ts,tsx}" # run: pnpm --filter api typecheck # monorepo workspace