Skip to content

chore(deps): bump github.com/redis/go-redis/v9 from 9.21.0 to 9.22.0 in /server/sync-service - #41

Closed
dependabot[bot] wants to merge 406 commits into
devfrom
dependabot/go_modules/server/sync-service/github.com/redis/go-redis/v9-9.22.0
Closed

dependabot[bot] wants to merge 406 commits into
devfrom
dependabot/go_modules/server/sync-service/github.com/redis/go-redis/v9-9.22.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Aug 12, 2026

Copy link
Copy Markdown

Bumps github.com/redis/go-redis/v9 from 9.21.0 to 9.22.0.

Release notes

Sourced from github.com/redis/go-redis/v9's releases.

9.22.0

This is a minor release introducing two flagship (experimental) features — client-side caching and automatic pipelining — alongside support for Redis 8.10, new commands, and a large batch of stability and parser-robustness fixes. It consolidates everything shipped in 9.22.0-beta.1, so the notes below cover the full 9.21.0 → 9.22.0 upgrade.

⚠️ Two changes to be aware of when upgrading from 9.21.0:

  • Default configuration values changed (#3918): read/write timeouts, retry backoff, cluster state reload interval, and TCP keep-alive defaults are now aligned with the cross-SDK configuration proposal (see the highlight below). Explicitly configured values are unaffected.
  • WaitAOF return type corrected (#3888): WaitAOF now returns *IntSliceCmd, matching the two-integer reply of WAITAOF (previously *IntCmd, which failed to parse the reply at runtime). Code referencing the old return type needs a one-line update.

🚀 Highlights

Client-Side Caching (Experimental)

The standalone Client gains server-assisted client-side caching built on RESP3 CLIENT TRACKING. Enable it by setting ClientSideCacheConfig in Options (or supply your own cache via ClientSideCache — e.g. to share one cache across clients). Cacheable read results are served from a local in-process cache and invalidated automatically when the server reports a change, cutting round trips for read-heavy workloads.

The invalidation architecture is selected by ClientSideCacheStrategy; the default (and currently only) strategy is CSCStrategySharedTracking: one shared cache, every pool connection runs plain CLIENT TRACKING ON, and a background drainer applies buffered invalidations — portable (no BCAST) and consistent with the other Redis client libraries. Requirements and guardrails: RESP3 (Protocol: 3), standalone client, DB 0 only; commands that would change the connection identity (SELECT, AUTH, ...) are rejected while caching is enabled, and CSC is disabled when a credentials provider is set (fixed Username/Password work and are namespaced). See the README's client-side caching section and the runnable example.

Experimental: the API may change in a minor release.

(#3941) by @​ofekshenawa

Automatic Pipelining (Experimental)

AutoPipeliner is a background batcher that coalesces commands from many concurrent goroutines into Redis pipelines, multiplying throughput without any manual pipeline management. It comes in two faces, available on Client and ClusterClient (and configurable via Options.AutoPipelineOptions / UniversalOptions.AutoPipelineOptions):

  • AutoPipeline() — the blocking face: a drop-in Cmdable where each call blocks until executed, exactly like a plain client, while concurrent callers' commands batch together under the hood (measured locally over loopback: ~1M+ SET/sec vs ~100k unpipelined; indicative, not a guarantee). Per-goroutine command order is preserved.
  • AsyncAutoPipeline() — the deferred face: command calls return immediately and every typed result accessor (Val/Result/Err/...) blocks until the command has executed. Submit a window of commands, then read the results, to keep pipelines deep (~2–3M SET/sec locally; indicative).

AutoPipelineOptions controls batching: MaxBatchSize (soft target, default 200; the blocking face's preset uses 300), MaxBatchBytes (approximate payload cap so huge values flush as several bounded writes), MaxFlushDelay with optional AdaptiveDelay (delay scales down as the queue fills), and MaxConcurrentBatches (default 1 = a single ordered batch stream; raising it requires Unordered: true, so ordering is never lost by accident — Validate() rejects the combination otherwise). A usage tour and throughput comparison live in https://github.com/redis/go-redis/blob/HEAD/example/autopipeline.

Experimental: the API may change in a future release — pin your go-redis version if you adopt it.

(#3942) by @​ndyakov, with help from @​cxljs

Redis 8.10 Support

This release adds support for Redis 8.10. The README's supported-versions list now includes Redis 8.10, and CI runs the full suite against the redislabs/client-libs-test:8.10.0 image by default (#3920, #3940).

Coverage for the new commands and options that ship with Redis 8.10:

  • HIMPORT (#3919) — bulk hash import via server-side fieldsets, exposed as HImportPrepare, HImportSet, HImportDiscard, and HImportDiscardAll. Fieldsets are session state scoped to a single physical connection, which does not mix well with connection pooling — so the client keeps a versioned fieldset registry and lazily replays the PREPARE on whichever pooled connection executes a SET that needs it, at most once per connection, with no extra round trip (the PREPARE is injected into the same write as the SET).
  • LMOVEM / BLMOVEM (#3913) — move multiple elements between lists in one call.
  • SUNIONCARD / SDIFFCARD (#3897) — cardinality of set union/difference without materializing the result.
  • XREAD / XREADGROUP MAXCOUNT and MAXSIZE (#3898) — bound how much data a stream read returns.
  • TS.READ (#3896), TS.QUERYLABELS (#3926), TS.NRANGE / TS.NREVRANGE (#3870) with multiple aggregators per key (#3937), and EXCLUDEEMPTY on TS.MRANGE / TS.MREVRANGE (#3912) — new time-series query surface.
  • FT.ALIASLIST (#3925), COLLECT reducer for FT.AGGREGATE (#3886), RERANK on HNSW vector fields in FT.CREATE (#3927), and FT.HYBRID timeout warnings (#3911) — search coverage.

Cross-SDK Aligned Defaults

Default configuration values now follow the cross-SDK configuration proposal shared by all Redis client libraries (#3918):

... (truncated)

Changelog

Sourced from github.com/redis/go-redis/v9's changelog.

9.22.0 (2026-08-03)

This is a minor release introducing two flagship (experimental) features — client-side caching and automatic pipelining — alongside support for Redis 8.10, new commands, and a large batch of stability and parser-robustness fixes. It consolidates everything shipped in 9.22.0-beta.1, so the notes below cover the full 9.21.0 → 9.22.0 upgrade.

⚠️ Two changes to be aware of when upgrading from 9.21.0:

  • Default configuration values changed (#3918): read/write timeouts, retry backoff, cluster state reload interval, and TCP keep-alive defaults are now aligned with the cross-SDK configuration proposal (see the highlight below). Explicitly configured values are unaffected.
  • WaitAOF return type corrected (#3888): WaitAOF now returns *IntSliceCmd, matching the two-integer reply of WAITAOF (previously *IntCmd, which failed to parse the reply at runtime). Code referencing the old return type needs a one-line update.

🚀 Highlights

Client-Side Caching (Experimental)

The standalone Client gains server-assisted client-side caching built on RESP3 CLIENT TRACKING. Enable it by setting ClientSideCacheConfig in Options (or supply your own cache via ClientSideCache — e.g. to share one cache across clients). Cacheable read results are served from a local in-process cache and invalidated automatically when the server reports a change, cutting round trips for read-heavy workloads.

The invalidation architecture is selected by ClientSideCacheStrategy; the default (and currently only) strategy is CSCStrategySharedTracking: one shared cache, every pool connection runs plain CLIENT TRACKING ON, and a background drainer applies buffered invalidations — portable (no BCAST) and consistent with the other Redis client libraries. Requirements and guardrails: RESP3 (Protocol: 3), standalone client, DB 0 only; commands that would change the connection identity (SELECT, AUTH, ...) are rejected while caching is enabled, and CSC is disabled when a credentials provider is set (fixed Username/Password work and are namespaced). See the README's client-side caching section and the runnable example.

Experimental: the API may change in a minor release.

(#3941) by @​ofekshenawa

Automatic Pipelining (Experimental)

AutoPipeliner is a background batcher that coalesces commands from many concurrent goroutines into Redis pipelines, multiplying throughput without any manual pipeline management. It comes in two faces, available on Client and ClusterClient (and configurable via Options.AutoPipelineOptions / UniversalOptions.AutoPipelineOptions):

  • AutoPipeline() — the blocking face: a drop-in Cmdable where each call blocks until executed, exactly like a plain client, while concurrent callers' commands batch together under the hood (measured locally over loopback: ~1M+ SET/sec vs ~100k unpipelined; indicative, not a guarantee). Per-goroutine command order is preserved.
  • AsyncAutoPipeline() — the deferred face: command calls return immediately and every typed result accessor (Val/Result/Err/...) blocks until the command has executed. Submit a window of commands, then read the results, to keep pipelines deep (~2–3M SET/sec locally; indicative).

AutoPipelineOptions controls batching: MaxBatchSize (soft target, default 200; the blocking face's preset uses 300), MaxBatchBytes (approximate payload cap so huge values flush as several bounded writes), MaxFlushDelay with optional AdaptiveDelay (delay scales down as the queue fills), and MaxConcurrentBatches (default 1 = a single ordered batch stream; raising it requires Unordered: true, so ordering is never lost by accident — Validate() rejects the combination otherwise). A usage tour and throughput comparison live in https://github.com/redis/go-redis/blob/master/example/autopipeline.

Experimental: the API may change in a future release — pin your go-redis version if you adopt it.

(#3942) by @​ndyakov, with help from @​cxljs

Redis 8.10 Support

This release adds support for Redis 8.10. The README's supported-versions list now includes Redis 8.10, and CI runs the full suite against the redislabs/client-libs-test:8.10.0 image by default (#3920, #3940).

Coverage for the new commands and options that ship with Redis 8.10:

  • HIMPORT (#3919) — bulk hash import via server-side fieldsets, exposed as HImportPrepare, HImportSet, HImportDiscard, and HImportDiscardAll. Fieldsets are session state scoped to a single physical connection, which does not mix well with connection pooling — so the client keeps a versioned fieldset registry and lazily replays the PREPARE on whichever pooled connection executes a SET that needs it, at most once per connection, with no extra round trip (the PREPARE is injected into the same write as the SET).
  • LMOVEM / BLMOVEM (#3913) — move multiple elements between lists in one call.
  • SUNIONCARD / SDIFFCARD (#3897) — cardinality of set union/difference without materializing the result.
  • XREAD / XREADGROUP MAXCOUNT and MAXSIZE (#3898) — bound how much data a stream read returns.
  • TS.READ (#3896), TS.QUERYLABELS (#3926), TS.NRANGE / TS.NREVRANGE (#3870) with multiple aggregators per key (#3937), and EXCLUDEEMPTY on TS.MRANGE / TS.MREVRANGE (#3912) — new time-series query surface.
  • FT.ALIASLIST (#3925), COLLECT reducer for FT.AGGREGATE (#3886), RERANK on HNSW vector fields in FT.CREATE (#3927), and FT.HYBRID timeout warnings (#3911) — search coverage.

Cross-SDK Aligned Defaults

Default configuration values now follow the cross-SDK configuration proposal shared by all Redis client libraries (#3918):

... (truncated)

Commits
  • c7f59a2 chore(release): prepare 9.22.0 (#3947)
  • c994cfc feat(autopipeline): automatic command pipelining (#3942)
  • 228b463 chore(deps): bump actions/stale from 10 to 11 (#3944)
  • a6be850 feat(csc): add standalone client-side caching (#3941)
  • 82b0213 chore(release): prepare 9.22.0-beta.1 (#3940)
  • 8eb9583 fix(rediscmd): redact credential args in AppendCmd (#3939)
  • 90fd088 chore(ci): point 8.10 testing at custom client-libs-test image (#3938)
  • 93f961a feat(timeseries): support multiple aggregators per key in TS.NRANGE (#3937)
  • 49e0041 feat(himport): HIMPORT command with lazy per-connection prepare (#3919)
  • 3dd9675 fix(proto): peek push notification name without demanding 36 bytes (#3936)
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Aparencia and others added 30 commits August 1, 2026 00:15
feat(audio): 课堂音频采集引入进程环回,与端点环回双源互补(ADR-001 Phase 0-3)
## [0.30.0](v0.29.0...v0.30.0) (2026-07-31)

### ✨ 新功能

* **audio:** 原生模块支持流式采集(采集线程 + ThreadSafeFunction) ([b368bf8](b368bf8))
* **audio:** 接入进程环回 Provider 与构建链路(Phase 2,flag 默认关) ([bc37a96](bc37a96))
* **audio:** 进程环回采集原生模块 Phase 1 可行性验证 + ADR-001 ([be0f090](be0f090))
* **audio:** 进程环回默认启用 + 设置页音频源选择(Phase 3) ([4006a92](4006a92))

### ♻️ 重构

* **audio:** 引入 AudioSourceProvider 抽象层(Phase 0,零行为变更) ([d41773d](d41773d))
v0.30.0 的 CI 中 native:build 在 8 秒内失败:electron-rebuild 用的是 client
下的旧版 node-gyp,其 VS 探测逻辑仍在找 VS 2013/2015,在 windows-latest 报
'Could not find any Visual Studio installation'。因该步骤 continue-on-error,
发布流水线全绿但产物静默缺少原生模块(自动降级为端点环回)。

不只改 CI,而是让本地与 CI 共用同一构建入口,避免两套隐式前提:
- 新增 native/process-audio/build.mjs:固定使用 addon 目录自带的新版
  node-gyp(支持 VS 2022),从 client 实际安装解析 Electron 版本,
  显式传 --target/--dist-url 保证按 Electron ABI 编译
- native:build 指向该脚本;CI 与本地命令一致

本地验证:识别到 Electron 35.7.5,编译通过。

沉淀知识卡片:这是第三次'本地能跑 CI 挂'(前两次为 Git LFS 指针、
.env.production 被 gitignore),共同规律是本地存在而 CI 不具备的隐式前提。
fix(build): 修复 CI 编译原生模块失败(旧版 node-gyp 找不到 VS 2022)
## [0.30.1](v0.30.0...v0.30.1) (2026-07-31)

### 🐛 缺陷修复

* **build:** 修复 CI 编译原生模块失败(旧版 node-gyp 找不到 VS 2022) ([a5d8f3b](a5d8f3b))
背景场景 AuroraDomeWorld 内置的 PlanetarySystem 与导航层 SpatialNav 渲染了两套重叠的可点击行星,外层行星点击只改状态不跳转,导致浅色模式下点击 3D 物体与功能错位。现将 AuroraDomeWorld 还原为纯环境背景,导航行星统一由 SpatialNav 提供。
原 tier 判定为单阈值即时切换,FPS 振荡时 tier 来回抖动,导致后处理/云层特效反复卸载(表现为动画有时不显示、需等很久才重新显示),且后台返回时节流期低 FPS 被误判为降级。现引入滞回缓冲区、连续窗口持续判定、逐级调整与后台返回重置;同时移除 MemoryManager 中 return 无法跳帧的无效死代码。
将'如何逐级迁移 tier'的纯逻辑从 PerformanceMonitor 中物理分离(AI 编程规范 §1 副作用隔离、§6 自底向上),stepTier 逐级迁移策略(low↔medium↔high,不跨级跳变)获得 8 个 AAA 单测护栏,为后续以成熟方案重写监控层提供行为基线。本步为纯新增,不改变任何现有行为。
FPS 测量与防抖委托给 drei <PerformanceMonitor>(内置滑动均值、bounds 滞回、threshold 比例持续判定与 flip-flop 保护),替代自研单窗口测量;tier 迁移复用已单测的 tierPolicy.stepTier;窗口隐藏时卸载监控以重置采样基线(后台 rAF 节流期 FPS 不可信),并顺带重置 drei 内部 flipped/fallback 防止永久锁定。usePerformanceStore 公共 API 与 tier 三级语义保持不变,呈现质量不受影响(未触碰 multisampling 与特效开关)。
复现确认:3D 概览中行星虽渲染但默认无标签(仅悬浮显示),且功能副标题受新手期门控(首潜完成后消失),用户看到一堆无名彩色球体,无法把物体对应到功能(内测反馈'3D物体不可用'的真实根因)。修复:① SpatialNav 在概览模式(!isInModule)默认显示标签;② AuroraModuleEntity/ModuleEntity 的功能副标题改为常驻(移除 isNewbie 门控),始终展示'隐喻名 · 功能名'(如 深潜 · 专注番茄钟)。浏览器实测:标签可见、点击行星正确跳转对应模块。
复现(elementFromPoint)确认:canvas 容器原为 z-index:-10,落在 AppLayout 根 div(z-auto、h-screen 铺满全屏、pointer-events:auto)之后;概览模式点击行星时,命中检测返回的是 transparent 的根 div 而非 canvas,根 div 无点击处理器→点击无响应(内测'点击仍无响应'真因)。修复:canvas 容器改为 z-0,位于根 div 空白区之上可接收点击,同时仍低于所有 UI 浮层(标题栏 z-50 / FunctionalOverlay z-10 / 首页按钮 z-20 / 引导 z-40+ / Radix 弹窗走 portal)。修复后 elementFromPoint 在行星位置返回 CANVAS。
合并 3D 三层根因修复(重复行星/标签可发现性/canvas 点击拦截)与性能分级优化(drei PerformanceMonitor 迁移、tier 滞回)。
## [0.30.2](v0.30.1...v0.30.2) (2026-08-01)

### 🐛 缺陷修复

* **3d:** canvas 层级提至 z-0,修复概览模式点击被根布局 div 拦截 ([168df42](168df42))
* **3d:** 概览模式常驻显示模块标签与功能副标题,解决 3D 物体无法对应到功能 ([b605a6f](b605a6f))
* **3d:** 移除晨曦穹顶场景重复的行星系统,导航行星统一由 SpatialNav 渲染 ([ff67320](ff67320))

### ⚡ 性能优化

* **3d:** 性能分级引入滞回+持续判定+后台重置,消除 tier 抖动;清理无效跳帧死代码 ([8851a1f](8851a1f))

### ♻️ 重构

* **3d:** 性能监控迁移至 drei PerformanceMonitor 成熟方案 ([72e584f](72e584f))
* **3d:** 抽取 tier 迁移策略为纯函数模块 tierPolicy 并补充 BDD 单测 ([1602c72](1602c72))
跳过与取消是两种意图:跳过表示不设目标但开始计时,取消表示关闭弹窗不开始。原实现两者共用同一关闭回调,导致空目标番茄钟无法启动。现拆分为取消、跳过、开始三个按钮,并补充多路径回归测试。
新增番茄模式预设:内置上课与自习预设,支持自定义预设的增删改与排序;引入周期标记与预警时点、完成音等音效配置;番茄会话关联预设 ID,longBreakInterval 为 0 统一表达无长休。
核心统计卡片与知识预览卡片新增目标路径,点击或键盘回车即可跳转至对应模块,提升首页到各功能模块的可达性。
## [0.31.0](v0.30.2...v0.31.0) (2026-08-01)

### ✨ 新功能

* **dashboard:** 首页统计与知识预览卡片支持点击跳转 ([35ac62e](35ac62e))
* **pomodoro:** 番茄钟模式预设自定义与周期标记 ([945ca57](945ca57))

### 🐛 缺陷修复

* **pomodoro:** 修复目标跳过退化为取消致空目标番茄无法启动 ([c47bdc7](c47bdc7))
设置页新增三档性能模式(默认从容/medium):tier 天花板模型(effectiveTier=min(自动tier,档位上限),自动降档仍生效但不超用户档位);模块态 3D 按档位降帧/暂停(静谧=暂停、从容=10fps、澎湃=30fps),避免 3D 被遮罩覆盖时仍全帧渲染(持续开销最大头);静谧档经 MotionConfig 全局减弱 Framer Motion 动画;主进程 performance:set-mode IPC 持久化档位并按档位缩放屏幕采集间隔。含 performanceMode 纯函数层 14 个单测。
SmartSampler.keyframes 在整个会话期间无界持有全部关键帧的 imageBase64(单帧数百 KB,1h 约 240 帧累积数十 MB 不释放,仅 reset 才清空),是内测反馈内存占用 5GB 的重要诱因。现仅保留最近 30 帧的 base64,更早帧剥离为空串(元数据保留、图片已由 keyframe_save 增量落盘),与既有'分析后清空 base64'策略一致。
- 新增 config/key_pool.py: 多Key轮询池,突破单Key RPM限制
- 新增 providers/circuit_breaker.py: Provider级熔断器(CLOSED/OPEN/HALF_OPEN)
- 新增 middleware/prompt_guard.py: Prompt注入防护(中英文正则+白名单)
- 新增 cost/tracker.py + cost/budget.py: Token成本追踪+预算硬限制
- 新增 observability/metrics.py + tracing.py: Prometheus指标+OTel追踪
- 新增 cache/semantic_cache.py: n-gram Jaccard语义缓存(L2)
- 新增 middleware/virtual_key.py: 虚拟Key签发(Phase4预实现)
- 改造 middleware/auth.py: 生产环境缺JWT密钥拒绝启动
- 改造 config/fallback.py: 流式fallback添加总预算超时+熔断联动
- 改造 provider_bootstrap.py: Key池集成+后台健康探活(30s)
- 改造 main.py: GZip压缩+并发Semaphore+新中间件注册
- 新增 docs/Foresight/ai-gateway-optimization-plan.md: 完整优化方案文档
覆盖六大功能模块流畅性审计、内存管理分析(确认课堂音频段 base64 泄漏为 5GB 主因)、3D 渲染与三档性能模式评估(发现默认从容档仍开全部后处理)、AI 降级机制评估(三套建成未生效能力)、性能基准测试方案、按 P0-P3 分级的 19 项优化建议。
1) 课堂音频段 audioBase64 转写成功后剥离(useClassroomEvents/vadMarker),消除长课堂数百 MB 无界累积(内测 5GB 内存主因);2) 笔记 updateNote 改局部更新+重排,去掉每次自动保存的全量 loadNotes 与多余 getById,消除打字卡顿;3) 键入 JSON.stringify 移入防抖回调内,避免每次键入同步序列化整个文档阻塞主线程;4) 删除 TimerRing/ImmersiveTimer 冗余 RAF(进度环已由 React prop + CSS transition 驱动),消除每秒 60fps 无效 DOM 写。
1) 从容(medium)档降级后处理:浅色关色差(ChromaticAberration)、深色关景深(DepthOfField,最重 pass),澎湃档全开——降低默认档 GPU 开销;色差 offset 改模块级常量避免每帧 new Vector2;2) useCardInteraction/useSocraticFlow 的 setTimeout 统一 ref + 卸载清理,避免卸载后 setState;3) useSocraticFlow 无 selector 整 store 订阅改细粒度 action 订阅。
1) visionWorker/asrWorker 的 arrayBufferToBase64 改分块编码(0x8000 块 + fromCharCode.apply),消除逐字节字符串拼接的 O(n²),加速大帧 base64 编码;2) aiPluginProvider 的 supabaseClient 改静态 import(免每次动态 import 开销),access_token 缓存 60s(token 寿命约 1h,保守 TTL)避免每次 AI 调用都 getSession。
NotesPage 原在每次渲染都调用 getFilteredNotes()/getAllTags() 全量 filter+sort 所有笔记(搜索时对每篇 content 全量扫描),配合整 store 订阅导致搜索/切换卡顿。现订阅 notes 并用 useMemo 缓存 filteredNotes/allTags/selectedNote,仅在笔记/搜索/标签/文件夹变化时重算。
startSession 原用 flashcardReviewStore.getAll() 全量加载所有复习记录(增长最快的数据,半年可达数万条)再内存 filter 统计今日数。现改用已存在的 reviewedAt 索引 .where('reviewedAt').aboveOrEqual(todayStart).count(),O(log n) 查询替代全量反序列化。
Aparencia and others added 22 commits August 11, 2026 10:39
- 新增 reef 组件族:AbyssView2D 深渊视图 / GrottoView3D 洞窟视图 / ReefCards 卡片场 / ReefDiverConsole 潜水控制台
- NotesPage 集成珊瑚礁沉浸视图、侧栏左右独立控制(互斥展开)
- useEditorDepth history 访问类型加固(运行时可能 undefined)
- AppLayout 面板视口锚定:Notes 无内边距贴边,grid 高度公式与面板实际内容区精确一致
- WikiPage 左右侧边栏独立折叠(互斥展开),2s idle debounce 自动保存 + 保存状态提示
- 命令面板新增 nav-sop 命令(G O 快捷键)与 ListChecks 图标
- 蝠鲼剪影 60~90s 周期水平弧线缓慢滑过,深海雾中若隐若现
- 克制含蓄:透明度 0.1~0.15,单网格+平移单 draw call,low 档关闭
- vite.config base 仅 Electron 构建产物用 ./,dev 模式保持 /(修复预构建依赖 504 动态导入失败)
- streamHandler 流式路径白名单正则去转义冗余
- mcpEnv Windows 注册表读取转义修正
- AuthGuard useEffect 依赖数组修正
- framer-motion 12.42.2→12.43.0(修复 React 18.3 ref 警告 issue 3745)
- 笔记页动态导入失败:ELECTRON_BUILD 下 dev server 预构建依赖 504(vite base 根因)
- 笔记页黑条:面板渐变背景依赖 CSS 变量未全局定义
- Wiki 布局交互设计头脑风暴文档
Bumps [github.com/redis/go-redis/v9](https://github.com/redis/go-redis) from 9.21.0 to 9.22.0.
- [Release notes](https://github.com/redis/go-redis/releases)
- [Changelog](https://github.com/redis/go-redis/blob/master/RELEASE-NOTES.md)
- [Commits](redis/go-redis@v9.21.0...v9.22.0)

---
updated-dependencies:
- dependency-name: github.com/redis/go-redis/v9
  dependency-version: 9.22.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file go Pull requests that update go code labels Aug 12, 2026
@Aparencia Aparencia closed this Aug 21, 2026
@dependabot @github

dependabot Bot commented on behalf of github Aug 21, 2026

Copy link
Copy Markdown
Author

OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting @dependabot ignore this major version or @dependabot ignore this minor version. You can also ignore all major, minor, or patch releases for a dependency by adding an ignore condition with the desired update_types to your config file.

If you change your mind, just re-open this PR and I'll resolve any conflicts on it.

@dependabot
dependabot Bot deleted the dependabot/go_modules/server/sync-service/github.com/redis/go-redis/v9-9.22.0 branch August 21, 2026 03:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file go Pull requests that update go code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants