2.0.0
2026-10-25
这一版把三条线收成一个可交付的版本:同一 WiFi 多设备直连、AI 经 MCP 读你的笔记(边界由你定)、跨网同步的订阅与许可证体系。
新增
- 同一 WiFi 多设备直连(LAN Sync) —— 两台机器在同一网络里自动发现,配对一次之后自动同步;断网时各改各的,联网后合并。
- 外部 AI 接入(MCP)与五档权限 —— 不接 / 只读 / 只读(全部空间)/ 可写(每次确认)/ 可写(免确认);每次调用留审计,写操作先出草稿;入口默认关闭,给哪个 AI、给多少由你定。
- 跨网同步的订阅与许可证体系 —— 许可卡(长期凭证)+ 短期租约(≤30 天)两段式;到期只停跨网,同网与本机功能照旧;宽限 14 天。
- 同页并发合并(CRDT) —— dev 线已接入(
page_crdt / page_crdt_pending 旁路 + 前端合并);双机验收仍在进行中,本版不对外宣称"CRDT 协作已上线"。
- 设置面板:中继与订阅两格在不含跨网的构建里会说清"这个版本不含跨网(下一阶段)",不再显示假状态。
修复
- 许可窗口只看裸数字 —— 有签名卡却仍判"读不到有效期";现在先看验过的卡,验不过才拒(fail-closed)。
- 同步面板滚动 —— 弹层内容多时按视口封顶、自己滚;内嵌形态底部「高级」不再被裁掉。
- 侧边工具栏加宽 —— 48 → 52px(图标仍 24),点击区更从容;mac 那档 56 → 60。
- 配对码两端算不到一起 —— 两端各自生成 ask ⇒ 码必然不同;现在按设备号定死"挑哪一份 ask",「确认」路径也不再重造。
- 配对秘密被空串静默覆盖 —— 重启后变成空值而排障行说成"从未配对过";现在空串按「清掉」处理并留一行日志。
- 隧道服务侧静默失败 —— accept 循环四个
else { return } 全部改成带原因的日志(真机排障才走得下去)。
- 外部 AI 权限面板文案简化 —— 五档压短,"能做什么"改成读/写/审计/边界四行。
变更
- 跨网中继数据面:链路已在开发构建里真机跑通(异网双向),但连接稳定性仍在校准,不进本版正式包。
- CRDT 协作:代码已接入,双机验收(D1–D6)未完成,对外不下结论。
1.92.25
2026-10-23
这一版修的都是手机上用着别扭的几处:打字时不再顶着底栏、图不会刷新就没、导出的空间包换台机器打开也还有图
修复
- 快速记录屏不再挂底栏,左上补了「‹ 返回」 —— 键盘弹起时「笔记/搜索/我的」横在快捷工具栏上方,既挤掉输入区又容易点错;现在这一屏整屏专注,左上「‹」回首页(效果图本来就是这么画的)。
- 键盘弹起时底部那截死白与工具栏文字被切 —— 底栏摘掉后仍留着 64px 给它的让位,且工具栏没锁高度会被压扁;两处一起修好。
- web 版插的图刷新后就没了 —— 以前正文存的是只活一次会话的
blob: 地址(字节其实还在本机);现在按内容指纹存、渲染时再取,刷新后图还在。⚠️ 此前插的图救不回来(正文里只有死链),重插一次即可。
- 手机 web 导出的空间包,导入桌面后图片打不开 —— 导出漏了「快速记录」存的附件字节(存的那一刻页还没建),且正文里的引用桌面读不懂;导出按正文引用兜附件、导入把引用落成本机真实路径。
其它
- CRDT 阶段 2:客户端「加密快照」上传切片(
sync_upload_snapshot)—— 快照源是空间库密文,明文空间当场拒、Web 平台明确拒绝;无用户可见入口(自动时机要等配额/限流语义定了再定)。
1.92.24
2026-10-22
这一版没有用户可见的变化:只修了移动端的三根 Chromium 验收脚本(测试侧),产品代码未动
其它
- 移动端三根验收脚本改点阅读屏返回键 —— 上一笔删掉「‹ 首页」浮标(
.mnote-home)后,三根脚本仍在点这个选择器(点了个空 ⇒ 回不到设置屏 ⇒ CI 上两条新断言实测 false);现改点阅读屏自己的 .mread-back(即 goHome),底栏 [data-tab="home"] 与 .mhome 兜底。只动 scripts/ 下三份验收脚本,产品代码零改动。
1.92.23
2026-10-22
这一版:邮件正文终于能带上它自己的样式(脚本仍一行都跑不了)+ 从 Web 导到桌面的空间包能正常打开了 + 移动端能导入导出空间、阅读屏按块类型排版
新增
- 移动端设置屏新增「空间」卡 —— 导出当前空间/导入空间包;导入成功会自动切到新空间(移动端没有空间切换器,不切就等于导完看不到)。卡底写明「大空间(> 50 MB)建议在桌面端」,并用一句话说明 Web 档为什么不提供多设备同步。
- 移动端阅读屏按块类型渲染 —— 标题分级、列表逐项、引用、说明块、图片占位各有自己的样子(原来所有块都排成同一个普通段落,列表还会粘成一行)。
修复
- 邮件正文改用沙箱 iframe 渲染 —— 邮件自带的
<style> 现在生效了(样式锁在 iframe 内,污染不到应用),脚本仍全禁(消毒白名单 + sandbox 都不给 allow-scripts)。
- 邮件阅读区工具栏按真实溢出自愈收纳 —— 原来只靠隐藏测量行,量成 0/偏小就永远不收起 ⇒ 真机上工具栏溢出;现在按真实宽度收放,且只在宽度变化时重新展开(避免来回跳)。
- ENVELOPE 解析失败的那一封按 UID 救回 —— Message-ID 里带未转义引号的信会让整条 ENVELOPE 响应解析失败,以前只把这一封跳过(它在列表里永久消失);现在改走 UID + 头部两条不带引号语法的路把它取回来。
- Web 导出、桌面导入正常但打开时出错 —— 两侧
changes 的列名(id/seq)与 workspaces 的列数(缺 created_at/updated_at)漂移,而建表用的是 CREATE TABLE IF NOT EXISTS、列不会被纠正 ⇒ 导入成功却打不开。桌面侧对已有包做幂等改名/补列,Web 侧导出的 schema 已与桌面统一。
- 移动端 Web 档不再显示「设备配对与同步」卡 —— 配对/局域网/同步全是原生命令,Web 档里这张卡每一项都只会是"不支持"(假入口);那句说明搬进「空间」卡脚注,如实告诉用户换设备请用空间包。
移除
- 删掉冗余的「‹ 首页」浮标 —— 各移动屏的回家路径已建齐,再用一颗全局浮标兜底反而看不出谁漏了;现在由新门禁
check-mobile-exit-routes 逐个屏钉住「回家的路」。
1.92.22
2026-10-21
这一版几乎全是"真机读数换来的修复":多端同步的两个真卡点(游标越界、配对秘密回落)、
修复
- 多端同步:游标越界会"永久静默" —— 服务端按
device_seq > since 过滤,一旦本机那格游标大于对端最大值,就永远返回空、一个错都不报(真机:我方 245 > 对端 19 ⇒ 一页也拉不到)。现在服务端回报 max_device_seq;旧对端不带这格时用冷探针(问一次 since=0,十分钟冷却)判断"是不是越界";判定越界后归零并真的写回(新入口 reset_peer_cursor 允许倒退,只给自愈用)。
- 多端同步:配对秘密回落 —— 设备级那格是空串、值在房间档那一格 ⇒ 每轮拿空串出示 ⇒ 对端 401。现在读路径回落,真机
secret=有 · error=None。
- 「按名字挑对端」回滚 —— 名字该管"并到哪个空间",不该管"能不能说话";上版用它挑对端,把能说话的对端筛掉(候选 0)。
- mermaid 块里按退格会把整块删掉 —— 代码页是纯 DOM 的 textarea,退格冒泡到 Lexical ⇒ 整块被删。现在外层不可编辑 + 键事件不冒泡(不 preventDefault,textarea 照常)。
- 分栏点不进去、没有光标 —— 分栏那一格被块手势判成"空白安全区" ⇒
preventDefault() 吃掉浏览器默认聚焦。已把分栏编辑器加进唯一那份块手势排除清单(一处生效于所有块手势)。
- 导出 Markdown:多栏与 Excalidraw —— 多栏导出成 HTML
<table>(一格多行不再粘成一行);Excalidraw 导出成内容寻址的 !drawing ⇒ zip 真的带上附件(旧写法是一个凭空的相对路径)。
- 「待取回的远端版本」界面根本看不见 —— 它藏在默认收起的「高级」里,而且清单只在一轮同步之后才读(刚开面板永远是空的)。现在挪到主视图、打开面板即读、读失败也说一句真话。
其它
- iOS 打包链仍缺一块(
n0-dns-resolver 的 macOS 专属符号),功能不受影响,已按 owner 决定先放下;
- 「跨网同步订阅」的扫码开通仍不可用(订阅主体标识未定,界面如实说明);
- 自动同步的后台轮次依赖面板活跃度,这条尚未修。