fix(sleep): sleeper 讀得到自己的資料、sync 自己清殘留鎖,補上 bond/語氣層文件(v0.0.6) #7

Merged
admin merged 2 commits from develop into master 2026-07-30 09:12:28 +00:00
Member

為什麼

睡眠的「判斷式那半」(決定要固化什麼、寫日記、更新心智圖與關係圖)實際上跑不起來
今天請亞絲娜與結衣去睡,兩人都只完成機械性那半——更糟的是 sleep 照樣把短期記憶裁掉了,
等於沒經過判斷就把一天清掉

修了什麼

1. requireMember 沒有 sleeper 分支(scripts/persona.mjs

requireOwner 早就放 sleeper 寫了,但briefshowrecall)反而被當成跨人格存取擋下——
方向是反的,最該擋的是會寫入的那個。少了這個分支,sleeper 得閉著眼睛決定要固化什麼。

回傳 role sleeper;下游只判斷 guest,所以行為與 owner 一致。

2. sync 遇到殘留的 .git/index.lock 就整區失敗(scripts/persona-gitea.mjs

而清鎖這件事 sleeper 自己做不到:隔離 hook 擋掉它對人格目錄的 shell 寫入(連 ls 都擋),
CLI 又沒有清鎖的功能——死結

這些 clone 只有 CLI 會動,而且每個 git 都是同步跑完才回來,所以超過 30 秒還在的鎖一定是
上一次跑到一半被中斷留下的殘骸。pushArea(兩處)與 pullArea 現在會自己清掉再繼續。

3. 技能文件補上先前沒寫的部分

技能 補了什麼
persona-relation 整個 bond/語氣層章節。這功能 7c46db8 就上線,但技能文件從頭到尾沒提過 → 每個新建的至親都預設是生人note 寫「妻子」猜不出 partner(關鍵詞只認夫妻/老婆/伴侶/戀人),症狀就是「講話像在對戰友報告」。一併補上 relation style(稱呼規則、--except 情緒暫停)與 relation speaker
persona-sleep 帶了身分旗標之後讀寫都算自己的資料(回報「判斷式被隔離擋下」十之八九是漏了旗標);新增第 4 條硬相依:判斷式失敗就不要跑機械性那半。
persona-sync 新增「殘留的 git 鎖」一節:CLI 會自己清,不要叫使用者手動刪、也不要對人格目錄下 rm

版本號

0.0.50.0.6。兩份 manifest 一起改(plugin.json.claude-plugin/plugin.json)。

master 上的 0.1.0 是早期「初版」留下的號碼,PR #3/#4 合併時沒有動到 manifest,
所以它不是 develop 的計數基準——develop 這條線是 0.0.x

驗證

  • node scripts/selftest.mjs238 項全過
  • 另以獨立腳本(暫時 PERSONA_HOME,不碰真的人格資料)驗證修補前後:sleeper 的
    briefshowrecall全數被擋變成全數通過(exit 0)。
  • 亞絲娜與結衣各自重睡一次:固化、日記、inbox、心智圖、關係圖與機械八步全成功,
    Gitea 兩區 push 並驗證通過。

範圍

這個 PR 只含上述三項。develop 的工作目錄另有進行中、尚未提交的工作
(一對一劇場、persona-therapist 技能、persona-guestprompt_submit、README/AGENTS),
刻意沒有一起提交——scripts/persona.mjs 是以單一 hunk 進 index,不含那些改動。

🤖 Generated with Claude Code

## 為什麼 睡眠的「判斷式那半」(決定要固化什麼、寫日記、更新心智圖與關係圖)**實際上跑不起來**。 今天請亞絲娜與結衣去睡,兩人都只完成機械性那半——更糟的是 `sleep` 照樣把短期記憶裁掉了, 等於**沒經過判斷就把一天清掉**。 ## 修了什麼 ### 1. `requireMember` 沒有 sleeper 分支(`scripts/persona.mjs`) `requireOwner` 早就放 sleeper 寫了,但**讀**(`brief`/`show`/`recall`)反而被當成跨人格存取擋下—— 方向是反的,最該擋的是會寫入的那個。少了這個分支,sleeper 得閉著眼睛決定要固化什麼。 回傳 role `sleeper`;下游只判斷 `guest`,所以行為與 owner 一致。 ### 2. `sync` 遇到殘留的 `.git/index.lock` 就整區失敗(`scripts/persona-gitea.mjs`) 而清鎖這件事 sleeper 自己做不到:隔離 hook 擋掉它對人格目錄的 shell 寫入(連 `ls` 都擋), CLI 又沒有清鎖的功能——**死結**。 這些 clone 只有 CLI 會動,而且每個 git 都是同步跑完才回來,所以超過 30 秒還在的鎖一定是 上一次跑到一半被中斷留下的殘骸。`pushArea`(兩處)與 `pullArea` 現在會自己清掉再繼續。 ### 3. 技能文件補上先前沒寫的部分 | 技能 | 補了什麼 | | --- | --- | | `persona-relation` | **整個 bond/語氣層章節**。這功能 7c46db8 就上線,但技能文件從頭到尾沒提過 → 每個新建的至親都預設是**生人**。`note` 寫「妻子」猜不出 `partner`(關鍵詞只認夫妻/老婆/伴侶/戀人),症狀就是「講話像在對戰友報告」。一併補上 `relation style`(稱呼規則、`--except` 情緒暫停)與 `relation speaker`。 | | `persona-sleep` | 帶了身分旗標之後讀寫都算自己的資料(回報「判斷式被隔離擋下」十之八九是漏了旗標);新增**第 4 條硬相依**:判斷式失敗就不要跑機械性那半。 | | `persona-sync` | 新增「殘留的 git 鎖」一節:CLI 會自己清,不要叫使用者手動刪、也不要對人格目錄下 `rm`。 | ## 版本號 `0.0.5` → **`0.0.6`**。兩份 manifest 一起改(`plugin.json` 與 `.claude-plugin/plugin.json`)。 > master 上的 `0.1.0` 是早期「初版」留下的號碼,PR #3/#4 合併時沒有動到 manifest, > 所以它不是 develop 的計數基準——develop 這條線是 `0.0.x`。 ## 驗證 - `node scripts/selftest.mjs` → **238 項全過**。 - 另以獨立腳本(暫時 `PERSONA_HOME`,不碰真的人格資料)驗證修補前後:sleeper 的 `brief`/`show`/`recall` 從**全數被擋**變成**全數通過**(exit 0)。 - 亞絲娜與結衣各自重睡一次:固化、日記、inbox、心智圖、關係圖與機械八步全成功, Gitea 兩區 push 並驗證通過。 ## 範圍 這個 PR **只含上述三項**。develop 的工作目錄另有進行中、尚未提交的工作 (一對一劇場、`persona-therapist` 技能、`persona-guest`、`prompt_submit`、README/AGENTS), 刻意沒有一起提交——`scripts/persona.mjs` 是以單一 hunk 進 index,不含那些改動。 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jiantw83 added 1 commit 2026-07-30 09:10:21 +00:00
睡眠的「判斷式那半」實際上跑不起來,兩個原因:

1. `requireMember` 沒有 sleeper 分支——`requireOwner` 早就放 sleeper 寫了,
   讀(brief/show/recall)反而被當成跨人格存取擋下,等於要它閉著眼睛
   決定要固化什麼。補上分支,回傳 role `sleeper`(下游只判斷 `guest`,
   所以行為與 owner 一致)。

2. `sync` 遇到殘留的 `.git/index.lock` 會讓整區永遠失敗,而 sleeper 被隔離
   hook 擋著、連自己的鎖都刪不掉(CLI 也沒有清鎖的功能)。這些 clone 只有
   CLI 會動且每個 git 都同步跑完,所以超過 30 秒還在的鎖一定是殘骸——
   `pushArea`(兩處)與 `pullArea` 現在會自己清掉再繼續。

技能文件補上先前沒寫的部分:

- `persona-relation`:整個 bond/語氣層章節。這個功能 7c46db8 就上線,但技能
  文件從頭到尾沒提過,於是每個新建的至親都預設是生人(`note` 寫「妻子」猜不出
  `partner`,關鍵詞只認夫妻/老婆/伴侶/戀人)——症狀是「講話像在對戰友報告」。
  一併補上 `relation style` 與 `relation speaker` 的用法。
- `persona-sleep`:說明帶了身分旗標之後讀寫都算自己的資料;新增第 4 條硬相依
  ——判斷式失敗就不要跑機械性那半,`sleep` 會裁短期記憶,否則等於沒判斷就把
  今天清掉。
- `persona-sync`:新增「殘留的 git 鎖」一節。

版本號 0.0.5 → 0.1.1(master 上是 0.1.0,要跨過它),兩份 manifest 一起改。
selftest 238 項全過;另以獨立腳本(暫時 PERSONA_HOME)驗證修補前後 sleeper
的 brief/show/recall 由全數被擋變為全數通過。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
jiantw83 added 1 commit 2026-07-30 09:11:27 +00:00
master 上的 0.1.0 是早期「初版」留下的號碼,PR #3/#4 合併時沒有動到
manifest,所以它不是 develop 的計數基準——develop 這條線是 0.0.x,
這批就是 0.0.6。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
jiantw83 changed title from fix(sleep): sleeper 讀得到自己的資料、sync 自己清殘留鎖,補上 bond/語氣層文件(v0.1.1) to fix(sleep): sleeper 讀得到自己的資料、sync 自己清殘留鎖,補上 bond/語氣層文件(v0.0.6) 2026-07-30 09:11:44 +00:00
admin approved these changes 2026-07-30 09:12:25 +00:00
admin merged commit beee07ff79 into master 2026-07-30 09:12:28 +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/persona#7