Skip to content

Releases

v1.25.0 — 匿名链路冷启动加固 + CI 门禁适配 dsh 0.2.x

Choose a tag to compare

@wanderer-yk wanderer-yk released this 23 Oct 08:13

匿名链路冷启动加固(当日实测事故驱动)

部分网络 IP 被雪球边缘节点(TencentEdgeOne)拦截后,种子 URL 全候选 HTTP 5xx 且不发 set-cookie——活进程靠内存 cookie 存活、冷启动即死板。三层加固:

  • 匿名 cookie 落盘复用:播种成功后持久化到 $DSH_HOME/dsh-xueqiu/.xueqiu-anon.json,进程重启/新会话免播种直接出数;失效自动重播种自愈并覆盖
  • 播种指纹硬化:种子请求补浏览器导航头 + --compressed,单种子超时 12s→8s(不再撞穿 30s 看门狗)
  • seed_blocked 快速失败:播种被拦 + 上游 400016 时不再空转 3 轮,直接给出可操作指引(面板右上登录粘贴 Cookie 解锁);debug RPC 新增 50 条环形事件流

架构与测试

  • 传输接缝替代文本 codegen:client 传输/样式注入改运行时判定(typeof host / typeof styles),gen-static.py 撤销全部文本替换;接缝守卫防同名全局函数误入动态分支
  • 测试 455→517 断言(11 套件):新增 client-pure(61:纯逻辑 + makeIndexPoll/makeUiStore 工厂注入)、cache(16:时钟注入直测 TTL 过期/FIFO/24h 清扫)、client-bundle(13:生成物伪浏览器求值 + 接缝三环境路由)

CI 门禁适配 dsh 0.2.x(token 单次消费/合并式资源服务)

  • smoke:token 双路径就绪探测、cookie-jar 取页面/资源、boot 清单 manifest url 为权威 bundle 路径、数据关卡分级 SMOKE_LIVE=strict|warn(数据中心 IP 恒被上游拦截,真实数据验证回归发版人本地)
  • e2e:E2E_TOKEN 传递接线补齐、rpc 改页内同源 fetch(借浏览器 cookie)、agent-browser 锁定 0.2.x 验证过的版本 + 全调用 60s(-k) 超时、boot 改 env 文件产物 + bash -x trace + 300s 硬超时、setsid→nohup
  • 新增每日 seed-probe 观测 job(播种链路纵向取证);CI 真连雪球 live 步骤移至每日定时

其它

  • watchlist.pull 消除双倍上游请求;xqIso(null) 不再渲染 1970-01-01;fmtFullDay/pad2 重复合并;契约测试 UA 单一真源;test:offline 聚合脚本 + engines 字段;FAQ 状态文件路径修正
  • 全量验证:11 离线套件 517 断言 + tag CI 三关全绿(含真实 Chromium 浏览器 e2e)+ dsh 0.2.1 本地全流程彩排

v1.22.13

Choose a tag to compare

@wanderer-yk wanderer-yk released this 26 Aug 03:44

修复

A股成交量显示虚高 100 倍 + 港/美单位错

雪球 volume 字段全市场均为股(实证 amount/volume ≈ price,quote/kline/minute 三接口、A/港/美/ETF/指数一致),而前端一律按"手"格式化:茅台 145 万股显示成 "145.05万手"(实为 1.45 万手)。现按市场感知:

  • A股(SH/SZ/BJ 前缀,含 ETF/指数/北交所)÷100 换算成手
  • 港/美维持股(万股/亿股)

自选"死条目"凭空消失

批量行情会整只丢弃无效/退市代码——添加 SH999999 提示成功,但列表里永远看不到,无任何反馈。现在补占位行(现价/涨跌全 --、名称回退显示代码、仍可删除/查详情),价格闪烁逻辑对 null 现价免疫。

kline 垃圾周期静默空数据

上游对未知 period(如模型手滑传 1h)返回 200 + 0 根,无任何错误。host 侧加白名单兜底为 day。

CI 午休/午后时段必红(v1.22.11 修复的延伸)

live 分时点数下限按"9:30 至今分钟数"线性外推,但 A 股午休(11:30-13:00)分时停在 ~121 点、午后从 13:00 重新累计——11:44 触发的 CI 实际 121 点 vs 下限 132 必红。改为两段交易时段感知(早盘线性 / 午休恒 118 / 午后 121+线性封顶 238 / 盘外 200),全天 1440 分钟边界模拟通过。

