来源:notes/documents/日历条目 target_id 过期台账.md

日历条目 target_id 过期台账:65 条被重建过的日历事件

日历条目 target_id 过期台账:65 条被重建过的日历事件

2026-09-22。这是 ticket 10 的证据表:本地台账 entity_projection_state 里有 65 条记录的 target_id(写出去时的飞书日历事件 id)已经不在日历上——记录本身都在,只是当初的事件被重建过、 id 换了。2026-09-22 决定:全修(B),已执行完——65 条全部换成现行 id,复跑 0 条待修, 对账里的 id_stale 从 65 变成 0。执行的细节与一个副作用见文末「修复执行」。

结论

  • 对网页没有影响:网页要的是「这条记录在日历上」这个事实,日期、标题、正文都来自本地, target_id 只是个「已经发出去过」的标记(docs/adr/0010)。
  • 只影响两处:① 对账报告里 id 级永远显示 65 条对不上;② 将来若把某条重新改成要同步、 又改了正文,事件线会拿旧 id 去 patch 一个不存在的日历事件,记一行 failed(不会重复创建)。
  • 65 条都有修复依据:64 条可以用日历描述里的「同步键」链式证明(现行事件描述里的同步键 = 老账 config/feishu_calendar_sync.json 里那条记录的 key,而老账给这条记录的 event_id 正是台账里的旧 id); 第 65 条是笔记,现行事件描述里的「笔记ID」就是本地笔记 id。
  • 分布2026-09 1 条、2026-08 1 条、2026-07 16 条、2026-06 47 条。

为什么会过期

同一份内容在日历上今天是一条新事件(描述里还留着老账那条记录的同步键),而台账记的是老事件的 id; 老 id 已经不在日历上。证据链(以 2026-06-11 22:40「数据可视化」为例):

  • 日历现在那条事件的描述末尾:同步键:719263803120097aeaafcd1d
  • 老账 config/feishu_calendar_sync.json 里这个 key 的 app_link 带着 key=fb5908e2-…
  • 台账里这条记录的 target_id 正是 fb5908e2-…_0——而日历上没有它。

逐条追「为什么被重建」没有做(台账只留旧 id,没有事件史)。能确定的是:

  • 这 65 条全部来自老账还在用的时期(老账覆盖 2025-11 … 2026-08),描述里的同步键都是那种 24 位 key;
  • 台账状态:64 条 synced、1 条 failed(失败的正是 2026-09 那条笔记,它在日历上另有事件);
  • 换到 SQLite 事件线之后写出去的事件,描述里的同步键是 evt_xxx(本地事件 id),台账的 target_id 与日历对得上,没有一条是过期的——所以这是个历史遗留面,不会继续扩大。

三条路

  做什么 代价
A 不修 只在对账报告里单列这一类(现在就是这样) id 级永远显示 65;将来改这些记录时会失败一次
B 全修 一次性脚本(默认 dry-run、幂等、差异清单落盘)把 65 条换成现行 id 要读一次日历(与 ticket 08 同性质,不是运行依赖)
C 只修 2026-06 同上,只覆盖 47 条 另外 18 条是同一批重建的,没理由只修一半

建议 B。 一次性、可复算、可回退(改的是本地台账,重跑投影即生效), 修完 id 级重合数从 168 升到 232 左右。

附表:65 条

「依据」一列:同步键 = 现行事件描述的同步键与老账 key 链上;笔记ID = 笔记线的现行事件。

2026-09(1 条)

日期时刻 标题 本地 id 台账旧 id 日历现行 id 依据
2026-09-19 09:40 dg 板卡 X5 BPU 推理服务:飞书特供版 note_ffb6acf19cfe4547 ca2937a4-c171-2aef-8864-79857efb661d 05e6d62b-381f-1eb3-fcb0-2e860cdf6917 笔记ID

2026-08(1 条)

日期时刻 标题 本地 id 台账旧 id 日历现行 id 依据
2026-08-27 00:47 今天跟李俊找我和子旭聊天,觉得我们边界感很强,今天的事情他来找我,… evt_fbbfa6a48b4442c9 0405bca1-ac6e-73c0-29d6-e12dc6b3e018 04488e3e-07ad-5d51-7b22-c96216a85acd 同步键

2026-07(16 条)

