From 658f29c655163d36a3de0910ba08e71e75e8d352 Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Wed, 10 Jun 2026 00:40:58 +0800 Subject: [PATCH] Remove stale EMOS documentation --- CHANGELOG.md | 2 +- README.md | 20 +++------------- README_ZH.md | 23 ++----------------- .../dashboard/ScanTerminal.module.css | 2 +- .../__tests__/productizationDocs.test.ts | 4 ++-- tests/test_runtime_state_storage.py | 2 +- 6 files changed, 10 insertions(+), 43 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2a15a32..5d0d4ac3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,7 +49,7 @@ - 一键部署脚本:deploy.sh + deploy.ps1 ### 移除 -- 删除 LGBM 全部代码和模型文件,EMOS 简化为纯 legacy 高斯分桶 +- 删除 LGBM 全部代码和模型文件,概率路径收口为 legacy 高斯分桶 - 删除 Polymarket 价格拉取与 UI 层(MarketDecisionLine) - 删除 Groq、Meteoblue、NMC、俄罗斯 pogodaiklimat 数据源 - 删除预热(prewarm)系统 diff --git a/README.md b/README.md index 39069e74..e5088016 100644 --- a/README.md +++ b/README.md @@ -40,14 +40,13 @@ Public docs center: `/docs/intro` on the main site (bilingual product documentat - Hong Kong uses CoWIN station `6087` (Po Leung Kuk Choi Kai Yau School) as the 1-minute reference-station curve, with HKO 10-minute observations kept as the official meteorological layer. - Telegram airport/runway pushes are bilingual by default and use settlement-endpoint runway temperatures for slope/current/summary copy. - Runtime state, cache, and core offline training/backfill flows now use SQLite as the primary path; legacy JSON/JSONL files remain only for migration, export, and explicit fallback input. -- EMOS/CRPS calibration is wired and trainable, but production should stay on `legacy` or `emos_shadow`; `emos_primary` is only for candidates that pass local offline evaluation and manual rollout. - Intraday analysis is now positioned as a professional meteorology read: headline, confidence, base/upside/downside paths, next observation point, evidence chain, failure modes, and confirmation rules. - Intraday modal now blocks stale cached detail during refresh, so users do not briefly trade off old city/date data before full detail arrives. - Terminal chart/detail workflow now combines settlement observations, DEB hourly consensus, model context, probability distribution tooltips, and market-bucket mapping without blocking the chart on AI text generation. - Terminal data uses page memory cache, browser `localStorage`, backend short-TTL cache, SSE patch replay, and foreground refresh so returning from another tab restores the latest visible chart state quickly. - Market bucket matching now uses the full `all_buckets` surface and strict exact / range / or-higher / or-lower direction checks, reducing bad matches to unreasonable tail buckets. - The market-signal difference means `model probability - market-implied probability`; positive values indicate weather probability above market pricing, while negative values indicate the YES is already priced more fully. -- Calibrated model probability is now the primary probability panel. It shows the active production probability engine (legacy Gaussian or EMOS), while model consensus remains a secondary reference. +- Calibrated model probability is now the primary probability panel. It shows the active legacy Gaussian probability engine, while model consensus remains a secondary reference. - Non-Hong Kong airport cities now ingest `TAF` and parse `FM / TEMPO / BECMG / PROB30/40`. - Temperature chart now overlays `TAF Timing` markers near the expected peak window. - Trade cue now combines upper-air structure, `TAF`, market crowding, and `edge_percent`. @@ -71,7 +70,7 @@ See: [AGPL-3.0 & Commercial Boundary](docs/OPEN_CORE_POLICY.md) - Aggregates observations and forecasts for 51 monitored cities. - Uses DEB (Dynamic Error Balancing) to blend multi-model highs. - Builds a DEB-weighted hourly consensus path for peak-window logic and chart display. -- Generates settlement-oriented calibrated probability buckets (`mu` + bucket distribution) via legacy Gaussian or EMOS/CRPS calibration. +- Generates settlement-oriented calibrated probability buckets (`mu` + bucket distribution) via the legacy Gaussian calibration path. - Adds terminal chart/detail workflows that combine live observations, DEB-centered high-temperature context, market-bucket mapping, and model-market difference. - Shows calibrated Gaussian context in chart tooltips as `mu` plus the full temperature-range probability distribution, without reintroducing probability bands into the main temperature view. - Reuses one analysis core across web dashboard and Telegram bot. @@ -139,7 +138,7 @@ npm run dev - Hong Kong keeps `HKO` official readings in dashboard and history, without falling back to airport METAR lines. - Intraday analysis now separates meteorology conclusion, evidence chain, invalidation rules, confirmation rules, calibrated probability, and market reference. - `TAF` is used as an airport-side confirmation layer, not as the main temperature model. -- Calibrated probability uses legacy Gaussian (default) or EMOS/CRPS when evaluated; model vote counts remain an explanatory consensus line, not the final probability. +- Calibrated probability uses the legacy Gaussian path; model vote counts remain an explanatory consensus line, not the final probability. - Browser extension remains a lightweight monitoring + basic-bias product, while the site holds the full analysis experience. - Realtime terminal charts use SSE patches plus replayable event storage; full HTTP detail remains the authoritative snapshot. - Chart observations are shown in the city's local time, not the browser timezone. @@ -160,19 +159,6 @@ POLYWEATHER_REDIS_REQUIRED=true For local development or a strict single-process fallback, keep `POLYWEATHER_EVENT_STORE=sqlite`. -## EMOS Local Training - -Do not run full EMOS retraining on a small VPS. The VPS should collect data and load approved calibration files; training should run on a local/dev machine using a copied production SQLite database: - -```powershell -scp root@38.54.27.70:/var/lib/polyweather/polyweather.db E:\web\PolyWeather\data\polyweather-prod.db -$env:POLYWEATHER_DB_PATH="E:\web\PolyWeather\data\polyweather-prod.db" -$env:POLYWEATHER_RUNTIME_DATA_DIR="E:\web\PolyWeather\artifacts\local_runtime" -python scripts\auto_retrain_probability_calibration.py --verbose --snapshot-limit 50000 -``` - -Promote a generated `default.json` only when `auto_retrain_report.json` has `ready_for_promotion=true`, and prefer `emos_shadow` before enabling `emos_primary`. - ## Ops Verification ### Health / system status / metrics diff --git a/README_ZH.md b/README_ZH.md index cf6fd324..d0c3b06d 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -36,7 +36,6 @@ - 香港默认展示 CoWIN `6087`(保良局陈守仁小学)1 分钟参考站曲线,HKO 10 分钟实测保留为官方气象层。 - Telegram 机场/跑道推送默认中英文双语,并统一使用结算端点跑道温度计算当前值、15 分钟趋势和文案。 - 运行态状态、缓存与核心离线训练/回填链路已完成 SQLite 主路径收口;legacy JSON/JSONL 仅保留给迁移、导出与显式回退输入。 -- EMOS/CRPS 校准链路已接通,但生产主概率保持 `legacy` 或 `emos_shadow`;`emos_primary` 只在本地离线评估通过并手动灰度后启用。 - 官方增强站网已统一接入: - `MGM`(土耳其) - `CMA/NMC`(中国内地) @@ -53,7 +52,7 @@ - 终端数据同时使用页面内存缓存、浏览器 `localStorage`、后端短 TTL 缓存、SSE patch replay 和前台恢复刷新;从其他选项卡切回时会优先恢复最新可见图表状态。 - 市场温度桶匹配已改为完整 `all_buckets` 映射,按 exact / range / or higher / or lower 方向严格匹配,避免把天气中枢错配到不合理尾部桶。 - 市场信号中的“模型-市场差”口径为 `模型概率 - 市场隐含概率`,正值表示天气概率高于市场报价,负值表示市场已经更充分计价。 -- 概率区已改为”校准模型概率”;默认展示生产概率引擎输出(legacy 高斯或 EMOS),模型共识作为辅助参考。 +- 概率区已改为“校准模型概率”;默认展示 legacy 高斯概率引擎输出,模型共识作为辅助参考。 - 今日日内结构解读以规则与结构化信号为主,AI 文案只作为可降级辅助层,不替代实测、DEB、TAF 或结算逻辑。 - 前端设计系统全面重构:统一 CSS token 体系、消除 !important 滥用(134→49)、合并断点(18→10)、数百处硬编码颜色迁移至 CSS 变量、添加 ARIA 无障碍属性和键盘导航。完整审查记录见 `docs/frontend-ui-design-review.md`。 @@ -72,7 +71,7 @@ - 聚合 51 个监控城市的实测与预报数据。 - DEB(Dynamic Error Balancing)融合多模型最高温。 - 构建 DEB 加权小时共识曲线,用于峰值窗口判断和图表默认 DEB 展示。 -- 输出结算导向校准概率分布(`mu` + 温度桶),通过 legacy 高斯或 EMOS/CRPS 校准引擎。 +- 输出结算导向校准概率分布(`mu` + 温度桶),通过 legacy 高斯校准路径。 - 天气决策台把结构化实况、DEB 高温路径、完整市场温度桶和模型-市场差放进图表/详情工作流。 - 图表 tooltip 展示校准高斯上下文:`mu` 加完整温度区间概率分布,不把概率温度带重新放回主图。 - Web 仪表盘与 Telegram Bot 复用同一分析内核。 @@ -149,24 +148,6 @@ POLYWEATHER_REDIS_REQUIRED=true 本地开发或严格单进程兜底可使用 `POLYWEATHER_EVENT_STORE=sqlite`。 -## EMOS 本地训练流程 - -低配 VPS 只负责采集、服务和加载已通过评估的参数,不建议在 VPS 上跑 EMOS 全量训练。训练前先从 VPS 拉 SQLite 副本到本地: - -```powershell -scp root@38.54.27.70:/var/lib/polyweather/polyweather.db E:\web\PolyWeather\data\polyweather-prod.db -``` - -本地训练: - -```powershell -$env:POLYWEATHER_DB_PATH="E:\web\PolyWeather\data\polyweather-prod.db" -$env:POLYWEATHER_RUNTIME_DATA_DIR="E:\web\PolyWeather\artifacts\local_runtime" -python scripts\auto_retrain_probability_calibration.py --verbose --snapshot-limit 50000 -``` - -只有 `auto_retrain_report.json` 中 `ready_for_promotion=true` 时,才允许把候选 `default.json` 传回 VPS,并优先以 `emos_shadow` 观察。 - ## 运维验收 ### 健康与系统状态 diff --git a/frontend/components/dashboard/ScanTerminal.module.css b/frontend/components/dashboard/ScanTerminal.module.css index 7fab81cd..fa7eba9f 100644 --- a/frontend/components/dashboard/ScanTerminal.module.css +++ b/frontend/components/dashboard/ScanTerminal.module.css @@ -518,7 +518,7 @@ } /* ══════════════════════════════════════════════════════════════ - SCAN TERMINAL OVERRIDES — EMOS DESK + SCAN TERMINAL OVERRIDES ══════════════════════════════════════════════════════════════ */ .root :global(.scan-terminal) { diff --git a/frontend/components/dashboard/scan-terminal/__tests__/productizationDocs.test.ts b/frontend/components/dashboard/scan-terminal/__tests__/productizationDocs.test.ts index 3fe03349..49debe3c 100644 --- a/frontend/components/dashboard/scan-terminal/__tests__/productizationDocs.test.ts +++ b/frontend/components/dashboard/scan-terminal/__tests__/productizationDocs.test.ts @@ -40,10 +40,10 @@ export function runTests() { const allDocsZh = publicDocSlugs.map((slug) => pageText(slug, "zh-CN")).join("\n"); const allDocsEn = publicDocSlugs.map((slug) => pageText(slug, "en-US")).join("\n"); - for (const staleTerm of ["从地图进入", "机会榜", "日历", "EMOS", "LGBM", "城市决策卡", "付费判断台", "刷新锁"]) { + for (const staleTerm of ["从地图进入", "机会榜", "日历", "LGBM", "城市决策卡", "付费判断台", "刷新锁"]) { assert(!allDocsZh.includes(staleTerm), `public Chinese docs should not expose stale term: ${staleTerm}`); } - for (const staleTerm of ["map-launched", "opportunity board", "calendar", "EMOS", "LGBM", "city decision card", "paid decision workspace", "refresh lock"]) { + for (const staleTerm of ["map-launched", "opportunity board", "calendar", "LGBM", "city decision card", "paid decision workspace", "refresh lock"]) { assert(!allDocsEn.includes(staleTerm), `public English docs should not expose stale term: ${staleTerm}`); } diff --git a/tests/test_runtime_state_storage.py b/tests/test_runtime_state_storage.py index 343fb81b..6e18e01a 100644 --- a/tests/test_runtime_state_storage.py +++ b/tests/test_runtime_state_storage.py @@ -54,7 +54,7 @@ def test_probability_snapshot_repository_recent_rows(tmp_path, monkeypatch): 'raw_sigma': 1.1, 'max_so_far': 14.9, 'peak_status': 'before', - 'probability_mode': 'emos_shadow', + 'probability_mode': 'legacy', 'prob_snapshot': [{'v': 15, 'p': 0.6}], 'shadow_prob_snapshot': [{'v': 15, 'p': 0.4}], })