fix(overwrite): 只有頁面真的不存在才建新頁

- What:worklog、learn、report 三支技能共六處讀取分流改寫,只有結束碼 4 才建新頁;
  結束碼 7 與 8 一律中止,一個字都不寫。三份目錄頁樣板補上寫入語意,明寫禁止整頁覆蓋、
  不得改動別人的列。usage-stats.sh 的參數護欄改成明確回傳結束碼 2。
- Why:原本把「讀失敗」與「頁面不存在」當成同一件事。金鑰失效時讀取回 7,技能卻讀成
  「這頁還沒有」,於是照樣板建一份新頁蓋回去。整份工作日誌會被這一筆條目取代,
  既有教訓會被清成空表,報表則產出一份說「這段期間沒有工作」的假數字。
  這些內容只活在 wiki 上,蓋掉就救不回來,所以這是本輪最要緊的一項。
- How:每一處讀取都先看結束碼再決定動作,並在技能文件裡列成表格:
  0 接在既有內容後面附加,4 才從樣板建頁,5 缺網址就中止,7 金鑰或權限問題就中止,
  8 其他 API 失敗就中止。目錄頁一律先讀整頁再改那一列。
  stats 也補上分流,參數錯誤不再被讀成「零次」。
- Who:worklog、learn、report、stats 四支技能的 wiki 讀寫與統計輸出。
This commit is contained in:
2026-08-31 11:07:16 +08:00
parent a617c599bb
commit 7d803245a5
8 changed files with 152 additions and 51 deletions
+13 -3
View File
@@ -4,13 +4,23 @@
# usage-stats.sh skills [--cli <name>] # 每個 skill 的使用次數(降冪)
# usage-stats.sh chains [--cli <name>] # 每條 from -> to 呼叫鏈的次數(降冪)
# 資料: $JSC_HOME/usage/skills.jsonl、chains.jsonl(預設 $HOME/.jsc)
#
# 結束碼: 0=成功(資料檔不存在也算成功,印不出任何一行)2=用法錯誤(沒給子命令、
# 子命令不認得、--cli 沒帶值)
# 資料檔不存在為什麼算成功: hook 還沒記過任何一次用量就是這個狀態,那是「零次」,不是故障。
set -u
JSC_HOME="${JSC_HOME:-$HOME/.jsc}"
cmd="${1:?usage: usage-stats.sh skills|chains [--cli <name>]}"; shift
usage() {
echo '用法:usage-stats.sh skills|chains [--cli <name>]' >&2
exit 2
}
cmd="${1:-}"; [ -n "$cmd" ] || usage
shift
cli=""
while [ $# -gt 0 ]; do
case "$1" in
--cli) cli="${2:?--cli needs a value}"; shift 2 ;;
--cli) cli="${2:-}"; [ -n "$cli" ] || usage; shift 2 ;;
*) shift ;;
esac
done
@@ -28,5 +38,5 @@ case "$cmd" in
f="$JSC_HOME/usage/chains.jsonl"; [ -f "$f" ] || exit 0
by_cli < "$f" | sed -n 's/.*"from":"\([^"]*\)".*"to":"\([^"]*\)".*/\1 -> \2/p' | rank ;;
*)
echo "unknown command: $cmd" >&2; exit 2 ;;
echo "不認得的子命令:$cmd" >&2; usage ;;
esac