Files
Hermes-Skills/lottery-hk/SKILL.md
T

30 KiB

name, description, version, tags
name description version tags
lottery-hk 香港六合开奖抓取与分析 (user B1EF5044 偏好, 文化娱乐参考不构成投注建议)。数据源: sol.2344a.cc + btc.tktk.app/data/v_xg.json + marksix6.com (真开彩验证, browser 渲染)。**v_xg.json `Data.1-7` = Qi 期真开彩 (2026-08-04 marksix6.com 验证), 是 cron no_agent 模式下唯一可用的真开彩源**。**触发规则 (硬性)**: 用户问'特码'/'买码'/'今晚开什么'/'下期开什么'/'分析'/'玄学'/'六合分析' → **必须调 `python3 scripts/lottery_特码.py [期号]`** (纯挂牌 + 玄机诗 + 红字, 输出 Top 5 特码 + 重点金额分配)。**禁止**: (1) 跑 `lottery.py analyze` (5 期数据没意义, user 已确认); (2) 编造 (Data.1-7 = Qi 期真开彩号码); (3) agent 自己写 4 框架 (河洛/梅花/玄空/奇门) 公式; (4) 编 4 框架数据; (5) 访问 hkjc.com (被所有外部 browser agent 拦, 详见 references/hkjc-com-blocked.md); (6) 用 Qi 跑特码分析 (用户问的是 Nq 未开下期, 2026-08-13 怒纠); (7) 候选表'来源'列用硬编码字典 (必须用 src_tracker 动态抓取, 2026-08-13 修过)。**v_xg.json 字段 (2026-08-04 第 4 次修正)**: Qi=最新已开期号, Nq=未开下期, Week/Day=Nq 期开彩日, Data.1-7=Qi 期真开彩号码。时区: 默认北京时间 UTC+8, 挂牌日=开彩日。推送格式: 横向 markdown 表格 (4-8 列, QQ 可左右滑动), 必须标 (北京时间), 不写刚开/最新, 不加 A/B/C 简单回答模板。用户问'从哪取'只答来源一行不展开。详见 references/v_xg-data-qi-pitfall.md + references/cron-draw-result-flow.md。 1.5.0
lottery
hk
六合彩
analysis
sol-2344a
marksix6
qdrant-memory
v_xg-json
cron-no-agent

香港六合开奖分析

⏰ 时区规则(硬规则): 所有时间默认 北京时间(UTC+8)。v_xg.json 的 Qi=最新已开, Nq=未开下期, Week/Day 是 Nq 期(未开下期) 的开彩日。挂牌日 = 开彩日 (sol.2344a.cc 帖子时间戳 = 实际开奖日, 同天)。