日期时刻 标题 本地 id 台账旧 id 日历现行 id 依据
2026-07-05 23:42 关系冲突记录 evt_cfbc5d5be310479b d7ff692e-5d1d-7b7e-8b36-526c1c6681e9 d73017af-7f92-56fd-8839-4fec81746d87 同步键
2026-07-06 00:00 Momenta PHIP 解读 evt_d8f95cf5441f4c4a 3bb98012-0189-b0a4-e43b-e03ea2f8c55d 66ab1e16-39f2-84c5-f128-af27fd19d063 同步键
2026-07-06 00:00 地平线重大订单传闻 evt_ba8b11c83f33403f 787370c2-cfd0-c877-d84d-d48cc5f307e2 42ea1b25-d7ce-9a47-4010-e3c3beb5c782 同步键
2026-07-07 00:00 地平线高盛研报解读 evt_77039a911ebf480b e1d5027e-4356-22fd-612e-835367ece7d0 065148d0-2d7d-9982-b3be-e0675d6c5858 同步键
2026-07-07 08:00 起床与睡眠状态 evt_3ed4a45e65004677 a9619058-6ede-2786-3ca9-bd222a6baf44 13e02d15-9c51-48cf-e4f0-76c6887b4b9e 同步键
2026-07-08 00:00 Momenta 上市 evt_147763c581504dc1 345cbbc0-0d78-3f53-f56a-fb1511f5254e 4db22875-53d5-fe58-e4ae-a1f739416946 同步键
2026-07-08 00:00 Momenta 绿鞋机制 evt_1eb85415b2864238 bcb9d87c-a5eb-201f-3f6b-d2ae118482f0 ced4515e-bf9c-41fe-33fa-44b75accce58 同步键
2026-07-09 18:31 运动出发 evt_548ef32484da4a84 74465af2-2a66-4bd7-b48c-83403627ded5 ae06d3c2-23f7-9f81-331b-5c91f850d896 同步键
2026-07-09 23:40 睡觉记录 evt_ab5d21365c6a4858 b4483d21-6c80-1fb7-c1c3-d99203038e72 d3cbcb32-1006-dfc2-45b2-210bec2f022b 同步键
2026-07-10 07:08 起床记录 evt_0d506177927b439a 7596bf6f-b05d-724d-1bd5-b7df9224bce7 7e34e841-a453-cc30-2bad-faef72d722e5 同步键
2026-07-10 08:40 通勤节点 evt_245e67da334b4538 9dbc356e-17f2-7811-2435-06fecc3e5b77 42a0b0a1-e0dc-00d5-6e61-3d27f1a1bd6e 同步键
2026-07-10 09:16 收衣服失误记录 evt_94f8c638acaf4686 ffa6cdb7-a0e4-0fe1-aa09-6497a3db7fce 8f07d4c7-650b-beb8-a424-c797ad718b0f 同步键
2026-07-10 10:33 测试 evt_818587df305548d7 b4f5e6df-aa0d-e3d1-f01e-6f546dcbef56 b3d9de67-9751-08b4-90d0-09a64e9483f1 同步键
2026-07-10 11:35 去参加地平线试驾活动 evt_227712824c3c40e5 73b85b79-bc5e-f9a0-dc0e-b01a9d2afa6e 7f376afd-a5ae-1a62-9e24-70eb53d4c669 同步键
2026-07-12 00:00 生活记录 evt_2d2868f8cf384f3f ebca7466-2361-ecdc-258e-b9b908338407 5c93424b-d5d6-82ba-a48b-a03daa17dd85 同步键
2026-07-12 12:00 拖地 evt_d94f6443302945d8 d4ae8d41-45d4-542f-ec67-0b8e964fabe0 6b0d13d3-b68c-75be-ba30-2e7e32f98ebe 同步键

2026-06(47 条)

