Skip to content

feat: add knowledge library card details - #35

Open
qingshungLI wants to merge 1 commit into
mainfrom
feat/library-card-detail-review
Open

feat: add knowledge library card details#35
qingshungLI wants to merge 1 commit into
mainfrom
feat/library-card-detail-review

Conversation

@qingshungLI

Copy link
Copy Markdown
Collaborator

范围

  • 为知识库增加独立只读详情导航,完整展示知识、答案、解释、来源和记忆状态
  • 严格区分已核验来源、截图来源、Fixture 与无效链接,只有安全 HTTP(S) 核验来源可打开
  • 增加加载、可重试错误、旧卡兼容、长文本、Dynamic Type、Reduce Motion 与高对比度文本处理
  • 同步前端布局稳定文档并增加来源派生状态 XCTest

Closes #25

背景

Plan 历史

原计划已在仓库历史中完成并退役:

  • 创建:088d7cd plan: feat-library-card-detail
  • 完成:0c86deb plan: complete feat-library-card-detail
  • 退役:0fbbaac plan: retire feat-library-card-detail

验证

  • npm --prefix backend run docs:check:通过,16 篇 Markdown / 139 个双链目标
  • git diff --check origin/main...HEAD:通过
  • iPhone 16e Simulator XCTest:通过,3/3
  • 既有 UI 证据:iPhone 16e Accessibility Extra Large + Reduce Motion;iPhone 17 Pro Max 标准字号、已核验来源、仅截图来源和不可连接 API 状态均通过
  • 截图保留于本机 /tmp/Omo-issue25-*.png

UI 证据使用显式 Debug Fixture 或不可连接本地地址,只证明受测 Simulator 的布局与状态映射,不证明真实 Qwen / TikHub 或生产服务。

合并

本 PR 保持 open,等待人工评审;不要自动 merge。

@qingshungLI
qingshungLI requested a review from starvingarc July 30, 2026 16:29

@starvingarc starvingarc left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

整体方向与 #25 一致:知识库卡片现在可以进入独立详情,来源降级也比原实现更诚实。复核中确认编译成功、3/3 XCTest 通过,文档检查和 diff-check 通过;不过以下问题需要在合并前处理。

必须修复

  1. 真实 API 时间格式无法被当前解析器处理

    后端使用 Date.toISOString(),实际返回类似 2026-07-30T08:00:00.000Z 的带毫秒时间;OmoModels.swift 中默认的 ISO8601DateFormatter() 无法解析这一格式。真实卡片因此会把“下次召回”显示为“等待安排”、隐藏创建时间,isDue 还可能把未到期卡片判断为到期。

    请建立同时兼容带/不带 fractional seconds 的共享解析器,并使用真实 API wire format 补测试。现有 Fixture 和测试时间均不带毫秒,因此掩盖了该问题。

  2. Debug 自动详情导航没有一次性消费

    openFixtureDetailIfRequested 同时挂在 onAppearstore.cards 变化上,而 LibraryView 在切换 Tab 后会重建、path 恢复为空。只要启动参数仍包含 -OmoOpenLibraryDetail,每次进入“知识库”都会再次自动打开第一张卡。

    该标记应放在不会随 Tab 重建的 ContentViewOmoStore 中,并在首次自动打开后立即消费。请覆盖:首次启动自动打开 → 返回列表 → 切到今日 → 再进知识库时仍停留在列表。

体验与无障碍

  1. 详情正文对比度不足

    explanation、来源归属和状态说明使用固定 OmoTheme.muted。该颜色对页面背景约为 3.53:1、对表面约为 4.00:1,低于普通字号建议的 4.5:1;固定 RGB 也不会随系统“增强对比度”自动调整。请改用动态语义色或提供满足对比度要求的 token,并复核正文、caption 与高对比模式。

  2. “低频漂浮”实际为持续循环动画

    详情页角色使用 1.8s.repeatForever,用户阅读长内容时始终移动,与文档声明的“低频漂浮”不一致。建议改为一次入场动作,或采用有间隔、可取消的 idle 动作;离开页面、Reduce Motion 或低电量时应停止。

验收证据

PR 描述引用的 /tmp/Omo-issue25-*.png 仅存在作者本机,其他 reviewer 无法复核;当前两张 Fixture 也不足以证明“返回后保留长列表位置”。修复后请补一段可复核的长列表返回验证,以及标准字号、Accessibility 字号、Reduce Motion 和来源降级状态的证据。

完成以上修改后可以继续复审。

@starvingarc starvingarc self-assigned this Jul 31, 2026
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.

完善知识库卡片详情与来源交互

2 participants