Compare commits
3 Commits
0516de5304
...
d15d3895d7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d15d3895d7 | ||
|
|
f0e5b70025 | ||
|
|
b01f1d1d81 |
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
version: 1.11.0
|
version: 1.12.0
|
||||||
updated: 2026-07-15
|
updated: 2026-07-18
|
||||||
source: dev-manager-tauri
|
source: dev-manager-tauri
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -311,6 +311,17 @@ Claude 在每次对话中应遵循以下流程:
|
|||||||
|
|
||||||
> 开始写代码前,先判断改动类型:**Bug Fix**(意外偏差,直接执行)还是 **Feature**(新增能力/主动改变行为,必须先输出确认卡等触发词)。完整触发规则见 AGENTS.md「需求对齐协议」章节。
|
> 开始写代码前,先判断改动类型:**Bug Fix**(意外偏差,直接执行)还是 **Feature**(新增能力/主动改变行为,必须先输出确认卡等触发词)。完整触发规则见 AGENTS.md「需求对齐协议」章节。
|
||||||
|
|
||||||
|
#### 动工前辩证收缩(M/L 卡必做,S 卡可跳过)
|
||||||
|
|
||||||
|
任务卡拆好后、加锁动工前,对每张 M/L 卡做一轮**多角度辩证**,典型追问:
|
||||||
|
|
||||||
|
- **该不该做**:这张卡解决的问题是真实的吗?做了会不会伤及已有体验(如自动触发打断用户节奏)?→ 可能直接否决
|
||||||
|
- **载体对不对**:实现层选对了吗(hook vs 数据层、前端 vs 后端、轮询 vs 事件)?→ 可能翻转载体
|
||||||
|
- **设计有没有洞**:边界条件、并发、旧数据兼容有没有漏?→ 补进任务卡
|
||||||
|
|
||||||
|
辩证结论写回任务卡(否决的标 abandoned 并记原因)。
|
||||||
|
实证(2026-07-15 炼境自身):3 张初稿卡辩证后 1 张否决、1 张载体翻转、1 张补两处设计缺陷——直做会错 2/3;实施后 U3/B4 零返工。
|
||||||
|
|
||||||
### 阶段 3:实现功能 — 两阶段执行锁
|
### 阶段 3:实现功能 — 两阶段执行锁
|
||||||
|
|
||||||
任务卡执行遵循**两阶段提交**:开始写第一行代码前加锁(信息1),全部完成后解锁(信息2)。只有信息1没有信息2,说明任务被中断。
|
任务卡执行遵循**两阶段提交**:开始写第一行代码前加锁(信息1),全部完成后解锁(信息2)。只有信息1没有信息2,说明任务被中断。
|
||||||
|
|||||||
@ -48,6 +48,27 @@
|
|||||||
|
|
||||||
**落地物**(最小版,执行成本趋零):AGENTS.md / 接入包模板 / agents-meta-rules 增设「自验报告纪律」三条;用户侧两个习惯(先看「没验什么」;意外感或外部契约变更时深查)。刻意不做:新工具、强制 hook、报告模板系统——坑驱动增量,人肉版跑出疼点后再在本模块机制化。
|
**落地物**(最小版,执行成本趋零):AGENTS.md / 接入包模板 / agents-meta-rules 增设「自验报告纪律」三条;用户侧两个习惯(先看「没验什么」;意外感或外部契约变更时深查)。刻意不做:新工具、强制 hook、报告模板系统——坑驱动增量,人肉版跑出疼点后再在本模块机制化。
|
||||||
|
|
||||||
|
## 使者回传处置台账(2026-07-18 消化,共 23 条)
|
||||||
|
|
||||||
|
### 已落地(本轮 3 项)
|
||||||
|
- **/ship 三处模板修正**(`~/.claude/commands/ship.md`,全局命令即分发源):① blueprint 尾 commit 铁律改为「每轮 /ship 的最后一个 PR 末位 commit」(多 PR 场景 manifest 单文件不可能每 PR 都带);② 规模闸补两个不可拆例外(单一功能域强耦合 / 全新业务线初版)→ 警告放行不阻塞;③ MCP 连接错误注明可原地重试 2~3 次(偶发抖动非业务失败)
|
||||||
|
- **envoy.md 分类硬门槛**(接入包全托管文件):Step 3 前置追问「任何有经验的工程师是否会提前想到?」——常识性知识与过窄 corner case 一律留本项目,堵住 2 例误回传的根因
|
||||||
|
- **CONVENTIONS v1.12.0**:飞轮工作流阶段 2 末新增「动工前辩证收缩」(M/L 卡必做),实证返工率对照写入
|
||||||
|
|
||||||
|
### 此前会话已落地(11 条,本轮核实关闭)
|
||||||
|
MANAGED 块警示(5b0b068)、Bug Fix/Feature 分类 + S 级轻量卡 + 汇总补录限定语(67bdacb AGENTS v1.5.0)、蓝图机器门控(f04eb6e blueprint-gate 双层,回应 07-09「文档约束无机器门控」假设)、lefthook API typecheck 必填项 + CONVENTIONS scope 前置提示(be2f695 v1.11.0)、Playwright 版本锁死(AGENTS tmpl)、agent_verify/human_verify 分层(AGENTS + CONVENTIONS)、/ship 阶段八 rebase 前 stash 保护(已在 ship.md)、空路径分发防护(473cf7e)
|
||||||
|
|
||||||
|
### 待观察(log_for_review,暂不动模板)
|
||||||
|
- **verify_onboarding lefthook 键名匹配是名义非语义**:等价功能不同键名会误报缺失;enterprise-system 6/7 fail 待核实是缺失还是改名
|
||||||
|
- **/ship 运行期间并行开发混入变更**(under_validation):建议最终报告对比第零步 status 快照、新增变更单独列出不纳入本轮——再积累 1~2 次实例后进模板
|
||||||
|
- **/antirot 命令模板化**:enterprise-system 实现的文档防腐命令(机器验+文档一致性+蓝图健康三步),候选纳入接入包标配
|
||||||
|
- **Loop 模型路由**(Haiku=Observer / Sonnet=Actor)与**种子层/土壤层分工**:enterprise-system 特有 Loop 体系,尚不构成跨项目通用约定,观察其长期效果
|
||||||
|
- **OpenAI SDK tool_calls 联合类型守卫**:可作 AI 代码审查检查项候选(project_type:web)
|
||||||
|
|
||||||
|
### 遗留尾巴
|
||||||
|
- src-tauri/ 下 6 处空路径污染残留(.blueprint/.claude/docs/AGENTS.md/CLAUDE.md/lefthook.yml,均 untracked,liangjing.json 指向「agent编排界面(opencode)」)——2026-07-18 会话中删除操作被用户拦下,保留待人工决定
|
||||||
|
- envoy.md 硬门槛已进模板,**需重建安装炼境后 apply 才会分发到子项目**(模板打包在二进制资源)
|
||||||
|
|
||||||
## 任务卡
|
## 任务卡
|
||||||
|
|
||||||
(concept 阶段,L 级——待 /architect 设计确认后由 /splitter 拆卡)
|
(concept 阶段,L 级——待 /architect 设计确认后由 /splitter 拆卡)
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
在子项目会话结束时扫描体系级洞察、回传给炼境。Use at the end of a session in a managed project.
|
||||||
|
|
||||||
<!-- 由炼境托管:重跑接入包会用最新模板覆盖本文件,请勿在此做项目定制 -->
|
<!-- 由炼境托管:重跑接入包会用最新模板覆盖本文件,请勿在此做项目定制 -->
|
||||||
|
|
||||||
你是**炼境使者**——在子项目会话里代表炼境执行现场感知与回传。
|
你是**炼境使者**——在子项目会话里代表炼境执行现场感知与回传。
|
||||||
@ -16,7 +18,12 @@
|
|||||||
|
|
||||||
## Step 3:分类每条洞察
|
## Step 3:分类每条洞察
|
||||||
|
|
||||||
**📦 带回炼境**(满足任一条):
|
**前置硬门槛(先于一切分类判断)**:问自己——**任何有经验的工程师是否会提前想到这一点?**
|
||||||
|
- 会(常识性设计知识,如"外键优于业务字段关联")→ 一律归「留本项目」,不得回传
|
||||||
|
- 触发条件过窄的 corner case(复现依赖本项目特定组合)→ 同样归「留本项目」
|
||||||
|
- 只有**非显而易见、且跨项目可复用**的教训才有资格进入下方分类
|
||||||
|
|
||||||
|
**📦 带回炼境**(通过硬门槛后,满足任一条):
|
||||||
- 炼境分发的模板 / 约定 / 接入包有 bug 或可改进
|
- 炼境分发的模板 / 约定 / 接入包有 bug 或可改进
|
||||||
- 某工作流或实践有明确代价或验证结果(有具体证据)
|
- 某工作流或实践有明确代价或验证结果(有具体证据)
|
||||||
- 会影响多个项目的体系级改进(哪怕还是假设)
|
- 会影响多个项目的体系级改进(哪怕还是假设)
|
||||||
|
|||||||
@ -128,12 +128,7 @@ fn detect_contracts(root: &Path) -> Vec<DetectedContract> {
|
|||||||
let cargo_content = std::fs::read_to_string(root.join("Cargo.toml"))
|
let cargo_content = std::fs::read_to_string(root.join("Cargo.toml"))
|
||||||
.or_else(|_| std::fs::read_to_string(root.join("src-tauri/Cargo.toml")))
|
.or_else(|_| std::fs::read_to_string(root.join("src-tauri/Cargo.toml")))
|
||||||
.unwrap_or_default();
|
.unwrap_or_default();
|
||||||
// Tauri 项目:commands 目录在 src-tauri/src/commands/
|
|
||||||
let tauri_commands_path = if path_exists(root, "src-tauri/src/commands") {
|
|
||||||
"src-tauri/src/commands"
|
|
||||||
} else {
|
|
||||||
"src/commands"
|
|
||||||
};
|
|
||||||
|
|
||||||
// ── Node.js 框架层 ────────────────────────────────────────────────────────
|
// ── Node.js 框架层 ────────────────────────────────────────────────────────
|
||||||
|
|
||||||
@ -226,6 +221,37 @@ fn detect_contracts(root: &Path) -> Vec<DetectedContract> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// React(前端组件层)
|
||||||
|
if pkg_deps.iter().any(|k| k == "react") {
|
||||||
|
contracts.push(DetectedContract {
|
||||||
|
label: "前端组件类型(React/TypeScript)".into(),
|
||||||
|
paths: vec!["src/**/*.tsx".into()],
|
||||||
|
doc: "组件 Props 类型变更需检查所有消费方".into(),
|
||||||
|
confidence: "medium".into(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Vite 构建配置
|
||||||
|
if pkg_deps.iter().any(|k| k == "vite") {
|
||||||
|
let p = "vite.config.ts";
|
||||||
|
contracts.push(DetectedContract {
|
||||||
|
label: "构建配置(Vite)".into(),
|
||||||
|
paths: vec![p.into()],
|
||||||
|
doc: "Vite 配置变更影响构建输出和 dev 行为(Tauri 项目尤其注意)".into(),
|
||||||
|
confidence: confidence(root, p),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Zustand 状态层
|
||||||
|
if pkg_deps.iter().any(|k| k == "zustand") {
|
||||||
|
contracts.push(DetectedContract {
|
||||||
|
label: "前端状态类型(Zustand store)".into(),
|
||||||
|
paths: vec!["src/store/**".into()],
|
||||||
|
doc: "Store 类型变更影响所有消费组件,需同步更新".into(),
|
||||||
|
confidence: "medium".into(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// pnpm monorepo 共享类型
|
// pnpm monorepo 共享类型
|
||||||
if path_exists(root, "pnpm-workspace.yaml") {
|
if path_exists(root, "pnpm-workspace.yaml") {
|
||||||
// 优先已知命名约定;否则列出 packages/ 下实际存在的子包目录
|
// 优先已知命名约定;否则列出 packages/ 下实际存在的子包目录
|
||||||
@ -300,21 +326,23 @@ fn detect_contracts(root: &Path) -> Vec<DetectedContract> {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tauri(自身的 command 层)
|
// Tauri(command 层)
|
||||||
let tauri_frontend_ts = if path_exists(root, "src/lib/commands.ts") {
|
// 注意:不要求 commands/ 目录已存在——新项目初始化时只有 lib.rs,但契约路径应预先声明
|
||||||
"src/lib/commands.ts"
|
if cargo_has(&cargo_content, "tauri") {
|
||||||
} else {
|
let tauri_cmd_dir = "src-tauri/src/commands";
|
||||||
"src/commands.ts"
|
let tauri_frontend_ts = if path_exists(root, "src/lib/commands.ts") {
|
||||||
};
|
"src/lib/commands.ts"
|
||||||
if cargo_has(&cargo_content, "tauri") && path_exists(root, tauri_commands_path) {
|
} else {
|
||||||
|
"src/commands.ts"
|
||||||
|
};
|
||||||
contracts.push(DetectedContract {
|
contracts.push(DetectedContract {
|
||||||
label: "Tauri command 接口(前后端契约)".into(),
|
label: "Tauri command 接口(前后端契约)".into(),
|
||||||
paths: vec![
|
paths: vec![
|
||||||
format!("{tauri_commands_path}/**/*.rs"),
|
format!("{tauri_cmd_dir}/**/*.rs"),
|
||||||
tauri_frontend_ts.into(),
|
tauri_frontend_ts.into(),
|
||||||
],
|
],
|
||||||
doc: "新增 command 时前后端必须同步".into(),
|
doc: "新增 command 时前后端必须同步".into(),
|
||||||
confidence: "high".into(),
|
confidence: if path_exists(root, tauri_cmd_dir) { "high".into() } else { "medium".into() },
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user