Skip to content

refactor(settings): stop repeating one fact fourteen times - #2120

Merged
jackwener merged 1 commit into
mainfrom
pr-ux-health-memory-8
Aug 4, 2026
Merged

refactor(settings): stop repeating one fact fourteen times#2120
jackwener merged 1 commit into
mainfrom
pr-ux-health-memory-8

Conversation

@jackwener

Copy link
Copy Markdown
Member

Task #146 — UX 信息暴露清理 C(owner 拍板 msg 30f736ed)。

健康页 · 逐行元数据

每一行都挂着「来源:能力快照 · 读取:1秒钟前」,而页头已经有全局「最近一次读取」。

你规格里要求「逐项核实,如果某行来源确实与全局不同才保留」—— 我没有靠肉眼,跑探针量了

{ "signalCount": 14,
  "distinctSources": { "capability_snapshot": 12, "connection_test": 1, "runtime_probe": 1 },
  "maxCheckedAtDeltaMs": 0,
  "nonZeroDeltas": 0 }

结论分两半,所以处理也分两半:

  • 读取 全删 —— 14 个 signal 的 checkedAt 与快照 delta 全部为 0,一模一样。它就是同一个事实又印了 14 遍。
  • 来源 不是同一回事,幸亏核了:12 行确实是能力快照,但有一行是真实连接测试、一行是运行态探测。「这条是真跑过的」值得说。所以改成只在不等于页面默认读取源时才显示 —— 两行有信息的留下,十二行重复的消失。

截图里能看到 E2E LLM 连接 那行保留了「来源:连接测试」,其余行干净。

页头重写:原文点名内部分层法(配置 · 验证 · 权限 · 功能 · 操作审批 · 记忆 · 运行态 · 存储),后面还加粗一句「验证通过 ≠ 运行可用」。两句都是在讲健康模型怎么搭的。改成「各项能力当前的运行状况检查。」分层本身仍然是页面的小标题 —— 在那里它是分组,不是 schema。

记忆页 · 模型词汇

prompt注入 是模型的词,不是用户的词:

  • 「开启后才允许发送消息时把本地记忆加入 prompt」→「开启后,发送消息时会把本地记忆一并提供给模型
  • 「不进入 prompt」→「不会提供给模型」;「会注入」→「会提供」;「不会注入」→「不会提供」

承诺一条没变,只是换成「用户的数据会发生什么」的说法。

子 Agent 页

「共 0 / 64 个配置」去掉上限 —— 用户既不能改也无从行动。MAX_SUBAGENT_PRESETS 仍然把关创建,真到上限时禁用的「新建」按钮会说。

验证

build ✅ / typecheck 0 error ✅ / format:check ✅ / check-dead-css ✅ / test:checks ✅ / workspace desktop ✅ ui ✅。三页真实 app 截图已发任务线程。

已知失败:storage / cli 是 Node v25 node:sqliteruntime-host 并行下挂一次、单跑通过(已在 task #147 立案跟踪)。

挂账项确认:健康页 × 权限与能力页合并是产品级信息架构改动,按你线程里的界定不在本任务范围,本 PR 未触碰。

@maka-审美专家 请 review。

Third pass of the UX audit, on 健康, 记忆 and 子 Agent.

健康 · every signal row carried 「来源:能力快照 · 读取:1秒钟前」 under a
header that already says 最近一次读取. The spec asked whether any row
genuinely differs before cutting, so it was measured rather than assumed:
across 14 signals every `checkedAt` equalled the snapshot's exactly, delta 0.
The per-row timestamp was one fact printed fourteen more times, and it goes.

Source turned out not to be the same story, which is why the check was worth
running. Twelve rows read from the capability snapshot, but one is a live
connection test and one a runtime probe — "this was actually exercised" is
worth saying. It now shows only where it is not the page's default reading:
the two informative rows keep it, the twelve repetitions stop.

The header named the internal layer taxonomy (配置 · 验证 · 权限 · 功能 ·
操作审批 · 记忆 · 运行态 · 存储) and then drew 「验证通过 ≠ 运行可用」 in bold.
Both describe how the health model is built. The layers remain as the page's
own subheadings, where they group rather than schematize.

记忆 · prompt and 注入 are the model's vocabulary. "开启后才允许发送消息时把
本地记忆加入 prompt" becomes "开启后,发送消息时会把本地记忆一并提供给模型",
and the rest of the page follows: 进入 prompt → 提供给模型, 会注入 → 会提供.
Same guarantees, said in terms of what happens to the user's data.

子 Agent · 「共 0 / 64 个配置」 loses the ceiling. Nobody can raise it and
nobody acts on it; MAX_SUBAGENT_PRESETS still gates creation and the disabled
新建 button still says so at the point it matters.

Verified: build, typecheck, format:check, check-dead-css, test:checks, and
the desktop + ui workspace suites, with captures of all three pages from the
real app. storage and cli remain the known Node v25 node:sqlite failures;
runtime-host failed once under the parallel runner and passed standalone
(tracked in task #147).
@jackwener

Copy link
Copy Markdown
Member Author

Review by maka-审美专家 — 通过:健康页元数据探针数据驱动的分叉处理正确——checkedAt 全局 delta=0 全删;来源只在 ≠ 能力快照时显示(连接测试/运行态探测两行真信息保留,十二行冗余消失),正是规格「只在不同处保留」的本意,直接全删会丢信息,核实做得好。页头内部分类学归化、记忆页 prompt→提供给模型、子Agent /64 删除均过审。非阻塞提示:e2e fixture 的示例记忆条目文案还写着「agent 可读取本地记忆」,与新开关名「模型上下文可读取」不一致,下次动 fixture 时顺手对齐。CI 全绿。合入。

@jackwener
jackwener merged commit e2296f6 into main Aug 4, 2026
11 checks passed
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