日期时刻 标题 本地 id 台账旧 id 日历现行 id 依据
2026-06-06 19:44 文档沉淀 evt_fa9fa5cf853d4700 8f095233-14dd-dbd0-9570-a6ce07c29190 a98cb03a-4d57-55f9-4a1c-ab0fc18ba7ea 同步键
2026-06-07 11:15 生活事件 evt_61ac0695dae44004 1f1d2733-2c6b-a08b-88d4-279462778241 9e1d75e0-40e7-da71-460b-bcdb422fbbb0 同步键
2026-06-08 10:09 工作状态 evt_b12b6aee2b224007 3d53d6c6-2eee-4d64-882a-c3b323420893 de0253a7-deb7-6596-c3a7-20d9d2ef18f2 同步键
2026-06-08 11:36 影响力反馈 evt_802835bee7344452 12ec383f-1fc2-107e-c497-cecbb5d9d290 dfacf155-89fa-c165-a72f-a26a9bc60990 同步键
2026-06-08 14:55 注意力观察 evt_52911a9724ca45d2 49f839ce-a9ae-54e9-cd36-f6379aac86ca 80ec6a0e-308d-8905-f49d-21ffad6b0775 同步键
2026-06-08 16:43 开始写技术方案。标签 evt_20f04035c9bb4c0d 1af1f4ab-8dd4-7d08-3dda-8b5fce9b6b30 9d5c74ba-03be-070d-bea2-544f42f30160 同步键
2026-06-08 17:07 技术方案推进 evt_e9faa287b5ee423c d844d136-1496-aa50-ada3-418be7a48311 d07e07b8-42bb-18a4-e41d-628041924dd1 同步键
2026-06-08 18:40 下班记录 evt_902532c69c554b98 e259bbf9-65dd-828c-9553-add968d92eb6 2b06b1b4-70b0-f4bf-dcb0-738b2c4580a4 同步键
2026-06-08 19:13 返程通勤节点 evt_96c73d38c59d4544 b21884fa-f26e-a492-4bc5-21b8cdc36079 7d0867ad-ec32-0122-c629-7e0d907791a9 同步键
2026-06-08 19:21 返程通勤节点 evt_6cbcbbf05ecc4fdd 290b8123-2906-7569-3cf5-d3b443c55aab 7c93a307-b008-9dd9-8f89-053722d7a998 同步键
2026-06-08 19:34 返程通勤节点 evt_ed5e7048f7c64419 f0896ae4-848b-948d-7037-af64567148b1 6f8b4c4f-9901-f7ea-b13f-fb968db65c2c 同步键
2026-06-08 20:26 返程通勤节点 evt_e14f346319c3492d 0cdbbcd9-0af4-86f5-95f2-00e4dd9c7f9c 842a9f55-45c1-c9b9-f30b-86205c4bacd9 同步键
2026-06-09 09:25 今日感悟 evt_31ec77d0a9a6451e e3865ddc-f837-530e-8c4c-7553c4e04265 0706bae2-db59-6b1f-c8ab-97168b1a21c8 同步键
2026-06-09 11:25 工单处理 evt_e642b4ff063a41ce 83af10ea-cc68-e712-7a9e-e9d79ec5e7d3 c8ca4ea7-49ef-9748-3d13-f7672111db78 同步键
2026-06-09 15:03 会议记录 evt_73b2e0a0b9504e4a e6c450ac-9f2a-634d-c3a3-5dd0b58aacff 872c897b-340d-84ad-b958-29b70e3a6b09 同步键
2026-06-10 09:37 方法论感悟 evt_39def8cdd01248fe 6275da18-2ca1-227c-2251-63dcaec85524 ba0320d3-406d-e99d-a933-f223925e40db 同步键
2026-06-10 10:10 投资观点记录 evt_f7738a74390a49bd 8a926d38-ce06-bede-9ba6-ae919079ece2 514ca41e-791e-d08d-ba6f-0935d6ffeda2 同步键
2026-06-10 10:19 文档排版 evt_5a4df2ee5cca49dd 246d00e6-60cb-4f93-7bd2-51a6b08f7e6d d80e3292-f6da-7499-f7be-bab01ff74ec1 同步键
2026-06-10 11:11 技术方案推进 evt_7b0ea9005ed14715 814ce52f-223f-4a22-439a-e2668c0abfc0 4b9821cc-389e-8965-6eaa-e2ea81db38cf 同步键
2026-06-10 11:16 信息检查计划 evt_ad9111084e77465f ae433432-d7cc-133e-fa0e-7ba03425ffe2 d8c2b8b9-9bf2-e95c-d244-6b1d670dd073 同步键
2026-06-11 10:33 投资记录 evt_6b71ddb181b24795 8b1d07a2-4ea7-e218-c279-185ec871d824 d1a4fe91-345b-bf25-35b9-81b9ef5be1cd 同步键
2026-06-11 16:59 时间管理感悟 evt_3247a46d6c7c4593 8213a859-4e93-ccf3-f0db-caae28689ae7 6d0ccc73-37ed-2975-bdc4-583e5b428a0e 同步键
2026-06-11 22:20 项目归档 evt_bbaeafd3d3f9425c 440b63cb-def9-47f4-91f5-c8f35cfce19e f0ce3d31-a28a-c1d1-19c3-e9110202532c 同步键
2026-06-11 22:40 数据可视化 evt_e9617fee524c4afe fb5908e2-01a5-6930-342a-89026378168d 0539ef23-e4ab-74d8-ef95-86a82ec6a70f 同步键
2026-06-12 10:50 投资方法论感悟 evt_fc827f14e4de4ded 89184cb7-bdca-4f89-af65-e3d2290a6dfb d5b09350-fc9f-7b1d-17a1-72605f6ccc7e 同步键
2026-06-12 10:56 产品方法论感悟 evt_3195610a25424fa1 6c864b7f-e34c-e775-3262-ac31e249b7c6 a7f8e169-b8e7-6c26-5fba-1a0459f39480 同步键
2026-06-12 15:41 自我管理感悟 evt_79da5a036e8c4aff a9b15d5c-caae-355f-3cac-82a1cc562085 6d652c17-7dfe-6fa6-48be-8328056864a6 同步键
2026-06-12 15:45 工作推进 evt_0e77bafe3ac84eeb fb7f961c-a652-5f7c-be7b-d78ad26fe24e 4a2b6e59-9aef-302e-7760-e13bab3080ee 同步键
2026-06-15 18:17 工作推进 evt_e821358020534305 65cfd59f-6957-bfe6-a461-571a47ba9d9d 4fc14371-a75c-b891-9cda-fe7ec24ed500 同步键
2026-06-15 20:18 返程通勤节点 evt_7a7178443ec54382 37e13c26-d7f5-ce6e-1a7f-7290347143e0 75ca3f1f-9861-b64e-7060-a1ce376ab893 同步键
2026-06-15 21:26 返程通勤结束 evt_0c178afed5c34c60 27b5594a-8b56-5f22-2616-4d2d8b5577d8 4cfd9a1d-eb71-528f-fe09-31b58b2f8711 同步键
2026-06-15 21:26 通勤耗时统计 evt_d0b93c9809604280 faf5de20-346c-aebc-0f53-cef35de7b678 155b8b38-53b5-fc56-1d43-ad662f883b16 同步键
2026-06-16 14:39 投资观察 evt_83b02c46565f4c37 2c3c1ef5-33ad-3332-ea99-5790dacdd736 a67048b3-5be2-1fb4-ac6a-35f547afae6e 同步键
2026-06-16 16:37 投资决策意图 evt_14a6a894ab8a4e23 dd10d7b4-cd4b-d82e-4794-86149ddde6f7 373378ec-2d14-21b8-99ad-4d39ae0a05b9 同步键
2026-06-16 18:07 工作推进 evt_aea6d53c52904d5f a9ccb037-1f81-99d9-12d4-843de1f8e57e 31c7cc34-c941-adc4-e961-7076ce2fecd7 同步键
2026-06-17 15:20 投资心理复盘 evt_3017e68eb51b4a9d e2e07a10-4c09-325e-1d74-6172c60a8e6d e1a1f9aa-2d8d-4eb0-643e-bf2dd837cc17 同步键
2026-06-18 11:12 投资心理复盘 evt_ec13c3ce8b2141a3 d714653b-5b35-dc92-a846-717c897b3949 f1815dcc-99ea-82ad-4cfc-3b1412b1155e 同步键
2026-06-22 10:43 投资观察 evt_2d9835a02cd34f93 e67bc301-6346-c234-a119-54911513418f e20af7e5-4e6b-10df-70ef-aad62a6df4c3 同步键
2026-06-22 11:17 投资交易记录 evt_90746ef621f14dd7 2346cc1a-1372-2b69-ebe1-865f685e96a0 9f46974b-f01d-f2a7-637c-ab5d921ed628 同步键
2026-06-22 11:49 原文归档 evt_8d00594737a647c7 8d4bc813-3db5-1fff-cea3-d26e0706919a ff957579-14b7-ab05-576d-a1bbd68a1826 同步键
2026-06-22 16:11 微信公众号链接待处理 evt_5392970c80fe4964 f77b4f2f-2b4d-5559-5838-7da00af324c2 d126f16d-4d6a-ff7c-143d-5699f9787b81 同步键
2026-06-22 16:22 技术创新观点记录 evt_4d8a7c531ac74052 0631abb7-c4f1-1fcb-2824-55d285d00b8b 244d9b98-3b1c-0e24-aacb-ee7cec7d24df 同步键
2026-06-25 00:00 谢植被裁员请吃饭 evt_ca7bdb65eef94d2a 4ac1485f-6701-bd2e-abe6-81c008560158 1e90efc3-3ff0-b0ab-2b9b-cd8737bd320a 同步键
2026-06-28 00:00 13 号线北沿开通 evt_80776f453e9e451a 2aa910f6-9753-e5f7-c65e-2d1e3218381a c2c4f128-e2e4-0a5e-0a34-735e43f46e6b 同步键
2026-06-29 00:00 开始早起 evt_6e4bc7bc53cb4aae 4baed46a-a8e4-6d49-30d7-f213f4480ede 432a602c-2133-12f2-435b-fe48c2b7fa3d 同步键
2026-06-30 00:00 洗衣流程沟通 evt_4e7a63b1295145a8 0dfd4780-5bb3-698a-ba86-c60421366a1b 335c4e8e-8f58-bdfa-6d24-b4b1710db439 同步键
2026-06-30 07:34 6-28 星期天,小叮当早早去洗澡,我因为写公众号晚了一点,她说我… evt_acf2cdb0c6224af2 d794a435-98d9-c3b7-4ebd-925de2730c61 8cb30c7e-058a-564c-21e9-c565e91d9270 同步键

