来源:
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-091 条、2026-081 条、2026-0716 条、2026-0647 条。
为什么会过期
同一份内容在日历上今天是一条新事件(描述里还留着老账那条记录的同步键),而台账记的是老事件的 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-23key 与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_id,
projected_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的笔记就是该从日历上消失。
现在日历是「保留」的状态(事件已经重建)。真要改代码,一句话就行。