Files
Hermes-Skills/lottery-hk/references/cron-default-qi-vs-nq-pitfall.md
T

2.4 KiB

Cron 默认 Qi vs Nq 陷阱 (2026-08-13 用户发现)

🚨 事故时间线

  • 2026-07-29 左右 → 2026-08-13: cron lottery-hot-data 跑 lottery_特码_cron.sh, 脚本默认抓 v_xg.json['Qi'](已开期), 跑了一个月标题/排名/挂牌全是已开期数据。
  • 2026-08-13 12:04 北京: 用户问 "你这前面写的期数是已开的, 分析的数据也是已开的? 我只要你分析未开的啊" — 当天 v_xg.json Qi=087 (已开), Nq=088 (未开, 8/13 周四 21:30 开彩)。

根因

scripts/lottery_特码_cron.sh 第 9-19 行:

d = json.loads(r.read().decode('utf-8'))
print(d['Qi'])   # ❌ 改用 Nq

scripts/lottery_特码.py 第 397-406 行 (默认 period):

period = json.loads(r.read().decode('utf-8')).get('Qi', '082')   # ❌ 改用 Nq, fallback '088'

两个文件 runtime 路径全部用 Qi, 文档注释里写 "自动取 Qi 期"。用户问"特码"永远是想知道"下期买什么", 不是"上期回顾"。

硬规则 (修改时必检)

  1. lottery_特码_cron.sh 默认写 NQ=$(... Nq ...) (小写 Nq=未开)
  2. lottery_特码.py 默认 period = v_xg.json['Nq'], fallback '088'
  3. 修改这两个文件后必跑:
    grep -n "Qi\|Nq" ~/.hermes/skills/trading/lottery-hk/scripts/lottery_特码.py \
      ~/.hermes/skills/trading/lottery-hk/scripts/lottery_特码_cron.sh
    
    • 搜出来的 Qi 只允许出现在文档注释 ("""Qi = 最新已开""") 和 qi_xg = v.get('Qi') 字段快照里
    • runtime 路径 (period = ..., print(d['...'])) 必须是 Nq

验证脚本

# 跑完 cron 脚本, 看第一行 "🎯 分析期号: NNN (v_xg.json Nq 未开下期)"
bash ~/.hermes/skills/trading/lottery-hk/scripts/lottery_特码_cron.sh 2>&1 | head -3
# 期望: 🎯 分析期号: 088 (v_xg.json Nq 未开下期)
# 不期望: 🎯 分析期号: 087 (v_xg.json Qi)

文档一致性

  • references/v_xg-data-qi-pitfall.md 之前只讲 Qi/Nq 字段语义, 没强调 "分析/抓数据选 Nq" 的运行时规则
  • 这个 reference 专门补这个运行时陷阱
  • SKILL.md 硬规则 #4 (2026-08-13 新增) + 用户硬偏好 #8 = 同步规则

教训

任何**"自动取 X 期"** 的脚本默认,都要先问自己:

  1. 用户用这个脚本的目标场景是什么? (特码分析 = 推算下期)
  2. 默认值应该符合同一类用户意图 (Nq = 未开)
  3. Qi/已开期 只用于核对 (查 marksix6.com / SQLite draws 表), 不是默认推送