Skip to content

v0.3.0 — 插件数据跟着工作区走(索引与回收站进 <工作区>/.dsh-notes/)

Choose a tag to compare

@Phy-D Phy-D released this 01 Oct 07:00
· 120 commits to master since this release

插件自己的数据现在跟着工作区走了。 这是本插件的一次存储契约变更(带自动迁移,升级零操作):
把工作区备份走、或整份拷到另一台机器,装上同一个插件就能原样读出来 —— 分类树、笔记归属、忽略规则、
置顶、跨工作区映射、回收站(可恢复的删除),全都在工作区里。

破坏性存储变更,带自动迁移。 插件的语义数据(分类树、笔记归属、忽略规则、置顶、
跨工作区映射、回收站)从用户主目录搬进工作区自己的 .dsh-notes/:

<工作区>/
├── notes/                  # 笔记(不变)
├── .dsh-assets/            # 图片资产(不变)
└── .dsh-notes/             # 新增:插件数据(自动写 .gitignore,不进 git status)
    ├── index.json          #   薄索引
    └── .trash/             #   回收站(文件本体 + trash.json)

为什么:以前这些数据在 $DSH_HOME/knowledge/registry.json —— 用户主目录。备份工作区、
或把工作区搬到另一台机器,数据不跟着走,得从头组织一遍。现在整份拷过去、装上同一个插件就能原样读出来。

变化

  • 跟着工作区走:备份 / 迁机 / 改路径之后,分类树、归属、忽略规则、置顶、跨工作区映射、
    回收站(可恢复的删除)全都在。
  • 路径自动重定位:索引里记的是绝对路径;工作区换路径后,装载时按旧根的相对位置重定位到新根,
    不会留下一堆指向老机器的死路径(这条不做的话,"搬走的工作区"是打不开的)。
  • 升级零操作:第一次打开工作区时,把旧 registry.json 里属于它的切片自动迁进
    .dsh-notes/index.json,旧文件原样保留作备份;已知工作区列表改存 $DSH_HOME/knowledge/workspaces.json。
  • 机器本地只剩扫描缓存(index/<key>.json,派生数据)与"这台机器见过哪些工作区"。
  • storeScope: home 逃生开关:完全回到旧行为(只读挂载、共享仓库、应急回退时用);
    knowledge 工具新增 migrate op(toWorkspace / toHome),在两个位置之间显式搬运
    (移动语义,不留两半)。
  • 只读工作区:读路径(对账/扫描)只记一次日志、不抛,界面仍能用内存里的索引;
    用户显式写操作才如实报错。
  • .dsh-notes/ 永不被扫描:走目录时跳过所有点目录,所以回收站里的 .md 不会被当成候选笔记
    重新登记回树(回收站搬进工作区的前提)。
  • 标签/分屏布局、字号刻意留在浏览器 localStorage(设备形状的偏好,不跟着工作区跑)。

工程

  • 新增 lib/store.js(存储位置决策 + 数据切片,纯函数)与 test/store.test.mjs(9 条)、
    test/store-scope.test.mjs(8 条:迁移 / 搬走工作区 / 只读 / 回收站 / 点目录不被扫 / 两种形态等价)。
  • 单测 184 条(v0.2.0 是 164 条),build-graph cycles 0。

怎么用

  • 什么都不用做:第一次打开工作区时,旧 $DSH_HOME/knowledge/registry.json 里属于它的那部分
    会自动迁进 <工作区>/.dsh-notes/index.json,旧文件原样保留作备份。
  • 搬机器/搬路径:整份拷过去、用那个目录开会话即可(索引里记的绝对路径会按新根自动重定位)。
  • 不想要工作区里这个目录:配置 storeScope: home 回到旧行为;或用 knowledge 工具的
    migrate op 在两个位置之间显式搬运。
  • 要备份"人工组织":带上 .dsh-notes/(它自带 .gitignore,不会污染你的 git status)。
    只删掉它的话,笔记文件不丢、rescan 能把"哪些是笔记"认回来,但分类树/归属/忽略/置顶会退化成平铺树。

验证

190 条单测全绿(test/store.test.mjs 10 条 + test/store-scope.test.mjs 9 条是新加的),
build-graph cycles 0;真机实测:迁移后树结构与迁移前逐项一致、旧索引未被改写、
工作区 git status 看不到 .dsh-notes/、切到别的工作区不会在那里留下空目录。