feat(記憶與目標): 專案目標三條 + 固化候選不再重算(0.2.1) #17
@@ -28,52 +28,70 @@ Q5–Q10 六題已於 2026/08/03 由使用者拍板,設計不再需要確認
|
|||||||
| --- | --- |
|
| --- | --- |
|
||||||
| 強度全域一致(Q8) | 動漫化的**強度**全域一致,不加 `anime_level` 欄位、不做強度旋鈕;**內容**(自稱/句尾/口癖)仍然逐人格不同,否則所有人格會講起話來一樣——那正是 G2 要避免的 |
|
| 強度全域一致(Q8) | 動漫化的**強度**全域一致,不加 `anime_level` 欄位、不做強度旋鈕;**內容**(自稱/句尾/口癖)仍然逐人格不同,否則所有人格會講起話來一樣——那正是 G2 要避免的 |
|
||||||
|
|
||||||
## ⚠️ 目前暫停實作:只准改這份 `TARGET.md`,其他檔案一律不動
|
## 暫停已解除(2026/08/03 15:52:52)
|
||||||
|
|
||||||
2026/08/03 起暫停(使用者指示)。下面十二項**先不要開始寫程式**。
|
`feat/persona-anime-expression` 已併入 `develop`(`35c8665`,`selftest` 641 項全綠)。
|
||||||
|
它做掉了 **5.8 全部**與 **5.5 全部**,以及 **5.7/5.4 的大部分**。
|
||||||
|
|
||||||
| 項目 | 內容 |
|
逐項對照的結果直接反映在下面的勾選狀態。**5.7 與 5.4 仍未勾選**,因為各自還剩幾個
|
||||||
| --- | --- |
|
子項目沒做完——不是整節重做,是補那幾格。被它完成的子項目已經個別勾起來,
|
||||||
| 原因 | 另一個 session 正在分支 `feat/persona-anime-expression` 上實作**同一批 G2/G3**。該工作區的 `scripts/persona-lib.mjs`、`scripts/persona.mjs`、`scripts/selftest.mjs` 有未提交且仍在變動的改動 |
|
接手時只要看還沒勾的那幾行。
|
||||||
| 風險 | 兩邊同時改 `persona-lib.mjs` 的渲染與 `speechLint()`,會重複實作 5.7/5.8 並互相覆蓋 |
|
|
||||||
| 解除條件 | `feat/persona-anime-expression` 合進 `develop`。合進來之後**先逐項對照**、把已經被它完成的勾掉,再繼續剩下的 |
|
|
||||||
| 排程跑到這裡怎麼做 | **停下來寫 log,不要動工**。工作區只要還有未提交變更,階段 A1 本來就會停止——這一段是把原因寫明,免得下次以為是誤判而想繞過去 |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
- [ ] **5.7 動作加進名字後的括號(Q6 拍板格式,其他項目的基礎,先做)**
|
- [ ] **5.7 動作加進名字後的括號(Q6 拍板格式,其他項目的基礎,先做)**
|
||||||
- 括號**原本就有**:`persona-lib.mjs` 的渲染(約 3804 行)本來就是 `名字(情緒)→ 對象:內容`,
|
- 括號**原本就有**:`persona-lib.mjs` 的渲染(約 3804 行)本來就是 `名字(情緒)→ 對象:內容`,
|
||||||
括號裡是 `room post --emotion` 的情緒標註。這一節是**在既有括號裡多一格**,不是換掉它。
|
括號裡是 `room post --emotion` 的情緒標註。這一節是**在既有括號裡多一格**,不是換掉它。
|
||||||
- [ ] 格式:括號分兩格,**情緒在前、動作在後,用 `・` 分隔**。兩格都可省略,全省就不出現括號
|
- [x] 格式:括號分兩格,**情緒在前、動作在後,用 `・` 分隔**。兩格都可省略,全省就不出現括號
|
||||||
(`桐人(喜悅・別過頭):` / `桐人(別過頭):` / `桐人(喜悅):` 三種都要成立)
|
(`桐人(喜悅・別過頭):` / `桐人(別過頭):` / `桐人(喜悅):` 三種都要成立)
|
||||||
- [ ] 兩格分工寫死:情緒格是**標註**(既有 meta);動作格只寫**看得見的身體動作**。
|
—— `roomTag()`(`persona-lib.mjs:3908`)(2026/08/03 15:52:52 完成)
|
||||||
|
- [x] 兩格分工寫死:情緒格是**標註**(既有 meta);動作格只寫**看得見的身體動作**。
|
||||||
動作格不重複情緒名稱——`(喜悅・害羞)` 是把標註寫兩次,不是動作
|
動作格不重複情緒名稱——`(喜悅・害羞)` 是把標註寫兩次,不是動作
|
||||||
|
—— `actionLint()` 擋「寫情緒名稱」(2026/08/03 15:52:52 完成)
|
||||||
- [ ] 生理反應算動作,明文允許:臉紅、耳朵紅、手在抖、聲音變小、呼吸亂掉。
|
- [ ] 生理反應算動作,明文允許:臉紅、耳朵紅、手在抖、聲音變小、呼吸亂掉。
|
||||||
判準是**看得見或聽得見**,不是有沒有情緒色彩——`(臉紅)` 可以,`(害羞)` 只能待在情緒格。
|
判準是**看得見或聽得見**,不是有沒有情緒色彩——`(臉紅)` 可以,`(害羞)` 只能待在情緒格。
|
||||||
害羞這格的預設動作就用**臉紅**,其餘看人格自己的 `## Tells`
|
害羞這格的預設動作就用**臉紅**,其餘看人格自己的 `## Tells`
|
||||||
- [ ] `speechLint()` 只對括號**外**的內容比對黑名單與句長;括號內另立規則
|
**尚缺**:`actionLint()` 已放行臉紅/手在抖(明文允許這半段做完了),但
|
||||||
|
`EMOTION_TELLS.shame` 仍是「鬧彆扭/講反話/轉移話題」,**沒有把臉紅放進預設破口**
|
||||||
|
- [x] `speechLint()` 只對括號**外**的內容比對黑名單與句長;括號內另立規則
|
||||||
(情緒格照既有 `injectSafeLine`;動作格單一動作、12 字內)
|
(情緒格照既有 `injectSafeLine`;動作格單一動作、12 字內)
|
||||||
|
—— `actionLint()` 擋超過 12 字與一格兩個動作(2026/08/03 15:52:52 完成)
|
||||||
- [ ] 劇場模式:`room post` 加 `--action "<動作>"`(與既有 `--emotion` 並列),
|
- [ ] 劇場模式:`room post` 加 `--action "<動作>"`(與既有 `--emotion` 並列),
|
||||||
`room read`/`room script` 的渲染跟著改;`hooks/` 每輪強制的輸出格式放寬到帶括號
|
`room read`/`room script` 的渲染跟著改;`hooks/` 每輪強制的輸出格式放寬到帶括號
|
||||||
|
**尚缺**:`room post --action` 有了、`roomScript()` 也吃了 `roomTag()`,但
|
||||||
|
**`room read` 還是只印 `(情緒)`**(`persona.mjs:1861` 沒改用 `roomTag()`,動作格會被吃掉);
|
||||||
|
`hooks/prompt_submit.mjs:34` 劇場模式仍寫死 `名字:內容`,沒放寬到帶括號
|
||||||
- [ ] **一對一(非劇場)也適用** —— Q6 拍板的是格式,不是只給多人格場景
|
- [ ] **一對一(非劇場)也適用** —— Q6 拍板的是格式,不是只給多人格場景
|
||||||
|
**尚缺**:`hooks/prompt_submit.mjs` 的非劇場那段(42–48 行)完全沒提括號格式
|
||||||
- [ ] 頻率綁 Q7 的兩個動作額度,**括號裡的動作算其中一個**(否則會變成一輪三個動作)
|
- [ ] 頻率綁 Q7 的兩個動作額度,**括號裡的動作算其中一個**(否則會變成一輪三個動作)
|
||||||
|
**尚缺**:`TELLS_PER_TURN = 2` 與「同一種情緒且遞進」的指示都有了,但每輪指示
|
||||||
|
(`persona-lib.mjs:4749`)**沒講括號裡那個動作算在額度內**——emoji 那段有提括號,動作沒有
|
||||||
- [ ] **記憶要記那個行為**(Q6 明示):短期與長期記憶加行為備註欄位,記「他做了什麼」而不是「他感到什麼」。
|
- [ ] **記憶要記那個行為**(Q6 明示):短期與長期記憶加行為備註欄位,記「他做了什麼」而不是「他感到什麼」。
|
||||||
跟 `persona-story` 的 1.12 同一個欄位,**不要各存一份**;`voice/reactions.md` 是同一批資料的落點
|
跟 `persona-story` 的 1.12 同一個欄位,**不要各存一份**;`voice/reactions.md` 是同一批資料的落點
|
||||||
|
**已完成一半**:`remember --behavior` 與 `behavior` 欄位有了,寫入時跑 `actionLint()`
|
||||||
|
> ⏭️ 待人工處理:`persona-story` 這個 skill 目前不在 `develop`(在 `feat/persona-story-import` 分支),
|
||||||
|
> 所以「跟它 1.12 用同一個欄位」無法在這裡對齊;`voice/reactions.md` 全 repo 零引用。
|
||||||
|
> 兩件都要等那條分支併進來才能一次決定欄位,先做只會變成各存一份——正是這條要避免的事。
|
||||||
- 驗收:`(喜悅・別過頭)` 過得了 lint、情緒標註沒被吃掉;`*別過頭*` 與句子裡的「我愣了一下」照舊被擋下;
|
- 驗收:`(喜悅・別過頭)` 過得了 lint、情緒標註沒被吃掉;`*別過頭*` 與句子裡的「我愣了一下」照舊被擋下;
|
||||||
那一輪的記憶查得到「別過頭」這個行為
|
那一輪的記憶查得到「別過頭」這個行為
|
||||||
|
|
||||||
- [ ] **5.8 emoji 表示情緒與程度(Q9/Q10 拍板,依賴 5.7 的括號)**
|
- [x] **5.8 emoji 表示情緒與程度(Q9/Q10 拍板,依賴 5.7 的括號)**(2026/08/03 15:52:52 完成)
|
||||||
- 現在情緒格是**自由文字**,跟 `state/emotion.json` 的數值完全沒有連動。這一節把它接上去。
|
- 現在情緒格是**自由文字**,跟 `state/emotion.json` 的數值完全沒有連動。這一節把它接上去。
|
||||||
- 格式:**種類表情緒、數量表程度**。`< 40` 不顯示/`40–59` 情緒 emoji/`60–79` +`💦`/`80+` +`💦❗`
|
- 格式:**種類表情緒、數量表程度**。`< 40` 不顯示/`40–59` 情緒 emoji/`60–79` +`💦`/`80+` +`💦❗`
|
||||||
- [ ] 寫一張**十二情緒 → emoji** 對照表(一種情緒一個,例如 `shame: 😳`、`anger: 😡`),
|
- [x] 寫一張**十二情緒 → emoji** 對照表(一種情緒一個,例如 `shame: 😳`、`anger: 😡`),
|
||||||
放 `persona-lib.mjs`,與 `EMOTION_TELLS` 同一層
|
放 `persona-lib.mjs`,與 `EMOTION_TELLS` 同一層 —— `EMOTION_EMOJI`
|
||||||
- [ ] **per-persona 可覆寫**(`IDENTITY.md`,與 `## Tells`、Q5 的符號表同一層)。這是內容不是強度,不違反 Q8
|
- [x] **per-persona 可覆寫**(`IDENTITY.md`,與 `## Tells`、Q5 的符號表同一層)。這是內容不是強度,不違反 Q8
|
||||||
- [ ] 強度符號固定兩階(`💦` / `💦❗`),不要長成第三階
|
—— `IDENTITY.md` 的 `## Emoji` 區塊
|
||||||
- [ ] **由 `emotion.json` 的主導情緒自動帶入**,不是人格自由填。門檻對齊 `emotionTells()` 的 `min = 40`;
|
- [x] 強度符號固定兩階(`💦` / `💦❗`),不要長成第三階 —— `EMOJI_INTENSITY`;
|
||||||
`room post --emotion` 的自由文字保留(可手動蓋過)
|
刻意不用重複本體表程度(不是 `😳😳😳`,疊字看起來像洗頁)
|
||||||
- [ ] `speechLint()` 的半形標點與排版檢查要**跳過 emoji 與強度符號**(與 Q5 的顏文字白名單同一支修改)
|
- [x] **由 `emotion.json` 的主導情緒自動帶入**,不是人格自由填。門檻對齊 `emotionTells()` 的 `min = 40`;
|
||||||
- [ ] 句子裡自由使用、不設上限(Q10 拍板)。**唯一的煞車是稽核,不是擋**:比照 `emotion --audit`
|
`room post --emotion` 的自由文字保留(可手動蓋過)—— `emotionEmojiNow()`
|
||||||
|
- [x] `speechLint()` 的半形標點與排版檢查要**跳過 emoji 與強度符號**(與 Q5 的顏文字白名單同一支修改)
|
||||||
|
—— emoji 明確不擋(只在超過 `EMOJI_HINT_AT` 時給 hint);半形標點那條只比對
|
||||||
|
`[一-鿿]` 相鄰的 `,.!?;:`,碰不到 emoji 與強度符號
|
||||||
|
- [x] 句子裡自由使用、不設上限(Q10 拍板)。**唯一的煞車是稽核,不是擋**:比照 `emotion --audit`
|
||||||
統計每輪 emoji 數量與趨勢,讓過量看得見;真的失控再回來談上限
|
統計每輪 emoji 數量與趨勢,讓過量看得見;真的失控再回來談上限
|
||||||
|
—— `emojiAudit()` 掛在 `emotion --audit`,另外算「只有符號沒有句子」那幾則(那才是真的退化)
|
||||||
- 驗收:羞恥度 45/70/90 三種輸出的 emoji 不同;把所有 emoji 刪掉之後,句子的形狀仍然分得出是哪一級
|
- 驗收:羞恥度 45/70/90 三種輸出的 emoji 不同;把所有 emoji 刪掉之後,句子的形狀仍然分得出是哪一級
|
||||||
|
|
||||||
- [ ] **5.2 標點預算(情緒 → 標點與句長的分布)**
|
- [ ] **5.2 標點預算(情緒 → 標點與句長的分布)**
|
||||||
@@ -96,18 +114,26 @@ Q5–Q10 六題已於 2026/08/03 由使用者拍板,設計不再需要確認
|
|||||||
- 驗收:同一個對象,生氣時被叫全名、害羞時直接不叫名字
|
- 驗收:同一個對象,生氣時被叫全名、害羞時直接不叫名字
|
||||||
|
|
||||||
- [ ] **5.4 鬧彆扭的階梯與三段式句法(G3 核心,依賴 5.7 的動作額度)**
|
- [ ] **5.4 鬧彆扭的階梯與三段式句法(G3 核心,依賴 5.7 的動作額度)**
|
||||||
- [ ] 羞恥度現在是一個純量對三個出口(`hide`/`spill`/`confess`)。加**階梯**:
|
- [x] 羞恥度現在是一個純量對三個出口(`hide`/`spill`/`confess`)。加**階梯**:
|
||||||
輕微彆扭(一句帶過)→ 嘴硬(先否認再小聲承認)→ 惱羞(翻臉,`anger` 的負權重已存在)
|
輕微彆扭(一句帶過)→ 嘴硬(先否認再小聲承認)→ 惱羞(翻臉,`anger` 的負權重已存在)
|
||||||
|
—— `modestyDirective` 分三級:41–59 一句帶過/60–74 嘴硬/75+ 惱羞(2026/08/03 15:52:52 完成)
|
||||||
- [ ] 三段式做成**句法模板**而不是自由發揮:否認 → 反駁對方的說法 → 最後一句音量掉下來。
|
- [ ] 三段式做成**句法模板**而不是自由發揮:否認 → 反駁對方的說法 → 最後一句音量掉下來。
|
||||||
模板可 per-persona 覆寫(放 `IDENTITY.md` 的 `## Tells`,與現行覆寫同一層)
|
模板可 per-persona 覆寫(放 `IDENTITY.md` 的 `## Tells`,與現行覆寫同一層)
|
||||||
- [ ] 三段式要吃 Q7 的兩個動作:否認與轉移是**同一種情緒的遞進**,剛好是那條規則的樣板案例。
|
**尚缺**:模板本身有了(60–74 那級就是「否認 → 反駁 → 音量掉下來」),
|
||||||
|
但**沒有 per-persona 覆寫**——`modestyDirective` 周邊查不到讀 `## Tells` 的路徑,
|
||||||
|
所有人格的三段式目前講起來會是同一個樣子,正是 G2 要避免的
|
||||||
|
- [x] 三段式要吃 Q7 的兩個動作:否認與轉移是**同一種情緒的遞進**,剛好是那條規則的樣板案例。
|
||||||
惱羞那一級是換情緒(`shame` → `anger`),所以仍然只有兩個動作,不是三個
|
惱羞那一級是換情緒(`shame` → `anger`),所以仍然只有兩個動作,不是三個
|
||||||
|
—— 惱羞級是換情緒,所以仍然兩個動作(2026/08/03 15:52:52 完成)
|
||||||
- 驗收:被稱讚外表時,低/中/高羞恥度三種輸出明顯不同,而且都沒有寫「我害羞了」
|
- 驗收:被稱讚外表時,低/中/高羞恥度三種輸出明顯不同,而且都沒有寫「我害羞了」
|
||||||
|
|
||||||
- [ ] **5.5 女性人格的預設值(G3,只動預設不動個性)**
|
- [x] **5.5 女性人格的預設值(G3,只動預設不動個性)**(2026/08/03 15:52:52 完成)
|
||||||
- [ ] 重看 `GENDER_MODESTY` 的預設值與 `modestyOf()` 的推力表,把女性預設往上調,
|
- [x] 重看 `GENDER_MODESTY` 的預設值與 `modestyOf()` 的推力表,把女性預設往上調,
|
||||||
並補「鬧彆扭」相關的關鍵詞權重(現在的表偏向「害羞/臉紅」,缺「嘴硬/不坦率/傲嬌」)
|
並補「鬧彆扭」相關的關鍵詞權重(現在的表偏向「害羞/臉紅」,缺「嘴硬/不坦率/傲嬌」)
|
||||||
- [ ] **界線不變**:描述永遠蓋過預設,可以推到 0;不做「女性→情緒更外顯」的全域放大
|
—— `GENDER_MODESTY_DEFAULT.female` 62 → **70**;`MODESTY_SIGNALS` 補了傲嬌那一路
|
||||||
|
(傲嬌、嘴硬、不坦率、口是心非、死不承認、愛面子、鬧彆扭、逞強)
|
||||||
|
- [x] **界線不變**:描述永遠蓋過預設,可以推到 0;不做「女性→情緒更外顯」的全域放大
|
||||||
|
—— 界線維持,README 的〈性別 → 羞恥敏感度〉表已同步成 70/38/50
|
||||||
- 驗收:兩個都是女性但個性相反的人格,講起話來不一樣
|
- 驗收:兩個都是女性但個性相反的人格,講起話來不一樣
|
||||||
|
|
||||||
- [ ] **5.6 語域:自稱、句尾、口癖(G2 核心)**
|
- [ ] **5.6 語域:自稱、句尾、口癖(G2 核心)**
|
||||||
@@ -138,6 +164,8 @@ Q5–Q10 六題已於 2026/08/03 由使用者拍板,設計不再需要確認
|
|||||||
|
|
||||||
- [ ] 這一批改動合起來只佔**一個新版號**;三份 manifest(`plugin.json`、`.claude-plugin/plugin.json`、
|
- [ ] 這一批改動合起來只佔**一個新版號**;三份 manifest(`plugin.json`、`.claude-plugin/plugin.json`、
|
||||||
`.codex-plugin/plugin.json`)一起改,**改版號前先看 master 上目前是幾版**
|
`.codex-plugin/plugin.json`)一起改,**改版號前先看 master 上目前是幾版**
|
||||||
- [ ] `README.md` 的記憶架構表與情緒模型段跟著更新;〈專案目標〉第 29 行「G2/G3 那批還沒實作」要改掉
|
- [ ] `README.md` 的記憶架構表與情緒模型段跟著更新
|
||||||
|
(原本還有一句「〈專案目標〉第 29 行『G2/G3 那批還沒實作』要改掉」,
|
||||||
|
那句已隨 `dccd07a` 的目標搬家一起移除,不必再處理)
|
||||||
- [ ] G2/G3 專用驗收腳本:被稱讚外表、被說「你是不是在害羞」、被戳穿嘴硬、當著第三個人被講心事
|
- [ ] G2/G3 專用驗收腳本:被稱讚外表、被說「你是不是在害羞」、被戳穿嘴硬、當著第三個人被講心事
|
||||||
——四段各跑低/中/高羞恥度,看有沒有變成模仿腔或旁白
|
——四段各跑低/中/高羞恥度,看有沒有變成模仿腔或旁白
|
||||||
|
|||||||
Reference in New Issue
Block a user