dev-manager-tauri/.blueprint/modules/onboarding-pack.md
lanrtop ffaecc6ad8
All checks were successful
Push & PR Check / check (push) Successful in 46s
chore(blueprint): 记录放弃 WSL 路径项目的裁决
只保留 win_path 项目;DB 2 条 WSL 残留已清(零数据损失);
新代码不写 WSL 分支,存量 111 处触碰时顺手清;
wsl-proxy/v2rayn 代理功能不在此范围。V1 复盘 WSL 遗留销项。
2026-07-04 11:37:15 +09:00

147 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 接入包Onboarding Pack
炼境向被管理项目一键分发的标准化接入套件,让任意新旧项目成为「飞轮合格公民」。
统一以自建 Gitea 为 git 数据底座,缝合 git 规范、AI 约定、蓝图语义、炼境登记四层。
## 双层架构
- **自建 Gitea**:统一 git 数据底座稳定、自主、CI + review 自控)
- **炼境**:底座之上的「项目飞轮控制台」——读 git 数据做跨项目飞轮聚合、分发接入包、维护蓝图语义层
> 决策2026-06-19全面统一自建 Gitea弃用 GitHub。数据主权 = 飞轮燃料自主可控,契合「管理越多→数据越多→飞轮越强」愿景。详见 memory [[project_gitea_unified_architecture]]。
## 蓝图重新定位git 与蓝图分工)
> 完整定义见 `.blueprint/CONVENTIONS.md` §「蓝图定位(意图层)」。
核心分工git 记录「做了什么」,蓝图只保留 git 给不了的三类信息(结构关系图 / 意图与验收标准 / 未来规划)。状态/进度/涉及文件从 git 信号推断,蓝图不手动双写。
## 接入包分档(底座统一,上层按需)
| 档 | 内容 | 适用 |
|----|------|------|
| **基线**(所有项目) | Gitea 建仓/迁移 + origin=Gitea + lefthook(强制 conventional) + AGENTS.md + git-workflow.md + 炼境登记 + buff 解析 commit | 全部新旧项目 |
| **增配**(复杂项目) | + Gitea Actions CI + DeepSeek review + 瘦蓝图 | 长周期/多业务线 |
## 决策记录
- **放弃 WSL 路径项目支持2026-07-04 用户裁决)**:被管理项目只保留 Windows 路径win_path不再登记/支持 WSL UNC\\wsl.localhost\...路径项目。DB 中 2 条 WSL 残留登记已清(均为已有 win 路径登记的重复项,零飞轮数据损失)。**新代码不再写 WSL 路径分支**;存量 WSL 分支18 文件 111 处不主动拆除触碰相关文件时顺手清理。边界wsl-proxy / v2rayn-import 是独立代理功能,不在此决策范围
- 飞轮升格与 Gitea API 对接「分步实施」而非耦合buff 读本地 `.git`commit type/scope与远程平台无关可先做Gitea APICI 状态/PR review随后
- 「完整分发」是陷阱,正确形态是分级菜单:新项目种全套,旧项目增量接入(复用 mcp_inject 的「命名空间隔离 + 合并不覆盖」语义,不动用户已有配置)
- 接入动作:现有 `apply_blueprint_buff` 升格为 `apply_onboarding_pack`,按档编排注入
- 语义层进料口隐患:决策/验收/踩坑仍需主动写(与饿死复盘笔记同源),须配「从 PR 标题/commit body/review 评论半自动提取」,不再单纯指望人自觉
## 复用的现有能力(~60% 地基已具备)
| 能力 | 现状 |
|------|------|
| `.claude/settings.json` 注入 | ✅ `mcp_inject`(命名空间隔离 + 合并不覆盖 + JSON 校验) |
| 生成接入 prompt / 扫描项目 | ✅ `generate_blueprint_prompt`(已读 AGENTS.md + monorepo 感知) |
| git 轮询 → 状态同步 | 🟡 `buff`(仅匹配文件路径,需补 conventional 解析,见 flywheel-intelligence L0 |
| CONVENTIONS 规则同步 | ✅ `sync_blueprint_rules` |
| 项目模板 | ✅ `templates` |
| CI workflow 生成 | 🟡 `cicd.rs`(仅 GitHub需改造 Gitea Actions见 gitea-integration |
## 风险
- 旧项目存量 git 数据脏(无 scope、非 conventional→ 数据质量是光谱,需「采用规范后切起算」或标不可信
- 跨项目聚合可比性:不同项目 scope 粒度/复杂度标准不同fix 率直接相加会误导梦核
- 模板自身维护成本AGENTS.md/lefthook/git-workflow.md 模板要随最佳实践演进
## 设计architect 2026-06-19
基线档范围:模板分发 + 炼境登记 + L0 commit 解析,**全部本地、不依赖 Gitea API**Gitea 建仓/Actions/webhook 属 gitea-integration 档2
关键决策:
- **新建 `apply_onboarding_pack`**(不扩展 buffbuff=挂 git 观测onboarding_pack=完整接入,分层清晰
- **模板"存在则跳过 + 报告"**markdown/yaml 不强行整文件合并,绝不覆盖用户已有(复用 mcp_inject 的路径解析 + 不存在才写)
- **L0 commit 解析挂在现有 buff watcher**`last_commit..HEAD` 取 message → parse_conventional → 写新表 `commit_metrics`;与文件路径匹配两条路径并行互不干扰
- **rework_count 来源**从枯竭的 `parse_notes_metrics` 换成查 `commit_metrics`fix 且非 CI 自修);`avg_rounds_M` 基线暂为 null需 PR 边界留档2
- **scope 原样聚合**module 映射后置
新增:`commands/onboarding.rs`、`commands/commit_metrics.rs`、`resources/onboarding/*.tmpl`、`commit_metrics` 表
修改:`buff.rs`(check_project 加解析)、`blueprint.rs`(append_usage_snapshot)、`db.rs`、`lib.rs`、前端入口
## 任务卡
> 已过 /architect + /splitter。A→B、C1→C2 两条链可并行D 依赖 C1+B**C1飞轮地基建议优先开工**。
### ✅ A 模板分发引擎
- status: done
- complexity: M
- files: src-tauri/src/commands/onboarding.rs, src-tauri/resources/onboarding/{AGENTS.md,lefthook.yml,git-workflow.md}.tmpl
- acceptance: include_str! 内嵌 3 个标准模板(蓝本取自 enterprise-system分发时文件不存在→写入、已存在→跳过并在报告标注绝不覆盖复用 mcp_inject 的路径解析(含 WSL返回每个模板的 written/skipped/failed
### ✅ B apply_onboarding_pack 编排 + 前端入口
- status: done
- complexity: M
- depends: onboarding-pack卡A
- files: src-tauri/src/commands/onboarding.rs, src-tauri/src/lib.rs, src/lib/commands.ts, src/components/dashboard/ProjectCard.tsx
- acceptance: apply_onboarding_pack(project_path, project_id) 组合「模板分发 + apply_blueprint_buff」返回 OnboardingReport看板卡片有"接入包"入口展示分发报告written/skipped/failed
### ✅ C1 commit_metrics 表 + Conventional 解析器
- status: done
- complexity: M
- files: src-tauri/src/commands/commit_metrics.rs, src-tauri/src/db.rs
- acceptance: 新增 commit_metrics 表sha PK / project_id / commit_type / scope / is_rework / is_ci_auto / committed_at / parsed_at`parse_conventional(message)` 解析 type/scopetype=fix→is_rework`[DeepSeek-V3]`/`[R1]` 等标记→is_ci_auto非 conventional→commit_type=null 单列;提供聚合查询 `rework_count(project_id)`;解析逻辑纯函数可单测(覆盖 feat/fix/带scope/无scope/CI自修/非规范 六种输入)
### ✅ C2 挂接 buff watcher + 飞轮快照
- status: done
- complexity: M
- depends: onboarding-pack卡 C1
- files: src-tauri/src/commands/buff.rs, src-tauri/src/commands/blueprint.rs
- acceptance: check_project 用 `last_commit..HEAD` 取 commit messagegit log复用现有 WSL 路径处理)→ 调 C1 解析写 commit_metrics首次接入last_commit 空)限解析最近 N 条append_usage_snapshot 的 rework_count 改查 commit_metricsis_rework=1 AND is_ci_auto=0取代 parse_notes_metrics
### ✅ D 数据可信度提示
- status: done
- complexity: S
- depends: onboarding-pack卡 C1、卡 B
- files: src-tauri/src/commands/onboarding.rs, src-tauri/src/commands/commit_metrics.rs
- acceptance: OnboardingReport 与飞轮展示标注该项目 commit 规范化比例conventional / 总数);比例低时提示"种 lefthook 后数据才准"避免脏数据被误读为可信CI 过滤 / 非规范单列已在 C1 落实)
### ✅ T1. 接入包模板版本化ONBOARDED_MANAGED 块机制)【体系分发前置】
- status: done
- done_note: 2026-07-03 dispatch_versioned 三态落地written/updated/appended + 同版本 skipped块外用户内容保护有测试兜底AGENTS/git-workflow 模板入 ONBOARDING_MANAGED v1.1.0 块lefthook 保持存在即跳过。**实测(用户走 UIR13**enterprise-system 与 noteapp 重跑接入包均 appended×2 + lefthook skipped磁盘验证两项目 ONBOARDING v1.1.0 + BLUEPRINT v1.10.0 双块到位。发现并修复前端分发报告只认旧三态appended 误显 ✗c4a6600R12 反例实证。已知一次性迁移成本enterprise-system 块外存在项目定制版「核心开发约束」与块内通用版共存,去重留给该项目自己的会话
- complexity: M
- files: src-tauri/src/commands/onboarding.rs, src-tauri/resources/onboarding/git-workflow.md.tmpl, src-tauri/resources/onboarding/AGENTS.md.tmpl
- acceptance: git-workflow 与 AGENTS.md 模板的炼境管理内容包进 ONBOARDING_MANAGED 标记块(带 version分发逻辑三态文件不存在→写全新存在且有标记→原位更新块复用 blueprint.rs 的 upsert_managed_block 模式可提取公共函数存在无标记→末尾追加块块外用户内容永不触碰lefthook.yml 保持"存在即跳过"(用户深度定制不适用块机制);单元测试覆盖三态 + 用户区保护;对 enterprise-system 重跑接入包实测存量升级
> 背景模板演进无法触达存量项目是版本化闭环的最大缺口trailer 章节曾手工补)。
### ✅ V1. 接入生效验收lefthook 激活 + verify_onboarding 按钮
- status: done
- done_note: 2026-07-04 完成。apply_onboarding_pack 分发后自动 lefthook install本地 node_modules/.bin 优先、PATH 兜底、CREATE_NO_WINDOW 静默),报告新增 hook 三态verify_onboarding MCP 工具六项检查链AGENTS/git-workflow 管理块版本自省对比、pre-commit 真挂 lefthook、origin host 命中已登记 Gitea 实例、.gitea/workflows 存在、近 30 天 commit_metrics 流入);判定逻辑纯函数化 5 条单测 + in-memory DB 全链集成测试(空项目六项全 fail → 铺齐后六项全 pass前端 commands.ts 类型同步(顺修 TemplateResult 缺 updated/appended 旧债)+ BlueprintModal 显示 hook 激活行。MCP 实调待炼境升级重启后终验(当前运行实例是旧 build
- complexity: M
- depends: onboarding-pack卡 B、卡 T1
- files: src-tauri/src/commands/onboarding.rs, src-tauri/src/mcp_tools.rs, src/lib/commands.ts
- acceptance: [Tauri command] apply_onboarding_pack(project_id) 分发 lefthook.yml 后检测并激活 hook——找到 lefthook 可执行node_modules/.bin/ 或 PATH→ 执行 lefthook installOnboardingReport 新增 hook_activated 三态activated / missing_binary / failedmissing_binary 时附安装提示;[MCP tool] verify_onboarding(project_id) → 返回检查链 JSON模板管理块版本到位 / .git/hooks/pre-commit 含 lefthook / origin 指向 Gitea / CI workflow 文件存在 / commit_metrics 近 30 天有该项目数据),每项 pass|fail + detail无 error 字段;[cargo test] 检查链判定逻辑纯函数化,覆盖 hook 已挂/未挂、origin 匹配/不匹配R06/R07
- notes: 背景2026-07-04 侦察确认)——接入包写 lefthook.yml 后从不激活,文件在 hook 死 → conventional 不强制 → 飞轮数据脏;炼境自身未踩纯因手动装过。本卡补两件事:① 分发即激活;② "消费者角色"机器化验证(分发成功 ≠ 功能生效,对应 agent-button-system.md 消费者驱动验证)。产出直接供 B4 健康诊断遵守度消费。同日发现的姊妹雷cicd.rs PR CI 模板 pnpm lint --if-present 必挂语法已修dc501f7回归断言驻军
### 🔵 T2. git-workflow 模板:分支策略升级为复杂度感知
- complexity: M
- status: in_progress
- files: src-tauri/resources/onboarding/git-workflow.md.tmpl
- acceptance: [Tauri command] 对已接入项目重跑接入包 → git-workflow.md ONBOARDING_MANAGED 块升至 v1.3.0,内容含「简单改动直推 main/master功能性改动开 feat/<name> 分支 + PR」策略PR 创建 MCP 示例 head 字段从 "dev" 改为 "feat/<name>"docs/templates/agents-meta-rules.md 不含分支策略无需同步
- notes: 当前模板强制 dev→main 双分支,假设了任意项目都维护常设 dev 分支,实为过度约束。复杂度感知策略(小改直推 main/master功能性改动开 feat/* + PR与炼境自身策略一致、与飞轮目标对齐PR body 是意图层数据),且对单人小项目更友好——不必维护无意义的常设 dev 分支。「简单/功能性」由 agent 根据改动文件数/性质自判,无需外部蓝图标签
### 🔵 agent 按钮体系分发B1/B2 已完成B3/B4 待做)
- status: in_progress
- progress: 2026-07-03 B1 done——CONVENTIONS 1.10.0 加 R12边界单点实现+ R13M/L 验收路径须真实走通含载体就近选择表B2 done——AGENTS.md.tmpl v1.1.0 管理块含「agent 按钮与验证路径」章节(双投影/边界单点/载体表/完成的定义/侦察→驻军)。剩 B3提示词升级M单独一轮、B4健康诊断遵守度后置
- 版本化闭环要求2026-07-03 用户澄清,体系分发的灵魂): 分发不是"发了就不管"——每类资产带版本分发 → 子项目按该版本实践产生经验(成功/失败)→ 经验自吸反哺炼境trailer/failure_cases/复盘/返工率)→ 按版本分组对比效果 → 修订出新版 → 再分发。CONVENTIONS 是模范生version+队列对比+梦核+同步1.8→1.9 已跑通一整圈B 系列每类资产按此标准建闭环。**前置依赖提升**「接入包模板演进分发MANAGED 块化」concept 卡——模板无版本机制是当前最大缺口,没有它体系 v2 到不了存量项目
- notes: 2026-07-03 概念探讨收束后的分发需求(体系详见 memory concept_dual_projection 与 mcp-server 模块 concept 卡)。用户全 agent 开发形态下,"给开发者立规范"="给 agent 注入规范",可完全机器化。四条现成管道分发四类资产:① B1(S) CONVENTIONS 1.10.0 加 R12 边界单点实现 + R13 验收须真实走通验证路径 + 载体选择原则;② B2(S) 接入包 AGENTS.md 模板加 agent 按钮章节(三要素/载体谱系/侦察驻军);③ B3(M) init/sync 提示词升级——建蓝图时声明项目按钮载体、acceptance 生成为可执行验证路径格式;④ B4(S,后置) 健康诊断加体系遵守度检查。移植体验=零新增动作,接入流程不变。
## 复盘笔记
【复盘】V1 接入生效验收2026-07-04
任务类型: 后端命令 + MCP工具 + 前端类型同步
复杂度: M
实际轮数: 1轮预估 1 轮)
是否返工: 否
有效策略: 立卡前先侦察实锤grep 确认 lefthook install 全仓库零调用、cicd.rs 模板同款 lint 语法雷acceptance 直接写成可执行验证路径使实现无歧义;检查链判定与 IO/DB 分离(纯函数 + conn 注入in-memory DB 全链集成测试把"空项目全 fail → 铺齐全 pass"变成回归资产模板期望版本从内嵌模板自省extract_managed_block而非硬编码模板升版验收逻辑零维护
顺手修的旧债: 前端 TemplateResult 类型缺 updated/appended 两态T1 时只修了组件层样式映射类型层漏了AGENTS.md/agent-button-system.md 写死"21 个工具"计数(防腐铁律违例,改为指向 tools_list_result 自省)
遗留: ~~WSL UNC 路径下 lefthook install 未实测~~已销项2026-07-04 用户裁决放弃 WSL 路径项目,见决策记录)
追记2026-07-04 批量接入实战): MCP 实调已终验——8 项目跑通 apply+verifyenterprise-system/autoforphone/炼境自身 6/6 全绿。踩坑Windows PATH 兜底对 pnpm 全局 shim 失效pnpm -g 装的是 lefthook.cmdCreateProcess 裸名只解析 .exe→ 兜底追加尝试 "lefthook.cmd" 修复;本轮 6 个项目由 agent 手动 lefthook install 补齐(与按钮同路径)
auto_applied_rules: R01, R06, R07, R13
rule_effectiveness: R01=有效commands.ts 同步时暴露类型层旧债), R06=有效conn 注入使全链集成测试可行), R07=有效6 条新测试), R13=有效(集成测试即真实走通的验收路径)