[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新增loadingprop)。 - 空态与占位补全:文件页项目视图专属空态(此前复用「没有匹配的文件」+搜索技巧按钮);课程详情「相关文件与项目」三态(加载中/为空/失败——此前加载中与为空整块消失);归档确认弹窗预检统计返回前显示「正在统计归档内容…」(预检失败不显示占位、确认仍可用)。
- 高频截断文本补悬浮提示:项目页项目名/路径、课程卡名称(周/紧凑两种密度 + 叠层浮层)、作业标题/备注补
title(文件行 FileRow 此前已全覆盖,此为漏网点)。 - 查询变化后列表回顶:搜索词/视图/筛选/排序变化时滚动回顶(滚动容器为 App 布局
<main>,与 VirtualRows 同源);加载更多与刷新保持当前视口、首挂载跳过(不破坏返回时的滚动位置)。 - 验收:前端 vitest 537 例全绿(新增 3 例:查询失败 error 暴露与清空、预检统计中占位/失败不占位)、tsc 零错、check-arch 绿;i18n 双语成对(+8 对新 key,-1 对退役 key)。
0.8.8-dev 发布前性能与可读性加固(批次 A:行为零变化)
功能与完成度零变化前提下的发布前加固批次(全库前后端性能/可读性审查后落地):
- 文件页渲染身份收敛:
FileRow以React.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 v11:
idx_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 二次确认从
Modalchildren 移到兄弟节点——floating-panel的backdrop-filter会为 fixed 后代创建包含块,嵌在面板内导致确认弹窗遮罩盖不满视口(视觉缺陷)。 - 文件页通知/错误双通道:
actionError(打开/删除/解压失败 → error 红色横幅)与actionNotice(IDE 已打开、复制路径成功 → brand 横幅)拆分,均带关闭按钮;IDE 打开成功消息不再以警告色呈现;复制路径成功新增「已复制到剪贴板」反馈。 - 软件目录移除确认:取消软件认定 / 解除排除补 ConfirmDialog(带目录回显),与监控目录移除同纪律——两者都改变索引可见性,不允许裸删;设置页 notice/dirError/ruleError 横幅补关闭按钮。
- 前后端一致性:项目归档子目录名「项目」入
fixtures/app-contracts.json(archiveProjectDir),前端ARCHIVE_PROJECT_DIR(ProjectsPage 归档预览)与后端core::archive::PROJECT_ARCHIVE_DIR双端测试锁定,消除前端硬编码镜像漂移风险。 - 一致性清扫:
SegmentedControl新增pill胶囊变体(含ariaLabel),收编文件页四视图与设置页主题切换;课程时长预设与分类映射「仅看自定义」迁移到Chip;Chip active与标签图标选择器补深色dark:bg-brand-500;SegmentedControl徽标选中色统一 brand-700;课表翻周按钮换IconButton;Banner关闭按钮换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权威标记(PAFApp目录 + portable 启动器 / Scoopinstall.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 门禁测试(RustDETECTED_BY_ALL同源断言 + TSLABEL_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_overview;apply_scheme(id)后端原子应用 +save_scheme按 id upsert(消 schemes.json 与 settings 规则双真相);add_project_dir返回规范化路径(AddDirOutcome 对称);ArchiveFailurepath+phase 语义统一。 - 错误响应与对账机制:错误码注册表(G 批)——
fixtures/error-codes.json真源 22 码 × 三级分级(retryable/ignorable/needs_user),core/error_codes.rs与lib/errorCodes.ts双端镜像,归档链路错误全面code|message结构化;可靠性加固(H 批)——启动归档对账(磁盘真源修复索引 / 标记异常)、启动清理*.json.tmp残留、子进程强杀中断集成测试与环境变动(手工还原 / 两侧皆失 / 盘符卸载形态)用例全绿。 - 可靠性加固·监视器异步化:大目录首次启动的监视器注册移入延迟服务后台线程(消除 10k/20k 目录 4–8 秒启动阻塞);运行期「添加监控目录」同样后台注册(注册前复检设置成员资格防移除竞态)。