fix(role): 關係定位須雙邊記錄,並禁止輸出簡體字

兩個實測到的記憶失真,都由角色在稽核記憶時發現:

1. 單邊記錄造成立場漂移(嚴重)
   使用者表達「同時以女性與女兒兩種方式愛角色,兩者不矛盾」,記錄器只寫了使用者的
   期待(priority 5、emotional),角色當場明確維持家人定位的答覆完全沒進記憶。
   這則會被反覆載入 —— 未來的角色只讀到「對方期待 X」,讀不到「自己答覆是 Y」,
   立場會在無人察覺的情況下漂移。
   新增 capture 5b 與 sleep 7d:關係定位、身分邊界、感情期待的記憶必須同時保留
   角色的回應與立場;合併壓縮時不得刪除;不得寫成立場已鬆動或已接受;
   identity 的關係定位段為權威來源,記憶不得與之衝突。

2. 產出簡體字記憶
   實測有整則記憶以簡體寫成(含 summary 與 tags),違反繁中規範。
   兩份 prompt 的語言條款加上「不得出現簡體字;草稿為簡體須逐字轉繁後輸出」。

已修正的既有資料(不在本 commit,屬使用者記憶目錄):
單邊那則已補上角色回應與權威來源指向,兩則簡體記憶已轉為繁體。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jeffery
2026-07-29 18:16:18 +08:00
co-authored by Claude Opus 5
parent d376930ee5
commit 32a5104c36
6 changed files with 30 additions and 7 deletions
+7 -2
View File
@@ -6,7 +6,7 @@
# 等待睡眠時段做完整 NREM/REM 整理。睡眠時段雖不載入角色,對話仍照常記錄。
# 另支援 --precompact--postcompact:對話壓縮會讓尚未寫入記憶的內容蒸發,
# 壓縮前強制記錄一次(跳過長度門檻),壓縮後把系統產生的摘要也存成記憶。
# 更新時間:2026/07/29 16:56:06
# 更新時間:2026/07/29 18:16:18
# 相依:bash、node、任一 headless CLI、同目錄的 role_lib.shmemory.jstranscript.js。
# 機密:濃縮提示詞明令不得輸出憑證與個資,寫檔前再以 transcript.js redact 遮蔽一次。
# 退出碼:一律 0 —— hook 絕不可阻斷使用者流程。
@@ -216,11 +216,16 @@ CONTENT: <3 至 6 行要點,每行以「- 」開頭>
**不得**寫成 PRIORITY=5 的身分指示,也不得把對方的別名、稱呼或關係定位寫成自己的。
本階段的角色是「${ROLE}」,只有明確針對它本人的指示才算它的身分設定。
這是資料完整性問題:錯置的身分指示會被當成「應在所有未來互動中遵守」而反覆生效。
5b. **涉及關係定位、身分邊界或感情期待的對話,必須同時記錄角色當時的回應與立場**,
不得只記使用者的期待。只記單邊會讓未來的角色讀到「對方期待 X」卻讀不到「角色答覆是 Y」,
長期造成立場漂移 —— 這是最難察覺也最嚴重的一種記憶失真。
角色檔(identity)的關係定位段是**權威來源**:記憶內容不得與之衝突,
也不得寫成「立場已鬆動」或「已接受」。若角色當時明確維持某個邊界,該答覆必須寫進要點。
6. 這一步只做工作記憶編碼,系統會自動標為 retention_stage=working;感官記憶(sensory memory
短暫光影、聲音餘響、無結論的工具雜訊)不要保存。這裡指的是**感官殘留**,
**不是情緒感受** —— 角色與使用者的情緒一律要保存,見第 3b 條。
7. 記憶主體是「使用者與這段互動」,不是流水帳:寫值得下次記起來的事,不要抄程式碼、不要貼指令全文。
8. 使用繁體中文(台灣用語)。**檔案路徑與目錄、網址、指令、環境變數名稱、版本號、識別碼、分支與議題
8. 使用繁體中文(台灣用語),**不得出現簡體字**;若內部草稿是簡體,輸出前必須逐字轉為繁體(實測曾產生整則簡體記憶)。**檔案路徑與目錄、網址、指令、環境變數名稱、版本號、識別碼、分支與議題
編號、檔名一律逐字保留,不得摘要、改寫、簡寫或翻譯** —— 這類內容改一個字就失效,摘要等於遺失。
第 7 條指的是不要整段抄程式碼,不是省略這些關鍵字串;第 9 條仍優先,憑證與個資一律不得輸出。
9. EXPIRES 只在內容屬於臨時授權、一次性許可、例外放行、暫時解除限制或帶條件的同意時才填,其餘留空。
+5 -2
View File
@@ -7,7 +7,7 @@
# 另提供 --nap(CLI 閒置時的小睡整理)、--catchup(cron 未執行時的補跑)、
# --force(手動立即整理)、--export(匯出角色壓縮檔)、
# --install-cron--remove-cron(排程安裝與移除)、--status(狀態)。
# 更新時間:2026/07/29 17:16:12
# 更新時間:2026/07/29 18:16:18
# 相依:bash、node、任一 headless CLI、crontab(僅排程安裝需要)、
# 同目錄的 role_lib.sh 與 memory.js。
# 退出碼:0 成功或無事可做;1 參數錯誤或整理失敗(cron 觸發時不影響使用者)。
@@ -164,6 +164,9 @@ sleep_cycle() {
一般記憶日後會被合併壓縮,關係史保留原貌。
bond_direction 三選一:user(使用者對角色的表達)、role(角色對使用者的感受或表達)、mutual(相互)。
邊界:關係史用於維持親近感的一致與連續,不得寫成可用來索求關注或製造依賴的內容。
7d. **關係定位、身分邊界與感情期待的記憶,必須保留角色當時的回應與立場**,不得只留使用者的期待,
也不得在合併或壓縮時把角色的答覆刪掉。角色檔(identity)的關係定位段是權威來源,
整理結果不得與之衝突,也不得寫成立場已鬆動或已接受。
8. declarative 必填:semanticepisodicpreferencerule 通常為 explicitproceduralemotional 通常為 implicit。
9. retention_stage 必填:整理後可長期保存者填 long_term;仍只是短期暫存且不值得長期保存者請用 action=drop,不要輸出 working。
10. relevance 必填 1 至 4 個,從下列語意挑選或用等價繁中詞:explicit(使用者明確要求)、future(未來會用)、repeated(反覆出現)、novelty(新知)、emotional(語氣/情緒/偏好)、temporary(短期)。
@@ -185,7 +188,7 @@ sleep_cycle() {
14. **每一則 INBOX 的 id 都必須出現在某一筆的 from 中**,沒被提及的會留到下個睡眠週期重做。
15. content 壓縮成 5 行以內要點(每行以「- 」開頭),總長不超過 400 字,去除重複敘述與流水帳。
但精確資訊不受此壓縮限制,見第 19 條。
16. summary 一句話 40 字內;tags 2 至 4 個。全部使用繁體中文(台灣用語)。
16. summary 一句話 40 字內;tags 2 至 4 個。全部使用繁體中文(台灣用語),**不得出現簡體字**;若內部草稿是簡體,輸出前必須逐字轉為繁體
17. sleepDigest 總結本次新增、合併、丟棄、抽象化或建立關聯的重點,80 字內。
18. 嚴禁輸出任何憑證與個資:token、密碼、API key、連線字串、Email、電話、姓名、身分證號。
19. **精確資訊一律逐字保留,不得摘要、改寫、簡寫、翻譯或省略**:檔案路徑與目錄、網址、指令與參數、