Compare commits

...

2 Commits

Author SHA1 Message Date
lanrtop
aeacb9dcf9 feat(manage): 产品组概览「项目数量」改为罗列项目名称
All checks were successful
Push & PR Check / check (push) Successful in 47s
2026-07-04 10:34:44 +09:00
lanrtop
1229d1b579 chore(blueprint): onboarding-pack 新立 T2 任务卡 — git-workflow 分支策略升级为复杂度感知 2026-07-04 10:20:08 +09:00
3 changed files with 266 additions and 6 deletions

View File

@ -116,6 +116,13 @@
- 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 - 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回归断言驻军 - 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: todo
- 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 待做) ### 🔵 agent 按钮体系分发B1/B2 已完成B3/B4 待做)
- status: in_progress - 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健康诊断遵守度后置 - 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健康诊断遵守度后置

View File

@ -8801,6 +8801,250 @@
"todo": 2, "todo": 2,
"total": 206 "total": 206
} }
},
{
"at": "2026-07-04T00:26:07Z",
"blocked_reasons": [],
"conventions_version": "1.10.0",
"delta": {
"newly_blocked": [],
"newly_done": [
"gitea-integration/G7. 新建仓库后一键接线(本地 init + 首次 push",
"mcp-server/P1. 治理三件套的 agent 投影get_blueprint_status / generate_blueprint_prompt / sync_blueprint_rules",
"onboarding-pack/T1. 接入包模板版本化ONBOARDED_MANAGED 块机制)【体系分发前置】",
"onboarding-pack/V1. 接入生效验收lefthook 激活 + verify_onboarding 按钮"
],
"unblocked": []
},
"iteration": 1,
"modules": {
"blocked": 0,
"concept": 0,
"done": 49,
"in_progress": 2,
"planned": 1,
"stalled": [
"flywheel-intelligence",
"onboarding-pack"
],
"total": 54
},
"task_ids": {
"blocked": [],
"done": [
"agent-infrastructure/A. 框架层扫描 + 契约路径推断",
"agent-infrastructure/B. 三件套文件生成",
"agent-infrastructure/C. 文档腐化评分",
"agent-infrastructure/D. 栈确认 UI + 生成按钮",
"agent-infrastructure/E. 看板腐化指示器",
"agent-infrastructure/F3. Agent 健康诊断 + 可复制修正指令",
"api-keys/API 密钥 CRUD 与安全展示",
"auto-update/Capabilities 权限配置",
"auto-update/下载 & 安装",
"auto-update/更新检测",
"auto-update/自动检查更新",
"auto-update/错误提示",
"blueprint-buff/BlueprintView 跨项目切换",
"blueprint-buff/Buff 生命周期 Rust 命令",
"blueprint-buff/blueprint_buffs 数据表",
"blueprint-buff/git watcher + 任务匹配写回 + 飞轮快照",
"blueprint-buff/前端 Buff 管理 UI",
"blueprint-buff/前端实时刷新",
"blueprint-feedback/归档 command",
"blueprint-feedback/归档候选展示",
"blueprint-feedback/梦核分析入口(蓝图弹窗)",
"blueprint-feedback/梦核提示词增加停滞模块数据",
"blueprint-flywheel/get_flywheel_stats command",
"blueprint-flywheel/get_flywheel_stats 支持迭代感知",
"blueprint-flywheel/usage.json 埋点写入",
"blueprint-flywheel/梦核提示词生成 command",
"blueprint-flywheel/飞轮健康面板",
"blueprint-governance/CLAUDE.md 模板定义",
"blueprint-governance/CONVENTIONS.md 版本化",
"blueprint-governance/GovernancePanel 规则编辑器 UI",
"blueprint-governance/get_blueprint_status command",
"blueprint-governance/sync/梦核/summary 切换为 effective 内容",
"blueprint-governance/sync_blueprint_rules command",
"blueprint-governance/批量同步所有项目规则",
"blueprint-governance/用户版 CONVENTIONS 存储层初始化",
"blueprint-governance/用户版 CONVENTIONS 读写 command",
"blueprint-governance/跨工具规则分发AGENTS.md 单一来源",
"blueprint-onboarding/generate_blueprint_prompt command",
"blueprint-onboarding/蓝图操作弹窗",
"blueprint-onboarding/项目列表蓝图状态徽章",
"blueprint-reader/合并返回完整蓝图数据",
"blueprint-reader/读取 manifest.yaml",
"blueprint-reader/读取 modules/*.md",
"blueprint-view/.blueprint/ 数据结构设计",
"blueprint-view/React Flow 节点图渲染",
"blueprint-view/blocked 状态支持",
"blueprint-view/下一步汇总面板",
"blueprint-view/任务卡复制派发",
"blueprint-view/批量执行提示词入口",
"blueprint-view/智能连线路由",
"blueprint-view/模块详情面板",
"blueprint-view/统计汇总条",
"blueprint-view/蓝图治理面板",
"blueprint-view/蓝图读取 Command",
"blueprint-view/边高亮与模块聚焦",
"blueprint-view/顶部状态行扩展",
"blueprint-view/项目卡片蓝图入口",
"cicd-workflow/Actions 运行历史",
"cicd-workflow/CI/CD 配置 CRUD",
"cicd-workflow/Tauri OSS 分发模板",
"cicd-workflow/Web SSH 部署模板",
"cicd-workflow/Workflow 文件生成",
"claude-autonomy-config/Beast 全局状态读取与展示",
"cloud-db-instances/云数据库实例信息管理",
"cloud-docker-apps/Docker 应用列表与状态管理",
"cloud-products/DB 迁移cloud_products 表",
"cloud-products/Dashboard 接入:云产品标签页",
"cloud-products/Rust CRUDcloud_products.rs",
"cloud-products/前端 PanelCloudProductsPanel.tsx",
"cloud-products/接线mod.rs + lib.rs + commands.ts",
"deploy-info/项目部署信息记录面板",
"devtools-scan/WSL 工具扫描",
"devtools-scan/Windows 工具扫描",
"devtools-scan/工具信息持久化",
"flywheel-intelligence/F1. Git 健康度后端——全量历史导入 + 跨项目聚合",
"flywheel-intelligence/F2. 飞轮面板——Git 健康度区块 + 全量导入按钮",
"flywheel-intelligence/MCP Server 支持 SSE 传输",
"flywheel-intelligence/R1. Rules-Applied commit trailer 被动自吸(规则有效性数据源)",
"flywheel-intelligence/R2. CONVENTIONS 规则边界字段 + R11 失败记录规则",
"flywheel-intelligence/复盘笔记覆盖率可见性",
"flywheel-intelligence/独立项目自动创建产品组",
"flywheel-intelligence/补测试:飞轮存量函数安全网",
"flywheel-intelligence/阶段一:复盘笔记接入梦核飞轮",
"flywheel-intelligence/阶段二usage.json 扩展采集维度",
"git-ops/上游状态检测",
"git-ops/分支管理",
"git-ops/基础操作",
"gitea-integration/G1. DB schema + Gitea 实例 CRUD",
"gitea-integration/G2. 仓库创建 / 迁移 / 绑定",
"gitea-integration/G3. Webhook 接收端MCP Server 扩展)",
"gitea-integration/G4. Webhook 注册命令",
"gitea-integration/G5. Gitea 治理面板 UI",
"gitea-integration/G6. 远端轮询采集webhook 不可达时的降级路径)",
"gitea-integration/G7. 新建仓库后一键接线(本地 init + 首次 push",
"gitea-integration/Gitea Actions workflow 生成",
"gitea-integration/R0. 炼境自身发版链路迁移(本机 act_runner + Gitea Actions",
"github-auth/OAuth Device Flow",
"github-auth/Token 管理",
"github-decommission/D1. 免登录改造(去掉 GitHub OAuth 登录门槛)",
"github-decommission/D2. 移除 GitHub 发布 / 导入 / PR / CI 状态入口",
"github-decommission/D3. 删除 spacesSync单机化跨空间 GitHub 云同步下线)",
"github-decommission/D4. git_ops 凭据去 GitHub 化",
"github-publish/GitHub 仓库创建与推送",
"health-center/T1 · Backend 健康检查聚合命令",
"health-center/T2 · 质量指标聚合",
"health-center/T3 · 前端健康中心页面",
"health-center/T4 · 扩展 MCP get_diagnostics",
"host-apps/宿主机应用清单与快启",
"mcp-config-inject/加入产品组时注入配置",
"mcp-config-inject/端口变更时重新注入所有配置",
"mcp-config-inject/退出产品组时清除配置",
"mcp-server/MCP 端口可配置Rust 侧)",
"mcp-server/P1. 治理三件套的 agent 投影get_blueprint_status / generate_blueprint_prompt / sync_blueprint_rules",
"mcp-server/启动时绑定 HTTP 端口",
"mcp-server/实现 MCP JSON-RPC 基础协议",
"mcp-server/实现产品组上下文工具",
"onboarding-pack/A 模板分发引擎",
"onboarding-pack/B apply_onboarding_pack 编排 + 前端入口",
"onboarding-pack/C1 commit_metrics 表 + Conventional 解析器",
"onboarding-pack/C2 挂接 buff watcher + 飞轮快照",
"onboarding-pack/D 数据可信度提示",
"onboarding-pack/T1. 接入包模板版本化ONBOARDED_MANAGED 块机制)【体系分发前置】",
"onboarding-pack/V1. 接入生效验收lefthook 激活 + verify_onboarding 按钮",
"product-group-mcp/产品组详情显示 MCP 注入状态",
"product-group-mcp/设置页添加 MCP 端口配置",
"project-dashboard/分组画布",
"project-dashboard/项目卡片列表",
"project-dashboard/项目发现面板",
"project-dashboard/项目快捷操作",
"project-env-scan/环境信息持久化",
"project-env-scan/项目环境检测",
"project-mentor/T1 · 后端聚合 commandMentorContext",
"project-mentor/T10 · 启动健康扫描 + 前端 Alert Banner",
"project-mentor/T11 · 项目历史快照",
"project-mentor/T2 · MCP 项目导师查询接口",
"project-mentor/T3 · 前端导师面板",
"project-mentor/T4 · 炼境自指接入",
"project-mentor/T5 · project_notes 数据层 + 后端命令",
"project-mentor/T6 · MCP append_project_note 工具",
"project-mentor/T7 · MentorPanel 展示 AI 笔记",
"project-mentor/T8 · 后端全组巡检命令",
"project-mentor/T9 · 前端全组巡检按钮",
"project-mgmt/子文件夹扫描",
"project-mgmt/批量导入项目",
"project-mgmt/项目 CRUD",
"project-mgmt/项目档案Profile",
"project-templates/P1+P3 模板扩充React 生态全覆盖)",
"project-templates/从模板创建项目",
"project-templates/内置模板种植",
"project-templates/模板 CRUD",
"project-tools/工具 CRUD",
"project-tools/工具启动",
"repo-registry/仓库导入",
"repo-registry/仓库挂载",
"repo-registry/仓库注册表管理",
"runtime-diagnostics/T1 · SQLite runtime_logs 表",
"runtime-diagnostics/T2 · 替换 eprintln! 为结构化日志",
"runtime-diagnostics/T3 · MCP Server 新增 get_diagnostics 工具",
"runtime-diagnostics/T4 · 注入失败结果返回前端",
"runtime-diagnostics/T5 · 设置页 MCP 真实健康检查",
"server-registry/服务器 CRUD 与项目关联",
"server-software/服务器软件扫描与展示",
"service-config/服务配置 CRUD 与环境分组",
"settings-page/WSL 发行版选择",
"settings-page/关于 & 更新",
"settings-page/终端配置",
"settings-page/编辑器检测",
"shell-launch/打开终端",
"shell-launch/打开编辑器",
"source-library/源码库分类管理与项目详情",
"sqlite-db/数据库迁移",
"sqlite-db/连接池初始化",
"ssh-config-sync/SSH Config 写入与同步",
"tags-groups/分组管理",
"tags-groups/标签管理",
"tray-service/关闭窗口最小化到托盘",
"tray-service/系统托盘图标与菜单",
"tray-service/集成 tauri-plugin-single-instance",
"ui-restructure/N1. 资源/工具一级页 + Sidebar 六组重组 + Dashboard 瘦身",
"ui-restructure/N2. ProjectCard 操作分层4 明按钮 + ⋯ 更多下拉)",
"ui-restructure/N3. 洞察页:飞轮跨项目内容迁出 BlueprintModal + 健康中心并入",
"ui-restructure/N4. Gitea 实例管理迁设置页GiteaPanel 拆全局/项目级两半)",
"ui-restructure/N5. 仓库注册表并入项目页管理 tab + 总览收敛为行动项",
"user-project-todos/前端:备忘清单 UI 组件",
"user-project-todos/数据层user_project_todos 表 + Rust commands",
"v2rayn-import/当前节点读取",
"v2rayn-import/数据库路径检测",
"v2rayn-import/节点列表扫描",
"vscode-remote/VS Code Remote SSH 一键连接",
"workspace-mgmt/空间 CRUD",
"workspace-mgmt/空间级设置",
"workspace-mgmt/部署命令管理",
"wsl-proxy/代理一致性测试",
"wsl-proxy/代理同步",
"wsl-proxy/代理清除",
"wsl-proxy/代理状态检测"
]
},
"tasks": {
"avg_rounds_M": null,
"blocked": 0,
"complexity_dist": {
"L": 6,
"M": 91,
"S": 53
},
"dispatched": 4,
"done": 196,
"in_progress": 1,
"rework_count": 37,
"todo": 8,
"total": 217
}
} }
] ]
} }

