Skills Manager v1.34.2
Skills Manager v1.34.2
发布日期:2026-08-16
递交范围:v1.34.1...v1.34.2
发布概览
- 你刚改过的项目副本可能被判成「较旧的一方」,照着这个判断操作就会覆盖掉你的改动。现在比较的两边都直接读文件。
用户可见更新
- 项目同步状态不再用错误的时钟判断中央库 —— 此前是拿项目副本的文件时间戳,去和「中央库那行数据库记录的写入时间」比较。在中央库里改文件不会推动那个字段,而一次只改元数据的写入却会推动它、尽管内容没变。于是你刚改过的项目副本可能显示成「中央库更新」,照着这个状态从中央库拉取,你的改动就被替换掉了。现在两边都从文件本身读取。
- 「本地副本更新时拒绝拉取」这道保护更可靠了 —— Agent 工作区的「从中央拉取」在本地副本更新时会拒绝,而这道检查读的正是同一个比较,所以一个只是「记录看起来较新」的中央库就能让它失效。
开发者与治理更新
classify_sync_status现在只遍历中央目录一次,实时 hash 比较和最新内容 mtime 都来自这次遍历——取代了原来的「一次遍历 + 一次读库」,因此没有新增开销,也不需要为此加缓存。- 诊断来自 PR #328,它是在做一个大得多的改动时发现这一点的。本次只采纳这一部分:该 PR 还包含「覆盖前快照」和「新的赢」的冲突裁决,这两者是本项目刻意放弃的方向——1.34.0 对同一时刻的答案是停下来询问。
- 两条既有测试原本是靠这个 bug 才通过的,各自伪造一个够老的
updated_at来冒充「年龄」。现在改为在磁盘上造出这个年龄,并断言数据库列翻不了盘。两个方向都做了反向验证。
当前校验状态
- ✅ 跨平台构建通过(macOS Intel / macOS ARM / Windows x64 / Linux x64)
- ✅ TypeScript typecheck 通过
English release notes
Release date: 2026-08-16
Commit range: v1.34.1...v1.34.2
Release Overview
- A project copy you had just edited could be reported as the older side, and acting on that reading overwrote your edit. Both sides of the comparison now come from the files themselves.
User-facing
- Project sync status no longer judges the library by the wrong clock — Freshness was decided by comparing the project copy's file timestamp against a database column that records when the library's row was written. Editing files in the library does not move that column, and a metadata-only write moves it while nothing changed, so a project copy you had just edited could be shown as "center is newer". Following that status and pulling from the center then replaced your edit. Both sides are now read from the files.
- The refusal that protects a newer local copy is more reliable — "Pull from center" for an agent workspace declines when the local copy is ahead, and that check reads the same comparison, so a library whose row merely looked recent could defeat it.
Developer & Governance
classify_sync_statuswalks the center once and answers both the live-hash comparison and its newest content mtime from that walk — replacing one walk plus a database read, so there is no new cost and no cache needed to avoid one.- Diagnosis is from PR #328, which found it while building a much larger change. Only this part is taken: that PR also snapshots before overwriting and resolves conflicts newest-wins, both of which this project deliberately dropped — 1.34.0 answers the same moment by stopping and asking instead.
- Two existing tests passed only because of the bug, each fabricating an
updated_atold enough to stand in for age. They now build that age on disk and assert the database column cannot flip the answer. Reverse-verified in both directions.
Current Verification
- ✅ Cross-platform build passed (macOS Intel / macOS ARM / Windows x64 / Linux x64)
- ✅ TypeScript typecheck passed
完整变更:v1.34.1...v1.34.2