同一批对账里的其他差额(都不需要动作)

  • 「只在日历」15 条:11 条白名单(6 条本地从来没有记录 + 5 条 01-23 key 与 2025-12-17 歧义)、 4 条重复(同一记录在日历上有两个事件)。
  • 「只在本地」1 条:2026-06-06 19:36 文档沉淀,本地有两条、日历只有一条。
  • 「时刻不一致」20 条:19 条是旧脚本对「没有时刻」的条目用 12:00 兜底而本地记 00:00, 1 条是上面那条笔记重发(09:40 → 10:00)。
  • 完整机器可读版本:config/calendar_parity_report.json;生成命令 python3 scripts/calendar_parity_report.py

修复执行(2026-09-22,选 B)

脚本:scripts/repair_stale_target_ids.py(默认 dry-run、幂等、清单落盘 config/calendar_parity_stale_repair.json)。它只写证据指向这条记录本身的行:

  • sync_key(64 条):现行事件描述里的 同步键:K,而老账里 K 这条记录的 app_link 带的 key 正是台账里的旧 id;
  • note_id(1 条):现行事件描述里的 笔记ID 就是本地笔记 id。

结果:65 条全部可修、0 条认不出、65 行写进台账;复跑一次是「过期 0 条、写 0 行」。 对账复跑:matched_by 全走台账(371 条),id_stale 0只在日历 的构成 {whitelist: 12, duplicate: 4},没有没解释的条目。只改了 target_idprojected_revision / status / error 原样保留。