其他

工具描述补充 volume 单位为股(A股 1手=100股),防模型侧误读换算。

测试

新增 qa/vol-units.mjs 26 例(从 client 源码提取 fmtVol 独立求值 + host 周期白名单),并入 check:fast(现 92 例离线秒级)。全套:edge 254 / unit 39 / fence 18 / regress 21 / persist 16 / state-paths 11 / vol-units 26 / live 51。

注意:host 与 client 改动均需重启 dsh web 后生效。

v1.22.12 — 状态文件稳定目录 + 拖拽方向文案 + 光标反馈 + ::1 白名单

Choose a tag to compare

@wanderer-yk wanderer-yk released this 26 Aug 03:10

修复

  1. 状态文件跟启动目录漂移:自选/登录/界面状态原先落在 dsh web 启动目录——换目录启动就换一套状态。现在优先写 $DSH_HOME/dsh-xueqiu/(自动建目录);沙箱拒绝工作区外写入时透明回退旧行为;存量数据在首次保存时无缝迁移。新增 qa/state-paths.mjs(11 例)覆盖稳定/迁移/回退/首启四种模式。
  2. K线提示文案方向写反(v1.22.0 起):"左拖加载更早"实为右拖(klinecharts 内容跟手)。client 6 处 + README 3 处已正。
  3. ::1 裸 IPv6 回环白名单死代码:端口剥离正则误剥 :1,已修,fence xfail 转正。

新增

  • K线/分时拖拽光标反馈:悬停小手、按住抓手、松手复位。

注意:host 侧改动需重启 dsh web 生效;状态迁移发生在重启后首次写入。

v1.22.11 — 打开面板状态落盘

Choose a tag to compare

@wanderer-yk wanderer-yk released this 26 Aug 01:42

修复

打开面板的 open=true 从未持久化——刷新必丢(v1.22.10 的姊妹问题)。ui.set({open:true}) 发生在面板组件订阅建立之前(订阅在挂载后才生效),若无人续触发 ui.set,saveUi 永不执行。现在 open 翻转在 ui.set 内直接触发落盘。

闭环实测:开面板 → host 状态 open:true → 刷新页面 → 面板自动恢复打开。

v1.22.10 — 全量测试修复:面板状态恢复/周期切换/浅色可读性/主题联动/水合竞态

Choose a tag to compare

@wanderer-yk wanderer-yk released this 25 Aug 10:54

修复(5 类)

  1. 刷新后面板开合状态不恢复(1.22.8 回归):ui.get 中 open: s.open !== false 被上一行行尾注释吞掉,客户端 hydrate 拿不到该字段。由新增 254 例边界套件捕获。
  2. 切 K 线周期闪整屏 + 连点丢按钮:周期在详情 effect 依赖中,切一次周期清空整个详情重拉 5 个接口,周期丸消失 100-300ms。现在只清图表数据、只发 1 个 kline 请求。
  3. 浅色主题图表文字几乎不可读:cssVarColor 在 <html> 读主题令牌而令牌定义在 <body>,永远用回退 #8a8f98(白底 1.8:1)。改读 body 后浅色用真实令牌 #61666b(5.8:1)。
  4. 主题切换图表不换色:GUI 跟随系统配色时 DOM 属性不变,MutationObserver 永不触发;补 matchMedia change 监听。
  5. 刚加载就点开面板被水合打回:hydrate 回填 open/tab 前检查用户是否已交互。

加固与测试

  • KlineChart hasRows 门控(空挂载安全)
  • 新增 4 套离线测试资产:qa/edge.mjs(254 例)、qa/fence.mjs(18 例)、qa/regress-v1228.mjs(21 例)、qa/persist-upgrade.mjs(16 例);check:fast 保持 1.8s
  • 补记 1.22.8/1.22.9 更新日志

v1.22.9

Choose a tag to compare

@wanderer-yk wanderer-yk released this 25 Aug 05:59

