Skip to content

v0.8.8

Latest

Choose a tag to compare

@github-actions github-actions released this 17 Sep 14:51

[0.8.8] - 2026-09-17

0.8.8-dev 发布前 UX 反馈与防重复小批次(错误可见化 / 忙碌守卫 / 空态补全)

不改变功能与完成度的体验补强(双路 UX 审查后落地的高价值小项):

  • 查询失败不再伪装成空态useFiles 暴露 error,文件页首页查询失败渲染错误空态 + 重试按钮(此前失败只写日志,页面照常显示「没有匹配的文件」误导用户);加载更多失败保留已加载内容不变。
  • 设置页扫描横幅对齐文件页:补「已处理/发现」计数与取消按钮,扫描失败(scan.lastError)此前只在文件页可见、设置页发起的失败无处呈现;settings.scanningNow 文案退役(复用 files.scanning/scanProgress/cancelScan)。
  • 操作日志弹窗内错误可见:弹窗内撤销失败此前写入页面层 ruleError 横幅——被弹窗遮罩挡住完全不可见,改为弹窗内部错误行;弹窗补「仅显示最近 50 条记录」说明(此前静默截断)。
  • 归档防连点useFileArchive 以 ref 守卫(handler 引用保持稳定,不破坏 FileRow memo 链)+ archiving 状态驱动工具条「归档所选/归档当前筛选」禁用,归档/撤销执行期间各入口(含行级单文件归档)早退,杜绝重复批次。
  • 扫描与翻页防连点:扫描中「重新扫描全部」禁用;「加载更多」查询进行中禁用(FileList 新增 loading prop)。
  • 空态与占位补全:文件页项目视图专属空态(此前复用「没有匹配的文件」+搜索技巧按钮);课程详情「相关文件与项目」三态(加载中/为空/失败——此前加载中与为空整块消失);归档确认弹窗预检统计返回前显示「正在统计归档内容…」(预检失败不显示占位、确认仍可用)。
  • 高频截断文本补悬浮提示:项目页项目名/路径、课程卡名称(周/紧凑两种密度 + 叠层浮层)、作业标题/备注补 title(文件行 FileRow 此前已全覆盖,此为漏网点)。
  • 查询变化后列表回顶:搜索词/视图/筛选/排序变化时滚动回顶(滚动容器为 App 布局 <main>,与 VirtualRows 同源);加载更多与刷新保持当前视口、首挂载跳过(不破坏返回时的滚动位置)。
  • 验收:前端 vitest 537 例全绿(新增 3 例:查询失败 error 暴露与清空、预检统计中占位/失败不占位)、tsc 零错、check-arch 绿;i18n 双语成对(+8 对新 key,-1 对退役 key)。

0.8.8-dev 发布前性能与可读性加固(批次 A:行为零变化)

