Conversation
同一连接重复双击原本每次都新建标签页(rdp-{conn}-{毫秒时间戳} +
add_tab_with_mode 无条件新建),远程桌面场景下很快就堆出多个指向同一
主机的会话。改为把标签身份钉死在「协议 + 连接 id」上,与 db_view 的
database-tab-{id} 一致。
- 新增 remote_desktop_tab_id:id 只由协议与连接决定,不含时间戳/序号
- 落标签改走 activate_or_add_tab_lazy_with_mode:已存在则按 TabOpenMode
激活(Background 不抢焦点),不存在才在懒创建闭包里建 RemoteDesktopView
- tab_index 仍按标题去重(不同连接同名时照旧加 (n) 序号),不再依赖
同前缀计数
- 回归测试:remote_desktop_tab_id_is_stable_per_connection(纯函数)与
remote_desktop_opener_reuses_the_opened_tab(源码守卫,锁死复用入口、
禁止 as_millis / add_tab_with_mode 回流);两者都做过变异对照——把时间戳
塞回 id 时两条同时失败
行为变化:同一 RDP/VNC 连接不再能开出第二个标签页(右键菜单本就没有
「新标签页打开」入口)。需要第二条同主机会话时可复制连接,Windows 上还
可用右键的独立全屏窗口。
- db:ExportConfig 新增 rows_per_statement(默认 100,与 Navicat 的「每条语句的 数据行数」一致),render_insert_statements 按批切分成 `VALUES (...), (...)`; 分页大小对齐成整批,批量不会被翻页边界拆成两条语句 - db:新增 normalize_rows_per_statement,取值收敛到 1..=100000 - core:AppSettings 新增 sql_export_rows_per_statement,旧 settings.json 走默认值 - db_view:转储 SQL 窗口在「转储到」下方加「每条语句的数据行数」输入框,仅导出 数据时显示;空白/非法输入回落默认值,越界收敛,导出时回写输入框并持久化 - locales:新增 SqlDump.rows_per_statement(en / zh-CN / zh-HK) Refs #208
在单元格里编辑时,鼠标在输入框内拖动选文本,网格会同时开始自己的 拖选:指针扫过相邻单元格就把它们纳入选区,而 commit_cell_edit 会把 新值批量写回选区内的**所有**单元格 —— 现象就是「不小心把隔壁一起 编辑了」。 - 新增纯函数 pending_grid_drag 承载唯一规则:有格子在编辑 ⇒ 网格不接管拖动 - 拖选链路三段全部收口:按下记录起点、拖动启动、拖动中扩展 (第三段在 update_drag_selection 早退,覆盖「拖到一半才进入编辑」) - start_drag_selection 用同一规则,避免绕过链路重新打开拖选 - 选中态(没有格子在编辑)下拖动照旧多选,行为不变 - 5 个用例:纯函数四态 + 一条源码契约钉住三段守卫都还在 验证:cargo test -p one-ui --lib 100 passed / 0 failed; cargo check -p db_view -p main --all-targets 通过。 该文件在基线上本就有 7 处 rustfmt 偏差与 3 个 clippy 告警(都在 selection.rs:85 / state.rs:1713 / state.rs:2619 等既存代码里), 本次未新增、也未顺手改动它们。 Closes #302
宽表查询结果横向铺满几十列后没法读,新增按「列名:值」逐字段竖排的
显示形态(Navicat 的 form view 那种),表数据页与 SQL 结果页共用。
- 新增 TableViewMode::{Grid, Vertical} 存 AppSettings:SQL 结果页每执行
一次查询都会重建 DataGrid,视图偏好放实例字段会被静默重置
- delegate 新增 vertical_field 作为取值边界,显示列↔原始列换算仍只在
delegate 内完成(隐藏列、过滤后的行、二进制字段均已覆盖)
- 纵向列表用 uniform_list 虚拟化,行模型拍平成「1 行记录头 + 每可见列
1 行」以满足等高约束,行高与网格保持一致
- 工具栏新增「显示方式」下拉;设置-通用-数据库 新增「结果显示方式」
- 纵向形态下收起网格专属入口(单元格编辑、行增删、提交、表内查找、
大文本编辑器),避免出现「点了没反应」的静默落空
- 数据字体在渲染入口解析一次并按字体族缓存:all_font_names() 是系统级
全量枚举,不能逐行调用
- 词条三语补齐;新增 12 个用例(源契约、delegate 单测、词条真实解析断言)
验证:cargo check -p one-core -p db_view -p main --all-targets 通过;
cargo test -p db_view --lib 759 passed / 0 failed;改动文件 rustfmt clean。
Closes #300
两件事出自同一条反馈:状态栏那条 SQL 复制不出来;SQL 注释只能手敲 `--`。 表数据页: - 底部状态栏「查询耗时 52ms SELECT ...」右侧新增复制按钮,复制的是完整 SQL —— 宽表下这行总被省略号截断,屏幕上看到的不是全文 - 空 SQL 不写剪贴板,避免把上次的内容悄悄清掉 查询视图注释: - 「注释/取消注释」自 a1abc61 起就绑了 cmd-/ / ctrl-/,但它既不进 「设置 → 快捷键」也不在任何菜单里,用户无从发现;中文输入法吞掉 cmd-/ 时也无从改键(模块测试只断言了绑定「写对了」,没覆盖可得性) - 新增 action_id::SQL_TOGGLE_COMMENT,init / refresh 两条注册路径统一走 shortcuts_for,默认键位不变 - 「设置 → 快捷键 → 数据库」新增「注释/取消注释」一项 测试: - 2 个行为测试用运行时真实 keymap 验证「焦点在编辑器里按快捷键会命中」 与「用户改键后随之换键」;前者做过 RED 反证(停掉注册即变红) - 1 个守卫测试钉住设置面板列出的键位与运行时默认值一致 - 2 个契约测试钉住复制按钮接线与 handler 既复制全文、又跳过空值 验证:cargo test -p db_view --lib 750 passed / 0 failed; cargo test -p main 646 passed;cargo check -p one-core -p db_view -p main --all-targets 通过;改动文件 clippy / rustfmt 零新增偏差 (sql_editor_view.rs:1100/3779 与 keybindings.rs:101 的告警在基线上既有, 本次未顺手改动)。 Closes #290
交换机/防火墙场景下 navop 只报 `Unable to receive more messages from the channel` (russh RecvError)或裸 `Disconnected`,报错里看不出真因,也不会自愈: - ssh.rs:password / none 探测 / keyboard-interactive start、restart、respond 五处认证 往返补 context;收到 InfoRequest 时记录 debug 日志,避免只剩一个裸传输错误 - ssh.rs:实现 `Handler::disconnected`,把设备给出的 `SSH_MSG_DISCONNECT` 原因码与文本 以 warn 输出(russh 默认实现只在 debug 打印,设备侧原因此前完全丢失) - ssh_backend.rs:识别认证阶段的 RecvError 并补充排查提示(密码被拒 / 账号已登录、 VTY 并发达上限 / RADIUS、TACACS、LDAP 不可达 / 设备认证超时短于登录往返) - ssh_backend.rs:会话通道建立失败时若传输层已被设备断开,同样重建连接并降级为单个 裸交互 channel。原先只认 `probe_killed_transport`,而它取决于本地 transport 状态, 与设备的 FIN 存在竞态:抢到就重建成功,没抢到只报 `Disconnected` 且不重连 - terminal.rs:新增会话级降级兜底——设备在 keyboard-interactive 往返中掐断传输层时, 改用纯密码认证重试一次;判定收敛到 `should_retry_ssh_without_keyboard_interactive`, 降级只在本次会话内生效,连接参数重新应用时复位,因此一次连接序列最多降级一次 - locales:修正「服务器需要 MFA/二次认证」的误导表述,改为「当前认证方式被拒绝 + 服务器要求 keyboard-interactive」并提示先确认凭据;双因素 tooltip 补充自动降级说明 验证:`cargo test -p ssh -p terminal --lib`(151 / 513 通过,含 3 个新增用例: RecvError 提示包裹、keyboard-interactive 判定、降级触发条件);`cargo check -p terminal_view` 通过;`rustfmt --check` 仅剩 ssh_backend.rs 两处既有偏差; `cargo clippy -p terminal --all-targets` 无新增告警。
`SshParams.keyboard_interactive` 是 `Option<bool>`,缺省语义为「开启」 (`keyboard_interactive_enabled()` → `unwrap_or(true)`),而导入草稿转换时把它留空, 于是每个迁移进来的连接都默认勾上双因素、一律走 keyboard-interactive 优先, 在交换机上一认证就被设备掐断。 - connection_import_draft_conversion.rs:迁移时显式写入 `Some(false)`,注释说明迁移源 里的「支持多种认证方式」只是服务器返回的方法列表,不等于需要二次认证 - 新增单测断言迁移连接不再默认启用 keyboard-interactive 验证:`cargo test -p main --bin navop -- connection_import`(37 通过,含新增用例, 并单独复跑一次确认)。
改键后旧键不释放:注释键原先用普通 `KeyBinding::new` 注册,而相邻的 RunCurrentQuery / RunAllQuery 都走 `rebind_keybindings`(内部会给旧键补 `NoAction` 影子绑定)。gpui 的 keymap 只增不减,于是改键后旧键仍然生效。 改为与同组快捷键一致,走 `rebind_keybindings`。 默认 `cmd+/` 按不出来:`notes::init` 会在 `navop_app::init` 之后再次全局绑定 `secondary-/`(切源码模式),按 gpui「无 context 的绑定等价于最深 context、 同深度后注册者胜」的规则,SQL 编辑器里的 `cmd+/` 命中的是 notes 的 ToggleViewMode。修法是在 `notes::init` 之后再刷一次 SQL 编辑器键位,把 context 更深的绑定排到最后,notes 自身行为不变。 默认键位改为按平台单一取值:mac `cmd+/`、Windows/Linux `ctrl+/`;运行时与 设置面板同源(新增守卫测试逐字段比对两平台取值),避免 mac 上 `ctrl+/` 实际 已被 notes 的全局绑定吃掉、却仍显示为注释默认键。 空白行注释:原先 `toggle_sql_line_comments` 对空白行直接 `continue`,用户没 法先在空行写 `-- ` 再写 SQL。现在注释时空白行也补 `-- `(带缩进的行补在缩进 之后),光标跟到 `-- ` 之后可直接续写;取消注释时空白行保持原样。插入长度、 取消时的移除长度与光标偏移共用 `SQL_LINE_COMMENT_MARKER`,去掉散落的魔法数。 验证:`cargo test -p db_view --lib` 776 passed(含 3 条空白行用例与两平台默认键 守卫);`cargo test -p main --bin navop` 651 passed;rustfmt / clippy 无新增偏差。
横向滚动:长值原先被硬截断且没有滚动条,只能看到开头。现在标签列固定在滚动 区之外,值区单独横滚,底部常驻横向滚动条(与网格表格区同款定位、与标签列 错开),触控板横向滑动或拖滚动条都能看全。 所有值行必须共用同一个内容宽度——共享横滚句柄的 `max_offset` 是每一行的滚动 容器写回的,行宽参差不齐时最短的那行会把整列偏移夹回 0。因此内容宽度取全页 最宽值(只增不减,翻页/改列可见性时重置),按数据字体的 ASCII 与全角 advance 估算,宁可略宽不略窄;超长值按已量部分外推,不逐帧全量扫描。 值区用 `overflow_x_scroll()` 而不是 `overflow_hidden()`:gpui 只对 `Overflow::Scroll` 的轴应用手势增量,隐藏溢出会让横向手势失效;再加 `restrict_scroll_to_axis()` 拦住 gpui 的默认行为(只支持横滚的容器把竖向滚轮 也当横向滚动),否则竖向滚轮会让值区自己跑。 单元格编辑:单击值行选中、在已选中的行上再点一次进编辑,点别的行先自动提交 手上那条,避免无声丢弃输入。编辑用表格自己的编辑器(Enter 提交、Esc 取消), 不另起输入框;编辑态描边高亮,已改未提交的值行用警示底色。工具栏的撤销 / SQL 预览 / 提交在纵向形态恢复;行增删、表内查找、大文本编辑器仍然收起——纵向 没有「行 × 列」这个落点。 纵向行是自绘的,补了两处重画链路:事件订阅之外再 observe 表格实体(Escape 取消编辑只 notify 不 emit),并把展示列按行号列偏移换算成网格坐标,避免点击 与编辑落到隔壁字段。 验证:`cargo test -p db_view --lib` 776 passed(新增行号列换算、宽度估算、 横滚共用宽度与句柄、编辑链路 4 条用例,更新 3 条既有契约测试);`cargo check -p main --all-targets` 通过;改动文件 rustfmt 干净、clippy 无新增告警。
原实现是下拉菜单,面板高度只由条目数决定:字段多的表(几十列)会一路顶到 窗口底部,最后几个字段点不到,也看不出还能不能往下翻。 - 字段列表高度按行数算出来再封顶 320px。这里必须是确定高度而不是上限: 只给 max_h 时外层高度由内容决定,里面的滚动区被解析成 auto,内容把容器 撑开就永远不溢出,滚动条自然不出现。 - 列表常驻滚动条,不再依赖鼠标悬停(主题默认 scrollbar_mode 为 Hover)。 滚动条挂在非滚动容器上——它是绝对定位的,放进滚动容器会跟着内容跑。 - 新增字段搜索框:大小写不敏感的子串匹配(输入 id 同时命中 id 与 tenant_id),只筛列表、不改列的可见状态;搜不到时显示一行提示。 - 标题行显示「显示数/总数」,搜索时也能看出总共多少列。 - 底部固定「至少保留一列可见」提示与「显示全部字段」,全可见时禁用。 搜索框在 DataGrid 构造时创建:弹出面板的内容闭包每次渲染都会重跑,在里面 建实体会每次都换一个新实体、光标也跟着丢。同时删掉只剩面板在用的 column_visibility_entries,面板数据改由 column_visibility_panel_state 提供。
macOS 上销毁原生窗口时,AppKit 的 Touch Bar 观察者会去注销一个已经 dealloc
的对象,抛出的 ObjC 异常无人接住 ⇒ 进程直接 SIGABRT。这不是 Rust panic:崩溃
栈里没有一帧应用代码,能读到的线索只有 `_NSTouchBarFinderObservation
invalidate` → `removeObserver:forKeyPath:context:`。
先试过的修法是在 gpui 的 `MacWindow::drop` 里给 NSWindow 的 release 加 100ms
宽限期(gpui-pre `fork-0.3.112` 起,v0.19.x 已带)。带 Touch Bar 的机器上
v0.19.1 仍同帧崩溃 —— 那个赌注按帧率算时间,而 KVO 注销挂在显示周期 flush
上,两者不是一回事。
改走唯一被真机验证过的那条路:关闭不销毁,隐藏 + 复用。
- `window_close::hide_for_reuse`:macOS 上 `orderOut` 隐藏,并断言确实已不可
见;非 macOS 恒返回 `false`,调用方据此回落。
- `window_close::close_window_for_reuse`:统一关闭入口。隐藏成功即返回
`true`;隐藏失败、或窗口没有登记复用键,才回落 `remove_window()`。
- `popup_window::open_reusable_popup_window`:`factory: Fn` 而不是 `FnOnce`
——「能被多次调用」是复用的前提,写进类型里,不可能忘;复用键是必填参数,
也就不会被静默忽略。命中活窗口时**用本次调用的 factory 重建 view**,再
`activate_window()`,同时复位标题与尺寸。
- 注册表只记 `{ handle, content }`,**不记 factory**。记了就会退化成「第二次
打开显示的是第一次的内容」——内容由入参决定的窗口(导入/导出/数据比较)
全都会错。
- `install_reusable_popup_close_routes` 一次接齐三条关闭入口:视图内的按钮、
Cmd+W(`set_window_close_handler`)、以及**原生标题栏红点**
(`on_window_should_close`)。红点这条最容易被漏,它由 AppKit 自己发起、
不经过应用代码,漏了复用键就永远命中不到,等于白改。
- `open_popup_window` 的签名与行为完全不变(不传复用键 = 一次性窗口)。这是
敢动公共层的底气:没接入的调用点行为零变化。
#262 是同类问题的第一次(远程文件编辑器窗口),当时只给那一个窗口做了隐藏 +
复用;这次把它提升为公共机制。
验证(`RUSTFLAGS=-D warnings`,HEAD f42d2d7):
- `cargo check -p one-core -p db_view -p extension_view -p remote_image_preview
-p main --all-targets` 通过
- `cargo test -p one-core --lib` 686 passed
- 新增 3 条源码契约测试,并做了三个方向的变异反证:① 把 `hide_for_reuse` 排到
「是否已登记」检查之前 ② 给注册表加回 factory 字段 ③ 拿掉
`on_window_should_close` ⇒ 分别让对应测试 FAILED,还原后 3 passed。
⚠️ 本机 Mac16,1 没有 Touch Bar,结构上复现不了这个竞态:只能确认「改了 + 编译
与测试通过」,**不能**声称真机不再崩溃,那要靠报障机(Mac14,7)验证。
承接上一笔的公共机制,把「关闭即隐藏 + 复用」接进实际会崩的窗口。 触发本次报告的是**全局代理设置弹窗**:取消与保存两条路径都调 `window.remove_window()`(`main/src/setting_tab.rs` 的 `on_cancel` / `on_save` 尾部),带 Touch Bar 的机型上(报障机 Mac14,7 / macOS 27.0)点完就闪退。同一 台机器 09-23 在 v0.18.6 上崩过一次,升级到 v0.19.1 后 09-24 又崩,崩溃帧逐帧 相同。 接入方式统一为:打开走 `open_reusable_popup_window` + 复用键,关闭走 `close_window_for_reuse`。因为复用会用本次调用的 factory 重建 view,**不需要** 在关闭前手工复位表单 —— 第一版机制里「每个窗口都要自己写 reload」那一整类坑, 在换机制之后就不存在了。 已接入 12 个窗口 / 14 个关闭点: - 设置:全局代理(`settings.global-proxy`,报障的那个) - 更新:可用新版本(`update.available`,含「跳过此版本」「稍后」「下载完成」 三个关闭点) - 扩展:离线包下载、扩展详情 - SFTP:远程图片预览 - 数据库:SQL 悬停详情、导入数据、导出表、运行 SQL 文件、转储 SQL 文件、 数据比较、结构比较⚠️ **行为变化(有意为之,需要知道)**:同一个复用键只保留一个窗口。第二次打开 同类弹窗时,不再新建,而是把已有窗口重新显示并换成新内容 —— 也就是「导入数据」 「导出表」「数据比较」这类窗口从「可以同时开多个」变成「一次一个」。取舍在于: 新增窗口正是崩溃的入口,只有在「关不销毁」的前提下才能既保留窗口又避开竞态。 对图片预览、更新弹窗这类本来就该单例的窗口,这个行为更合理;对比较窗口如果后 续确实需要并排看多组,要另想办法(例如按内容派生键)。 未接入(明确边界,别当成已修完): - 连接表单族 18 处:factory 要求 `Fn` ⇒ `SshFormWindowConfig` 一类 config 必须 `Clone`,它们目前没有 derive,留作下一批。 - 故意不接:远程桌面会话窗口(窗口里是一条活会话)、远程文件编辑器(已有自己 的单例 + `hide_for_reuse`,#262 就是那么修的)。 验证(`RUSTFLAGS=-D warnings`):`cargo check -p one-core -p db_view -p extension_view -p remote_image_preview -p main --all-targets` 通过; `cargo test -p one-core --lib` 686 passed、`cargo test -p db_view` 783 passed、 `cargo test -p main --bin navop` 653 passed;改动文件 rustfmt 无新增偏差。⚠️ 本机 Mac16,1 没有 Touch Bar,结构上复现不了这个竞态:只能确认「改了 + 编译 与测试通过」,**不能**声称真机不再崩溃。
- CHANGELOG.md 增加 v0.19.2 双语发布说明,覆盖 v0.19.1 之后 dev 上的 12 笔 提交,另外补上随 PR #304 进 main 但一直没发版的 SQLite 联合主键 DDL 修复: - 新功能:数据库结果纵向「列:值」显示(长值横滚 + 单元格编辑)、字段过滤 面板重做(搜索 + 限高滚动)、表数据页 SQL 整条复制、SQL 注释快捷键可配置 (含空白行注释)、SQL 转储每条 INSERT 合并多行、RDP/VNC 双击切回已打开标签 - 修复:macOS 弹窗关闭闪退(12 个窗口改走隐藏 + 复用)、编辑单元格时拖动误 选相邻单元格、SSH 认证阶段断开可诊断并在被掐断时降级重试、迁移/导入连接 不再默认开启双因素认证(含误导性 MFA 文案) - main/Cargo.toml 与 Cargo.lock 的主包版本 0.19.1 -> 0.19.2
…ustfmt 默认宽度折行,纯格式调整,\n无行为变化。
承接 a6bbad7 的「关闭即隐藏 + 复用」:那一版只解决了闪退,没有解决隐藏窗口把上一轮 业务内容一直扣着的问题 —— 用户反复开关之后,每个复用窗口里还留着一份上一次的 view, 连同它持有的数据、连接引用与任务句柄。 这版把「关闭」明确拆成两件事: 1. 原生窗口:隐藏并登记复用(受控保留,上限是复用键数量); 2. 业务会话:关闭时立即结束,卸载业务 view 并清掉焦点与通知。 机制: - `PopupWindowContent.view` 改为 `Option<AnyView>`,新增 `end_session`(置 `None`)。 - `close_window_for_reuse(window, cx)` 在 `hide_for_reuse` 成功后同步调 `end_reusable_popup_session`:先 `window.blur` + `clear_notifications`,再 `end_session`。 必须同步、不能 `defer`:延后清理存在「上一轮的清理任务删掉刚打开的新会话」的时序窗口。 - `PopupWindowContent` 实现 `Drop`:非 macOS、隐藏失败回落、应用退出这类「窗口真的被销毁」 的路径不经过关闭入口,会话计数在那里归还。 - `on_window_closed` 订阅里清掉复用注册表的脏条目(`forget_reusable_popup_by_window`)。 诊断计数(新增 `crates/core/src/popup_lifecycle.rs`): `live_windows` / `live_sessions` 是存量,`opened_windows` / `opened_sessions` 是累计, 日志 target `one_core::popup_lifecycle`。判据:每类弹窗首次打开 `live_windows` +1 之后 不再增长;关闭后 `live_sessions` 回落;`opened_windows` 随开关次数上涨说明复用没命中。 只记数字,不记标题、路径和业务内容。 调用点:12 处全部改为传 `cx`(更新 3、代理设置 2、表导入 2、表导出 2、SQL 运行 1、 SQL 转储 1、比较窗口 1、离线扩展包 1)。 有意不做: - 不给复用注册表加 LRU 淘汰 —— 淘汰即销毁,等于把崩溃挪到淘汰路径上。 - 不写推测性的 session id / generation 守卫:注册表按 `&'static str` 复用键组织,结构上 已有上限,守卫属于死代码。 文档:`docs/macos-memory-investigation.md` 更新 3.2 / 4.3 并新增第 9 节(复用弹窗的现状 与判据);`AGENTS.md` 已沉淀经验补一条。 验证(本机实跑): - `cargo check -p one-core --all-targets`、`-p main -p db_view -p extension_view --all-targets`: 通过,改动文件无新增告警。 - `cargo test -p one-core --lib`:690 passed / 0 failed。 - `cargo test -p main --bin navop setting_tab`:41 passed / 0 failed。 - `cargo test -p main --bin navop window_close` 与 `popup`:各 2 passed。 - 改动的 13 个文件 rustfmt 无偏差。⚠️ 本机无 Touch Bar,崩溃无法复现,行为层面仍需真机确认;真实内存回落还需要一次 footprint / vmmap 采样对比。已知残留:隐藏窗口不会重绘(gpui_macos 在 occlusionState 非 visible 时 `stop_display_link`),业务 view 会随 `end_session` 释放,但该窗口 frame 里 残留的 per-element `ElementState`(输入框、滚动位置这类)要等它下次渲染才清 —— 这是有界 保留,不随开关次数增长。
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
发版准备
CHANGELOG.md增加 v0.19.2 双语条目(更新内容 / 修复与优化 + What's New / Fixes and Improvements,含 CNB 镜像行)main/Cargo.toml与Cargo.lock主包版本0.19.1→0.19.2本版改动
新增:
修复:
其他:
crates/db_view/src/table_data/filter_editor.rs补一次 rustfmt 换行(纯格式,无行为变化)验证
python3 script/changelog.py validate --tag v0.19.2→Validated changelog entry: v0.19.2python3 script/changelog.py extract --tag v0.19.2与源 notes 逐字节往返一致cargo metadata --locked通过(Cargo.lock 与 main/Cargo.toml 版本一致)cargo check -p main --all-targets通过;cargo test -p db_view --lib783 passed本 PR 含代码改动(dev 尚未合入的新代码),不满足 release-only 快路径,CI 会跑完整矩阵。
合并后
在
main上执行script/release-tag.sh v0.19.2触发五平台 Release。