Skip to content

[#784][DESIGN] 本地插件包导入并入活稿:三块帧按上线实况画 + 台账落地列回填 - #785

Merged
jinjunnn merged 1 commit into
alphafrom
feat/784-t4-renderer-design
Aug 2, 2026
Merged

[#784][DESIGN] 本地插件包导入并入活稿:三块帧按上线实况画 + 台账落地列回填#785
jinjunnn merged 1 commit into
alphafrom
feat/784-t4-renderer-design

Conversation

@jinjunnn

@jinjunnn jinjunnn commented Aug 2, 2026

Copy link
Copy Markdown
Owner

Refs jinjunnn/alpha-code#784(实现票,已由 PR #791 关闭;本 PR 是它的设计半场收口)
Refs jinjunnn/alpha-code#780(REQ-128 Phase 3 父需求)

这一趟改了什么、为什么现在改

原本这是「先出稿、批准后再实现」的设计 PR。实际发生的是:实现先上线了(PR #791 / alpha@9996d2c9,打包版真机取证 PR #794),而这份稿还开着、台账的「落地」列还空着。

按目标仓 docs/design/README.md 的判据,台账是判断「current/ 活稿还当不当前」的唯一依据 —— 三行挂着 设计中 而实现票已经关了,等于没人能判断活稿是不是当前的。所以本 PR 不再是「等批准」,而是收口

  1. 增量提案 2026-08-02-req128-local-plugin-import/frame.html 原样冻结当决策记录(README:dated 目录 append-only);
  2. 活稿按上线实况重画,并入 #import-preview / #installed-packs / #enable-flow 三个锚;
  3. 台账三行 设计中已落地,回填设计定稿 / 落地 / 代码入口。

勘破:没有凭提案转述,逐帧对照上线代码 + 实跑

  • 读了上线的 extension-hub.tsx(预览屏 / InstalledPackagesSection / PackageComponentRow / 拒绝行)、use-extensions.ts(两处 refreshEngine)、claude-plugin-intake.ts(全部原因码 → 人话表)、local-package-preview.ts(预算与生命周期)、ext-ipc.ts(分流与 headline)。
  • 看了 PR [REQ-128][VERIFY] 打包版真机 L2:本地插件包导入八步端到端取证 #794 的六张真机截图(预览屏首屏/尾屏、装完全关、拨开一个、会话内可用、移除后)。
  • 实跑:用上线的那份 intakeImportDir 扫了本机 ~/.claude/plugins/marketplaces46 个插件目录,帧内所有数字与文案都取自这次实跑,不是推断。

与提案实际比出来的差(以上线为准)

# 提案画的 上线实际
1 包卡有图标;技能超过 5 个折成「还有 N 个 / 展开」 都没有。包卡无图标,成员全列
2 「结构不认识」「超出上限」「预览过期」「重复导入」各一屏专用终态 共用同一屏,差别只在屏内多一条具名说明
3 终态配「重新预览」「直接选中技能自己的文件夹」等出路按钮 没有,只给具名原因;出路是关掉重来
4 安装进行中「取消」禁用 照常可点——main 会如实回「这次中止不了」,禁掉等于把那句真话藏起来;拒绝写在屏内,弹窗留原地
5 包卡显示插件名 ✅ 提案是对的,但靠新增字段实现:PackageGraphV1.displayName?(可选,缺席回退 root 组件名,owner 交付期裁决)
6 来源标 只从 child record 的 origin 读,不从包 id 前缀推(#737
7 plugin-dev 举「7 个里 1 个可装」 实测 0/7,一个都装不上。提案这个数字是错的(与基线 §15「漏了 plugin-dev」一致)。全部帧已换成实跑语料
8 codex 举「3/3 因设置不支持被拒」 计数对,但其中一条同时命中三个原因;上线逐条列全,不折叠

第 1–4、7、8 是我自己比出来的,与派发时转述的三条并不完全重合;第 5、6 与转述一致。

票面没点名的五个状态:上线实况

状态 上线是什么样 与提案的差
移除成功但有保留件 区块级提示(不在包卡里):「已移除扩展包「X」· 有 N 项留了下来」+ 逐条 名字 + 保留(理由) + 「知道了」 提案画在卡里 —— 而卡在移除成功那一刻就没了,解释会跟着消失
清单读不出 ≠ 没装 标题行「扩展包」不带计数 + 「暂时读不出已装扩展包的清单 / …这不代表没装。」+ 「重试」;同时抑制整页「尚未安装任何扩展」空态 提案的第二句文案与上线不同;空态抑制提案没画
重复导入在确认前说 ✅ 有。同一屏内多一条提示条「这个插件已经装过了。要更新它,请先移除整包,再重新导入。」,下面照常逐条列判定 提案画成一屏专用终态 + 「已装过」按钮
预览过期 / 安装中途失败 ✅ 共用一屏:弹窗留在原地,屏内一行红字,没有「重新预览」按钮。同一行红字还承载「文件夹预览期被改动」「内容太大/文件太多」「取消不了」 提案给了「重新预览」主按钮
超出单次上限 两套:组件数 > 64 → 整屏终态 + 每条具名「这一包技能太多,一次装不下」;字节 32MB / 文件 2000 → 不签发预览,屏内红字 提案的「太大了 + 出路」文案上线没有

两处判定为代码该修的不一致(未改生产代码)

已如实画进帧里,并在帧外标注;处置请另开票。

  1. 预览屏「不会安装」那一行的灰标写的是内部原因码control-field-unsupported / not-self-contained-plugin-root-variable …),下面那句人话是对的。同仓的目录扩展包路径早有相反的规矩:每个 skip token 必须配一句用户读得懂的话,少一条就编译不过(ext-package-presentation.tsSKIP_REASON_KEYS satisfies Record<…>)。本地导入这条路没接那套映射。
  2. 「读不出插件说明」那一屏自相矛盾:标题行写「共 1 个技能,其中 1 个本版本可以装」并把它列在「会安装」段里,底部确认键却是禁用的「没有可安装的技能」。实跑可达:本机 receiptssession-report 两个真实插件都是这个状态(disposition=blocked + installableCount=1)。同形还出现在预算拒绝路径(列出「会安装」若干条,键仍写「没有可安装的技能」)。

本地门(真实输出)

bash scripts/alpha-check.sh,退出码 0

▶ [1/4] north-star guard (zero upstream edits)     ✓ zero upstream package edits
▶ [2/4] no literal NUL bytes                        ✓ 7343 个版本控制文件零字面 NUL 字节
▶ [3/4] typecheck (contracts-consumer + ext + ui-mac)  ✓ typecheck
▶ [4/4] contract lock + unit tests                  ✓ tests
     54 pass / 0 fail   (contracts-consumer, 5 files)
    132 pass / 0 fail   (ext, 10 files)
   3756 pass / 0 fail   (ui-mac, 255 files, 17106 expect)
✅ all local gates green

同一套门在 git push 的 pre-push 钩子里又跑了一遍,同样全绿(3756 pass / 0 fail)。

docs 闸单独跑:python3 scripts/check-doc-links.py docs/design/README.md docs/design/current/customization-center/components.md✓ 9 relative link(s) resolve across 2 file(s)

台账契约自查(README:「锚必须 resolve」):脚本比对 components.md 全部 9 个锚 ↔ design.htmlid= 集合 → 零断链design.html 标签配平(div 463/463、section 14/14、table 7/7);帧内零票号 / 零 REQ 号 / 零开发术语(扫 21 个 .frame 子树,命中项全是十六进制色值的假阳)。

与 base fail-set 的差: —— base(origin/alpha = e96a8134)与本分支的门结果都是全绿 0 fail,本 PR 只动 docs/design/**,与 UPSTREAM_PATHS 零交集。

我主动没做的事

  • 没改任何生产代码。上面两条不一致只报不修。
  • 没编辑增量提案 2026-08-02-req128-local-plugin-import/frame.html(README:dated 目录 append-only)。它的数字有错,改在 README 血统行与活稿 §9 的关系块里点名,不动原件 —— 与基线 §15「原文保留、订正另立一节」同一做法。
  • 没回填台账的其余历史行(6 条 未登记(历史) 的叶控件),那是另一件事。
  • 没动 PAGE-MAP.md(README 明令:叶控件不是 surface)。
  • 没重画定制中心 IA,tab / 货架 / 浏览卡 / 详情页段顺序 / scope 分组一寸未动。
  • 没合并本 PR

@jinjunnn
jinjunnn force-pushed the feat/784-t4-renderer-design branch from b81b6e3 to 0ac83cb Compare August 2, 2026 16:55
@jinjunnn jinjunnn changed the title [#784][DESIGN] 本地插件包导入的三块增量稿:预览屏 / 已装扩展包区块 / 启用与生效 [#784][DESIGN] 本地插件包导入并入活稿:三块帧按上线实况画 + 台账落地列回填 Aug 2, 2026
增量提案(`2026-08-02-req128-local-plugin-import/`)未获批,而实现已经上线
(alpha@9996d2c9,打包版真机取证在案)。按 `docs/design/README.md` 的增量五步序
收口:提案原样冻结当决策记录,**活稿按上线实况重画**,台账三行从「设计中」翻成
「已落地」。此前台账三行仍开着 = 没人能判断 `current/` 还是不是当前的。

帧内数据全部来自**实跑**本机 46 个插件目录(执行上线的那份 intake,不是推断):

- `#import-preview` — 预览屏。部分可装用 `example-plugin`(实测 1/2),一个都装不上
  用 `plugin-dev`(实测 **0/7** —— 提案写的「7 个里 1 个可装」是错的),
  没有插件说明用 `receipts`。附上线原因文案全表(14 条不装 + 6 条摆放方式 +
  4 类不安装的内容 + 3 条整屏终态),逐字取自 main 的判定表。
- `#installed-packs` — 已安装页「扩展包」区块:包卡无图标、成员全列(提案画了图标
  与「还有 N 个」折行,上线都没有);移除失败留卡显错、保留件说明落在**区块级**
  (卡会消失,解释不能跟着走)、清单读不出与「没装」永不折叠且连带抑制通用空态。
- `#enable-flow` — 三步生效 + 四条提示。「待重载」是**提示**不是行上徽标。

与提案实际比出来的差(以上线为准,写在 §9 的关系块里):①包卡无图标、无折行;
②「结构不认识 / 超上限 / 预览过期 / 重复导入」不是各一屏专用终态,而是同一屏内
多一条具名说明;③没有「重新预览」「直接选中技能文件夹」这类出路按钮;
④安装进行中「取消」**照常可点**(main 会如实回「中止不了」,禁掉等于藏起真话);
⑤包名用插件作者声明的名字(可选 `displayName`,缺席回退 root 组件名),来源标
仍只由 child record 的 `origin` 决定。

两处**代码该修**的不一致,已如实画进帧里并在帧外标注,未改生产代码:
预览屏「不会安装」的灰标写的是内部原因码;「读不出插件说明」那一屏
同时说「1 个可以装」和「没有可安装的技能」。

Refs #784
Refs #780
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant