fix(assistant): 提醒佇列把內建項標成另一種列
實測踩到:這台機器的佇列八筆全是委派清單種入的內建項,動作是只提醒、 還沒有執行入口,所以每一輪都到期。於是每一個工作階段開頭固定吐八行 一模一樣的東西。 那不是提醒,是噪音——而讀佇列那一支自己的註解裡就寫著「對著一個刻意的 決定每個工作階段催一次,那是噪音不是提醒」。這一批就犯了那一條,只是 換成另一種來源。 分法照該有的處置切:使用者自己登錄的那一筆,人看到就做得了;內建項那 幾筆等的是接線,不是人。所以佇列的第一欄多一種值 builtin,讀的那一端 把前兩種逐筆點名、第三種收成一行總數。 種類在這一邊判,不在讀的那一邊:spec_key 只有這裡讀得到,而讀的那一端 的規則是只印不判。收尾多印一個 reminders_builtin=。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+31
-4
@@ -149,7 +149,8 @@
|
||||
# 時,原因只寫在這裡
|
||||
# tasks_total= tasks_failing= 待辦簿筆數與連續失敗筆數,供目錄頁那一個區塊與摘要用
|
||||
# tasks_overdue= 逾期筆數(截止時間已經過了),取自到期判定那一支;判不出來時是減號
|
||||
# reminders= reminders_file= 提醒佇列的筆數與路徑。工作階段開始那一支 hook 讀它
|
||||
# reminders= reminders_builtin= reminders_file= 提醒佇列逐筆點名的筆數、只算總數的內建項
|
||||
# 筆數,與佇列路徑。工作階段開始那一支 hook 讀它
|
||||
# tasks_due= 本輪到期的筆數;到期判定那一支失敗時為空
|
||||
# events_new= 本輪偵測到的新事件種類數;到期判定那一支失敗時為空
|
||||
# due_status= due_rc= 到期判定那一支的結果與結束碼
|
||||
@@ -214,6 +215,7 @@ DUE_EVENTS=''
|
||||
DUE_OVERDUE=''
|
||||
FAILING_LINES=''
|
||||
REMINDERS=0
|
||||
REMINDERS_BUILTIN=0
|
||||
REMINDERS_FILE=''
|
||||
|
||||
# 這支腳本是不是從 $JSC_HOME/current 那一組路徑被叫起來的。不是就大聲警告,但照跑。
|
||||
@@ -943,19 +945,43 @@ write_reminders() {
|
||||
printf 'overdue\t%s\t%s\t%s\n' "$_oi" "${_oh:--}" "${_ot:--}"
|
||||
done
|
||||
fi
|
||||
# 內建項的識別碼,一行一個。分兩種列要靠它:帶 spec_key 的那幾筆是依委派清單種入的,
|
||||
# 使用者一筆都沒交辦過。
|
||||
_specids="$RD/spec-ids"
|
||||
: >"$_specids"
|
||||
for _tf in "$STATE_DIR/tasks"/*; do
|
||||
[ -f "$_tf" ] || continue
|
||||
_sk=$(sed -n 's/^spec_key=//p' "$_tf" 2>/dev/null | head -n1)
|
||||
[ -n "$_sk" ] || continue
|
||||
_tid=$(sed -n 's/^id=//p' "$_tf" 2>/dev/null | head -n1)
|
||||
[ -n "$_tid" ] || _tid=$(basename -- "$_tf")
|
||||
printf '%s\n' "$_tid" >>"$_specids"
|
||||
done
|
||||
# 只提醒型而且到期的那幾筆。指令型不進佇列:它們由執行那一支真的跑掉了,人不必接手。
|
||||
# 已經以逾期身分列過的那幾筆不再列第二次:同一筆待辦在同一批提醒裡出現兩行,讀的人會
|
||||
# 當成兩件事,而且「逾期五天」比「排定點過了」講得更清楚——留強的那一行就好。
|
||||
#
|
||||
# 內建項與使用者交辦的分成兩種列,理由是它們該有的處置不一樣。
|
||||
# 使用者自己登錄的那一筆,人看到就做得了;內建項那幾筆等的是接線不是人——動作是
|
||||
# 「只提醒」的內建項,到現在還沒有任何執行入口,所以每一輪都到期、每一輪都一樣。
|
||||
# 實測踩到:這台機器八筆全是那一種,於是每一個工作階段開頭固定吐八行一模一樣的東西。
|
||||
# 那不是提醒,是噪音;而讀的那一端只印不判,分不出兩者,所以在這裡就把種類標好。
|
||||
if [ -n "$DUE_ROWS" ] && [ -f "$DUE_ROWS" ]; then
|
||||
awk -F'\t' -v idf="$_ovids" '
|
||||
BEGIN { while ((getline _l < idf) > 0) seen[_l] = 1 }
|
||||
awk -F'\t' -v idf="$_ovids" -v sidf="$_specids" '
|
||||
BEGIN {
|
||||
while ((getline _l < idf) > 0) seen[_l] = 1
|
||||
while ((getline _s < sidf) > 0) spec[_s] = 1
|
||||
}
|
||||
NF >= 12 && $1 != "" && $2 == "due" && $5 == "remind" && !($1 in seen) {
|
||||
printf "remind\t%s\t%s\t%s\n", $1, ($10 == "" ? "-" : $10), ($11 == "" ? "-" : $11)
|
||||
printf "%s\t%s\t%s\t%s\n", ($1 in spec ? "builtin" : "remind"), \
|
||||
$1, ($10 == "" ? "-" : $10), ($11 == "" ? "-" : $11)
|
||||
}' "$DUE_ROWS" 2>/dev/null
|
||||
fi
|
||||
} >"$_rt" 2>/dev/null || { add_warn '提醒佇列寫不出來'; rm -f "$_rt"; return 0; }
|
||||
if mv "$_rt" "$REMINDERS_FILE" 2>/dev/null; then
|
||||
# 兩個數字分開算:逐筆點名的那幾筆,與只算一個總數的內建項。
|
||||
REMINDERS=$(awk -F'\t' '$1 == "remind" || $1 == "overdue" { n++ } END { print n + 0 }' "$REMINDERS_FILE")
|
||||
REMINDERS_BUILTIN=$(awk -F'\t' '$1 == "builtin" { n++ } END { print n + 0 }' "$REMINDERS_FILE")
|
||||
else
|
||||
add_warn '提醒佇列換不上去'
|
||||
rm -f "$_rt"
|
||||
@@ -1260,6 +1286,7 @@ case "$CMD" in
|
||||
printf 'tasks_due=%s\n' "$DUE_TASKS"
|
||||
printf 'tasks_overdue=%s\n' "${DUE_OVERDUE:--}"
|
||||
printf 'reminders=%s\n' "$REMINDERS"
|
||||
printf 'reminders_builtin=%s\n' "$REMINDERS_BUILTIN"
|
||||
printf 'reminders_file=%s\n' "$REMINDERS_FILE"
|
||||
printf 'events_new=%s\n' "$DUE_EVENTS"
|
||||
printf 'due_status=%s\n' "$DUE_STATUS"
|
||||
|
||||
Reference in New Issue
Block a user