feat(soul): 新增 soul 指令,SOUL.md 分區塊寫入(AniPersonaStudio 委託) #18

Merged
admin merged 1 commits from feat/soul-section-write into develop 2026-08-11 03:20:06 +00:00
Member

背景

AniPersonaStudio(同一個人維護的 Web 層)的欄位變更確認佇列需要一個程式化的方式
把使用者確認過的 SOUL.md 變更真的寫回核心——目前 SOUL.md 只能透過編輯器直接改,
create 之後沒有任何寫入指令,確認過的變更只能停在「已確認但核心不支援寫入」。

這批做了什麼

新增 persona.mjs soul --session <id> --section <core_truths|boundaries|vibe|continuity> --value <text> [--mode append|replace] [--by <確認人>]:

  • 四個區塊各自用一組 <!-- aps:區塊:begin/end --> HTML 註解標記框住可寫範圍,
    標記外的內容(樣板原本寫好的條目、使用者手動編輯過的段落)永遠不動——
    這不是讓 AI 自由改寫個性的後門,只是多一個「透過確認佇列寫入」的窄通道,
    跟直接用編輯器改檔案的權限模型一樣,一定要有 session/owner 權限才能寫
  • append(預設)接在後面,完全相同的內容不會重複疊加;replace 整段換掉
  • 標記不存在時(舊人格、模板套用之前建立的)自動在對應的 ## 標題 後面補一組空的,
    不需要重建人格
  • 權限模型跟既有的 relation/mindmap 一致:requireSession + requireOwner
  • --by 有帶會寫一筆 journal 留審計紀錄(不寫進 SOUL.md 本身,不因為審計紀錄越改越亂)
  • 成功後照既有慣例背景推 Wiki 區(SOUL.md 本來就在 wiki 區)

改動清單

檔案 內容
scripts/persona-lib.mjs 新增 SOUL_SECTIONS/readSoulSection/updateSoulSection
scripts/persona.mjs 新增 commands.soul,usage banner 補上說明
skills/persona-create/templates/SOUL.md 四個區塊補上標記,檔頭註解說明用途
scripts/selftest.mjs +9 案例:append/replace/去重/未知區塊擋下/權限/journal/舊人格自動補標記

測試

node scripts/selftest.mjs:全部 781 項通過(含新增的 9 項)。

已知的下一步(不在這批)

  • AniPersonaStudio 那邊的 review/fieldChanges.mjs 要接上這個指令(field change 確認時
    呼叫 soul 寫回核心),以及把 review/mutability.mjs 的 soul.* coreWrite 改成
    supported——這兩件事等這個 PR 合併、submodule 指標 bump 過去之後再做。
## 背景 AniPersonaStudio(同一個人維護的 Web 層)的欄位變更確認佇列需要一個程式化的方式 把使用者確認過的 SOUL.md 變更真的寫回核心——目前 SOUL.md 只能透過編輯器直接改, `create` 之後沒有任何寫入指令,確認過的變更只能停在「已確認但核心不支援寫入」。 ## 這批做了什麼 新增 `persona.mjs soul --session <id> --section <core_truths|boundaries|vibe|continuity> --value <text> [--mode append|replace] [--by <確認人>]`: - 四個區塊各自用一組 `<!-- aps:區塊:begin/end -->` HTML 註解標記框住可寫範圍, 標記外的內容(樣板原本寫好的條目、使用者手動編輯過的段落)永遠不動—— 這不是讓 AI 自由改寫個性的後門,只是多一個「透過確認佇列寫入」的窄通道, 跟直接用編輯器改檔案的權限模型一樣,一定要有 session/owner 權限才能寫 - `append`(預設)接在後面,完全相同的內容不會重複疊加;`replace` 整段換掉 - 標記不存在時(舊人格、模板套用之前建立的)自動在對應的 `## 標題` 後面補一組空的, 不需要重建人格 - 權限模型跟既有的 `relation`/`mindmap` 一致:`requireSession` + `requireOwner` - `--by` 有帶會寫一筆 journal 留審計紀錄(不寫進 SOUL.md 本身,不因為審計紀錄越改越亂) - 成功後照既有慣例背景推 Wiki 區(SOUL.md 本來就在 wiki 區) ## 改動清單 | 檔案 | 內容 | |---|---| | `scripts/persona-lib.mjs` | 新增 `SOUL_SECTIONS`/`readSoulSection`/`updateSoulSection` | | `scripts/persona.mjs` | 新增 `commands.soul`,usage banner 補上說明 | | `skills/persona-create/templates/SOUL.md` | 四個區塊補上標記,檔頭註解說明用途 | | `scripts/selftest.mjs` | +9 案例:append/replace/去重/未知區塊擋下/權限/journal/舊人格自動補標記 | ## 測試 `node scripts/selftest.mjs`:全部 781 項通過(含新增的 9 項)。 ## 已知的下一步(不在這批) - AniPersonaStudio 那邊的 `review/fieldChanges.mjs` 要接上這個指令(field change 確認時 呼叫 `soul` 寫回核心),以及把 `review/mutability.mjs` 的 `soul.*` `coreWrite` 改成 `supported`——這兩件事等這個 PR 合併、submodule 指標 bump 過去之後再做。
jiantw83 added 1 commit 2026-08-11 03:13:57 +00:00
SOUL.md 目前只有使用者能透過編輯器直接改,AniPersonaStudio 的確認佇列
機制需要一個程式化的寫入路徑才能把使用者確認過的變更真的寫回核心。

新增 persona.mjs soul --session <id> --section <core_truths|boundaries|
vibe|continuity> --value <text> [--mode append|replace] [--by <確認人>]:

- 四個區塊各自用一組 <!-- aps:區塊:begin/end --> HTML 註解標記框住可寫範圍,
  標記外的內容(樣板原本寫好的條目、使用者手動編輯過的段落)永遠不動
- append(預設)接在後面,完全相同的內容不重複疊加;replace 整段換掉
- 標記不存在時(舊人格)自動在對應的 ## 標題後面補一組空的,不需要重建人格
- 權限模型跟 relation/mindmap 一致:requireSession + requireOwner
- --by 有帶會寫一筆 journal 留審計紀錄;成功後照既有慣例背景推 Wiki 區

SOUL.md 樣板補上四組標記;persona-lib.mjs 新增 SOUL_SECTIONS/
readSoulSection/updateSoulSection;selftest.mjs +9 案例(append/replace/
去重/權限/journal/舊人格自動補標記)。全部 781 項 selftest 通過。
admin approved these changes 2026-08-11 03:20:02 +00:00
admin merged commit 3df585a8d8 into develop 2026-08-11 03:20:06 +00:00
admin deleted branch feat/soul-section-write 2026-08-11 03:20:06 +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#18