Skip to content

[BUG][P2] 账本读不出时静默返回空数组 —— 装好的包显示成「没装」;附一条错的文档交叉引用 #773

Closed

Description

@jinjunnn

大白话

账本读不出来的时候,有一条路径静默返回空数组而不是响亮报错。
后果不是崩溃,是装好的包在界面上显示成「没装」 —— 用户会以为自己没装过,
而移除按钮也跟着消失,claim 变成无人认领。

这比崩溃更糟:崩溃你会去查,"看起来没装"你只会以为自己记错了。

事实

  • readPackageGraphs()(packages/ui-mac/src/main/ext-receipt-v2.ts:1113)在 readError 时返回 [];
  • 而同一份账本的 readPackageLedgerStateV1 在同样情况下响亮失败(ok:false)。

两条读路径对同一个损坏状态给出相反的答案。

为什么现在提

alpha-code#758(PR #770)的实现方在做「旧账本键响亮拒绝」时点名了这条:
它正是那条路上「读不出来 → 看起来没装」形态的现成入口。
既有行为,不是 #758 引入的,按边界未改。

同一份报告还指出:docs/contracts/extension-package-lifecycle.md:19 的交叉引用是错的 ——
它说账本的 V3 形状(packageGraphs / claims / owner tokens)在 extension-install-ledger.md,
但那份文档全文零处提 graph / claim / V3(它是 REQ-100 时代的文档,V3 落地时没补章节)。
一并在本票修掉,否则下一个人会照那条引用去读一份不存在的章节。

Development plan

  1. 先勘破:readPackageGraphs() 今天的生产消费方是谁?
    (#758 的报告说「目前只有测试」—— 自己用两条独立检索轴复核,别照抄。)
  2. 让它与 readPackageLedgerStateV1 对同一个损坏状态给出同一个答案:
    要么都响亮失败,要么都降级 —— 但降级必须是可观察的降级,不能是空数组冒充「没有」。
  3. 修正 extension-package-lifecycle.md:19 的交叉引用,指向真正描述 V3 形状的地方
    (或补上 extension-install-ledger.md 缺的那一节 —— 走 maintain-repository-docs)。

Acceptance and named gates

  • 一条断言:预置一本损坏账本 → 两条读路径给出一致的、可观察的失败;
    判据 = 把其中一条改回静默 [],该断言必须红。
  • 文档交叉引用:链接指向的目标真的含那一节(不是只解析得了 URL)。

出处

alpha-code#758(PR #770)实现方报告,按边界未改。

Activity

  1. added
    type:bugSomething is incorrect or regressed
    prio:P2Planned normal-priority work
    on Aug 1, 2026
  2. self-assigned this
    on Aug 22, 2026
  3. added a commit that references this issue on Aug 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

prio:P2Planned normal-priority worktype:bugSomething is incorrect or regressed

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions