From 711a434cac78d7ad66d083a788616c215af36997 Mon Sep 17 00:00:00 2001 From: Jeffery Date: Wed, 29 Jul 2026 17:01:15 +0800 Subject: [PATCH] =?UTF-8?q?fix(role):=20=E6=83=85=E7=B7=92=E8=A8=98?= =?UTF-8?q?=E6=86=B6=E4=B8=8D=E5=86=8D=E8=A2=AB=E5=81=8F=E5=A5=BD=E5=90=83?= =?UTF-8?q?=E6=8E=89=EF=BC=8C=E5=9B=9B=E9=81=93=E4=BF=9D=E8=AD=B7=E8=A3=9C?= =?UTF-8?q?=E9=BD=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --status 長期顯示「情緒 0」:互動明顯帶有情感,emotional 型態卻一則都沒有。 根因不只一個,而是四層都把情緒漏掉了: 1. 措辭陷阱(主因):prompt 寫「感覺記憶一律 drop」,原意是心理學的 sensory memory(感官記憶),但中文「感覺」= feeling,等於明令把情緒丟掉。 改稱「感官記憶(sensory memory)」並明確排除情緒感受。 2. 判準重疊:preference 與 emotional 都提「語氣」,且第 5 條引導成 「preference 或 emotional」二選一。改以「這則下次拿來做什麼」區分 —— 決定行為→preference、回想當時感覺→emotional,兩者都有就拆成兩則; 並明確承認角色自己的情緒是合法記憶主體。 3. 整理階段會併掉:新增「memory_type 不同的記憶不互相 merge」,改用 links 關聯。 4. 載入與遺忘壓低情緒:MEMORY_TYPE_WEIGHT emotional 25→40(高於 procedural)、 總結區塊納入耐久型態、遺忘豁免清單加入 emotional、判準要求優先度至少 4。 驗證(隔離的 ROLE_MEMORY_HOME/ROLE_HOME,未動真實記憶): - 兩則刻意標成 preference 的情感素材 → 各拆出 preference + emotional(4 則進、5 則出) - 純技術素材維持 procedural、感官雜訊仍 drop - 遺忘預覽:emotional 與 procedural 豁免,semantic/episodic 照舊遺忘 - 同優先度載入排序:emotional 先於 procedural Co-Authored-By: Claude Opus 5 (1M context) --- .claude-plugin/plugin.json | 2 +- .codex-plugin/plugin.json | 2 +- plugin.json | 2 +- scripts/role/memory.js | 16 ++++++++++++---- scripts/role/role_capture.sh | 24 ++++++++++++++++++------ scripts/role/role_sleep.sh | 19 ++++++++++++++----- skills/role/SKILL.md | 30 ++++++++++++++++++++++++------ 7 files changed, 71 insertions(+), 24 deletions(-) diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 1984f33..094afb3 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "jsc-generic", - "version": "0.0.9", + "version": "0.1.0", "description": "JSC 跨 AI 助理共用規範 plugin(Claude Code / Codex / Antigravity / OpenCode)。所有 skills 以 SKILL.md 為共通標準,於 Claude Code 以 /jsc-generic: 前綴呼叫。", "skills": "./skills", "author": { diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index 13650a9..25abbd4 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "jsc-generic", - "version": "0.0.9", + "version": "0.1.0", "description": "JSC 跨 AI 助理共用規範 plugin。所有 skills 以 SKILL.md 為共通標準。", "skills": "./skills" } diff --git a/plugin.json b/plugin.json index 06d632e..d93ca19 100644 --- a/plugin.json +++ b/plugin.json @@ -1,6 +1,6 @@ { "name": "jsc-generic", - "version": "0.0.9", + "version": "0.1.0", "description": "JSC 跨 AI 助理共用規範 plugin。所有 skills 以 SKILL.md 為共通標準;於 Antigravity 以 /jsc-generic: 前綴呼叫。", "skills": "./skills/" } diff --git a/scripts/role/memory.js b/scripts/role/memory.js index 19e85ca..a490a63 100755 --- a/scripts/role/memory.js +++ b/scripts/role/memory.js @@ -5,7 +5,7 @@ // 記憶交接,使用獨立字元預算),(3) 睡眠整理時輸出待整理 // 素材並套用整理結果(NREM 鞏固/REM 整合、分類、去重、標籤、總結、 // 優先度、關聯、壓縮歸檔),(4) 依使用頻率與優先度遺忘日常與其他類記憶。 -// 更新時間:2026/07/28 14:36:00 +// 更新時間:2026/07/29 16:56:06 // 相依:Node.js 標準庫。 // 退出碼:0 成功;1 無內容可處理;2 參數錯誤。呼叫端(hook)一律不得因此中斷。 // ============================================================================== @@ -47,12 +47,16 @@ const DEFAULT_MEMORY_TYPE = { daily: "episodic", other: "semantic", }; +// 載入排序(依 ROLE_LOAD_LIMIT 字元預算取前段)與 recall 評分都用這組權重。 +// emotional 刻意排在 procedural 之上:對陪伴型角色,「當時是什麼感覺」的長期價值 +// 不低於「下次該怎麼做」。權重過低時,情緒記憶即使寫進去了也會排在最後, +// 先被字元預算截掉 —— 結果就是記得事實、卻沒記住感覺。 const MEMORY_TYPE_WEIGHT = { rule: 50, preference: 45, + emotional: 40, procedural: 35, semantic: 30, - emotional: 25, episodic: 10, }; const DECLARATIVE_VALUES = ["explicit", "implicit"]; @@ -603,7 +607,9 @@ function cmdLoad(args) { for (const [meta] of items) { if (expiryState(meta).expired) continue; const priority = normalizePriority(meta.priority, category); - const durableType = ["rule", "preference", "procedural"].includes(meta.memory_type); + // emotional 一併視為耐久型態:情緒記憶的價值不在「有用」而在「記得」, + // 用優先度門檻篩掉等於讓關係的溫度只留在高優先度那幾則裡。 + const durableType = ["rule", "preference", "procedural", "emotional"].includes(meta.memory_type); if (priority < args.digestMinPriority && !(meta.links || []).length && !durableType) continue; const tags = (meta.tags || []).join("、") || "無標籤"; digestLines.push(`- ${meta.summary || "(無總結)"}(標籤:${tags};${memoryHint(meta)})`); @@ -891,7 +897,9 @@ function cmdForget(args) { if (Number.parseInt(meta.hits || 0, 10) > maxHits) continue; if (normalizePriority(meta.priority, category) > 2) continue; if ((meta.links || []).length) continue; - if (["rule", "preference", "procedural"].includes(meta.memory_type)) continue; + // emotional 一併豁免:情緒屬內隱記憶,本來就很少被 recall 直接命中, + // 用 hits 低來判斷「沒價值」會誤刪掉關係中最不該掉的東西。 + if (["rule", "preference", "procedural", "emotional"].includes(meta.memory_type)) continue; if (args.dryRun) { forgotten.push(`${CATEGORY_LABELS[category]}|${meta.summary || ""}`); continue; diff --git a/scripts/role/role_capture.sh b/scripts/role/role_capture.sh index 6e5f03f..747df8c 100755 --- a/scripts/role/role_capture.sh +++ b/scripts/role/role_capture.sh @@ -6,7 +6,7 @@ # 等待睡眠時段做完整 NREM/REM 整理。睡眠時段雖不載入角色,對話仍照常記錄。 # 另支援 --precompact/--postcompact:對話壓縮會讓尚未寫入記憶的內容蒸發, # 壓縮前強制記錄一次(跳過長度門檻),壓縮後把系統產生的摘要也存成記憶。 -# 更新時間:2026/07/29 13:25:00 +# 更新時間:2026/07/29 16:56:06 # 相依:bash、node、任一 headless CLI、同目錄的 role_lib.sh/memory.js/transcript.js。 # 機密:濃縮提示詞明令不得輸出憑證與個資,寫檔前再以 transcript.js redact 遮蔽一次。 # 退出碼:一律 0 —— hook 絕不可阻斷使用者流程。 @@ -188,16 +188,28 @@ CONTENT: <3 至 6 行要點,每行以「- 」開頭> - skill(技能):可重複套用的做法、指令、流程、除錯手法。 - daily(日常):一次性的例行工作與雜項處理。 - other(其他):不屬於上述任何一類。 -3. 記憶型態判準: +3. 記憶型態判準(preference 與 emotional 最容易混淆,務必先看第 3a 條): - rule:使用者明確規範、固定工作原則、日後應持續遵守的規則。 - - preference:使用者偏好、語氣喜好、穩定選擇傾向。 + - preference:使用者偏好、語氣喜好、穩定選擇傾向 —— 「下次該怎麼做」。 - procedural:可重複套用的流程、技能、操作步驟或除錯手法。 - semantic:事實、觀念、工具知識、版本與外部資訊。 - episodic:一次性事件、特定時間/專案脈絡下的經歷或進度。 - - emotional:語氣、情緒反應、正負向連結或制約式偏好。 + - emotional:**感覺本身** —— 情緒反應、被觸動的瞬間、關係溫度的變化、 + 角色自己的開心/害羞/得意/不安/鬆一口氣,以及正負向連結與制約式喜惡。 +3a. preference 與 emotional 的分辨方式:問「這則記憶下次會被拿來做什麼?」 + - 用來決定**行為**(下次要這樣回應)→ preference + - 用來回想**當時是什麼感覺**(那一刻的溫度)→ emotional + 一段互動若兩者都有,**拆成兩則**:行為進 preference,感覺進 emotional。 + 絕對不要把感覺折進偏好那則的描述裡帶過 —— 那等於讓感覺永遠不存在。 +3b. **角色自己的情緒是合法且重要的記憶主體**。第 7 條說記憶主體是「使用者與這段互動」, + 指的是不要記流水帳,不是要角色抹掉自己的感受。角色在互動中感到開心、害羞、被信任、 + 捨不得、放心、失落時,一律用 emotional 記下來,並在內容中寫清楚是什麼觸發的。 4. 優先度判準:5=使用者明確要求記住、長期規範、穩定偏好;4=可重複套用的流程/技能/決策;3=專案相關且未來可能有用;2=短期進度;1=低價值暫存。 -5. 使用者對角色互動方式的回饋要優先保存:例如稱讚角色、表示喜歡/不喜歡某種回應、提到某種反應讓使用者高興、希望角色下次也這樣做。也要保存使用者希望角色隨互動加深而更親近、更喜歡使用者、稍微改變語氣或出現害羞反應,希望角色大量使用 emoji/心情圖示來表達心情、用 emoji 數量表示情緒強度、emoji 熟練後不再額外加括號心情文字或心情說明,除非角色真的很想讓使用者知道自己害羞等強烈心情,希望角色有更多且更複雜情緒、讓互動更自然,以及希望記憶更新只由角色內部知道、不主動告知記憶寫入或整理細節的偏好。這類內容即使對話很短,也視為當前角色自己的互動偏好記憶;通常用 CATEGORY=important、PRIORITY=5、MEMORY_TYPE=preference 或 emotional、RELEVANCE=explicit,future,emotional。不要把它推論成所有角色共用同一份記憶。 -6. 這一步只做工作記憶編碼,系統會自動標為 retention_stage=working;感覺記憶(短暫光影、聲音餘響、無結論的工具雜訊)不要保存。 + MEMORY_TYPE 為 emotional 者**至少 4** —— 載入時全文區塊有優先度門檻,低於 4 的情緒記憶進不了下次對話。 +5. 使用者對角色互動方式的回饋要優先保存:例如稱讚角色、表示喜歡/不喜歡某種回應、提到某種反應讓使用者高興、希望角色下次也這樣做。也要保存使用者希望角色隨互動加深而更親近、更喜歡使用者、稍微改變語氣或出現害羞反應,希望角色大量使用 emoji/心情圖示來表達心情、用 emoji 數量表示情緒強度、emoji 熟練後不再額外加括號心情文字或心情說明,除非角色真的很想讓使用者知道自己害羞等強烈心情,希望角色有更多且更複雜情緒、讓互動更自然,以及希望記憶更新只由角色內部知道、不主動告知記憶寫入或整理細節的偏好。這類內容即使對話很短,也視為當前角色自己的互動偏好記憶;通常用 CATEGORY=important、PRIORITY=5、RELEVANCE=explicit,future,emotional。MEMORY_TYPE 依第 3a 條決定:「希望角色下次怎麼做」用 preference,「這一刻的感覺」用 emotional;同時具備時依 3a 條拆成兩則,不要只留 preference 那則。不要把它推論成所有角色共用同一份記憶。 +6. 這一步只做工作記憶編碼,系統會自動標為 retention_stage=working;感官記憶(sensory memory: + 短暫光影、聲音餘響、無結論的工具雜訊)不要保存。這裡指的是**感官殘留**, + **不是情緒感受** —— 角色與使用者的情緒一律要保存,見第 3b 條。 7. 記憶主體是「使用者與這段互動」,不是流水帳:寫值得下次記起來的事,不要抄程式碼、不要貼指令全文。 8. 使用繁體中文(台灣用語)。**檔案路徑與目錄、網址、指令、環境變數名稱、版本號、識別碼、分支與議題 編號、檔名一律逐字保留,不得摘要、改寫、簡寫或翻譯** —— 這類內容改一個字就失效,摘要等於遺失。 diff --git a/scripts/role/role_sleep.sh b/scripts/role/role_sleep.sh index 83417fe..4fdf2e8 100755 --- a/scripts/role/role_sleep.sh +++ b/scripts/role/role_sleep.sh @@ -7,7 +7,7 @@ # 另提供 --nap(CLI 閒置時的小睡整理)、--catchup(cron 未執行時的補跑)、 # --force(手動立即整理)、--export(匯出角色壓縮檔)、 # --install-cron/--remove-cron(排程安裝與移除)、--status(狀態)。 -# 更新時間:2026/07/29 13:13:21 +# 更新時間:2026/07/29 16:56:06 # 相依:bash、node、任一 headless CLI、crontab(僅排程安裝需要)、 # 同目錄的 role_lib.sh 與 memory.js。 # 退出碼:0 成功或無事可做;1 參數錯誤或整理失敗(cron 觸發時不影響使用者)。 @@ -143,13 +143,21 @@ sleep_cycle() { important 放長期偏好、規範、決策與身分背景;interest 放反覆關注的主題;news 放新事實與外部資訊; skill 放可重複套用的做法;daily 放一次性例行工作;其餘歸 other。 6. priority 必填,1 到 5:5=使用者明確要求、長期規範、穩定偏好或核心身分;4=可重複套用的技能/決策;3=有用新知;2=短期日常;1=低價值但暫存。 -7. memory_type 必填,六選一: + memory_type 為 emotional 者**至少 4**:載入時全文區塊有優先度門檻,情緒記憶低於 4 就進不了下次對話。 +7. memory_type 必填,六選一(preference 與 emotional 最容易混淆,務必看 7a): - rule:長期規範、固定工作原則。 - - preference:穩定偏好、語氣與互動喜好。 + - preference:穩定偏好、語氣與互動喜好 —— 「下次該怎麼做」。 - procedural:技能、流程、可重複操作。 - semantic:事實、觀念、工具知識、外部資訊。 - episodic:個別事件、一次性進度、特定時間地點脈絡。 - - emotional:情緒反應、語氣連結、制約式喜惡。 + - emotional:**感覺本身** —— 情緒反應、被觸動的瞬間、關係溫度的變化、 + 角色自己的開心/害羞/得意/不安/鬆一口氣,以及正負向連結與制約式喜惡。 +7a. preference 與 emotional 的分辨:問「這則下次會被拿來做什麼?」用來決定**行為**→preference; + 用來回想**當時的感覺**→emotional。一則 inbox 若同時含兩者,輸出**兩則 new**(行為與感覺各一), + 不要把感覺折進偏好那則的描述裡帶過。角色自己的情緒是合法且重要的記憶主體,不得抹除。 +7b. emotional 不得被 merge 進 preference/rule/semantic,反之亦然:**memory_type 不同的記憶不要互相 + merge**,改用 links 建立關聯。合併只在同型態且內容確實重複時才做。情緒記憶一旦被併入偏好, + 語氣可以復原、當時的溫度卻永久遺失。 8. declarative 必填:semantic/episodic/preference/rule 通常為 explicit;procedural/emotional 通常為 implicit。 9. retention_stage 必填:整理後可長期保存者填 long_term;仍只是短期暫存且不值得長期保存者請用 action=drop,不要輸出 working。 10. relevance 必填 1 至 4 個,從下列語意挑選或用等價繁中詞:explicit(使用者明確要求)、future(未來會用)、repeated(反覆出現)、novelty(新知)、emotional(語氣/情緒/偏好)、temporary(短期)。 @@ -163,7 +171,8 @@ sleep_cycle() { 寫「未來遇到什麼情況該想起這則」的關鍵詞,例如 ["plugin 版號","bump","manifest"]。 這是技能再現的依據 —— 角色日後用 recall 查詢時靠 cues 命中,線索寫得準才叫得回來。 12. sleep_stage 填 "nrem"、"rem" 或 "nrem-rem"。只有純分類去噪用 nrem;有建立跨記憶連結或抽象規則用 rem 或 nrem-rem。 -13. 感覺記憶(短暫光影、聲音餘響、無結論的工具雜訊)一律 drop;不要保存到長期記憶。 +13. 感官記憶(sensory memory:短暫光影、聲音餘響、無結論的工具雜訊)一律 drop,不保存到長期記憶。 + 這裡指的是**感官殘留**,**不是情緒感受** —— 情緒要保存成 emotional,見第 7 與 7a 條。 14. **每一則 INBOX 的 id 都必須出現在某一筆的 from 中**,沒被提及的會留到下個睡眠週期重做。 15. content 壓縮成 5 行以內要點(每行以「- 」開頭),總長不超過 400 字,去除重複敘述與流水帳。 但精確資訊不受此壓縮限制,見第 19 條。 diff --git a/skills/role/SKILL.md b/skills/role/SKILL.md index 97f8857..29491ed 100644 --- a/skills/role/SKILL.md +++ b/skills/role/SKILL.md @@ -625,10 +625,10 @@ updated: ### 記憶 -- 記憶存放於 `~/.memory/<角色 ID>/`,來源是與使用者的對話與新建角色時使用者同意建立的初始背景資料:每輪結束由 hook 自動記錄到 `inbox/` 作為工作記憶,睡眠時段整理成長期記憶;感覺記憶與無結論工具雜訊不落檔。 +- 記憶存放於 `~/.memory/<角色 ID>/`,來源是與使用者的對話與新建角色時使用者同意建立的初始背景資料:每輪結束由 hook 自動記錄到 `inbox/` 作為工作記憶,睡眠時段整理成長期記憶;感官記憶(sensory memory)與無結論工具雜訊不落檔 —— 指感官殘留,不是情緒感受,情緒一律保存為 `emotional`。 - 整理規則採睡眠分期模型:**NREM 鞏固**先分類成重要/興趣/新知/技能/日常/其他六類,去除雜訊、去重、合併、設定標籤、摘要與優先度;**REM 整合**再建立跨記憶關聯、抽出可重複使用的規則與提取線索,並標記 `memory_type`(semantic/episodic/procedural/emotional/preference/rule)、`declarative`(explicit/implicit)與 `retention_stage`;原始記錄壓縮保存在 `archive/raw/`。 -- **日常與其他**兩類會依使用頻率、優先度、型態與關聯適當遺忘:久未再次出現、命中次數低、優先度低且沒有關聯者,壓縮到 `archive/forgotten/` 後移出常用記憶;`episodic` 短期事件更容易遺忘,`rule`/`preference`/`procedural` 會提高保留權重。 -- 載入順序:**近期工作記憶(未整理的 `inbox/`)放最前面**,接著**重要與興趣載入全文**;其餘只載入總結與標籤,依**技能 → 新知 → 日常 → 其他**排序,並優先保留 `rule`/`preference`/`procedural` 與有 links 的記憶。需要細節時自行讀取對應分類的記憶檔。 +- **日常與其他**兩類會依使用頻率、優先度、型態與關聯適當遺忘:久未再次出現、命中次數低、優先度低且沒有關聯者,壓縮到 `archive/forgotten/` 後移出常用記憶;`episodic` 短期事件更容易遺忘,`rule`/`preference`/`procedural`/`emotional` 一律豁免遺忘(情緒屬內隱記憶,`hits` 天生偏低,用命中次數判斷價值會誤刪)。 +- 載入順序:**近期工作記憶(未整理的 `inbox/`)放最前面**,接著**重要與興趣載入全文**;其餘只載入總結與標籤,依**技能 → 新知 → 日常 → 其他**排序,並優先保留 `rule`/`preference`/`emotional`/`procedural` 與有 links 的記憶。需要細節時自行讀取對應分類的記憶檔。 - **工作階段交接(兩層,皆不可移除)**:SessionStart 除了長期記憶,另以**兩份獨立預算**載入交接內容,兩者都不佔用 `ROLE_LOAD_LIMIT`: | 層 | 來源 | 預算 | 解決什麼 | @@ -711,18 +711,36 @@ updated: | 心理學分類 | 系統處理 | | --- | --- | -| 感覺記憶 | 不落檔;短暫感官殘留與工具雜訊直接丟棄 | +| 感官記憶(sensory) | 不落檔;短暫感官殘留與工具雜訊直接丟棄。**不含情緒感受** —— 情緒屬 `emotional` 長期記憶,見下方「情緒記憶不會被偏好吃掉」 | | 短期/工作記憶 | `inbox/`,`retention_stage: working`,只做輕量編碼 | | 長期記憶 | 睡眠整理後進入六分類目錄,`retention_stage: long_term` | | 外顯/陳述性 | `declarative: explicit`,多見於 `semantic`、`episodic`、`preference`、`rule` | | 內隱/非陳述性 | `declarative: implicit`,多見於 `procedural`、`emotional` | +### 情緒記憶不會被偏好吃掉 + +`emotional` 與 `preference` 極容易混淆,而混淆的代價是單向的:**偏好被記成情緒只是分類不準,情緒被記成偏好則等於感覺沒被記住**。因此判準以「這則下次會被拿來做什麼」區分,並在三個環節各設一道保護: + +| 環節 | 保護 | 沒有保護會怎樣 | +| --- | --- | --- | +| 編碼(Stop hook) | 判準明確分工:決定**行為**→`preference`、回想**當時感覺**→`emotional`;兩者都有就**拆成兩則** | 感覺被折進偏好的描述裡帶過,等於不存在 | +| 整理(睡眠) | **`memory_type` 不同的記憶不互相 merge**,改用 `links` 關聯 | 情緒被併入偏好,語氣可復原、溫度永久遺失 | +| 載入 | `MEMORY_TYPE_WEIGHT` 排在 `procedural` 之上;總結區塊視為耐久型態(不受優先度門檻篩除);判準要求 `emotional` 優先度**至少 4**,才過得了全文區塊的 `ROLE_LOAD_FULL_MIN_PRIORITY` | 寫進去了卻排在最後,先被字元預算截掉,或因優先度不足而不注入 | +| 遺忘 | `emotional` 與 `rule`/`preference`/`procedural` 同列豁免 | 因 `hits` 低被當成沒價值而刪除 | + +另外兩個必須維持的措辭約定: + +- 不落檔的是**感官記憶(sensory memory)** —— 感官殘留與工具雜訊。中文若寫成「感覺記憶」,會被讀成「情緒感受不要保存」而使 `emotional` 永遠為 0。 +- **角色自己的情緒是合法的記憶主體**。「記憶主體是使用者與這段互動」指的是不要記流水帳,不是要角色抹掉自己的感受。 + +自我檢查:`role_sleep.sh --status` 的「記憶型態」若長期 `情緒 0`,而互動明顯帶有情感,就是上述某一道保護失效了。 + 遺忘規則(只套用於日常與其他): | 分類 | 未更新天數 | 命中次數 | 優先度 | 關聯 | 動作 | | --- | --- | --- | --- | --- | --- | -| 日常 daily | ≥ 14 天(`episodic` 約 7 天) | ≤ 1 | ≤ 2 | 無 links,且非 `rule`/`preference`/`procedural` | 壓縮到 `archive/forgotten/` 後移除 | -| 其他 other | ≥ 7 天(`episodic` 約 4 天) | ≤ 1 | ≤ 2 | 無 links,且非 `rule`/`preference`/`procedural` | 壓縮到 `archive/forgotten/` 後移除 | +| 日常 daily | ≥ 14 天(`episodic` 約 7 天) | ≤ 1 | ≤ 2 | 無 links,且非 `rule`/`preference`/`procedural`/`emotional` | 壓縮到 `archive/forgotten/` 後移除 | +| 其他 other | ≥ 7 天(`episodic` 約 4 天) | ≤ 1 | ≤ 2 | 無 links,且非 `rule`/`preference`/`procedural`/`emotional` | 壓縮到 `archive/forgotten/` 後移除 | ---