Files
ycode/docs/协作/B02-需求.md
T

84 lines
8.9 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.
# B02:推荐技能的已安装样式与重复入口
日期:2026-10-21(Asia/Shanghai)。状态:**待开发**。用户新增需求,不改变 B01 的范围、交付或验收结论。
用户要求:“专家技能连接器这块的技能,已经安装的在推荐中的样式也不对,还保留有添加的按钮,参考一下 WorkBuddy。还有下方也不应该有查看已安装技能,这个要移除掉。”
## 1. 已确认问题与复现
接收时 `gitea/master` 为 `ddd677bae3c43a5514eb40f7a1d9749fdf389115`。独立窗口使用既有固定代码 `51531dcae8d8ade85db9e203bc8c0f712805b2ae`,对应推荐技能组件、样式、CardFrame 与测试从该提交到接收版本无改动。
Windows Electron 加载真实 `CapabilityCenter`、推荐技能组件和 CSS,使用受控 IPC、临时 userData 与模拟安装结果,不下载网络包或改用户技能。安装后关闭详情,推荐列表实测:
```text
data-recommendation-state = current
卡片 class = sm-card,没有 sm-card--installed
添加按钮仍存在,disabled=true,按钮中仍有 Plus SVG
原动作槽位没有 sm-use-btn
卡片下方另有“去使用”文字动作
列表底部存在“查看已安装技能”按钮
renderer errors = []
```
所以不是“完全没有识别到已安装”,而是**识别成功后,卡片仍渲染添加动作与未安装壳**。不能把仅禁用加号当作完成样式修复。
源码定位:
- `src/renderer/src/capabilities/RecommendedSkills.tsx:259`:`Card` 没有传 installed 身份;actions 无条件创建 `.sm-add-btn` 和 `PlusIcon`,current 状态只影响 disabled。
- `RecommendedSkills.tsx:263`:独立 footer 按钮“查看已安装技能”。
- `RecommendedSkills.tsx:247`:目录不可用分支也有同名入口,需与正常列表的移除要求一并检查,不要留下另一处无依据的底部重复入口。
- `src/renderer/src/capabilities/SkillsPage.tsx:103`:推荐页当前的 installed 导航 callback;顶部已有“已安装(n)”入口,应保留这一条正常导航。
- `scripts/test-recommended-skills-ui.mjs:232`:旧测试要求 `.sm-add-btn.disabled === true`;`:241` 附近依赖 footer 按钮进入已安装。这两处把当前错误设计写进了测试,需同步修正。
证据:[实测状态](evidence/B02-01/installed-state.json)、[推荐列表截图](evidence/B02-01/installed-recommendation-list.png)、[只读窗口探针](evidence/B02-01/skills-installed-probe.mjs)。
## 2. WorkBuddy 依据与未验证边界
可复用的已有 REA 恢复记录:
- `src/renderer/src/capabilities/skills-source-manifest.json` 标注 WorkBuddy **5.8.2**,原包 SHA-256 `035254bc76310ea46317433e4840602094543ef323d2d5c5aff7c131729de918`。
- Evidence:JavaScript `ev_717fa5e846e64d67ac19c8925d121bff632c0d3aefb3603b10858559cabb2dcb`,技能市场相关 `ev_e8faf60b3d22b99ede302f2d0efdfb3145f53f59789d4a345f5892dc13a589a4`,CSS `ev_377c8790468b3c67dad8577aabb327f98d3140659f0fffdbabfcff5a40cc9e94`。
- 该恢复链在项目中已有 `CardFrame.installed`/`sm-card--installed`、`UseSkillIcon` 与 `.sm-use-btn`。已恢复 CSS 的使用动作是 24×24px、默认透明背景、16px SVG;与未安装 `.sm-add-btn` 的 24×24px 灰底、12px SVG 不同。
- [技能详情安装与使用链路修正](../技能详情安装与使用链路修正-2026-10-20.md) 第原版边界部分记录:历史原版 ActionRow 随安装状态切换安装/使用,成功提示带使用动作。不要把“+保留但禁用”当作原版已安装设计。
**本次当前版本并未完整核验**:
- 本轮仅通过 REA 静态读取当前安装包,没有用直接 CDP、手写提取器、computer-use 或其他通道绕过。
- 当前 ASAR SHA-256 为 `026a1d0805a2366d06390cef52e157a7277543cdd27dd308e6b1acb47ffffdc1`,版本号未读取确认,不能继续写成 5.8.2/5.8.3。
- REA 父 Evidence `ev_ef70f1417c069be6bf352efcb858244efaae444f71f1f9893ed2fb579ed88849`,摘要 Evidence `ev_4d76ad1b9f386f97343307067ee2f5b5b91d2189366ab1cbe3890954db4634a6`。本次选择的源文件是 `renderer/assets/src-DbE1_mgM.js`,不是当前完整技能市场组件;存在完整性矛盾、未选文件和语义覆盖上限,**不据此对当前技能市场样式作结论**。
- REA 整包提取又因缺失声明的 Darwin companion `cli/node_modules/koffi/build/koffi/darwin_arm64/koffi.node` 失败。没有绕过改用其他提取器,也没有启动 WorkBuddy 去安装测试技能。
- [完整摘要记录](evidence/B02-01/rea-summary-record.json)、[REA 提取限制](evidence/B02-01/rea-extract-limitation.json) 已提交。父 Evidence 的大型 bundle 仅保留于验收端临时证据,不把其路径当作跨机交接的唯一依据。
开发可依据已有恢复组件和用户明确要求先修确认问题;当前原版推荐卡是否另有状态图标、精确操作位置及复杂安装态细节,须后续通过 REA 补同状态证据,未拿到不能宣称完整 1:1。
## 3. 开发任务与验收标准
### YC-005 / P2:推荐卡片切换真实已安装状态
允许边界:`RecommendedSkills.tsx`、`SkillsPage.tsx`、推荐局部 CSS/既有卡片适配、相关 UI 回归。原版恢复组件本体、共享卡片与技能身份模型如需变更,由开发主对话统一审查;不重写安装下载后端或扩展市场服务。
- **AC5.1**:同推荐身份、同来源版本的 current 安装项,卡片不再渲染添加 Plus 按钮,不仅是禁用或透明隐藏;使用与已安装语义一致的卡片状态和动作。辅助技术标签也不能继续叫“安装某技能”。
- **AC5.2**:按既有 REA 恢复记录实现原版的已安装/使用展示,核对布局、图标槽位、字体、默认/hover/focus 与浅深色;不要把文字“已安装”加在角落就认定完成。
- **AC5.3**:未安装项仍可添加并显示真实安装进度;安装成功后自动切换,关闭/重开页面及外部安装/卸载通知后状态同步,不要求重启。
- **AC5.4**:禁用、不可调用、损坏、同名本地、版本不同、本地修改、工作区技能等状态仍明确区分。不要只按同名或当前标签把不同来源/scope 误认为同一个已安装技能;保留已有保护工作区和本地修改的规则。
- **AC5.5**:版本不同/本地修改等确有替换需求时,用清楚的更新/替换动作及既有确认流程,不伪装成首次添加,也不直接覆盖。正常 current 状态不发重复安装请求。
- **AC5.6**:使用动作保留既有进入新任务草稿、不自动发送的语义;禁用技能先启用及失败反馈保持。原动作槽位与卡片下方不要同时留下无依据的重复使用按钮;按原版证据确定位置。
### YC-006 / P2:移除底部“查看已安装技能”
- **AC6.1**:正常推荐列表底部不再渲染 `.yc-skill-recommendation-footer` 及“查看已安装技能”按钮,清理只服务于该入口的空白、样式和 props;不能只是 CSS 隐藏。
- **AC6.2**:保留顶部“已安装(n)”导航及真实计数,进入已安装、返回推荐、搜索与目录刷新仍正常。
- **AC6.3**:复核目录不可用/空状态中的重复同名入口;保持清楚的错误与恢复方式,使用现有顶部导航,不为删除正常 footer 而留下另一个底部重复入口。未使用的 callback 清理要核对所有分支与调用方。
- **AC6.4**:测试通过顶部现有入口进入已安装,新增断言 footer 不存在;不允许为旧测试便利保留用户明确要求移除的按钮。
## 4. 验证与交付
- 必跑 `npm run test:recommended-skills:ui`、相关能力输入/技能管理回归,以及 `npm run build`。源码/class 检查不能替代实际已安装推荐卡的计算样式、截图与交互。
- 受控 Electron fixture 覆盖未安装→安装→current、禁用/损坏、不同来源与版本、本地修改、卸载/重装及目录错误;不得使用用户真实技能或为验样式安装 WorkBuddy 技能。
- 对已有 UI 脚本中的“禁用 Plus 即通过”和 footer 导航断言改成真实目标,保留安装确认、进度、取消、重复请求、外部通知、使用草稿等有效回归。
- Windows 浅/深、窄窗下记录相同状态的 DOM、计算样式和截图;同版本 WorkBuddy 对照尚缺则明确“未验证”,不将本地恢复样式称为像素通过。
- 本次复现探针在固定受测检出运行:独立安装依赖后,将 Git 中的 `skills-installed-probe.mjs` 复制为 `.tmp/b01-acceptance/skills-installed-probe.mjs` 再执行。该路径用于其自身 Electron 子进程启动;脚本只用受控宿主,不真实安装。
- 创建 `docs/协作/B02-交付-01.md` 接单、记录完整代码 SHA、逐项 AC、命令及证据。不要预填验收通过;不把此项混入 B01/YC-001 的修复完成声明。
本次只发布新需求和证据,**未修改产品代码**。文档推送成功后窗口交回开发端,用户可将 B02 与 B01 的后续安排一并交给开发对话。