john
5708b333cc
feat(news): add news002 morning-report template with dedup gate and card images
...
Freeze the 2026-09-18 layout as news001 and add news002 alongside it.
Analysis of the 0918 production page found 49 news cards covering only ~20
distinct events (4x "王毅同鲁比奥通电话", 5x "东博会南宁开幕"), citing just 7
URLs that are all section landing pages rather than article permalinks, with
zero images. The root cause is structural: 23 fixed sections with fixed card
quotas force padding when the day yields fewer events.
news002 changes the contract so events decide sections, not the reverse:
core sections always render, flex sections are dropped entirely when they have
no unused event, total story cards are capped at 28, and every card carries a
data-event-key fingerprint.
Add wechat-news-morning-dedup.mjs as a post-generation gate, since the prompt
level "no duplicates" rule is unverifiable. It dedupes by event key, then by
article permalink (deliberately ignoring section landing pages, which would
otherwise delete most of the page), then by CJK bigram title similarity, since
the existing whitespace-tokenised matcher does not work on Chinese titles.
Carry per-item images through normalizeSearchResult into the prefetch brief so
cards can render real article thumbnails with a placeholder fallback.
Teach the WeChat inline converter both DOM variants (lead-card, masthead meta,
lede). Per-card images in the WeChat draft body remain a known gap.
Template selection is config/env driven and still defaults to news001.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-09-21 09:19:41 +08:00
..
2026-07-31 05:38:14 +08:00
2026-07-04 05:41:51 +00:00
2026-07-04 05:41:51 +00:00
2026-07-04 05:41:51 +00:00
2026-09-09 18:11:39 +08:00
2026-07-30 10:44:26 +08:00
2026-09-11 12:28:19 +08:00
2026-09-11 12:28:19 +08:00
2026-07-27 17:43:38 +08:00
2026-08-01 17:14:06 +08:00
2026-08-01 17:14:06 +08:00
2026-07-03 09:46:03 +08:00
2026-07-03 09:46:03 +08:00
2026-09-16 10:26:02 +08:00
2026-09-16 10:26:02 +08:00
2026-08-29 16:15:45 +08:00
2026-08-29 16:15:45 +08:00
2026-08-01 17:14:06 +08:00
2026-08-25 15:13:22 +08:00
2026-09-16 09:36:01 +08:00
2026-07-24 09:53:06 +08:00
2026-09-10 12:06:58 +08:00
2026-07-15 11:48:09 +08:00
2026-07-31 05:38:14 +08:00
2026-09-15 17:17:18 +08:00
2026-07-27 17:43:38 +08:00
2026-08-31 09:55:06 +08:00
2026-07-04 12:54:27 +08:00
2026-09-11 12:28:19 +08:00
2026-07-25 23:01:55 +08:00
2026-07-03 17:27:51 +08:00
2026-07-02 12:38:34 +08:00
2026-07-01 18:14:24 +08:00
2026-09-10 08:32:56 +08:00
2026-09-10 09:41:55 +08:00
2026-07-02 23:46:05 +08:00
2026-09-10 08:50:20 +08:00
2026-07-06 14:19:48 +08:00
2026-09-11 12:28:19 +08:00
2026-09-09 22:08:39 +08:00
2026-09-08 21:10:20 +08:00
2026-09-08 21:10:20 +08:00
2026-09-09 22:08:39 +08:00
2026-09-09 22:08:39 +08:00
2026-09-11 12:28:19 +08:00
2026-09-11 12:28:19 +08:00
2026-09-11 12:28:19 +08:00
2026-09-09 22:08:39 +08:00
2026-09-08 21:10:20 +08:00
2026-09-11 12:28:19 +08:00
2026-09-09 18:11:39 +08:00
2026-09-09 22:08:39 +08:00
2026-09-09 22:08:39 +08:00
2026-09-09 18:11:39 +08:00
2026-09-09 18:11:39 +08:00
2026-09-09 22:08:39 +08:00
2026-09-09 22:08:39 +08:00
2026-09-09 22:08:39 +08:00
2026-09-11 12:28:19 +08:00
2026-09-11 12:28:19 +08:00
2026-09-08 21:27:14 +08:00
2026-09-11 12:28:19 +08:00
2026-09-08 21:37:27 +08:00
2026-09-09 18:11:39 +08:00
2026-09-09 18:11:39 +08:00
2026-09-08 21:10:20 +08:00
2026-09-08 21:10:20 +08:00
2026-09-08 21:10:20 +08:00
2026-09-10 15:01:32 +08:00
2026-09-09 21:32:57 +08:00
2026-08-24 15:59:17 +08:00
2026-07-30 20:24:22 +08:00
2026-09-10 09:39:32 +08:00
2026-09-09 22:05:02 +08:00
2026-07-03 09:46:03 +08:00
2026-07-03 09:46:03 +08:00
2026-07-03 09:46:03 +08:00
2026-07-03 09:46:03 +08:00
2026-07-03 09:46:03 +08:00
2026-07-03 09:46:03 +08:00
2026-07-03 09:46:03 +08:00
2026-07-03 09:46:03 +08:00
2026-08-01 17:14:06 +08:00
2026-07-08 21:10:47 +08:00
2026-07-08 21:10:47 +08:00
2026-07-03 09:46:03 +08:00
2026-07-03 09:46:03 +08:00
2026-09-16 10:26:02 +08:00
2026-07-01 18:18:27 +08:00
2026-07-27 09:08:55 +08:00
2026-07-26 14:32:01 +08:00
2026-09-16 21:30:53 +08:00
2026-07-06 16:06:26 +08:00
2026-07-03 17:27:51 +08:00
2026-07-30 10:44:26 +08:00
2026-09-09 18:04:26 +08:00
2026-09-09 21:28:04 +08:00
2026-07-23 22:11:18 +08:00
2026-08-24 15:59:17 +08:00
2026-09-08 21:27:14 +08:00
2026-09-08 21:27:14 +08:00
2026-09-09 18:11:39 +08:00
2026-08-05 15:48:39 +08:00
2026-08-24 15:59:17 +08:00
2026-08-27 09:33:49 +08:00
2026-07-01 18:08:06 +08:00
2026-07-24 10:39:45 +08:00
2026-09-11 12:28:19 +08:00
2026-09-11 12:28:19 +08:00
2026-08-10 08:06:12 +08:00
2026-09-09 18:04:57 +08:00
2026-09-09 18:04:57 +08:00
2026-07-27 10:28:12 +08:00
2026-07-27 10:28:12 +08:00
2026-09-02 13:41:12 +08:00
2026-07-03 09:46:03 +08:00
2026-07-03 09:46:03 +08:00
2026-09-02 13:41:12 +08:00
2026-09-02 13:41:12 +08:00
2026-08-31 14:26:06 +08:00
2026-07-06 16:57:38 +08:00
2026-09-11 12:28:19 +08:00
2026-09-08 21:10:20 +08:00
2026-09-08 21:10:20 +08:00
2026-07-12 15:30:52 +08:00
2026-07-01 18:10:48 +08:00
2026-09-11 12:28:19 +08:00
2026-07-25 09:20:00 +08:00
2026-07-30 10:43:26 +08:00
2026-07-01 18:08:06 +08:00
2026-07-30 10:44:26 +08:00
2026-09-15 06:11:36 +08:00
2026-07-12 08:12:15 +08:00
2026-09-11 12:28:19 +08:00
2026-09-04 13:49:40 +08:00
2026-07-26 14:32:01 +08:00
2026-08-01 17:03:16 +08:00
2026-09-11 12:28:19 +08:00
2026-09-11 12:28:19 +08:00
2026-09-09 18:11:39 +08:00
2026-09-09 18:11:39 +08:00
2026-09-09 22:08:39 +08:00
2026-09-09 22:08:39 +08:00
2026-09-09 18:11:39 +08:00
2026-09-11 12:28:19 +08:00
2026-09-09 18:11:39 +08:00
2026-07-26 19:51:44 +08:00
2026-07-30 20:38:50 +08:00
2026-08-27 09:33:49 +08:00
2026-07-31 05:38:14 +08:00
2026-07-02 11:36:46 +08:00
2026-07-02 11:54:29 +08:00
2026-09-16 16:28:46 +08:00
2026-08-31 09:55:06 +08:00
2026-07-24 10:26:16 +08:00
2026-09-11 12:28:19 +08:00
2026-09-10 15:27:48 +08:00
2026-09-10 15:32:39 +08:00
2026-07-31 05:38:14 +08:00
2026-07-15 11:58:01 +08:00
2026-09-10 15:01:32 +08:00
2026-07-30 20:24:22 +08:00
2026-07-01 18:10:48 +08:00
2026-07-02 09:03:30 +08:00
2026-07-02 07:41:46 +08:00
2026-07-02 08:38:56 +08:00
2026-07-02 12:45:55 +08:00
2026-07-13 15:29:29 +08:00
2026-08-17 22:35:16 +08:00
2026-08-17 22:35:16 +08:00
2026-07-05 11:04:25 +08:00
2026-08-27 09:33:47 +08:00
2026-08-10 08:06:12 +08:00
2026-07-23 22:11:18 +08:00
2026-09-02 10:26:46 +08:00
2026-08-24 15:59:17 +08:00
2026-07-13 15:29:29 +08:00
2026-07-13 15:29:29 +08:00
2026-08-24 15:59:17 +08:00
2026-07-12 08:12:15 +08:00
2026-07-12 08:12:15 +08:00
2026-07-04 18:59:36 +08:00
2026-07-03 09:46:03 +08:00
2026-07-30 20:24:22 +08:00
2026-07-01 18:14:24 +08:00
2026-07-01 18:10:48 +08:00
2026-07-01 18:10:48 +08:00
2026-07-24 23:53:32 +08:00
2026-07-23 22:11:18 +08:00
2026-07-23 22:11:18 +08:00
2026-07-05 23:14:41 +08:00
2026-09-15 17:17:18 +08:00
2026-09-21 09:19:41 +08:00
2026-09-14 15:36:40 +08:00
2026-08-31 14:10:02 +08:00
2026-09-16 16:28:46 +08:00
2026-09-20 16:15:15 +08:00
2026-08-31 09:40:52 +08:00
2026-09-04 08:40:07 +08:00
2026-09-11 12:28:19 +08:00
2026-09-11 12:32:13 +08:00
2026-09-11 12:28:19 +08:00
2026-09-11 12:28:19 +08:00
2026-09-11 12:32:13 +08:00
2026-09-11 12:32:13 +08:00
2026-08-15 08:03:44 +08:00
2026-08-12 16:23:54 +08:00
2026-09-11 12:32:13 +08:00
2026-09-11 12:32:13 +08:00
2026-07-08 21:10:47 +08:00
2026-07-13 09:35:40 +08:00
2026-08-16 08:52:16 +08:00
2026-07-13 00:18:49 +08:00
2026-09-11 19:58:44 +08:00
2026-07-08 21:10:47 +08:00
2026-08-01 17:14:06 +08:00
2026-07-05 11:29:17 +08:00
2026-07-12 15:30:52 +08:00
2026-08-16 08:59:19 +08:00
2026-08-16 08:52:16 +08:00
2026-07-12 22:42:47 +08:00
2026-09-19 13:13:17 +08:00
2026-09-11 12:28:19 +08:00
2026-09-02 13:41:12 +08:00
2026-09-02 13:41:12 +08:00
2026-07-27 08:32:12 +08:00
2026-09-11 12:28:19 +08:00
2026-09-11 12:28:19 +08:00
2026-09-11 12:32:13 +08:00
2026-09-11 12:32:13 +08:00
2026-09-16 16:28:46 +08:00
2026-09-09 22:18:47 +08:00
2026-09-10 09:33:47 +08:00
2026-08-31 09:55:06 +08:00
2026-08-27 09:33:51 +08:00
2026-07-24 10:39:45 +08:00
2026-07-26 23:49:32 +08:00
2026-09-09 22:08:39 +08:00
2026-09-09 22:08:39 +08:00
2026-09-09 22:08:39 +08:00
2026-09-09 22:18:47 +08:00
2026-09-09 22:08:39 +08:00
2026-09-09 21:32:57 +08:00
2026-09-09 22:01:29 +08:00
2026-07-31 05:38:14 +08:00
2026-07-26 20:30:56 +08:00
2026-08-14 22:35:58 +08:00
2026-07-30 10:43:26 +08:00
2026-09-19 13:13:17 +08:00
2026-09-02 13:41:12 +08:00
2026-08-01 17:14:06 +08:00
2026-07-27 22:26:01 +08:00
2026-07-26 14:32:01 +08:00
2026-08-03 15:24:53 +08:00
2026-07-28 01:13:28 +08:00
2026-07-27 08:32:12 +08:00
2026-07-26 14:32:01 +08:00
2026-07-26 17:41:45 +08:00
2026-07-30 10:43:28 +08:00
2026-07-26 14:32:01 +08:00
2026-07-26 14:32:01 +08:00
2026-07-26 14:32:01 +08:00
2026-08-14 22:15:16 +08:00
2026-07-26 14:32:01 +08:00
2026-07-26 14:32:01 +08:00
2026-09-12 11:07:45 +08:00
2026-09-11 12:28:19 +08:00
2026-09-10 15:01:32 +08:00
2026-09-10 15:01:32 +08:00
2026-07-03 17:27:51 +08:00
2026-07-02 07:35:10 +08:00
2026-07-02 09:03:30 +08:00
2026-07-30 20:24:22 +08:00
2026-07-03 09:46:03 +08:00
2026-07-03 09:46:03 +08:00
2026-08-22 10:50:23 +08:00
2026-09-11 12:28:19 +08:00
2026-07-23 22:11:18 +08:00
2026-07-13 15:33:45 +08:00
2026-08-01 17:14:06 +08:00
2026-07-03 09:46:03 +08:00
2026-07-03 09:46:03 +08:00
2026-07-08 21:10:47 +08:00
2026-08-27 09:33:51 +08:00
2026-09-03 23:25:18 +08:00
2026-08-24 15:59:17 +08:00
2026-09-12 11:07:45 +08:00
2026-08-24 15:59:17 +08:00
2026-08-24 15:59:17 +08:00
2026-07-03 09:46:03 +08:00
2026-07-03 09:46:03 +08:00
2026-07-03 09:46:03 +08:00
2026-07-03 09:46:03 +08:00
2026-07-03 09:46:03 +08:00
2026-07-03 09:46:03 +08:00
2026-07-27 17:43:38 +08:00
2026-07-25 07:28:37 +08:00
2026-09-03 23:25:18 +08:00
2026-07-30 20:24:22 +08:00
2026-09-09 22:01:29 +08:00
2026-09-10 15:32:39 +08:00
2026-09-08 21:10:20 +08:00
2026-09-11 12:28:19 +08:00
2026-09-11 12:28:19 +08:00
2026-08-27 09:33:51 +08:00
2026-08-27 09:33:51 +08:00
2026-08-27 09:33:51 +08:00
2026-08-27 09:33:51 +08:00
2026-09-10 09:25:13 +08:00
2026-07-30 10:43:28 +08:00
2026-08-27 09:33:51 +08:00
2026-07-05 23:14:41 +08:00
2026-07-27 17:43:38 +08:00
2026-09-18 09:29:30 +08:00
2026-09-10 15:01:32 +08:00
2026-09-11 12:32:13 +08:00
2026-07-10 10:27:42 +08:00
2026-07-24 19:10:44 +08:00
2026-09-19 13:13:17 +08:00
2026-08-28 20:45:34 +08:00
2026-07-11 00:23:01 +08:00
2026-07-23 22:11:18 +08:00
2026-07-13 09:35:40 +08:00
2026-09-02 10:26:46 +08:00
2026-09-02 14:52:45 +08:00
2026-08-01 17:03:16 +08:00
2026-08-01 17:03:16 +08:00
2026-08-01 16:48:01 +08:00
2026-07-06 16:06:26 +08:00
2026-09-09 18:04:57 +08:00
2026-08-28 22:16:23 +08:00
2026-07-13 15:29:29 +08:00
2026-07-27 21:39:34 +08:00
2026-09-04 13:49:40 +08:00
2026-07-27 17:48:34 +08:00
2026-09-16 08:53:58 +08:00
2026-07-27 15:34:35 +08:00
2026-07-11 00:23:01 +08:00
2026-08-10 08:06:12 +08:00
2026-07-27 15:34:35 +08:00
2026-07-13 15:39:39 +08:00
2026-07-08 21:10:47 +08:00
2026-09-04 13:49:40 +08:00
2026-07-28 01:13:28 +08:00
2026-08-24 15:59:17 +08:00
2026-08-24 18:02:19 +08:00
2026-08-10 22:41:29 +08:00
2026-08-10 08:06:12 +08:00
2026-09-11 12:28:19 +08:00
2026-09-11 12:28:19 +08:00
2026-08-24 15:59:17 +08:00
2026-08-10 08:06:12 +08:00
2026-08-10 08:06:12 +08:00
2026-07-28 16:54:42 +08:00
2026-07-06 16:06:26 +08:00
2026-07-06 16:06:26 +08:00
2026-09-10 16:43:25 +08:00
2026-07-01 18:08:06 +08:00