Skip to content

fix(providers): 按查询条件隔离财报日历缓存 - #242

Open
Carrot-Ve wants to merge 2 commits into
helsome:mainfrom
Carrot-Ve:fix-calendar-cache-query-isolation
Open

Carrot-Ve wants to merge 2 commits into
helsome:mainfrom
Carrot-Ve:fix-calendar-cache-query-isolation

Conversation

@Carrot-Ve

Copy link
Copy Markdown

改动说明

当 ProviderRouter 开启 cache 时,research.events 的 eventType、symbols、start、end、count 都未进入 TypedProviderCache 的键。日历请求因此会碰撞:先请求 AAPL 的财报,再请求 MSFT 的财报,后者可能直接收到 AAPL 的缓存结果;在 live provider 失败时也可能降级到不匹配的 stale 结果。

将 GetCalendarEventsOptions 的五个字段加入现有白名单,保留稳定序列化和 TTL 策略。新增五个逐字段隔离测试,以及一个 createRouterFetchers → ProviderRouter → TypedProviderCache 集成测试,验证不同股票返回各自结果、相同查询即使对象字段顺序不同仍命中缓存。

影响条件:缓存是 opt-in;当前 Electron KernelHost 尚未开启网关缓存。本 PR 修复已有可选能力,不改变桌面默认配置。

关联 Issue

Related to #25(已关闭)及 #72(缓存原实现)。这是后续发现的日历查询隔离缺陷,不重新声明完成原 Issue 的全部范围。

已检查当前 main、开放 Issue/PR、全部 137 个历史 PR,以及 cache/缓存关键词搜索;未发现处理这五个日历字段的现有修复。另核对了开放的 #79,其修改不包含本次两个文件。

测试报告(正式审核前必填)

环境

  • Bun:1.4.2 (744846f84),与仓库 CI 一致。
  • OS:Windows,Microsoft Windows NT 10.0.22000.0,x64,受限文件系统沙箱。
  • 基线:ba5dcdfd31b162f5edb8b908f7f099a560389326,2026-09-27 核对仍为上游 main。
  • 使用本地合成数据,无真实证券账号、付费 API 或实时行情依赖。

实际执行命令与结果

bun test packages/shared/src/providers/resilience.test.ts
→ 修复前(新增回归测试):25 pass / 6 fail
→ 修复后及最终复跑:31 pass / 0 fail,147 assertions

bun run typecheck
→ core / i18n / shared / ui / electron 全部 exit 0

bun test packages/shared --isolate
→ 1119 pass / 1 fail,99 files

bun run test:unit
→ 1683 pass / 8 skip / 1 fail,182 files

# 同一依赖环境,临时恢复两个修改文件为上游 HEAD 后复跑
bun run test:unit
→ baseline: 1677 pass / 8 skip / 1 fail,182 files

git diff --check
→ exit 0

另按 .github/workflows/pr.yml 的高信号 secret 正则扫描 tracked files(同样排除 docs、测试文件和 bun.lock):0 个匹配文件。独立代码复核未发现需修改的问题,并独立复跑 focused suite:31 pass / 0 fail。

已知失败 / Baseline

唯一失败在修改前后的完整测试中一致:
PiRuntimeAdapter > removes the session conversation file on disposeSession。
packages/shared/src/agent/pi-runtime-agent-backend.test.ts:675 使用 /tmp/pi,在本环境被解析为 C:\tmp\pi,创建 C:\tmp 遭沙箱拒绝(EPERM)。该文件未修改,上游基线独立复跑可复现。

8 项跳过也与基线一致:7 项缺少真实 Longbridge 账户 fixture;1 项宿主无法创建 symlink。未运行真实证券 API 或 Electron E2E;本次边界由真实 fetcher/router/cache 加合成 provider 数据的集成测试覆盖。

  • 已提供实际测试命令与 pass/fail 结果
  • 已说明测试环境
  • 已提供 main 基线对照
  • 核心改动已有 focused 和 integration 验证

UI 截图

  • 本 PR 无可见 UI 变化(无需截图)

Scope / 后续

仅修复日历查询的缓存键隔离;不启用桌面缓存,不更改 provider 路由、TTL、金融计算或其他 capability 的契约。实现与测试由 AI 辅助完成,并经过本地验证。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant