大白话
用户真正看得见摸得着的那半场:点导入卡 → 看预览 → 确认 → 在扩展中心看见「已装扩展包」
→ 拨开关启用 → 下一条消息里技能真能用 → 点移除整包消失。
这半场是整条竖线里最容易被按层拆票切断的一段。 Phase 1 漏掉 renderer 半场(用户点不动),
Phase 2 漏掉三条跨仓竖线 —— 同一形态。本票与 #781(T2)必须同一个 Iteration。
方案基线(已批)
Phase 3 方案基线 —— 本票 = §10 的 T4-renderer。
范围
runImportFolder 按 main 返回值分流(renderer 不判目录形态、不传路径);预览屏;
Hub 新增「已装扩展包」区块 + 每个技能的启用开关;区块内挂「移除」;
confirm 与整包卸载成功后接既有 refreshEngine()。
含 UI 变更 ⇒ 先出设计稿走 design-loop,批准后再实现。稿内与 UI 文案零票号、零开发术语。
Acceptance and named gates
- 九跳端到端可达(基线 §4 第 1→9 跳),含第 9 跳
「显示未启用 → 用户启用 → 引擎当场重载 → 下一条消息里技能真可用」。
- G20 热重载接线:confirm 成功 与 整包卸载成功后都走既有
refreshEngine()
(use-extensions.ts:136 已在 ExtensionsApi 上,:605 的启停路径已在调它);失败呈现 reload-pending。
真因:use-extensions.ts:610 生产注释明写「fs 类安装不 dispose 就是 placebo」;
而整包移除(extension-detail.tsx:165-183)今天只 refetch 不 refresh。
AC 必须含一条基线记录:证明「今天那一段就是红的」(否则无从判断闸是不是新加的假绿)。
- 启用开关是裁决 B 的必然连带 —— 默认 disabled 而列表里没有开关 = 用户装完拿不到任何东西。
本跳必须同时呈现开关,不得推给下一相位。
- 既有
importFolder 卡对非插件目录的行为逐字不变(回归用例钉死)。
- 装完当场可见、卸完当场消失,不需退出重进(
extension-detail.tsx:187-189 已确立的纪律)。
- 移除失败必须显示失败 ——
ok 之外任何东西不许读成「已移除」(:170-175 的既有纪律)。
- 包内单个技能点卸载 ⇒ 呈现
directUninstallVerdict 的拒绝文案,不是假成功。
- 取消 = 零写盘且 retained bytes 归零(与 T3 的 G19 对接)。
- 预览屏逐条呈现:装 / 不装 / 五类人话原因 / 不支持的组件类型 / 不支持的布局。
owner 裁决二(部分安装 + 显式告知)落在这里 —— 关键是不静默。
依赖
#781(T2)+ #782(T3)。必须与 #781 同一 Iteration。
大白话
用户真正看得见摸得着的那半场:点导入卡 → 看预览 → 确认 → 在扩展中心看见「已装扩展包」
→ 拨开关启用 → 下一条消息里技能真能用 → 点移除整包消失。
这半场是整条竖线里最容易被按层拆票切断的一段。 Phase 1 漏掉 renderer 半场(用户点不动),
Phase 2 漏掉三条跨仓竖线 —— 同一形态。本票与
#781(T2)必须同一个 Iteration。方案基线(已批)
Phase 3 方案基线 —— 本票 = §10 的
T4-renderer。范围
runImportFolder按 main 返回值分流(renderer 不判目录形态、不传路径);预览屏;Hub 新增「已装扩展包」区块 + 每个技能的启用开关;区块内挂「移除」;
confirm 与整包卸载成功后接既有
refreshEngine()。含 UI 变更 ⇒ 先出设计稿走 design-loop,批准后再实现。稿内与 UI 文案零票号、零开发术语。
Acceptance and named gates
「显示未启用 → 用户启用 → 引擎当场重载 → 下一条消息里技能真可用」。
refreshEngine()(
use-extensions.ts:136已在ExtensionsApi上,:605的启停路径已在调它);失败呈现reload-pending。真因:
use-extensions.ts:610生产注释明写「fs 类安装不 dispose 就是 placebo」;而整包移除(
extension-detail.tsx:165-183)今天只 refetch 不 refresh。AC 必须含一条基线记录:证明「今天那一段就是红的」(否则无从判断闸是不是新加的假绿)。
本跳必须同时呈现开关,不得推给下一相位。
importFolder卡对非插件目录的行为逐字不变(回归用例钉死)。extension-detail.tsx:187-189已确立的纪律)。ok之外任何东西不许读成「已移除」(:170-175的既有纪律)。directUninstallVerdict的拒绝文案,不是假成功。owner 裁决二(部分安装 + 显式告知)落在这里 —— 关键是不静默。
依赖
#781(T2)+#782(T3)。必须与#781同一 Iteration。