一輪算完就寫提醒佇列 #43

Merged
admin merged 1 commits from feat/reminder-queue into develop 2026-09-07 04:14:01 +00:00
Member

這一批做什麼

助理算得出哪幾筆到期、哪幾筆逾期,但那些結果只留在監控頁上——人要自己去翻,或自己跑一次狀態查詢。這一批讓每一輪把「要送到人面前」的那幾筆寫成一份佇列檔。

這一張疊在 #40、#41、#42 上面。 讀佇列的那一端在 jsc-hooks 那邊,另一張 PR。

判定留在這裡,佇列只是輸出

讓讀的那一端自己拿 due 欄與 next_run 去跟現在比,就是第二套到期判定,跟這裡那一套遲早對不上,而對不上的那一天兩邊都說自己是對的。

所以佇列的規則很窄:只印、不判。

換來一個新的失效模式,所以檔頭寫足

助理沒在跑的時候佇列不會更新,而一份舊佇列讀起來跟新的一模一樣。

檔頭欄位 讀的那一端拿它做什麼
輪次代號 對得上是哪一輪
UTC 時間戳 給人看
epoch 秒 算年紀。不必在每一個讀取端各放一份日期解析
連續失敗筆數 多印一行「有幾筆每輪重試」
待辦總筆數 佇列空又過期時,判該不該吵——零筆就只是助理閒著

「沒有提醒」與「沒有人算提醒」不可以長得一樣。

兩個小決定

同一筆既到期又逾期時只列逾期那一行。 同一批提醒裡出現兩行會被讀成兩件事,而「逾期五天」比「排定點過了」講得更清楚。

「逾期多久」直接取判定那一支算好的寫法。 不在這裡再寫一個時間長度格式化——同一個秒數在兩個地方就會印出兩種說法。

實測

測什麼 結果
四筆假待辦跑一輪 佇列 4 行:1 個逾期、3 個到期只提醒項,檔頭六欄齊全
既到期又逾期那一筆 只出現在逾期那一行,remind 那一行被濾掉
逾期多久 5 天 3 小時,與判定那一支印的字串相同
指令型內建項 不進佇列——那幾筆由執行那一支真的跑掉了
四支檢核 lint-scripts、check-behaviors、check-skill-paths、ste100-lint 全 0
## 這一批做什麼 助理算得出哪幾筆到期、哪幾筆逾期,但那些結果只留在監控頁上——人要自己去翻,或自己跑一次狀態查詢。這一批讓每一輪把「要送到人面前」的那幾筆寫成一份佇列檔。 **這一張疊在 #40、#41、#42 上面。** 讀佇列的那一端在 `jsc-hooks` 那邊,另一張 PR。 ## 判定留在這裡,佇列只是輸出 讓讀的那一端自己拿 `due` 欄與 `next_run` 去跟現在比,就是第二套到期判定,跟這裡那一套遲早對不上,而對不上的那一天兩邊都說自己是對的。 所以佇列的規則很窄:**只印、不判。** ## 換來一個新的失效模式,所以檔頭寫足 助理沒在跑的時候佇列不會更新,而**一份舊佇列讀起來跟新的一模一樣**。 | 檔頭欄位 | 讀的那一端拿它做什麼 | | --- | --- | | 輪次代號 | 對得上是哪一輪 | | UTC 時間戳 | 給人看 | | epoch 秒 | 算年紀。不必在每一個讀取端各放一份日期解析 | | 連續失敗筆數 | 多印一行「有幾筆每輪重試」 | | 待辦總筆數 | 佇列空又過期時,判該不該吵——零筆就只是助理閒著 | 「沒有提醒」與「沒有人算提醒」不可以長得一樣。 ## 兩個小決定 **同一筆既到期又逾期時只列逾期那一行。** 同一批提醒裡出現兩行會被讀成兩件事,而「逾期五天」比「排定點過了」講得更清楚。 **「逾期多久」直接取判定那一支算好的寫法。** 不在這裡再寫一個時間長度格式化——同一個秒數在兩個地方就會印出兩種說法。 ## 實測 | 測什麼 | 結果 | | --- | --- | | 四筆假待辦跑一輪 | 佇列 4 行:1 個逾期、3 個到期只提醒項,檔頭六欄齊全 | | 既到期又逾期那一筆 | 只出現在逾期那一行,`remind` 那一行被濾掉 | | 逾期多久 | `5 天 3 小時`,與判定那一支印的字串相同 | | 指令型內建項 | 不進佇列——那幾筆由執行那一支真的跑掉了 | | 四支檢核 | `lint-scripts`、`check-behaviors`、`check-skill-paths`、`ste100-lint` 全 0 |
jiantw83 added 1 commit 2026-09-07 04:12:25 +00:00
助理算得出哪幾筆到期、哪幾筆逾期,但那些結果只留在監控頁上。這一批讓
每一輪把「要送到人面前」的那幾筆寫成一份佇列檔,位置固定在助理狀態目錄
底下,讀的那一端只印、不判。

判定不放在讀的那一邊,理由是漂移:讓讀的人自己拿 due 欄與 next_run 去跟
現在比,就是第二套到期判定,跟這裡那一套遲早對不上,而對不上的那一天
兩邊都說自己是對的。

這樣換來一個新的失效模式,所以檔頭寫足四個值:輪次代號、UTC 時間戳、
連續失敗筆數、待辦總筆數,再加同一刻的 epoch 秒。助理沒在跑的時候佇列
不會更新,而一份舊佇列讀起來跟新的一模一樣——讀的那一端要算得出它多舊,
「沒有提醒」與「沒有人算提醒」不可以長得一樣。epoch 是為了讓讀的那一端
不必自己解 ISO 字串:那等於在每一個讀取端各放一份日期解析。

同一筆待辦既到期又逾期時只列逾期那一行。同一批提醒裡出現兩行會被讀成
兩件事,而「逾期五天」比「排定點過了」講得更清楚。

逾期那幾行的「逾期多久」直接取判定那一支算好的寫法,不在這裡再寫一個
時間長度格式化——同一個秒數在兩個地方就會印出兩種說法。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
admin merged commit 3dc6b32088 into develop 2026-09-07 04:14:01 +00:00
admin deleted branch feat/reminder-queue 2026-09-07 04:14:01 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: plugins/assist#43