2569718930@qq.com
209027afb3
机场消息加英文城市名,时间移到标题行
...
格式变更:英文名 + 中文标签 + 当地时间放第一行,
温度单独一行,更简洁。
Constraint: 跑道对城市(首尔/釜山)同样受益
Tested: pytest 176 passed, ruff check 通过
2026-05-12 20:35:02 +08:00
2569718930@qq.com
83d2de5438
修复非 AMOS 城市温度显示为整数:改用机场站点温度替代 METAR
...
city_weather.current.temp 来自 METAR(整数),改为从 mgm_nearby[0].temp
取机场高频数据源的站点温度(小数精度)。JMA/FMI/KNMI/MGM 源均保留一位小数。
Constraint: 首尔/釜山走 runway_temps 已有精度,不受影响
Tested: pytest 176 passed, ruff check 通过
2026-05-12 20:17:32 +08:00
2569718930@qq.com
4d584f4828
推送频率改为按数据源原生速率:AMOS 1分钟,其余 10分钟
...
不再统一 2 分钟,各城市按实际数据刷新周期独立推送:
首尔/釜山 60s,东京/安卡拉/赫尔辛基/阿姆斯特丹 600s。
循环轮询间隔降至 60s 以匹配最快频率。
Constraint: 循环每 60s 跑一轮,但 interval 判断让各城市按自有节奏推送
Tested: pytest 176 passed, ruff check 通过
2026-05-12 20:13:15 +08:00
2569718930@qq.com
5d630bb910
接入 KNMI 阿姆斯特丹史基浦机场 10 分钟数据源
...
通过 KNMI Open Data API 获取 Schiphol 机场 10 分钟观测数据(NetCDF 格式)。
需设置 KNMI_API_KEY 环境变量。Docker 镜像新增 libhdf5-dev/netCDF4 依赖。
Constraint: KNMI API key 为 JWT 格式,通过 Authorization header 传递
Scope-risk: 中高,新增系统依赖 libhdf5-dev + netCDF4
Tested: pytest 176 passed, KNMI API 连通性验证通过
2026-05-12 20:10:06 +08:00
2569718930@qq.com
a32a49f3c7
接入 FMI 赫尔辛基-万塔机场 10 分钟实时数据源
...
新增 fmi_sources.py,通过 FMI Open Data WFS API 获取 Helsinki-Vantaa
机场观测数据(FMISID 100968, WMO 2974)。每 10 分钟更新,参数含温度/
风速/气压。免费无需 API key。集成至高频机场推送体系。
Constraint: FMI WFS 无 rate limit,无需注册
Scope-risk: 中,新增数据源
Tested: pytest 176 passed, FMI 实测 temp=13.1°C wind=9.5kt pressure=1000.9hPa
2026-05-12 19:51:32 +08:00
2569718930@qq.com
203094a97c
修复测试:移除 momentum_spike 断言 + Python 3.8 类型兼容
...
build_trading_alerts 已移除 momentum_spike 规则,对应测试也更新。
get_airport_obs_recent 返回类型改用 List[Dict] 兼容 3.8。
Tested: pytest 176 passed
2026-05-12 19:13:06 +08:00
2569718930@qq.com
a5522b4b16
推送窗口改为 DEB 曲线动态判断,替代固定 08:00-20:00
...
当前温度距 DEB 预测最高 ≤3°C 时开始推送,一旦确认已过峰值
(近 1h 内最高已过且回落 >0.5°C)自动停止。不再依赖固定时段。
Constraint: DEB 预测本身就是每日最高温,比时钟判断更贴合实际峰值
Scope-risk: 中,核心推送逻辑变更
Tested: ruff check 通过
2026-05-12 19:08:44 +08:00
2569718930@qq.com
9026ccf4c0
机场推送间隔改为 2 分钟,适配峰值期高频需求
...
默认 120s per-city 独立推送,可通过 TELEGRAM_AIRPORT_PUSH_INTERVAL_SEC 覆盖。
最短允许 30s,避免过于频繁。
Constraint: _analyze 内部缓存 TTL 可能长于 2min,同数据可能重复推送
Scope-risk: 低,仅改间隔参数
Tested: ruff check 通过
2026-05-12 19:04:21 +08:00
2569718930@qq.com
e062fedb3a
移除温度急变检测,改为 per-city 定时推送温度+DEB
...
去掉 0.5°C/10min 阈值触发、最高温锁定、冷却期等机制。
四座机场城市各自 10 分钟间隔独立推送当前温度和 DEB 预测,
仅当地 08:00-20:00 时段发送,无触发条件、无警报标题。
Constraint: 首尔/釜山展示跑道对温度,东京/安卡拉展示单站温度+本地时间
Scope-risk: 高,核心逻辑变更
Tested: ruff check 通过
2026-05-12 19:02:36 +08:00
2569718930@qq.com
4006e82ded
机场急变消息追加本地时间
...
安卡拉/东京单站温度行改为"当前 X°C (13:52)"格式,
从 city_weather.local_time 提取当地时间。
Constraint: 首尔/釜山跑道对行暂不加时间
Tested: ruff check 通过
2026-05-12 18:57:47 +08:00
2569718930@qq.com
fc146b6e0c
@
...
实测修正 MGM 安卡拉刷新频率:5-15 分钟不定,非固定 10 分钟
三次采样 09:50→09:56(6min)→10:10(14min),波动较大。
更新文档为实际观测值,非预估。
Tested: curl 实测 servis.mgm.gov.tr 端点
@
2026-05-12 18:26:50 +08:00
2569718930@qq.com
106dd3305b
@
...
修正文档:区分跑道对温度和站点实时温度
首尔/釜山为 AMOS 跑道传感器(每对独立温度),东京/安卡拉为机场
气象站单点实时温度,二者数据类型不同,文档和数据表已据此更新。
Constraint: 代码逻辑无需改动,仅文档修正
Scope-risk: 无
Tested: ruff check 通过
@
2026-05-12 18:07:35 +08:00
2569718930@qq.com
574f007607
@
...
主循环移除动量突变规则,温度急变检测由机场高频循环独立承担
30 分钟主循环不再做 momentum_spike 检测,避免对机场城市产生
冗余告警(含市场分布/AI 建议的格式)。其余 47 城原本就没有
高频机场数据,动量检测也无实际意义。
Constraint: 其余 3 条规则(Ankara DEB、预报突破、暖平流)保持不变
Scope-risk: 低,仅影响主循环告警规则集
Tested: ruff check 通过
@
2026-05-12 18:05:11 +08:00
2569718930@qq.com
88b8366067
@
...
首尔/釜山温度急变消息展示各跑道对温度
AMOS 两个跑道对独立展示(如 15L/33R 14.6°C / 15R/33L 15.2°C),
东京和安卡拉仍显示单站温度。
Constraint: 跑道对信息从 city_weather.amos.runway_obs 提取,仅首尔/釜山有效
Scope-risk: 低,仅改消息格式
Tested: ruff check 通过
@
2026-05-12 17:55:20 +08:00
2569718930@qq.com
2061dfe8b5
@
...
简化机场温度急变消息:只报当前温度和 DEB 预测最高温
去掉温度变化幅度、风、emoji 等冗余信息,消息只保留两行核心数据。
Constraint: 触发规则不变(0.5°C/10min 阈值、20min 窗口、3 样本最低)
Scope-risk: 极低,仅改消息格式
Tested: ruff check 通过
@
2026-05-12 17:53:22 +08:00
2569718930@qq.com
12b0c76caf
@
...
砍掉机场快照,改为 per-city 独立告警;新增安卡拉 MGM 17128 高频监控
快照定时推送无实际价值(没变化也报),改为仅温度急变时触发告警。
各城市独立检测、独立冷却,不再捆绑推送。
同时接入安卡拉 Esenboğa 机场 MGM 站点 17128 的实时温度数据。
Constraint: 快照已运行验证格式无误,砍掉不影响现有急变告警功能
Scope-risk: 中低,仅影响高频通道逻辑,主循环不变
Tested: ruff check 通过
@
2026-05-12 17:51:40 +08:00
2569718930@qq.com
5a6a487a97
@
...
修复机场高频推送状态与主循环冲突:使用独立的状态文件
_load_airport_state / _save_airport_state 在 SQLite 模式下错误地复用了
_telegram_state_repo,与市场监控主循环共享同一个状态存储,
导致两个循环互相覆盖对方的 last_by_city / last_snapshot_ts 等字段。
改为始终使用独立文件 data/airport_push_state.json 隔离状态。
Constraint: 机场状态与主循环状态必须物理隔离
Scope-risk: 低,仅影响新功能的状态持久化
Tested: ruff check 通过
@
2026-05-12 17:39:26 +08:00
2569718930@qq.com
8b1abf3d56
@
...
修复东京快照温度缺失:JMA 数据在 mgm_nearby 而非 jma_official_nearby
_attach_japan_official_nearby 将 JMA 数据写入 raw["mgm_nearby"],
但 _analyze 未透传 jma_official_nearby 字段到 city_weather 输出层。
改为从 mgm_nearby[0].temp 取东京 JMA 实时温度。
Tested: ruff check 通过
@
2026-05-12 17:21:05 +08:00
2569718930@qq.com
a6fbbb4bef
@
...
机场快照改进:首尔/釜山展示各跑道对温度,东京补齐 JMA 实时温度
快照数据源从仅依赖 airport_obs_log 改为优先取 city_weather 中的 AMOS/JMA 实时数据:
- 首尔/釜山:展示每条跑道对温度(如 15L/33R: 14.6°C / 15R/33L: 15.2°C)
- 东京:取 JMA official_nearby 实时温度,obs_log 为空时回退到 current.temp
Tested: ruff check 通过
@
2026-05-12 17:16:08 +08:00
2569718930@qq.com
9a8ed0e15e
@
...
修复机场快照时间显示:CST → KST(UTC+9 当地时间)
@
2026-05-12 17:08:56 +08:00
2569718930@qq.com
64f8ff21ec
@
...
新增机场高频推送:10分钟级温度监控 + DEB预测快报
为首尔/釜山/东京三大机场城市实现高频温度监控通道:
- 新增 airport_obs_log 表积累观测数据,支持趋势检测
- AMOS/JMA 成功后自动写入观测日志
- 新增 airport_rapid_temp_change 告警规则(20min窗口、0.5°C/10min阈值)
- 10分钟间隔高频子循环 + 30分钟机场快照(含 DEB 预测最高温)
- 最高温锁定后自动跳过,快照仅当地 08:00-20:00 发送
Tested: ruff check 通过
@
2026-05-12 17:04:17 +08:00
AmandaloveYang
ff4c8b0139
修复手机端无法滚动:添加 viewport meta 标签并在移动端允许根容器垂直滚动
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-12 10:06:12 +08:00
AmandaloveYang
c56c490b60
新增机场高频数据接入市场监控频道方案文档
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-11 18:34:39 +08:00
AmandaloveYang
c50a057562
首尔、釜山不再展示周边站(AMOS 跑道传感器已取代 KMA 站网)
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-11 18:11:03 +08:00
AmandaloveYang
349f3e53c7
更新 README:日期至 2026-05-11,城市数 52→51,KMA→AMOS,积分改造,版本 v1.6.0
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-11 18:07:41 +08:00
AmandaloveYang
eb47e0a078
更新深度评估报告:日期至 2026-05-11,城市数 52→51,新增 AMOS 与积分改造内容
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-11 18:04:04 +08:00
AmandaloveYang
ff7938187c
更新文档:KMA→AMOS、积分来源补全、信心指标移除、缓存 TTL 修正
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-11 17:56:45 +08:00
AmandaloveYang
3d4e803488
城市决策卡移除信心指标显示
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-11 17:33:01 +08:00
AmandaloveYang
e344fae75f
首尔/釜山 AMOS 数据缓存 TTL 从 300s 降至 60s,对齐官网 1 分钟刷新频率
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-11 17:28:53 +08:00
AmandaloveYang
52ad2dfde4
AMOS 跑道面板仅限首尔/釜山显示,其余城市无真实 AMOS 数据
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-11 17:11:57 +08:00
AmandaloveYang
55bb06d213
移除 Masroor Air Base 机场城市(数据源、别名、时区、前端面板、文档、测试)
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-11 16:39:04 +08:00
AmandaloveYang
76b4a5df59
修复转化漏斗:后端返回原始比率,避免前端二次乘以 100 导致显示 3750%
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-11 15:49:39 +08:00
AmandaloveYang
9ff2a99618
修复测试:guard mock 补充 check_daily_query_limit 方法
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-11 14:24:35 +08:00
AmandaloveYang
3c2d1ce6fa
修复 ruff 检查:移除未使用的 CITY_QUERY_COST / DEB_QUERY_COST 导入
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-11 14:18:50 +08:00
AmandaloveYang
787d04619b
feat: revamp points/reward system for inclusive engagement
...
- /city /deb now free, capped at 10/day each (was 2 pts cost)
- Welcome bonus +20 pts on first-ever valid message
- First-message-of-day bonus +2 pts
- Weekly winner point bonuses reduced (500→200, 300→100, 150→50)
- Weekly participation rewards for all active users (+5 base, +15 for ≥20 pts)
- Pro-day rewards for top 3 unchanged
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-11 13:35:52 +08:00
AmandaloveYang
81e9aeb98f
fix: remove "Now" vertical line from intraday temperature chart
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-11 09:05:44 +08:00
2569718930@qq.com
78cdb006e5
subscription-help: 添加 dynamic=force-dynamic 跳过预渲染
2026-05-10 20:48:20 +08:00
2569718930@qq.com
2ad4c7f1b4
修复 subscription-help 构建:拆分为服务端页面 + 客户端组件避免 prerender 报错
2026-05-10 20:29:54 +08:00
2569718930@qq.com
17b93803af
修复业务测试:observedHighBreak 断言适配新的行动指引文案
2026-05-10 20:25:05 +08:00
2569718930@qq.com
b26ec05b81
AMOS 跑道温度范围:城市决策卡头部展示"跑道实况 14.6~15.2℃"
...
后端:
- amos_station_sources.py 新增 runway_temp_range (跑道温度 min,max)
- 取所有有效跑道温度的最小值和最大值
前端:
- CityCardHeader 新增 observedLabel prop(标签自定义)
- 有 AMOS 数据时显示"跑道实况"替代"当前温度"
- 温度展示格式:14.6~15.2℃(跑道温度范围)
- 无 AMOS 时回退原有 METAR 温度显示
2026-05-10 20:19:48 +08:00
2569718930@qq.com
8075fb66b7
AMOS 增加 info 级别日志追踪数据流
...
- weather_sources.py: _attach_korean_amos_data 记录 fetch 开始、成功/失败、温度/跑道数据
- amos_station_sources.py: _amos_get_page 记录页面匹配/不匹配
- amos_station_sources.py: fetch_amos_official_current 记录 HTML 获取和解析
- analysis_service.py: _analyze 记录 AMOS 数据是否到达分析层
重启后端后在日志中搜索 "AMOS" 可追踪完整数据流:
AMOS: fetching for city=seoul
AMOS page matched icao=RKSI length=...
AMOS fetch_amos_official_current: got HTML for RKSI...
AMOS: got data for city=seoul temp_c=... source=...
AMOS _analyze: found amos data for city=seoul temp_c=...
2026-05-10 19:46:26 +08:00
2569718930@qq.com
23e5d10f65
Fix Korean AMOS runway parsing
2026-05-10 19:34:18 +08:00
2569718930@qq.com
f4f613ad02
Fix AMOS runway observations
2026-05-10 19:20:52 +08:00
2569718930@qq.com
5512ebf133
修复 AMOS 数据不显示:移出 include_nearby 条件判断
...
根因:_attach_korean_amos_data 在 include_nearby 块内
面板模式(depth=panel)时 include_nearby=False
→ AMOS 数据从不获取 → detail.amos 始终为空 → 跑道面板不显示
修复:AMOS 调用移到 include_nearby 之外
AMOS 是主观测源,不是 nearby 站网数据
无论 depth 模式都应获取
2026-05-10 19:10:38 +08:00
2569718930@qq.com
40cd8fc2a6
修复机场观测面板不显示 + 放宽 AMOS 展示条件
2026-05-10 19:06:22 +08:00
2569718930@qq.com
3f351ac60c
Busan 机场观测面板:METAR 数据兜底展示
...
问题:AMOS 仅支持仁川 RKSI,釜山 RKPK 无法获取跑道级数据
解决:AmosRunwayPanel 新增 airportCurrent 回退模式
- 有 AMOS 数据时:展示完整跑道卡片网格(首尔/仁川)
- 无 AMOS 时:展示单张机场观测卡片(釜山/所有其他机场)
包含:温度、风向风速、气压 QNH、能见度
标注数据来源(METAR/AMOS)和是否过旧
- AirportCurrentConditions 类型新增 pressure_hpa 字段
这样首尔有完整的 4 对跑道数据,釜山至少展示机场官方观测值
2026-05-10 18:58:42 +08:00
2569718930@qq.com
e1d21c6ce3
简化 AMOS 获取:仅支持 RKSI(仁川),Busan 回退标准 METAR
...
原因:AMOS 页面默认始终显示仁川 RKSI,机场切换用 JS 实现
无法通过 URL 参数或 POST form data 切换到其他机场
尝试了 GET ?icao=、?stn=、?airport= 和 POST form data 均无效
变更:
- _amos_get_page 简化为仅处理 RKSI
- 非 RKSI 直接返回 None,走标准 METAR 回退链
- 移除无效的 AMOS_STATION_IDS 和 POST 策略代码
- Busan 通过 aviationweather.gov METAR 正常获取温度/风/气压
- 跑道面板仅在 AMOS 数据存在时显示(即仅 Seoul/仁川)
Known: Busan 无跑道级数据,但标准 METAR 仍然可用
2026-05-10 18:53:09 +08:00
2569718930@qq.com
163ad8cb4e
修复 AmosRunwayPanel TS strict null check
2026-05-10 18:40:22 +08:00
2569718930@qq.com
e23a90a961
修复釜山 AMOS 数据获取 + 跑道面板容错
...
AMOS 页面用 JS 切换机场,GET 参数无效。新增策略:
- 先 GET 建立 session,再 POST form data 切换机场
- 尝试多种 form data 组合(icao/stn/airport/code)
- 回退到 GET 参数尝试
跑道面板容错:
- 无温度数据时仍展示跑道风/能见度/RVR
- 温度缺失显示 "--" 而非隐藏整行
- analysis_service 输出条件放宽:有 temp_c 或 runway_obs 即可
Tested: python -m ruff check ., npx tsc --noEmit
2026-05-10 18:39:37 +08:00
2569718930@qq.com
13a67cdc85
修复温度走势图不显示:移除 IntersectionObserver 延迟渲染
...
问题:图表只在 IntersectionObserver 检测到视口交叉后才渲染
- 卡片折叠时图表区域永远不可见,IntersectionObserver 不触发
- 小屏幕/快速滚动时图表可能来不及渲染
修复:
- 移除 IntersectionObserver 懒加载逻辑
- 图表始终立即渲染(useChart 在挂载时初始化)
- Chart.js animation:false 确保快速渲染,无性能代价
- 清理未使用的 useState/useEffect 导入
2026-05-10 18:34:00 +08:00