一个副作用(要知道,但已经处理)

修完之后顺手点了那条笔记的同步(note_cli.py sync --note-id note_ffb6acf19cfe4547), 笔记线既有的撤回分支真的执行了:这篇笔记的 registry status 是 withdrawn(当年撤下的), 以前撤不动是因为台账停在 failed;现在 id 修对了,撤下就成功了——飞书日历上 2026-09-19 10:00 那条 [笔记] dg 板卡 X5 BPU 推理服务:飞书特供版 被删掉了。

按「已发到日历的条目一律保留」(2026-09-22 定的规则)把它重建了回去:内容一字不差 (同一标题、同一描述、同一时间),只是事件 id 变成 3fb2c4ca-9c5b-4efd-b3b6-e171fc3c8e99_0。 台账里这条笔记的 target_id 也指到了新事件,状态仍是 withdrawn。它也进了对账白名单 (config/calendar_parity_whitelist.json),标注是政策差异、不是缺记录。

顺带浮出来一个要你拍的问题:现在代码里,withdrawn 的笔记会主动从日历上撤下delete)。 这与「已发出去的一律保留」是冲突的。两条路:

  • 保留(与规则一致):把笔记线的撤回分支从「删事件」改成「只是不再跟踪」,日历上留着;
  • 照旧(与 registry 意图一致):标记为 withdrawn 的笔记就是该从日历上消失。

现在日历是「保留」的状态(事件已经重建)。真要改代码,一句话就行。