🚨 用户硬偏好 (每次回复前必读, 违反必被纠正):

  1. 直接说从哪取的, 不要分析/解释 — 答"082 是周几" → 一行答 "sol.2344a.cc 082 期挂牌 07-30 = 周四开彩 (北京时间 21:30)", 不展开 "为什么不是周三"。
  2. 错了立刻重做, 不要"分析"或"等回话" — 用户原话: "知道错了, 还要来确认, 你直接跑不行吗"。立刻跑正确的事。
  3. 不要在回复结尾加 "A/B/C 简单回答" 模板 — 用户问 "这是什么技能输出的?" 才意识到是 agent 自加的模板, 没有任何 skill 输出这个。直接回答用户问题。
  4. 看到"4 框架"不要自己造公式 — "4 框架" 指 references/analysis-example-073/074/075.md 里 3 步推演流程 (v_xg.json + 挂牌 + 红字), 不是 agent 自己写 河洛/梅花/玄空/奇门 公式。必跑 python3 scripts/lottery_4frame.py。
  5. "特码分析" 必跑真脚本 — 看到 "特码"/"买码"/"今晚开什么" → 必跑 python3 scripts/lottery_特码.py [期号]。
  6. 不要在回复里算时间 — agent 默认时间不准 (system prompt 时间可能旧), 要实时用 date 命令确认北京时间。
  7. 不要去 hkjc.com 找真开彩 (详见 references/hkjc-com-blocked.md): hkjc.com 拦所有外部 browser agent (Browserbase / bet.hkjc.com / racing.hkjc.com / fonts.googleapis.com 卡 30s+ timeout)。marksix6.com 只在 agent 模式用 browser; no_agent 模式用 v_xg.json Data.1-7 (curl + UA)。
  8. 分析推送用 Nq (未开下期), 不是 Qi (已开) — 用户问"特码"是问"下期买什么", 跑 Qi 期等于把历史当预测。2026-08-13 用户反馈"你这前面写的期数是已开的,分析的数据也是已开的?我只要你分析未开的啊"。硬规则: lottery_特码.py 和 lottery_特码_cron.sh runtime 路径全用 v_xg.json['Nq'], 不要 Qi。详见 references/cron-default-qi-vs-nq-pitfall.md。
  9. 候选表「来源」列必须用真实抓取源, 禁止硬编码字典 — 2026-08-13 反馈 "分析资料来源怎么没了?", 根因 = format_te_ma_result 用了 8 个号码的硬编码 src_map 字典, 其他号码 fallback "其他挂牌提示" 抹掉了真实抓取源。修法: get_te_ma_candidates 内部 src_tracker = defaultdict(list) 同步记录, format_te_ma_result 优先用 src_tracker, 硬编码字典删除。详见 references/candidate-source-tracker-pitfall.md。
  10. 📌 规则/陷阱要写到「一定会被读」的位置 — 用户原话 "你写到一个一定能生效的地方, 不要又写到一个可读可不读的地方了" (2026-08-13)。可读可不读的位置 = 没用 (如 references/*.md 单文件)。
    • 最生效的位置 (按优先级):
      1. SKILL.md 顶部「硬规则」/「硬偏好」区 (每次加载必读)
      2. 脚本顶部 docstring (改这个脚本的人必读)
      3. CLI main 入口紧贴代码的注释 (改默认期号/参数必读)
      4. cron wrapper 顶部 4 行注释 (改 cron 必读)
      5. references/*.md 单文件 — 只在以上 4 处都写完后, 作为详细案例 补充, 不作为唯一落点
    • 写完硬规则后必须验证它在 runtime 路径里生效 (跑一遍脚本看输出)
  11. 开奖后流程 (2026-08-13): draws 表入库只有手填命令 python3 scripts/lottery_特码.py add <period> <special> <n1..n6> 和 verify_lottery.sh 自动调 add (v_xg.json 拿得到时), 没有从 marksix6.com 抓真开的独立脚本。详见 references/draws-table-manual-add-pitfall.md + references/cron-draw-result-flow.md。
  12. 🎯 命中判定只看特码, 不要平码命中 (2026-08-30): 用户原话"只要特码命中的"。lottery_特码_cron.sh (hot-data 推送) 加的"上期开奖回顾"段只输出特码命中 ✅/❌, 不输出"平码命中 N1/N2", 不要自行扩展。这是用户显式偏好, 不需要他再说一次。verify_lottery.sh 仍可输出平码命中 (那是22:30 核验报告, 性质不同)。

⏰ 沟通风格: 用户要"直接说怎么取的,不要分析/解释"。回答"081 是周几"时,直接说"来源是 v_xg.json Week=周四" — 不分析"为什么不是周二"。

🚨 硬规则 (每次推送前自检, 2026-08-04 marksix6.com 验证):

  1. 时区: 所有时间默认 北京时间 (UTC+8), 必须标"(北京时间)"后缀
  2. 挂牌日 = 开彩日 (硬规则): sol.2344a.cc 挂牌帖时间戳 = 实际开奖日,同天。旧描述"挂牌提前 2-3 天"是错的。
  3. v_xg.json 字段语义 (2026-08-04 第 4 次修正, marksix6.com 验证):
    • Qi = 最新已开期号 (刚开)
    • Nq = 未开下期期号 (下一个)
    • Week/Day/Year/Moon = Nq 期开彩日 (北京时间)
    • Data.1-7 = Qi 期真开彩号码 (7 个 + 5 行字段 sx/nim/color/style/number)
    • 取 Qi 期开彩日: Nq 期开彩日 - 1 个开彩日 (周二/四/六规律), 或查 sol.2344a.cc 挂牌帖
  4. 🔥 cron 自动期号必须是 Nq (未开下期), 不是 Qi (已开): lottery_特码_cron.sh + lottery_特码.py 默认期号 = v_xg.json Nq。用 Qi = 已开期, 分析完全错位 (2026-08-13 修过, 写死错误: Qi→Nq, fallback '082'→'088')。
  5. 推送格式: 不写"刚开"/"最新" — 用具体期号+明确日期
  6. 沟通: 用户要直接说数据来源,不要长篇分析
  7. 4 框架分析: 直接调 python3 scripts/lottery_4frame.py(4 步流程: v_xg.json + 综合挂牌 + 六信红字 + 玄机诗),不要 agent 自己造公式。
  8. Cron 模式: 用 no_agent: true + 真脚本 (lottery_特码_cron.sh / verify_lottery.sh), 不要 agent 模式 (会编)。
  9. 来源映射必须动态 (2026-08-13 修过): 候选表的"来源"列必须用 src_tracker (实际抓取), 禁止用硬编码字典 src_map = {3:'...', 13:'...'}。号码无 src 时才 fallback "其他挂牌提示"。
  10. 📌 用户硬偏好 (2026-08-13 沉淀): 规则要写到"一定会被读"的位置 (见上面用户硬偏好 10)。
  11. 开奖后流程 (2026-08-13): 见上面用户硬偏好 11。
  12. 🎯 候选数 ≥ 4 (2026-08-20 实装): 见用户硬偏好 12。
  13. 🎯 候选数 ≥ 4 (2026-08-20 实装): 用户原话"可以4-5个号合适"。实装三改一起: (a) gua_links[:3] → [:8] 多抓挂牌; (b) 火烧/六肖 解码本年生肖号 (火烧+2, 六肖/出肖各生肖+1); (c) format_te_ma_result 候选 <4 时 top.append((n, 0)) 显式补到 5, 来源标"兜底占位 (挂牌稀疏)"。已验证 Nq=091 期输出 8 候选, 重点分配 5 个 ¥15=5/4/3/2/1 (详见 references/2026-08-20-candidate-sparsity-diagnosis.md)。如果用户说"不要兜底" → 删 if len(top) < 4 块, 保留 (a)(b) 改进。

📦 4 框架 (奇门/梅花/河洛/玄空) 的位置:

  • 真脚本: scripts/lottery_4frame.py (4 步流程, 自动跑)
  • Reference: references/analysis-example-073/074/075.md (073 真实推演示范: 3 步 v_xg+挂牌+红字)
  • 不要: agent 写 河洛/梅花/玄空/奇门 公式, reference 没推演方法, 拍脑袋推的没意义

5 期数据 (analyze 频率) 没意义: lottery.py analyze 输出 5 期冷热号,数据量太少,user 已明确说"不要跑频率,没有意义"。analyze 只用作辅助核对,不是主要分析方法。

从天空彩票抓取香港六合开奖结果,提供数据分析。数据存SQLite,不存图片。

数据源

主站 (挂牌/资料)

  • 资料站: https://sol.2344a.cc/ (2026-07-29 迁移自 sol.0051.cc)
    • 综合挂牌: https://sol.2344a.cc/zongheguapai/ ← 首选挂牌数据源
    • 六信红字: https://sol.2344a.cc/lxhz/
    • 梅花诗/玄机: https://sol.2344a.cc/xuanjiziliao/
    • 解牌: https://sol.2344a.cc/jiepai/
    • 平碼平肖: https://sol.2344a.cc/pingxiaopingma/

真开彩验证源 (按 cron 模式分流, 2026-08-13)

源 模式 端点 备注
v_xg.json Data.1-7 no_agent + script (cron 主用) curl -A "Mozilla/5.0" v_xg.json Qi 期真开彩, 跟 marksix6.com 验证一致; 必须带 UA, 裸 curl 返 403
marksix6.com agent 模式 (browser 渲染) browser_navigate + browser_snapshot Vue SSR 包装页, curl 拿不到; no_agent 拿不到
hkjc.com ❌ 拦所有外部 browser agent bet.hkjc.com/ch/marksix/results 全堵, 详见 references/hkjc-com-blocked.md

关键决策 (2026-08-13): cron 核验脚本 (verify_lottery.sh) 不再依赖 marksix6.com browser (no_agent 拿不到), 统一走 v_xg.json curl + UA。这是 no_agent 模式下唯一可用的真开彩源。详见 references/cron-draw-result-flow.md。

当前开奖 JSON API

  • v_xg.json: https://btc.tktk.app/data/v_xg.json (直接 JSON, 无需 browser)
    • 字段语义 (2026-08-04 第 4 次修正, marksix6.com 验证):
      • Qi = 最新已开期号 (刚开) — 例 Qi=083 = 083 期 8/1 周六已开
      • Nq = 未开下期期号 — 例 Nq=084 = 084 期 8/4 周二未开
      • Week/Day = Nq 期开彩日 — 例 Week=周二 Day=04 = 084 期 8/4 周二
      • Data.1-7 = Qi 期真开彩号码 (Qi 期=刚开期, Data 显示 Qi 期真开, 不是 Qi-1 也不是 Qi-2)
  • sol.2344a.cc 历史 API: /e/api/api.php?get=sixlist&year=YYYY 仍返回空
  • ⚠️ v_xg.json DB 故障: 偶发 "Cann't connect to DB!" 200 OK 但返回空文本 (2026-08-02 出现, 2026-08-13 重现), 脚本必须校验返回是有效 JSON

开奖时间

  • 每周二、四、六 21:30 (北京时间)
  • 49 个号码, 6 个平码 + 1 个特码

tktk API 架构 (从 public.js 逆向)

URL 模式: https://btc.tktk.app/data/v_{cod}.json?{timestamp}

cod 彩种 说明
xg 香港六合 每周二/四/六 21:30
48am 天天澳门彩 每天 22:14-22:40
am 新澳门六合 每天 21:14-21:40
tw 台湾六合 每天 20:28-20:58
xjp 新加坡六合 每天 18:35-18:55
fckl8 快乐8 每天 21:25-21:40

⚠️ v_xg.json Data 字段格式 (重要)

  • Data.1 - Data.6: 平码, Data.7: 特码
  • 每个号码含 5 个字段: nim(五行) / sx(生肖) / color(波色) / style(red) / number(数字)
  • Data.1-7 = Qi 期真开彩 (Qi 期就是 Data 显示的期, 不是更早)

数据存储

SQLite 数据库: ~/.hermes/trading/lottery.db

  • draws 表: 开奖记录 (期号、日期、6 个号码+特码、生肖、五行、波色)
  • cold_data 表: 冷数据 (key-value, 网页文本内容)
  • image_links 表: 图片链接 (类别、标题、URL、期号, 不下载图片)
  • analysis 表 (2026-08-04 新增): 每次分析入库 (id, period, candidates JSON, budget, v_xg_qi/nq/week/day, actual_special, hit, created_at)
    • 用 lottery_特码.py add <period> <special> [n1 n2 n3 n4 n5 n6] 手填真开
    • check_hits() 自动对比 draws 表 actual_special → 更新 hit=1/0
    • list CLI 看历史 (含 hit 状态)
  • 不存图片文件

脚本用法

lottery_特码.py (主要)

python3 ~/.hermes/skills/trading/lottery-hk/scripts/lottery_特码.py [期号]
# 跑分析, 动态取 Qi/Week/Day (不写死)
# 入库 SQLite analysis 表
# **默认无参 = 自动取 v_xg.json Nq 期 (未开下期, 要预测的那期)** — 2026-08-13 修正, 之前错取 Qi(已开)

python3 ~/.hermes/skills/trading/lottery-hk/scripts/lottery_特码.py add 083 23 37 7 16 1 32 22
# 手填真开: <period> <special> [n1..n6] → INSERT draws + reset 该 period analysis.actual_special + check_hits

python3 ~/.hermes/skills/trading/lottery-hk/scripts/lottery_特码.py list [N]
# 列出最近 N 条 analysis (id, period, Top 5, ¥, v_xg, 真开, hit, 时间)

python3 ~/.hermes/skills/trading/lottery-hk/scripts/lottery_特码.py hits
# 单独跑 check_hits

lottery_特码_cron.sh (cron wrapper, 11:30 北京, 2026-08-30 加"上期开奖回顾"段)

# 流程 (2026-08-30 加):
#   1. 取 v_xg.json Nq (本期未开下期, 用于分析) + Qi (上期已开, 用于回顾)
#   2. 从 lottery.db draws 表读 Qi 期开奖结果 (7 个号码), 缺失则 fallback v_xg.json
#   3. 从 ~/.hermes/cron/output/5bec1f60f77f/*.md 读 Qi 期 Top 5 候选 (用 🥇🥈🥉 锚定, 避免抓到日期/年份)
#   4. 输出"上期开奖回顾"段: 平码 + 特码 + 预测 Top 5 + **特码命中判定** ✅/❌ (只看特码, 不判平码)
#   5. 跑 lottery_特码.py Nq 跑本期分析
# 详细 docstring 见脚本顶部

verify_lottery.sh (cron wrapper, 22:30 北京, 2026-08-13 新建)

# 核验当前期预测 vs 实际开奖, 记录命中率
# 流程: curl v_xg.json (UA + proxy fallback) → draws 表 fallback → 自动 add_draw → 找 Qi 期 .md → 输出报告
# 详见 references/cron-draw-result-flow.md

lottery_4frame.py (4 框架玄学)

python3 ~/.hermes/skills/trading/lottery-hk/scripts/lottery_4frame.py
# 4 步流程: v_xg.json + 综合挂牌 + 六信红字 + 玄机诗
# 不要 agent 自己推公式 (reference 没方法)

lottery.py (辅助)

SCRIPT=~/.hermes/skills/trading/lottery-hk/scripts/lottery.py
python3 $SCRIPT add <期号> <号码>          # 手动添加
python3 $SCRIPT history [期数]             # 查看历史
python3 $SCRIPT zodiac                    # 生肖号码对照表
python3 $SCRIPT next                      # 下期开奖时间
# ⚠️ analyze 输出 5 期冷热号没意义, user 已确认

生肖映射 (网站实际映射, 已验证)

网站的生肖表和标准 12 生肖轮转不同, 用 mod 12 映射:

0=狗, 1=猪, 2=蛇, 3=马, 4=羊, 5=虎, 6=兔, 7=鼠, 8=牛, 9=猴, 10=鸡, 11=龙

071 期验证: 34=鸡(34%12=10)✅, 46=鸡(46%12=10)✅, 17=虎(17%12=5)✅

冷数据 vs 热数据

  • 🧊 冷数据 (存 cold_data 表): 歷史、生肖表、日期、常識、全年、技巧、規律、策略
  • 🔥 热数据 (每期更新): 開獎、掛牌、解牌、綜掛、平碼平肖、玄机资料、论坛高手推荐等

资金分配偏好 (2026-07-30)

用户偏好: 信号/分析结果要给重点分配, 不是平均分或全部平均。

  • ❌ 错: "5 个候选号, 各买 1 元"
  • ✅ 对: "5 个候选号, 按权重 5/4/3/2/1 元分配, 重点放在前 2-3 个"
  • 默认预算: 信号类 (特码/跟单) 用 ¥15 = 5/4/3/2/1
  • 排序时给 emoji (🥇🥈🥉)

适用范围: lottery 特码、币圈跟单、股票做 T 信号等任何"有预算上限的信号推送"。

候选数 < 4 时诊断 (2026-08-20 v1.4.0 实装 fix)

用户偏好: 4-5 个候选号最合适, 2 个显得"没什么可买的"。

实装的 fix (3 改动一起):

  1. 挂牌页抓取放宽 (lottery_特码.py::get_te_ma_candidates): gua_links = re.findall(...)[:3] → [:8] — 多抓几页挂牌, 挂牌稀疏时也有足够数据源。
  2. 火烧/六肖 解码本年生肖号: 之前 火烧 / 六肖 / 出肖 字段只记录不直接给号, 现在加 SX_TO_BENSHENG = {'鼠':23,'牛':22,..., '猪':12} 解码本年生肖号, 火烧 +2, 六肖/出肖 每个生肖 +1。
  3. format_te_ma_result 兜底: 候选数 < 4 时, weights.most_common(8) + 显式补足到 5 个, 占位的号权重=0, 来源标记 "兜底占位 (挂牌稀疏)"。most_common 不返回权重 0 的号, 这里用 top.append((n, 0)) 显式扩展。

配套 wrapper 修复: lottery_特码_cron.sh 已二次修正 Qi→Nq (2026-08-20 之前 wrapper 改过 Qi→Nq 但又有人改回去了, 这次硬规则:d['Nq'] + fallback '088')。

验证 (2026-08-20 跑 Nq=091 期): 输出 8 个候选, 重点分配 5 个 (¥15 = 5/4/3/2/1):

  • 🥇 35 (权重 4, 另版挂 + 尾数 5尾+30)
  • 🥈 2 (权重 2, 尾数 2尾本)
  • 🥉 22 (权重 2, 尾数 +20 + 六肖 牛=22)
  • 4 5 (权重 2, 尾数 5尾本)
  • 5 14 (权重 2, 火烧 鸡=14 本年生肖)

回退条件: 如果用户明确说"不要兜底, 太离谱了" → 把 format_te_ma_result 里的 if len(top) < 4 块删除, 保留挂牌抓取放宽 + 火烧/六肖 解码。

详见 references/2026-08-20-candidate-sparsity-diagnosis.md。

注意事项

  • 页面用 Vue.js 动态加载, 非开奖时间段 (21:14-21:40 外) 可能无数据
  • 图库类页面 (玄机图库、经典图库等) 是图片, 不抓取
  • 网站有大量博彩广告, 解析时需过滤
  • v_xg.json DB 故障: sol.2344a.cc/btc.tktk.app 偶发 "Cann't connect to DB!" 200 OK 但返回空文本 (2026-08-02 出现), 脚本静默失败

📌 082 期实战案例 (2026-07-29 凌晨, 用户多次纠正)

  1. cron 668dcf3ec54d lottery-draw-result 14:00 UTC (= 北京 22:00) 跑
  2. v_xg.json Qi=081 (081 期 7/28 周二已开), Nq=082 (082 期 7/30 周四未开), Week=周四, Day=30 (= Nq=082 期开彩日 = 7/30 周四)
  3. agent 推: "081 期 = 7/30 周四 21:30 开彩" — 错 (实际 081 = 7/28 周二)
  4. 用户反复纠正"081 时间错 / 不要分析 / 你直接跑不行吗"
  5. 真相: 挂牌日 = 开彩日 (sol.2344a.cc 挂牌 07-28 13:35 = 081 周二开彩)

坑 1 (v_xg.json 字段): Week/Day 是 Nq 期开彩日 (未开下期), 不是 Qi 期(已开)。

坑 2 (挂牌日 vs 开彩日): sol.2344a.cc 挂牌帖发布时间 = 开彩日,同一天。

坑 3 (沟通): agent 答 "081 是周几" 时,反复用"为什么不是周二"的长篇分析 → 用户纠正"我说了,你不要分析,只说怎么取的就行了"。

📌 084 期实战命中 (2026-08-04, 第 4 次修正验证)

  • 8/4 14:03 北京 v_xg.json: Qi=083 (083 期 8/1 周六已开), Data.1-7=[37,7,16,1,32,22,23]
  • marksix6.com browser 验证: 083 期 8/1 周六 21:32 真开彩 = 37/7/16/1/32/22 + 23 ✅
  • 结论: Data.1-7 = Qi 期真开彩号码, 不是 Qi-1 也不是 Qi-2 (第 4 次修正确认)
  • 8/4 15:22 北京 v_xg.json: Qi=084 (084 期 8/4 周二已开), Data.1-7=[31,16,4,11,13,33,38]
  • lottery_特码.py 跑 084 期: Top 1 = 38 (权重 10)
  • 手填 084 期真开 special=38 → check_hits: analysis #4 hit=✓ 中奖!

📌 088 期 命中 (2026-08-13, 特码 23 中) + 089 期 特码 23 不在 Top 5

  • 088 期 8/13 周四 21:30 开, 真开 special=23, 我推 Top 5 有 23 (#5, ¥1, 权重 1)
  • ✅ 088 期中奖 ¥42 (42 倍赔率)
  • 089 期 8/15 周六 21:30 开, 真开 special=14, 我推 Top 5 = 38/26/1/4/11
  • ❌ 089 期未中 — 14 不在 Top 5 (Top 1=38 差太远)
  • 结论: 特码分析命中率不稳定, 仅为文化娱乐参考

📌 088 期 Cron Qi/Nq 错位 bug (2026-08-13, 用户怒纠)

  • cron 5bec1f60f77f lottery-hot-data 推送标题 "🎯 分析期号: 087 (v_xg.json Qi)"
  • 实际 087 期 8/11 周二 已开, 088 期 8/13 周四才是未开
  • 用户原话: "你这前面写的期数是已开的, 分析的数据也是已开的? 我只要你分析未开的啊"
  • 根因: lottery_特码_cron.sh 第 9-19 行 print(d['Qi']) 取的已开期, lottery_特码.py 默认 fallback 也是 Qi
  • 修法: 两个文件同步 Qi → Nq, fallback '082' → '088' (因为 2026-08-13 当时 Nq=088)
  • 验证: 修完跑 cron wrapper → 输出 "🎯 分析期号: 088 (v_xg.json Nq 未开下期)", 用户确认正确
  • 教训: 用户问"特码"永远指"下期买什么", runtime 路径不能 fallback 到 Qi, 改这两个文件立刻 grep "Qi" 确认 runtime 路径全用 Nq

📌 088 期 lottery-draw-result cron 错配 bug (2026-08-13)

  • cron 668dcf3ec54d lottery-draw-result 配置: script=laboratory_特码_cron.sh (分析脚本), schedule=0 14 * * 0,2,4 UTC (= 北京 22:00)
  • 根因: 22:00 北京开彩后 30 分钟 cron 跑未开下期分析 (跟 11:30 那次重复), 完全不是"记录命中"
  • 修法: script → verify_lottery.sh (新建), schedule → 30 14 * * 0,2,4 UTC (北京 22:30, 等 v_xg.json 更新到 Qi), verify_lottery.sh 内部自动 v_xg.json curl + add_draw + check_hits
  • 教训: cron 配错脚本是"静默 bug" — 跑出来的输出看起来正常, 实际功能错位。改 cron 必须同时检查 schedule 跟 script 是否匹配, 跑一次真输出验证

📌 095 期 上期开奖回顾 实跑 (2026-08-30, v1.5.0 验证)

lottery_特码_cron.sh 11:30 北京跑,新增的"上期开奖回顾"段实跑输出:

🎯 分析期号: 096 (v_xg.json Nq 未开下期)

━━━ 上期开奖回顾 ━━━
**095 期**
| 位置 | 号码 |
|:---|:---|
| 平码 | 30 · 4 · 11 · 26 · 8 · 7 |
| 特码 | **42** |

预测 Top 5: 33,25,26,22,22
命中: ❌ 特码 42 未中

用户偏好落实:

  • ✅ "只判特码" (用户 2026-08-30 原话 "只要特码命中的") — 不输出"平码命中 26"
  • ✅ Top 5 grep 锚定 🥇🥈🥉 行避免抓到年份/日期 (最初误抓到 2026 是 grep 没限定)
  • ✅ 复用 verify_lottery.sh 的 draws 表 + v_xg.json fallback 路径

教训: Top 5 提取用 grep -hE '^\\| [🥇🥈🥉] \\| \\*\\*[0-9]+\\*\\*' 锚定 emoji 行,不是裸 grep \\*\\*[0-9]+\\*\\* (后者会抓到时间戳/年份)。

📌 090 期 cron schedule 错位 bug (2026-08-20)

  • 用户反馈: "之前 14:30 跑的 cron 输出 lottery_特码.py not found" + verify 输出 "未找到分析文件 查找路径: /home/openclaw/.hermes/cron/output/5bec1f60f77f/"
  • 根因: 当时 lottery-draw-result cron 配置 schedule=30 14 * * 0,2,4 (= 北京 22:00, 开彩前 30 分钟)
  • 错配双重: (a) 开彩前 v_xg.json 还停在 Qi=089, 无 090 期数据 → verify 报"未找到分析文件"; (b) 14:30 wrapper 调 lottery_特码.py 跑分析 (应该 verify 跑核验), 两个 cron 错配
  • 修法: schedule 30 14 → 30 22 * * 0,2,4 (= 北京 22:30, 开彩后 1 小时), 让 verify 等到 v_xg.json 更新到 Qi=090 (Nq=091) 后再跑
  • 验证: 22:30 跑完输出 "090 期 平码 39·41·8·9·7·14, 特码 49", last_run_at 变成 22:30:36
  • 教训: verify 类 cron schedule 必须在 v_xg.json 更新后 (开彩后 30 分钟-1 小时), 不是"开彩前几分钟"

📌 095 期 verify_lottery.sh SKILL_DIR 路径 bug (2026-09-02)

症状: 9/2 22:30 北京 cron 668dcf3ec54d lottery-draw-result 跑完, 推 QQ 报告末尾出现:

python3: can't open file '/home/openclaw/.hermes/scripts/lottery_特码.py': [Errno 2] No such file or directory
⚠️ add_draw 失败

用户反馈: "报这么多错" — 看到一堆 python3: can't open 报错 + 后续"未找到分析文件"。

根因:

# 旧 (在 ~/.hermes/scripts/verify_lottery.sh 中, cron 调用)
SKILL_DIR="$(cd "$(dirname "$0")/.." && pwd)"
# $0 = /home/openclaw/.hermes/scripts/verify_lottery.sh
# dirname = /home/openclaw/.hermes/scripts
# .. = /home/openclaw/.hermes ← 错了! 应该是 skill 根
# 然后 SKILL_DIR/scripts/lottery_特码.py = /home/openclaw/.hermes/scripts/lottery_特码.py ← 不存在

正解 (硬编码优先 + fallback, 已实装):

# lottery skill 在 ~/.hermes/skills/trading/lottery-hk/, 但脚本被复制到 ~/.hermes/scripts/
# 优先找 skill 原目录, fallback 到 scripts 根
if [ -f "$HOME/.hermes/skills/trading/lottery-hk/scripts/lottery_特码.py" ]; then
    SKILL_DIR="$HOME/.hermes/skills/trading/lottery-hk"
else
    SKILL_DIR="$(cd "$(dirname "$0")/.." && pwd)"
fi

手动补登 095 期 (因为 add_draw 失败了, 095 期没入库):

python3 ~/.hermes/skills/trading/lottery-hk/scripts/lottery_特码.py add 095 42 30 4 11 26 8 7
# → ✅ 095 期真开彩入库

090-094 期无法补登: v_xg.json 只存当下一期 Data.1-7, 没有历史真开彩数据。draws 表 090-094 期永远空着, 这部分历史数据无法恢复。

教训:

  • 任何 cron 脚本从 skill 复制到 ~/.hermes/scripts/ → dirname $0/.. 路径绝对会错
  • 解决方案: 优先硬编码已知 skill 路径, fallback 用相对路径 (顺序别反)
  • 见 memory-check-utf8-zombie-lock-fix skill § 15c — 通用 SKILL_DIR/SCRIPT_DIR 路径 bug 修法

关联 lessons:

  • § 用户硬偏好 11 (开奖后流程) — verify_lottery.sh 是关键一环, 路径错等于流程断
  • § 11 Pitfall B (脚本位置铁律) — skill 内 vs scripts/ 两套副本, cron 必须 scripts/

定时任务 (2026-08-13 改)

任务 cron schedule 模式 推送到 script 备注
lottery-hot-data 30 11 * * 0,2,4 (北京) no_agent + script QQ lottery_特码_cron.sh 开彩前 2h 抓热数据, 跑 Nq 期分析
lottery-draw-result 30 22 * * 0,2,4 (北京) no_agent + script QQ verify_lottery.sh 开彩后 1h 核验 (2026-08-20 从 14:30 改), 等 v_xg.json 更新到 Qi

⚠️ Cron 改 no_agent + script 模式 (2026-08-04): agent 模式 cron 经常编 (标题/时间/号码), 改 no_agent + script 后 0% 编概率。详见 references/2026-08-04-analytics-history-and-cron-no-agent.md + references/cron-draw-result-flow.md + references/cron-browser-mode.md。

开奖时间: 21:30 北京时间 → 11:30 UTC=19:30 北京 抓热数据, 14:30 UTC=22:30 北京 抓结果。

参考资料

  • references/zodiac-table.md: 2026 年完整生肖五行波色对照表
  • references/draw-dates.md: 2021-2023 年搅珠日期 (JS 日历数据)
  • references/v_xg-data-qi-pitfall.md: v_xg.json 字段语义陷阱 (第 4 次修正, marksix6.com 验证)
  • references/v_xg-qi-pitfall.md: v_xg.json Qi 字段语义陷阱 (历史归档, 第 1 版)
  • references/common-knowledge.md: 生肖属性文章索引、关键概念
  • references/techniques.md: 规律秘诀文章索引 (出波、波色法等)
  • references/patterns.md: 固定规律文章索引 (日期定波、杀肖、出尾等)
  • references/strategies.md: 买码建议文章索引 (赢钱秘诀、七戒律等)
  • references/cron-default-qi-vs-nq-pitfall.md: Cron 默认 Qi vs Nq 陷阱 (2026-08-13) — 抓期号/分析必须用 Nq
  • references/candidate-source-tracker-pitfall.md: 候选表「来源」列硬编码陷阱 (2026-08-13) — src_map 字典 → 动态 src_tracker
  • references/draws-table-manual-add-pitfall.md: 开奖后流程断点 (2026-08-13) — draws 表手填 + cron 配错脚本 + verify Qi-1 → Qi 修复
  • references/cron-draw-result-flow.md: 开奖后核验 cron 完整流程 (2026-08-13 新建) — 22:30 北京 + verify_lottery.sh + v_xg.json as 真开彩源 (no_agent 唯一可行)
  • references/cron-browser-mode.md: Lottery cron 模式分工 (2026-08-13 改) — no_agent 模式 curl 直接生效, agent 模式才用 browser
  • references/agent-workflow-pitfalls.md: 跨 skill 通用, 必读 (用户硬偏好 + agent workflow 坑)
  • references/2026-08-04-analytics-history-and-cron-no-agent.md: SQLite analysis 表 + CLI + cron no_agent + script 模式 + GitLab 502 处理
  • references/hkjc-com-blocked.md: 2026-08-04 新 — hkjc.com 拦所有外部 browser agent, 改用 marksix6.com (agent 模式) / v_xg.json (no_agent 模式)
  • references/site-status.md: 各站点状态 (sol.2344a.cc / btc.tktk.app / etc)
  • references/site-navigation.md: 站点导航
  • references/lottery-sources.md: 数据源汇总
  • references/082-success-workflow.md: 082 期成功跑通的工作流 (反向参考)
  • references/analysis-example-073/074/075.md: 3 期真实推演示范 (4 框架真方法)
  • references/2026-07-21-esoteric-analysis-capability-index.md: 玄学分析能力索引
  • references/marksix6-com-verification-source.md: marksix6.com 详细说明
  • references/lottery-te-ma-2026-08-04-marksix6-verification.md: 2026-08-04 实战验证 marksix6 真实开彩
  • references/2026-08-30-hot-data-previous-draw-recap.md: hot-data cron 加"上期开奖回顾"段 (上期 Qi 平码+特码+预测 Top 5+特码命中判定, 用户硬偏好 #12 "只要特码命中的", grep Top 5 锚定 🥇🥈🥉 行避免抓到日期年份)