View File

@ -454,7 +454,7 @@ function GroupsTab({ spaceId }: { spaceId?: string }) {
<table className="w-full text-sm"> <table className="w-full text-sm">
<thead> <thead>
<tr className="bg-gray-50 border-b border-gray-200"> <tr className="bg-gray-50 border-b border-gray-200">
{["产品组名称", "项目数量", "描述", "操作"].map((h) => ( {["产品组名称", "项目", "描述", "操作"].map((h) => (
<th key={h} className="px-5 py-3.5 text-left text-xs font-semibold text-gray-500 uppercase tracking-wide whitespace-nowrap"> <th key={h} className="px-5 py-3.5 text-left text-xs font-semibold text-gray-500 uppercase tracking-wide whitespace-nowrap">
{h} {h}
</th> </th>
@ -463,17 +463,26 @@ function GroupsTab({ spaceId }: { spaceId?: string }) {
</thead> </thead>
<tbody className="divide-y divide-gray-100"> <tbody className="divide-y divide-gray-100">
{groups.map((g) => { {groups.map((g) => {
const count = maps.filter((m) => m.group_id === g.id).length; const groupProjectNames = maps
.filter((m) => m.group_id === g.id)
.map((m) => projects.find((p) => p.id === m.project_id)?.name)
.filter((n): n is string => !!n);
return ( return (
<tr key={g.id} className="bg-white hover:bg-gray-50/60 transition-colors group"> <tr key={g.id} className="bg-white hover:bg-gray-50/60 transition-colors group">
<td className="px-5 py-4"> <td className="px-5 py-4">
<div className="font-semibold text-gray-900">{g.name}</div> <div className="font-semibold text-gray-900">{g.name}</div>
<div className="text-xs font-mono text-gray-400 mt-0.5">{g.id}</div> <div className="text-xs font-mono text-gray-400 mt-0.5">{g.id}</div>
</td> </td>
<td className="px-5 py-4"> <td className="px-5 py-4 max-w-[320px]">
<span className="inline-flex items-center justify-center w-8 h-8 rounded-full bg-blue-50 text-blue-700 text-sm font-semibold border border-blue-100"> <div className="flex flex-wrap gap-1">
{count} {groupProjectNames.length > 0 ? groupProjectNames.map((name) => (
<span key={name} className="px-2 py-0.5 rounded-md bg-blue-50 text-blue-700 text-xs font-medium border border-blue-100">
{name}
</span> </span>
)) : (
<span className="text-xs text-gray-300"></span>
)}
</div>
</td> </td>
<td className="px-5 py-4 max-w-[280px]"> <td className="px-5 py-4 max-w-[280px]">
<span className="text-sm text-gray-500 truncate block">{g.description ?? "—"}</span> <span className="text-sm text-gray-500 truncate block">{g.description ?? "—"}</span>