功能与完成度零变化前提下的发布前加固批次(全库前后端性能/可读性审查后落地):

  • 文件页渲染身份收敛FileRowReact.memo 跳过无关重渲(此前全仓库零 memo,搜索框每次按键在防抖触发前重渲全部可见行);FilePage 侧行为 handler(打开/定位/复制/IDE/解压/删除)与 rowHandlers / archiveVisible 统一 useCallback/useMemo 稳定引用,refreshList 稳定化(此前每帧新建身份会传染 useFileArchive 全部回调);unarchivedCount 入 useMemo。
  • 虚拟滚动去抖VirtualRows 可见区间未变时保持原对象身份(滚动事件不再驱动无意义重渲);list-enter 入场动画仅在非虚拟分支播放(虚拟行随区间重挂载,滚动时重放闪烁)。
  • 实时事件订阅稳定化useFiles 的 files-changed 监听改为挂载期订阅一次 + ref 读取筛选/翻页瞬时值(此前每次查询变化注销重订阅,异步注册间隙可能漏事件)。
  • 学业页派生值 memo:StudyPage 未显式传入 today 时冻结挂载时刻(默认参数每帧新建 Date 击穿下游 memo)、courseCounts / pending / reminder / existingColors / 选中课程作业过滤入 useMemo;CourseScheduleView 作业计数聚合为 Map(每卡片 filter 全表 O(n×m) 退役)、按天分组 + 布局派生单次完成(原每次渲染对全列表 7 遍 filter 再逐列重排)、叠层浮层扇形布局参数提为命名常量。
  • 设置页微收敛SETTINGS_GUIDE.find 同表达式 5 处 JSX 复制提为 openGuide;变更日志条数 50 命名 ACTIONS_LOG_LIMIT
  • 死代码清理filterFiles(客户端过滤,已被后端 query_files 取代)与 loadMoreMerge(mergeFiles 纯别名)删除,对应 8 个测试用例退役。
  • 设置读取热路径去盘load_settings 的损坏备份检查改每进程一次(原子标记短路)——此前 query_files 等高频命令每次调用都读盘 + 全量 JSON 解析 settings.json,仅为反复确认同一文件可读。
  • schema v11idx_units_kind(kind, state) 组合索引——kind:software / kind:project 同步失效清理与归档软件快照原为全表扫(state != deleted 范围条件下 idx_units_state 无法支撑 kind 过滤)。
  • 派生层批量失效清理:新增 IndexStore::mark_deleted_many(单事务分块 path IN + 批量 FTS 清理,与 mark_missing 同模式),software/project 同步的逐条 mark_deleted 循环(各自隐式事务,持锁放大)退役。
  • 零散算法与分配discover_software 去重 Vec.contains O(n²) → HashSet(与 discover_projects 同构);watcher 批次回调先借用遍历入队再 move 发射(整批 FileRecord 深拷贝退役,发射无条件执行);扫描上限 10_000(三处散落)与墓碑保留窗口 30 天提为命名常量(UNIT_SCAN_CAP / TOMBSTONE_RETENTION_MS)。
  • 验收:前端 vitest 534 例全绿(净 -8 死代码用例)、tsc 零错、check-arch 绿;Rust 393 例全绿(迁移测试跟进 v11 + idx_units_kind 存在性断言)、fmt/clippy/rust-arch 绿。
  • 同轮审查的批次 B 立项 0.8.9:只读重命令 async 化(Tauri v2 同步命令在主线程执行,慢盘查询冻结 UI——最高收益项,因改变命令间调度顺序须单独批次 + 手测)、LOWER(path) LIKE 前缀查询索引化(EXPLAIN QUERY PLAN 验证)、archive_project 单路径校验去全量 discover(见 ROADMAP v0.8.9)。

0.8.8-dev UI 一致性审查修复(弹层栈 / 反馈通道 / 键盘可达性)

全库前端五维审查(一致性/合理性/美观/易用/复用)后的修复批次:

  • 弹层栈与焦点管理Modal 建立进程内弹层注册表,按 DOM 顺序判定栈顶——一次 Esc 只关最顶层,嵌套确认弹窗(标签管理/课程表单/学期管理/归档设置等)不再连锁关闭父弹窗;打开时焦点移入面板(内容自带 autoFocus 的控件优先),Tab 在面板内循环,关闭后焦点还原到触发元素;Button/IconButton/SegmentedControl/图标选择器补 focus-visible 品牌色焦点环,文件行操作区补 group-focus-within 显影(键盘 Tab 可见)。
  • 归档设置嵌套确认弹窗移位:自动归档确认与 warn 二次确认从 Modal children 移到兄弟节点——floating-panelbackdrop-filter 会为 fixed 后代创建包含块,嵌在面板内导致确认弹窗遮罩盖不满视口(视觉缺陷)。
  • 文件页通知/错误双通道actionError(打开/删除/解压失败 → error 红色横幅)与 actionNotice(IDE 已打开、复制路径成功 → brand 横幅)拆分,均带关闭按钮;IDE 打开成功消息不再以警告色呈现;复制路径成功新增「已复制到剪贴板」反馈。
  • 软件目录移除确认:取消软件认定 / 解除排除补 ConfirmDialog(带目录回显),与监控目录移除同纪律——两者都改变索引可见性,不允许裸删;设置页 notice/dirError/ruleError 横幅补关闭按钮。
  • 前后端一致性:项目归档子目录名「项目」入 fixtures/app-contracts.jsonarchiveProjectDir),前端 ARCHIVE_PROJECT_DIR(ProjectsPage 归档预览)与后端 core::archive::PROJECT_ARCHIVE_DIR 双端测试锁定,消除前端硬编码镜像漂移风险。
  • 一致性清扫SegmentedControl 新增 pill 胶囊变体(含 ariaLabel),收编文件页四视图与设置页主题切换;课程时长预设与分类映射「仅看自定义」迁移到 ChipChip active 与标签图标选择器补深色 dark:bg-brand-500SegmentedControl 徽标选中色统一 brand-700;课表翻周按钮换 IconButtonBanner 关闭按钮换 IconButton;文件页加载文案颜色统一 text-muted
  • 动效令牌闭环global.css 以非分层规则把 .transition-colors 时长统一为 --duration-fast(覆盖 Tailwind 默认 150ms),兑现 tokens.css「动效时长禁止散落硬编码」的约定。
  • 验收:前端 vitest 542 例全绿(新增 9 例:Esc 栈/焦点循环/焦点还原/pill/双通道/软件移除确认×2/契约)、tsc 零错;Rust 393 例全绿(新增契约断言)、fmt/clippy/rust-arch 绿;i18n 双语 618 键对齐;check-arch / check:version 绿。

