🧭 决策日志

按日期倒序。只记 有意识做出的、不可回退或成本高的选择,不记日常操作。

2026-05-14

Prism 接入实时新闻做事件驱动决策(财联社电报,方案 B)

  • 决定: 直接爬财联社官网 cls.cn/telegraph HTML SSR 首屏 + SQLite 全量入库 + 5min 轮询 + LLM 打标签;决策 cron 注入持仓相关条目作 context
  • 原因: 当前决策完全无新闻源,事件驱动盲区大;公共 RSSHub 已限流,自建 docker 太重;方案 B 脆但即时,反爬挂时再切自建
  • 相关: trading-sim · deployer
  • : hermes:eagle/2026-05-14 (Real-time News Integration for Trading Decisions)

wx-gateway 支付 tab 拍平:单 tab 内 3 个 section 平铺,不要嵌套 sub-tab

  • 决定: App drawer 支付 tab 弃 Tabs 嵌套,改 border-t 分隔的 3 个 <section>:支付通道配置 / 微信支付商户 / 个人收款码
  • 原因: 嵌套 tab UX 差(双层 chrome、状态丢失、移动端尤其难点);section 平铺一眼全见
  • 相关: wx-gateway
  • : hermes:lewaymacmini-3-local/2026-05-14 (wx-gateway skills architecture overview #8)

wx-gateway App drawer 加宽到 max-w-4xl,7 tab → 5 tab

  • 决定: components/ui/drawer.tsx max-w-xlmax-w-4xl(~896px);7 tab 合并为 基本 / 路由 / 模板 / 支付 / 日志
  • 原因: 320px 太窄装不下表单密集的支付 + 模板配置;tab 多了运营找不到
  • 相关: wx-gateway
  • : hermes:lewaymacmini-3-local/2026-05-14

wx-gateway 模板/订阅消息 Test send 改占位符渲染,不再裸 JSON 编辑

  • 决定: 自动 parse content{{xxx.DATA}} 占位符,每个一行独立 Input;折叠”高级 JSON”作 escape hatch
  • 原因: 直接扔 example JSON 让用户编辑文本太容易漏引号 / data 不是合法 JSON;占位符 UI 把合法性兜在前端
  • 相关: wx-gateway
  • : hermes:lewaymacmini-3-local/2026-05-14

wx-gateway 同时支持「模板消息」+「订阅通知」两套微信 API

  • 决定: WxTemplate.kind 区分 template/subscribe;/internal/wx-template/sync 同时调 cgi-bin/template/get_all_private_templatewxaapi/newtmpl/gettemplate,失败时不删;test-send / push 按 kind 切换字段(订阅必填 scenepage 取代 url
  • 原因: 微信把这两套 API 在公众平台后台并列在同一菜单下但底层完全分开;只调一个会漏掉用户在「订阅通知」加的模板(5-14 复现:3 条只 sync 出 1 条)
  • 相关: wx-gateway · commit 1c87e54 系列
  • : hermes:lewaymacmini-3-local/2026-05-14

wx-gateway Panel 三大列表 UX 重做:openid 全显 + 整行展开 + 失败行内

  • 决定: Users openid 不再 mask、点击复制、按 lastLoginAt 倒序;Messages 整行点击展开、后端 eventDesc 预算可读描述、失败行内显示 errcode/errmsg;Overview Endpoint Health 列所有 active app + 60min 时间轴色块;Invites/Scans/Menu 合并 /panel/activity 多 tab
  • 原因: mask 不利于运维粘贴排查;整行展开比”找小箭头”快;失败原因放展开里增加一次点击;Health 之前会消失(数据稀疏 bug)
  • 相关: wx-gateway
  • : hermes:lewaymacmini-3-local/2026-05-14

2026-05-13

wx-gateway 永久二维码 scene_str 直接 = appName,1:1,不搞 mapping

  • 决定: 每个 app 一张永久码,scene_str = appName;App 表落库缓存,第一次 save 或拿时 lazy 生成
  • 原因: 微信永久码配额 10 万张/号要珍惜;mapping 表纯粹增复杂度;扫码事件按 EventKey 解析的 sceneApp 直接 fanout,彻底解决”扫错站点 binding 被覆盖”
  • 相关: wx-gateway · commit 0e7ee2f
  • : hermes:lewaymacmini-3-local/2026-05-13 (session 20260429_161323_227b26)

wx-gateway 菜单管理做进 admin(不用微信后台)

  • 决定: 公众号”服务器配置”开了之后微信图形菜单被禁用,改在 admin 里建 Menu tab;click 按钮 Save 时同步 upsert/delete menu-${key} 路由
  • 原因: 走 cgi-bin/menu/create API 是必须的;顺手把菜单和 fanout 路由配置合并,避免两边手配漂移
  • 相关: wx-gateway · commit 27d5427
  • : hermes:lewaymacmini-3-local/2026-05-13 (session 20260429_161323_227b26)

wx-gateway catchall route 排除 event 类

  • 决定: 莆阳两个 catchall(matchJson={}, ownsReply=true)改成 MsgType: ["text","image","voice","video","location"],event(SCAN/CLICK/subscribe)必须走专门的 prefix 路由
  • 原因: 加新 click prefix + ownsReply=true 会触发 owners.length>1 invariant fail。最小动作方案,text 行为不变
  • 相关: wx-gateway
  • : hermes:lewaymacmini-3-local/2026-05-13

wx-gateway 拆 UserAppGrant 一对多解决 binding 越权打架(设计已出,实施待)

  • 决定: 新表 UserAppGrant(openid, appName, grantedAt, source) N:N 管 push/userinfo 越权;UserAppBinding 一对一继续管 fanout
  • 原因: binding 一对一同时身兼 fanout 路由 + push 越权两职互相打架——用户在 A/B 两站登录后只剩最新 binding,另一家就推不了。geniuspulse 站 build 配错 + 5-13 复现
  • 相关: wx-gateway · 架构图 wx-grant-vs-binding-2026-05-13.html
  • : hermes:lewaymacmini-3-local/2026-05-13

Hermes/CC 采用 /goal 自主多轮命令

  • 决定: 把 Anthropic 官方 /goal 加入 claude-code skill;Hermes 端 goals.max_turns: 20 默认保留,常用 30-50
  • 原因: 比 /loop / Stop hooks / auto-mode 更直接——每轮跑完小快模型判定条件满足,不满足继续;适合”修到测试全过”、“迁完所有调用点”等终点明确的活
  • 相关: hermes-agent-setup · skill autonomous-ai-agents/claude-code
  • : hermes:lewaymacmini-3-local/2026-05-13 (session 20260429_201559_78d36474)

Hermes 升级 v0.10.0 → v0.13.0 + curator 自动会话整理保持开启

  • 决定: 升级到 v0.13.0 (build 2026.5.7),curator 用默认值(每 N 小时扫、idle/stale/archive 默认天数、备份开启)
  • 原因: 24 个新 skill + 58 更新值得拿;curator 长期能自动归档 stale 会话避免手动清理
  • 相关: hermes-agent-setup
  • : hermes:lewaymacmini-3-local/2026-05-13