改进

  • K线 OHLC 图例常显:进入详情即可见最新一根的 开/高/低/收/量,不再需要悬停十字光标才出现;悬停时仍跟随十字光标对应根,MA 彩色数值行维持悬停显示。
  • 背景:v1.22.3 改为悬停触发,是因为当时默认英文两行图例压住蜡烛;v1.22.5 起图例已是紧凑中文单行(字号 10),实测图例带内 0 蜡烛像素,无遮挡。
  • 分时图不受影响(canvas 图例整体关闭,悬停信息由 .xq-tip 卡片承担)。

v1.22.8

Choose a tag to compare

@wanderer-yk wanderer-yk released this 25 Aug 05:43

修复

高

  • 分时图竞态挂载 → 永久空白:详情页渐进渲染中(quote+K线先上屏、minute 数据后合并)抢点「分时」,图表以空 items 挂载后 effect([]) 永不刷新,只能切走再切回恢复。修复:空数据不挂图表(显示「分时数据加载中…」),数据到达后重建图表。竞态路径实测墨迹值 306(纯坐标轴)→ 8475(正常渲染)。

中

  • /xq-rpc 对无 Origin 请求放行:本机任意进程裸 POST 可调用全部 20 个 action。修复:Origin 必须存在且同源(浏览器对同源 POST 必带 Origin,curl 裸调全拒)。
  • curl 失败错误回显完整内部命令行:bash 语法错误信息包含完整 shell 命令,信息泄露。修复:错误只返回退出码。
  • 热榜/搜索竞态 ×2:快速切换市场无防护(慢响应覆盖新结果,高亮与内容不一致);轮询闭包捕获 stale hotMarket(盘中切美股 60 秒后被拽回 A股)。修复:响应序号防护 + hotMarketRef。
  • K.dispose(boxRef.current) stale ref:卸载清理时 ref 已置 null → 图表实例静默泄漏(与 dblclick 监听同类历史坑)。修复:闭包捕获节点。

低

  • ui.get 损坏状态文件非法 tab(如 {"tab":999})类型穿透 → 白名单回退 market
  • Agent 工具层 execute(null) 抛 TypeError → 注册时统一包装 args || {}
  • 云自选同步空结果不落 lastSyncAt → cookie 半失效时节流失效、每 20-60s 重复打上游 2 个请求 → 空结果也推进时间戳
  • cloudWatchAdd/Delete 无 catch → 断网时 unhandled rejection
  • 徽章包裹 style: {contents:'display'} 键值写反 → display:'contents'
  • 快讯 created_at 脏值渲染「NaN月NaN日」→ 跳过分组头

测试

  • live 51/51、单测 39/39、mock 黑盒(tab 穿透/execute(null)/错误回显)3/3
  • 浏览器回归:竞态分时 ✅、K线/分时切换 ✅、热榜快速切换 ✅、console 零错误

v1.22.7

Choose a tag to compare

@wanderer-yk wanderer-yk released this 25 Aug 03:29

修复

  • 切换股票后分时图压成直线:xq-minute 指标全局只注册一次,calc 闭包捕获首次挂载实例的 baseRef,第二只股票分时复用旧 calc、挂上前任的昨收(宁德挂茅台昨收 1304,y 轴 4041229,价格 378388 压成直线)。修复:每次挂载 overrideIndicator 重绑当前 baseRef 的 calc。三股连环切换实测通过(茅台 1304.66 → 宁德 387.89 → 京东方 5.75)。

v1.22.6

Choose a tag to compare

@wanderer-yk wanderer-yk released this 25 Aug 03:10

修复 / 新增

  • 分时悬停信息双份叠加:分时面积图 OHLC 同值冗余 + 指标图例与 .xq-tip 重复 → 分时彻底关闭 canvas 图例
  • K线悬停显示 MA5/10/30/60 数值(follow_cross 第二行彩色,单行不折行),对齐雪球

回归:K线↔分时 4 轮切换、双击回最新、收起/徽章重开/再进详情、月K悬停单行,全程 0 报错。

v1.22.5

Choose a tag to compare

@wanderer-yk wanderer-yk released this 25 Aug 02:58

修复

  • 悬停 OHLC 图例折成两行压图(1.22.3 遗留):follow_cross 后默认英文标题过长,悬停时图例折两行盖住蜡烛。改为紧凑中文单行(开 高 低 收 量,字号 10)+ 隐藏 ticker 标题。实测悬停图例单行 10px 高、占宽 45%。