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
2569718930@qq.com
eed0345045
移除误提交的 grep.exe.stackdump
2026-05-10 18:31:17 +08:00
2569718930@qq.com
fe3f48f255
城市决策卡新增 AMOS 跑道温度面板
...
- 新增 AmosRunwayPanel 组件:展示每条跑道的温度/露点/能见度/RVR/风速
- 跑道卡片网格布局 (auto-fit minmax 160px)
- 每条跑道独立显示:跑道编号、温度(含露点)、能见度、RVR、风速范围
- 官方 METAR 标签 vs 跑道中位数标签
- CityDetail 类型新增 AmosData 接口
- 暗色/浅色主题均已适配
- 仅首尔/釜山(有 AMOS 数据)时显示
2026-05-10 18:30:59 +08:00
2569718930@qq.com
ba352feb34
首尔/釜山机场报文优先使用 AMOS(更新更快)
...
- analysis_service.py:AMOS 数据覆盖 airport_current 的 raw_metar、wind、pressure
- source_label 设为 "AMOS"(区别于 aviationweather.gov METAR)
- stale_for_today 强制 false(AMOS 数据本身证明了时效性)
- observation_time 优先使用 AMOS 时间戳
- AI 读取的 city_snapshot.current.raw_metar 来自 AMOS 跑道传感器
优先级:AMOS raw_metar > aviationweather.gov METAR(首尔/釜山)
Reason: AMOS 直连韩国机场系统,延迟更低,更新更快
2026-05-10 18:18:40 +08:00
2569718930@qq.com
04b2f0e4a3
AMOS 数据接入分析层和 AI 预测判定
...
问题:AMOS 数据在采集层取出后从未被 _analyze() 读取,AI 无法看到跑道级数据
修复:
- analysis_service.py:_analyze() 新增 AMOS 温度读取优先级
观测来源顺序:结算源 > AMOS跑道传感器 > METAR > MGM > NMC
- AMOS 数据自动覆盖 current.wind_speed_kt、current.pressure_hpa、current.raw_metar
- 输出新增 "amos" 字段携带完整跑道数据(temp_source、runway_temps)
- scan_terminal_service.py:AI prompt 的 current 区块新增 pressure_hpa 和 observation_source
- AI 现在知晓数据来自 AMOS 跑道传感器(observation_source="amos"),可据此判断数据权威性
数据流:
AMOS fetch -> raw["amos"] -> _analyze() -> current.observation_source="amos"
-> result["amos"] -> _build_city_ai_prompt -> city_snapshot.current
-> AI reads runway sensor temp/wind/pressure as authoritative observation
Tested: python -m ruff check ., npx tsc --noEmit
2026-05-10 18:16:10 +08:00
2569718930@qq.com
bf5e92e656
AMOS 温度处理:METAR 优先,跑道中位数兜底
...
温度优先级:
1. METAR 温度(官方机场传感器,权威值)
2. 跑道传感器中位数(fallback;不同跑道传感器因位置/海拔可能差 0.5-1°C)
- 新增 temp_source 字段标注来源("metar" / "runway_median")
- 新增 runway_temps 数组保留每条跑道的原始 (温度, 露点)
- 回退逻辑用中位数而非第一个值(跑道数据可能是乱序的)
- 温度合理性检查:只取 -50°C ~ 60°C 范围内的值
Tested: python -m ruff check ., npx tsc --noEmit
2026-05-10 18:07:33 +08:00
2569718930@qq.com
27010d5fb3
移除 KMA 数据源:已被更精确的 AMOS 跑道级传感器取代
...
- weather_sources.py:移除 KmaStationSourceMixin 导入和继承
- 移除 _attach_korea_official_nearby() 函数
- 移除 kma_cache 初始化代码
- 首尔/釜山现在使用 AMOS 跑道传感器替代 KMA 地面站
- kma_station_sources.py 保留为参考文件
Replaced-by: AMOS (global.amo.go.kr) runway-level sensor data
2026-05-10 17:59:26 +08:00
2569718930@qq.com
058ab7a619
新增 AMOS 跑道级实时气象数据源(韩国仁川/釜山)
...
- src/data_collection/amos_station_sources.py:新增 AmosStationSourceMixin
- 从 global.amo.go.kr 爬取跑道级观测:温度/露点/气压/风向风速/能见度/RVR/云层
- 解析 METAR + TAF 报文,提取温/湿/压/风数值
- 解析跑道级表格数据(每跑道独立风分量、侧风、视程)
- 覆盖首尔/仁川 (RKSI) 和釜山/金海 (RKPK)
- weather_sources.py:集成 AmosStationSourceMixin
- fetch_all_sources 中为 seoul/busan 自动追加 AMOS 数据
- 结果存入 results["amos"],包含原始 METAR/TAF 和解析后的跑道数据
Tested: python -m ruff check ., npx tsc --noEmit
2026-05-10 17:55:39 +08:00
2569718930@qq.com
fe681503ae
UX 审查收尾:AI 解读过渡标记 + 极端温度视觉强化
...
P2-17:AI 快速判断→完整解读过渡标记
- AiEvidencePanel 新增 useTransitionMarker hook
- AI 从 loading→ready 后显示"✓ Updated/已更新"徽标(4 秒后消失)
- 绿色动画徽标 fadeUpIn,避免用户以为信息没变
P2-18:极端温度视觉强化
- globals.css 新增 temp-extreme-hot(橙红辉光 ≥40°C/≥104°F)
- globals.css 新增 temp-extreme-cold(冰蓝辉光 ≤-5°C/≤23°F)
- PanelSections Hero 温度值自动应用极端温度样式
Tested: npx tsc --noEmit
2026-05-10 17:44:45 +08:00
2569718930@qq.com
341825747f
UX 审查 P2 修复:X轴标签密度、极端温度视觉强化
...
- AiCityTemperatureChart:X轴标签从每4个→每3个显示,maxTicksLimit 6→8
- globals.css:新增 temp-extreme-hot(≥40°C)和 temp-extreme-cold(≤-5°C)样式
- PanelSections:Hero 温度值自动应用极端温度 CSS 类(橙色辉光/蓝色辉光)
- 华氏度自动适配:≥104°F 为极热,≤23°F 为极冷
Tested: npx tsc --noEmit
2026-05-10 17:39:22 +08:00
2569718930@qq.com
d94476f943
UX 审查修复:统一修正术语、图表"现在"标记、专业术语解释、异常行动建议
...
P0-1 术语统一:
- WeatherDecisionBand 改用"上修/下修/维持"替代"偏高温/暂不追/等待确认"
- 与 AI 后端提示词使用的术语体系一致
P0-9 图表"现在"标记:
- chart-utils.ts 导出 currentIndex
- AiCityTemperatureChart 在 currentIndex 处绘制竖线(蓝色虚线)
P0-13 专业术语解释:
- DataFreshnessBar 新增 labelTitle 属性(hover tooltip)
- METAR → "机场气象观测报文" / "Meteorological Aerodrome Report"
- HKO → "香港天文台官方实测" / "Hong Kong Observatory official readings"
P0-16 异常行动建议:
- primaryReason 追加行动指引(实测突破→建议关注偏高温区间等待确认 / 峰值已过→建议避免追高 / 观测过旧→建议等待新报文)
P1-8 DEB 路径分段样式:
- 过去部分实线(已确定),未来部分虚线(预测不确定)
P1-11 HistoryChart 单位:
- tooltip 使用 temp_symbol 替代硬编码 °
Tested: npx tsc --noEmit
2026-05-10 17:33:15 +08:00
2569718930@qq.com
bf70d0b42a
新增 UX 研究员审查报告:修正逻辑可读性、图表误导、专业术语、异常体验
...
核心发现:
- AI 用"上修/下修/维持",前端用"偏高温/暂不追/等待确认"——两套语言体系不一致(P0)
- 日内图表没有"现在"标记,用户不知道哪里是当前时间(P0)
- METAR/DEB/TAF 全站 50+ 处出现,无任何 tooltip 或解释(P0)
- 实测突破时没有行动建议,用户不知道下一步该做什么(P0)
- DEB 路径全是虚线(含过去部分),本应实线→虚线过渡(P1)
- "DEB 融合"对普通用户无意义(P1)
共识别 18 个问题:P0 4 项、P1 4 项、P2 4 项
2026-05-10 17:24:35 +08:00
2569718930@qq.com
e2bea367a1
校准漂移检测增加日志告警 + 更新架构文档
...
- core.py:drift.drifted=true 时输出 loguru warning,包含 delta% 和 sample 数量
- data-architecture-review.md:标记 2 项误诊(METAR TTL 实际 600s、轮询已有 AbortController 保护)
- 剩余真正待办:校准自动重训练(需算力)、缓存键细化(低优先级)
2026-05-10 17:06:43 +08:00
2569718930@qq.com
27095025e7
更新数据架构审查文档:标记 8/8 已修复,保留 4 项低优先级待办
2026-05-10 17:02:02 +08:00
2569718930@qq.com
2b2784d811
数据链路 P2 修复:stale-while-revalidate + 扫描数据复用
...
P2-7 stale-while-revalidate:
- ensureCityDetail 过期缓存不再阻塞等待刷新
- 立即返回缓存数据,后台异步更新
- 用户打开已有缓存的城市时不再看到 loading spinner
P2-8 扫描终端数据复用:
- 新增 store.preloadCityFromRow():从 ScanOpportunityRow 预填充 cityDetails 缓存
- handleSelectRow / handleMapCitySelect / handleOpenDecisionRow 均调用预加载
- 用户从地图/列表/决策卡选城市后,详情面板立即显示缓存数据
- 后台自动拉取完整 detail(stale-while-revalidate)
Tested: npx tsc --noEmit
2026-05-10 17:00:12 +08:00
2569718930@qq.com
b3ea8dcfa7
数据链路 P1 修复:ETag 缓存 + 校准漂移检测
...
P1-5 ETag 支持:
- 后端新增 _etag_middleware:GET /api/* 自动返回 ETag (MD5)
- 支持 If-None-Match 请求头,匹配时返回 304 + 30s Cache-Control
- 前端 cache: no-store → default,浏览器自动处理 ETag/304 节省带宽
P1-6 校准漂移检测:
- probability_calibration.py 新增 check_calibration_drift()
- 对比最近 200 条 daily_records 的 CRPS 与校准基线
- 漂移 >15% 时返回 warning 提示重新训练
- 集成到 /api/system/status 的 probability.drift 字段
Tested: python -m ruff check ., npx tsc --noEmit
2026-05-10 16:54:48 +08:00