0.8.8「整理与回收」(功能,开发收官)

  • 软件单元识别第一版(0.8.7 阶段三并入):core/software.rs 权威标记(PAF App 目录 + portable 启动器 / Scoop install.json+manifest.json 清单对 / 便携启动器形态)+ exe 群聚结构启发式 + 用户裁决(认定 / 排除可持久化,排除优先);infra/software_sync.rs 发现结果派生写入 units(kind=software + software_kind 识别依据),启动延迟服务与裁决变更后双触发,陈旧单元标 deleted 可重扫恢复;schema v9(units.software_kind)。
  • 图标 key 注册表(下半)fixtures/icon-keys.json 真源 + lib/iconKeys.ts(labels / units / softwareKinds 三段键空间 + resolveIconKey 统一未知回退),双端 fixture 门禁测试(Rust DETECTED_BY_ALL 同源断言 + TS LABEL_ICONS 键空间对齐);文件行 project=Folder / software=Package 单元视觉(文件行沿用类别图标零回归)。
  • 文件页隐藏系统与组件内部文件:单一设置项(整体开关),展示层过滤 desktop.ini / Thumbs.db / .DS_Store、已识别软件组件内部全部文件、项目内 exe/dll/sys;索引保留,搜索与统计口径同步,关闭立即完整还原(query_files 读设置 hide_internal_files)。
  • 归档安全收口archive_preflight 预检(数量 / 体积 / exe/dll / 符号链接 / 软件冲突 / 指向源树的快捷方式引用报告,5 万条上限显式 truncated)——确认弹窗展示报告,软件冲突需勾选风险确认(archive.software_protected 拒绝整树移动,allow_software 显式放行,归档三入口同守卫);命令层归属校验 archive.forbidden 随 G 批落地。
  • 应用内删除走回收站delete_to_trash 统一删除走系统回收站(可恢复),归属校验与软件保护与归档同源;错误映射 delete.failed / delete.locked;文件页行级删除 + 确认弹窗。
  • 文件分类变更日志 v1:schema v10 action_log 追溯表——归档 / 撤销 / 回收站删除 / 定向重分类 / 解压全量记录;设置页高级区「变更日志」弹窗(最近 50 条、类型徽标、归档条目一键撤销)。
  • 智能解压:zip 解压到同级独立文件夹并入队扫描接入索引链路;两阶段安全边界(条目清单先整体校验:路径穿越 / 绝对路径 / 盘符拒绝、总体积 1GB 上限、压缩比 200:1 炸弹检测、条目数 1 万上限,后落盘);extract.not_archive / path_traversal / bomb_suspected / too_many_entries / failed 五错误码;文件页 zip 行「解压到独立文件夹」入口。
  • 信息来源单一化收口(0.8.7 审计阶段三):query_files 显式 totalKnown/hasMore 取代 total=-1 哨兵;监控目录三端点合并为 watched_dirs_overviewapply_scheme(id) 后端原子应用 + save_scheme 按 id upsert(消 schemes.json 与 settings 规则双真相);add_project_dir 返回规范化路径(AddDirOutcome 对称);ArchiveFailure path+phase 语义统一。
  • 错误响应与对账机制:错误码注册表(G 批)——fixtures/error-codes.json 真源 22 码 × 三级分级(retryable/ignorable/needs_user),core/error_codes.rslib/errorCodes.ts 双端镜像,归档链路错误全面 code|message 结构化;可靠性加固(H 批)——启动归档对账(磁盘真源修复索引 / 标记异常)、启动清理 *.json.tmp 残留、子进程强杀中断集成测试与环境变动(手工还原 / 两侧皆失 / 盘符卸载形态)用例全绿。
  • 可靠性加固·监视器异步化:大目录首次启动的监视器注册移入延迟服务后台线程(消除 10k/20k 目录 4–8 秒启动阻塞);运行期「添加监控目录」同样后台注册(注册前复检设置成员资格防移除竞态)。