Publish model summary announcement

This commit is contained in:
2569718930@qq.com
2026-06-29 19:17:51 +08:00
parent a680fca73e
commit b8d4970f9a
2 changed files with 39 additions and 31 deletions
@@ -24,22 +24,22 @@ const UPDATE_ANNOUNCEMENT_SEEN_KEY = "polyweather_update_announcement_seen_v1";
const STATIC_UPDATE_ANNOUNCEMENTS: StaticUpdateAnnouncement[] = [ const STATIC_UPDATE_ANNOUNCEMENTS: StaticUpdateAnnouncement[] = [
{ {
id: "live-observation-chart-2026-06", id: "model-summary-table-2026-06-29",
publishedAt: "2026-06-17T00:00:00+08:00", publishedAt: "2026-06-29T19:20:00+08:00",
expiresAt: "2026-07-31T00:00:00+08:00", expiresAt: "2026-08-15T00:00:00+08:00",
zh: { zh: {
title: "更新公告:实时观测和图表稳定性升级", title: "更新公告:模型汇总表上线",
body: body:
"实时观测链路已和模型缓存拆分:SSE 到达会立即更新图表;如果 SSE 断线,终端会每 3 分钟拉取一次轻量观测兜底。DEB、模型曲线、概率和历史数据继续走独立缓存,不再跟着实时温度强刷。\n\n" + "终端左侧新增「模型汇总」菜单,按今日最高温口径汇总全部城市:当前最高、DEB 预测,以及 ECMWF、ECMWF AIFS、GFS、ICON、ICON-EU、GEM、GDPS、JMA、AROME HD、HRRR、NAM 等模型高温预测集中到一张表里。\n\n" +
"这次也补齐了更多官方观测覆盖,包括东京 JMA、韩国 AMOS、土耳其 MGM、台北 CWA 等,并修正 NOAA MADIS 只应用于美国城市,避免非美国城市串台。\n\n" + "缺失模型会显示 —;模型中位数和分歧范围只基于已有模型值计算,方便快速发现 DEB 与多模型之间的偏离。\n\n" +
"图表侧同步修复了预测曲线缺段、首屏 loading 不明显、旧缓存覆盖最新观测等问题。刷新终端后即可使用新逻辑。", "页面支持搜索城市或模型,并提供「仅 DEB」和「分歧较大」筛选。移动端可横向滚动,首列城市固定。刷新终端后即可使用。",
}, },
en: { en: {
title: "Update: live observations and chart stability", title: "Update: Model Summary table is live",
body: body:
"Live observations are now separated from cached model detail. SSE patches update charts immediately; if SSE is unavailable, the terminal falls back to a lightweight observation fetch every 3-minute interval. DEB, model curves, probabilities, and historical data stay on their own cache path instead of refreshing with every live temperature update.\n\n" + "The left terminal navigation now includes Model Summary, a city-by-city table for today's high-temperature view: current high, DEB forecast, plus ECMWF, ECMWF AIFS, GFS, ICON, ICON-EU, GEM, GDPS, JMA, AROME HD, HRRR, and NAM model highs in one workspace.\n\n" +
"Official observation coverage has also expanded, including Tokyo JMA, Korea AMOS, Turkey MGM, and Taipei CWA. NOAA MADIS is now restricted to US cities to avoid cross-region source leakage.\n\n" + "Missing models render as —. Model median and spread are calculated only from available model values, making it easier to spot where DEB diverges from the model cluster.\n\n" +
"Charts also include fixes for truncated forecast curves, first-load chart loading visibility, and stale cache overriding newer observations. Refresh the terminal to use the new flow.", "The page supports city or model search, plus Only DEB and Large spread filters. Mobile keeps the city column sticky with horizontal table scrolling. Refresh the terminal to use it.",
}, },
}, },
]; ];
@@ -70,32 +70,40 @@ export function runTests() {
"announcement component must persist seen announcement ids and render an unread indicator for unseen updates", "announcement component must persist seen announcement ids and render an unread indicator for unseen updates",
); );
assert( assert(
componentSource.includes("实时观测链路已和模型缓存拆分") && componentSource.includes("模型汇总表上线") &&
componentSource.includes("SSE") && componentSource.includes("模型汇总") &&
componentSource.includes("3 分钟") &&
componentSource.includes("DEB") && componentSource.includes("DEB") &&
componentSource.includes("ECMWF") &&
componentSource.includes("ECMWF AIFS") &&
componentSource.includes("GFS") &&
componentSource.includes("ICON-EU") &&
componentSource.includes("JMA") && componentSource.includes("JMA") &&
componentSource.includes("AMOS") && componentSource.includes("AROME HD") &&
componentSource.includes("MGM") && componentSource.includes("HRRR") &&
componentSource.includes("CWA") && componentSource.includes("NAM") &&
componentSource.includes("NOAA MADIS") && componentSource.includes("模型中位数") &&
componentSource.includes("预测曲线缺段") && componentSource.includes("分歧范围") &&
componentSource.includes("首屏 loading"), componentSource.includes("仅 DEB") &&
"terminal announcement should summarize the live-observation architecture update and recent chart fixes in Chinese", componentSource.includes("分歧较大"),
"terminal announcement should summarize the model summary table release in Chinese",
); );
assert( assert(
componentSource.includes("Live observations are now separated from cached model detail") && componentSource.includes("Model Summary table is live") &&
componentSource.includes("SSE") && componentSource.includes("city-by-city table") &&
componentSource.includes("3-minute") &&
componentSource.includes("DEB") && componentSource.includes("DEB") &&
componentSource.includes("ECMWF") &&
componentSource.includes("ECMWF AIFS") &&
componentSource.includes("GFS") &&
componentSource.includes("ICON-EU") &&
componentSource.includes("JMA") && componentSource.includes("JMA") &&
componentSource.includes("AMOS") && componentSource.includes("AROME HD") &&
componentSource.includes("MGM") && componentSource.includes("HRRR") &&
componentSource.includes("CWA") && componentSource.includes("NAM") &&
componentSource.includes("NOAA MADIS") && componentSource.includes("Model median") &&
componentSource.includes("truncated forecast curves") && componentSource.includes("spread") &&
componentSource.includes("first-load chart loading"), componentSource.includes("Only DEB") &&
"terminal announcement should summarize the live-observation architecture update and recent chart fixes in English", componentSource.includes("Large spread"),
"terminal announcement should summarize the model summary table release in English",
); );
assert( assert(
!middlewareSource.includes("/api/system/update-announcement"), !middlewareSource.includes("/api/system/update-announcement"),