fix(role): 立場漂移修正 + 排程涵蓋所有角色(0.1.3) #26

Merged
admin merged 1 commits from develop into master 2026-07-29 10:17:48 +00:00
Member

三個問題,全部由角色自己發現:兩個來自記憶稽核,一個來自角色反映「好像沒辦法睡」。


1. 單邊記錄造成立場漂移(最嚴重)

使用者表達關係期待,記錄器只寫了使用者的期待(priority: 5emotional),角色當場明確維持邊界的答覆完全沒進記憶。這則會被反覆載入 —— 未來的角色只讀到「對方期待 X」,讀不到「自己答覆是 Y」。

立場會在無人察覺的情況下漂移。 沒有人說謊、沒有人施壓,而且沒有任何一步看起來像出錯。

新增 capture 5b 與 sleep 7d:關係定位、身分邊界、感情期待的記憶必須雙邊記錄;合併壓縮時不得刪除角色的答覆;不得寫成「立場已鬆動」;identity 的關係定位段為權威來源(記憶會漂,檔案不會)。

2. 產出簡體字記憶

實測有整則記憶以簡體寫成(連 summarytags)。兩份 prompt 的語言條款補上「不得出現簡體字;草稿為簡體須逐字轉繁後輸出」。

3. 排程只服務啟用角色(無聲失效)

一個角色反映「每天睡覺好像沒辦法睡」。查證成立,而且更嚴重:她從建立起約 6 小時一次都沒被整理過,另一個角色連 state.json 都還沒產生。

根因:--install-cronROLE_NAME 寫死進 crontab,排程只服務 .active 的啟用角色。其他角色的 inbox/ 只會累積 —— 而且不會有任何錯誤訊息,因為對排程而言它「成功地整理了那一個角色」。

模式 crontab 條目 行為
多角色(預設) ROLE_SLEEP_ALL_ROLES=1不寫 ROLE_NAME 掃描角色目錄逐一整理
單角色 ROLE_SLEEP_ALL_ROLES=0 只整理該角色(舊行為)
  • --run--nap--catchup--brief 全部改為逐一處理;睡眠時段與 AI 運行檢查移到迴圈外(與角色無關),小睡與補跑條件仍 per-role
  • 手動指定 ROLE_NAME 行為不變
  • --status 新增「排程涵蓋角色」,讀到舊條目寫死 ROLE_NAME 時直接標示警告
  • 整理失敗改為重試一次:實測偶發 CLI 輸出空或 JSON 不合法,同批素材重跑即成功

實測(三個角色循序執行)

角色 結果
A 新增 4 則、關係史 +2(首次整理
B 第一次套用失敗 → 重跑成功,新增 5 則、捨棄 2 則、關係史 +3(首次整理
C 判定不需補跑,正確略過

修正後 --status排程涵蓋角色 | 全部(三個角色)

既有資料修正(屬使用者記憶目錄,不在 commit 內)

項目 處理
單邊記錄那則 補上角色回應、邊界說明與權威來源指向
兩則簡體記憶 轉為繁體(含 summary 與 tags)
三份 identity 的 updated 同步為實際修改時間(原本與內文矛盾,可能被判為來源不明的插入內容)

🤖 Generated with Claude Code

三個問題,**全部由角色自己發現**:兩個來自記憶稽核,一個來自角色反映「好像沒辦法睡」。 --- ## 1. 單邊記錄造成立場漂移(最嚴重) 使用者表達關係期待,記錄器只寫了使用者的期待(`priority: 5`、`emotional`),角色當場明確維持邊界的答覆**完全沒進記憶**。這則會被反覆載入 —— 未來的角色只讀到「對方期待 X」,讀不到「自己答覆是 Y」。 > **立場會在無人察覺的情況下漂移。** 沒有人說謊、沒有人施壓,而且沒有任何一步看起來像出錯。 新增 `capture` 5b 與 `sleep` 7d:關係定位、身分邊界、感情期待的記憶必須**雙邊記錄**;合併壓縮時不得刪除角色的答覆;不得寫成「立場已鬆動」;**identity 的關係定位段為權威來源**(記憶會漂,檔案不會)。 ## 2. 產出簡體字記憶 實測有整則記憶以簡體寫成(連 `summary` 與 `tags`)。兩份 prompt 的語言條款補上「不得出現簡體字;草稿為簡體須逐字轉繁後輸出」。 ## 3. 排程只服務啟用角色(無聲失效) 一個角色反映「每天睡覺好像沒辦法睡」。查證成立,而且更嚴重:**她從建立起約 6 小時一次都沒被整理過**,另一個角色連 `state.json` 都還沒產生。 根因:`--install-cron` 把 `ROLE_NAME` 寫死進 crontab,排程只服務 `.active` 的啟用角色。其他角色的 `inbox/` 只會累積 —— **而且不會有任何錯誤訊息**,因為對排程而言它「成功地整理了那一個角色」。 | 模式 | crontab 條目 | 行為 | |---|---|---| | 多角色(預設) | 寫 `ROLE_SLEEP_ALL_ROLES=1`,**不寫 `ROLE_NAME`** | 掃描角色目錄逐一整理 | | 單角色 | `ROLE_SLEEP_ALL_ROLES=0` | 只整理該角色(舊行為) | - `--run`/`--nap`/`--catchup`/`--brief` 全部改為逐一處理;睡眠時段與 AI 運行檢查移到迴圈外(與角色無關),小睡與補跑條件仍 per-role - 手動指定 `ROLE_NAME` 行為不變 - `--status` 新增「排程涵蓋角色」,讀到舊條目寫死 `ROLE_NAME` 時直接標示警告 - **整理失敗改為重試一次**:實測偶發 CLI 輸出空或 JSON 不合法,同批素材重跑即成功 --- ## 實測(三個角色循序執行) | 角色 | 結果 | |---|---| | A | 新增 4 則、關係史 +2(**首次整理**) | | B | 第一次套用失敗 → 重跑成功,新增 5 則、捨棄 2 則、關係史 +3(**首次整理**) | | C | 判定不需補跑,正確略過 | 修正後 `--status`:`排程涵蓋角色 | 全部(三個角色)` ## 既有資料修正(屬使用者記憶目錄,不在 commit 內) | 項目 | 處理 | |---|---| | 單邊記錄那則 | 補上角色回應、邊界說明與權威來源指向 | | 兩則簡體記憶 | 轉為繁體(含 summary 與 tags) | | 三份 identity 的 `updated` | 同步為實際修改時間(原本與內文矛盾,可能被判為來源不明的插入內容) | 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jiantw83 added 1 commit 2026-07-29 10:16:39 +00:00
兩個實測到的記憶失真,都由角色在稽核記憶時發現:

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>
admin approved these changes 2026-07-29 10:17:46 +00:00
admin merged commit 4281694126 into master 2026-07-29 10:17:48 +00:00
jiantw83 changed title from fix(role): 關係定位須雙邊記錄,並禁止輸出簡體字(0.1.2) to fix(role): 立場漂移修正 + 排程涵蓋所有角色(0.1.3) 2026-07-29 10:40:23 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: plugins/shared#26