dsh-prime-memory 0.22.2 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/CHANGELOG.en.md +401 -0
  2. package/CHANGELOG.ja.md +401 -0
  3. package/CHANGELOG.ko.md +401 -0
  4. package/CHANGELOG.md +100 -0
  5. package/dist/client.js +1180 -845
  6. package/dist/config.d.ts +128 -1341
  7. package/dist/config.js +80 -4
  8. package/dist/conflict-service.d.ts +4 -0
  9. package/dist/conflict-service.js +6 -1
  10. package/dist/contract.d.ts +196 -0
  11. package/dist/domain-gate.d.ts +11 -0
  12. package/dist/domain-gate.js +15 -0
  13. package/dist/hooks/obsolete-notice.d.ts +26 -0
  14. package/dist/hooks/obsolete-notice.js +64 -0
  15. package/dist/hooks/recall.d.ts +39 -0
  16. package/dist/hooks/recall.js +110 -30
  17. package/dist/index.d.ts +1 -1127
  18. package/dist/index.js +30 -2
  19. package/dist/memory-types.d.ts +69 -0
  20. package/dist/memory-types.js +165 -0
  21. package/dist/memport/format.d.ts +6 -1
  22. package/dist/memport/format.js +42 -2
  23. package/dist/pipeline/l1.d.ts +44 -2
  24. package/dist/pipeline/l1.js +163 -9
  25. package/dist/pipeline/md-sync.d.ts +65 -0
  26. package/dist/pipeline/md-sync.js +456 -0
  27. package/dist/pipeline/ruminate.d.ts +43 -1
  28. package/dist/pipeline/ruminate.js +100 -0
  29. package/dist/pipeline/runner.d.ts +10 -0
  30. package/dist/pipeline/runner.js +7 -1
  31. package/dist/pipeline/workspace-relink.d.ts +60 -0
  32. package/dist/pipeline/workspace-relink.js +73 -0
  33. package/dist/projection/recall.d.ts +51 -13
  34. package/dist/projection/recall.js +47 -12
  35. package/dist/prompts/examples.d.ts +73 -0
  36. package/dist/prompts/examples.js +178 -0
  37. package/dist/prompts/l1-dedup.d.ts +9 -3
  38. package/dist/prompts/l1-dedup.js +34 -13
  39. package/dist/prompts/l1-extraction.d.ts +5 -3
  40. package/dist/prompts/l1-extraction.js +49 -4
  41. package/dist/settings.d.ts +8 -0
  42. package/dist/settings.js +12 -1
  43. package/dist/stats.d.ts +12 -0
  44. package/dist/stats.js +327 -15
  45. package/dist/store/embedding-source.d.ts +8 -0
  46. package/dist/store/embedding-source.js +39 -2
  47. package/dist/store/file-versions.d.ts +2 -0
  48. package/dist/store/file-versions.js +2 -0
  49. package/dist/store/graph-store.d.ts +14 -0
  50. package/dist/store/graph-store.js +35 -0
  51. package/dist/store/l1-snapshot.d.ts +26 -1
  52. package/dist/store/l1-snapshot.js +53 -8
  53. package/dist/store/l1.d.ts +75 -3
  54. package/dist/store/l1.js +124 -3
  55. package/dist/store/memory-md-archive.d.ts +84 -0
  56. package/dist/store/memory-md-archive.js +155 -0
  57. package/dist/store/memory-md-disable.d.ts +23 -0
  58. package/dist/store/memory-md-disable.js +106 -0
  59. package/dist/store/memory-md-export.d.ts +50 -0
  60. package/dist/store/memory-md-export.js +200 -0
  61. package/dist/store/memory-md-ledger.d.ts +94 -0
  62. package/dist/store/memory-md-ledger.js +243 -0
  63. package/dist/store/memory-md-orphan.d.ts +27 -0
  64. package/dist/store/memory-md-orphan.js +153 -0
  65. package/dist/store/memory-md-parse.d.ts +35 -0
  66. package/dist/store/memory-md-parse.js +85 -0
  67. package/dist/store/memory-md-skeleton.d.ts +18 -0
  68. package/dist/store/memory-md-skeleton.js +61 -0
  69. package/dist/store/memory-md-types.d.ts +174 -0
  70. package/dist/store/memory-md-types.js +10 -0
  71. package/dist/store/memory-md.d.ts +108 -0
  72. package/dist/store/memory-md.js +219 -0
  73. package/dist/store/obsolete-notices.d.ts +39 -0
  74. package/dist/store/obsolete-notices.js +153 -0
  75. package/dist/store/recall-feedback.d.ts +75 -0
  76. package/dist/store/recall-feedback.js +213 -0
  77. package/dist/store/recall-usage.d.ts +11 -0
  78. package/dist/store/recall-usage.js +29 -0
  79. package/dist/store/session-recalled.d.ts +38 -3
  80. package/dist/store/session-recalled.js +156 -9
  81. package/dist/store/sqlite.d.ts +66 -0
  82. package/dist/store/sqlite.js +233 -15
  83. package/dist/store/supersede.d.ts +1 -1
  84. package/dist/store/supersede.js +1 -1
  85. package/dist/tools/index.d.ts +4 -0
  86. package/dist/tools/index.js +23 -6
  87. package/dist/types.d.ts +24 -7
  88. package/dist/types.js +10 -2
  89. package/dist/util/maturity.d.ts +20 -3
  90. package/dist/util/maturity.js +18 -1
  91. package/dist/util/md-name.d.ts +129 -0
  92. package/dist/util/md-name.js +366 -0
  93. package/dist/util/md-normalize.d.ts +23 -0
  94. package/dist/util/md-normalize.js +131 -0
  95. package/dist/workspace-route.d.ts +22 -0
  96. package/dist/workspace-route.js +66 -0
  97. package/dsh.plugin.json +1 -1
  98. package/package.json +6 -5
package/CHANGELOG.ja.md CHANGED
@@ -9,6 +9,407 @@
9
9
 
10
10
  本ファイルは **0.12.0** リリースノートと現在の**未リリース**変更の日本語版です。全履歴は [CHANGELOG.md](./CHANGELOG.md)(中文)を参照してください。
11
11
 
12
+ ## [0.24.0] — 未リリース(ローカルライン `0.24.0-local.0…3`、2026-10-13)
13
+
14
+ ### 追加
15
+
16
+ - **タイプ語彙の単一情報源(`src/memory-types.ts`)**:ホストの記憶分類 29 類の原名 + プラグイン旧 7 類 + `unclassified` のフォールバック、合計 37 類。投射ディレクトリのホワイトリスト、`memory_add` の書き込みホワイトリスト、パネルのラベル、抽出と重複排除のプロンプト内の列挙文字列、memport の TS/Python 両実装のタイプコード——**すべてここから派生**。それまで「型の全集」は 4 箇所に手書き転写され、それぞれ別に変化していた:`memory_add` は外部分類を **黙って `episodic` に書き換え**、一方 memport の文言は「そのまま透過する」と約束していた——同じ件に対して二つの言い分。
17
+ - **名称蒸留(`cfg.naming`)**:抽出のその場で `title` を生成し、`content` とは**分離して定義**(title は「この項目は何を語るのか」に答える名詞句、content は完全な叙述本文)。重複排除の merge も併せて `merged_title` を生成。保存時 `title` はあくまで**名前の候補**で、`validateTitle` の形状ゲートを必ず通過する。不合格なら引き続きネーミング側に委ねる——名前の一意性の情報源が、由来が一つ増えたことで判定基準を二通りに分けることはない。
18
+ - **few-shot 標準フォーマットの例文集(`src/prompts/examples.ts`)**:タイプ別の正例 + 誤例、総長には予算上限あり(例文は毎ラウンドの蒸留で支払う固定コスト)。正例自体がゲートを通過し骨格が揃っていることが条件で、ユースケースは判定基準を手書き転写せず `auditFewShot()` を直接使う。
19
+ - **骨格判定の実行可能化(`SKELETON_ELEMENTS` + `scoreSkeleton`)**:「前後の因果がなければ、書き切れないものは実用に耐えないとみなさない」を、プロンプト内の願望から、計測できデフォルト値の設定に使える判定基準へ。限界の申告:キーワード ヒューリスティックであり、同一入力の二群の相対比較にのみ使えて、絶対的な品質点ではない。
20
+ - **ディレクトリ骨格 + 各タイプの `_index.md`(`memory-md-skeleton.ts`)**:各タイプディレクトリに索引ファイルを 1 つ(類名 + ライブラリ内の件数)。空ディレクトリは git と圧縮ファイルに捨てられ、「このディレクトリがない」と「この類は 0 件」は人の目では同じ見た目になる。冪等:内容が変わらなければ書き込みゼロで mtime も更新しない。投射面が閉じている間は動作ゼロ。
21
+
22
+ ### 変更
23
+
24
+ - **三つのデフォルト値を A/B 実測で切り替え**(`narrativeTemplates.enabled` / `naming.enabled` / `naming.fewShot`)。根拠は**方向が逆の**二つの実測:実会話の蒸留経路では例文なしで骨格完全 **0.000**(0/23)、例文ありで **0.703**(26/37)。一方、既存項目の改名というネーミング課題では例文の追加が逆に **−0.113**(回答漏れ 18/160)。結論:**例文は課題をまたいで使えない**——抽出プロンプトには入れ、ネーミングスクリプトには入れない。
25
+ - **md 投射をデフォルト ON**(`memExport.enabled`):本計画の大前提は「ファイルが内容の権威 + DB が索引」で、デフォルト OFF はデフォルト未使用と同じ。`mdSync.enabled` は**引き続きデフォルト OFF**——DB に書くためリスクが非対称。
26
+ - **workspace 帰属の設定面を改名 `workspaceHints` → `workspaceSource`**:互換エイリアスなしの強制改名(このキーは一度もリリースに伴って外部へ配信されておらず、エイリアス追加は第二の情報源を養うのと同じ)。デフォルト ON。ルーティングの `path` は **workspace ルート** を保存(旧値は `E:\test\rewrite-agently\.agents` と書かれており、`targetFor` がさらに `.agents/memory` を結合 → `.agents\.agents\memory\` の孤児ツリー。「ルートが存在しないときのみ単一ルートへ退避する」ガードレールはこの形を防げない)。実機で既存 **724/1166** 件に帰属を補填、`hashRecords` は 1 文字も変わらない。
27
+
28
+ ### 修正
29
+
30
+ - **台帳ローダが絶対キーを `relPath` に上書きしていた**:N10 以降、台帳キーは絶対パス。読み込み時の「不一致ならキーを正として書き直す」一文が毎回必ず発火し、実測で **1167/1241** 件を汚染。下流の症状は、孤児アーカイブがコロンを含む不正ディレクトリを組み立て、75 件の移動がすべて ENOENT。`root` + キーからの導出に変更(`deriveRelPath` を追加)、アーカイブ側は保存済みの `relPath` を信用しない。
31
+ - **`--revert` が hooks のフォールバックを持たなかった**:`findArchivedOld` は `deps.hooks.exists` を直接触るが、`runCli` は revert 呼び出し時に hooks を渡さない(apply 側には `deps.hooks ?? defaultHooks` があり、revert 側で漏れた)。サンドボックス初回のロールバックで 74 件すべてエラー。問題は危害の非対称性:apply の事故は `--revert` で戻るが、**ロールバック自体が壊れていればバックアップが唯一の退路**。
32
+ - **ルート間の重複ファイルが「両側が変わったなら触らない」を回避していた**:`roots = レコードの着地ルート ∪ 台帳が記録したルート` なので、同一レコードが 2 つのルートに各 1 ファイル持ち得る。判定は旧ルートの分を使い、書き込みは `targetFor` が算出した新ルートの分に進む——旧ルート内で人が書いた編集が権威ある分を上書きし、レポートは完全に規則通りに見える。現在はその時点の着地ルートのみ認め、他は新フィールド `staleRootFiles` に数えてパネルに表示。
33
+ - **名前の衝突が記憶ごと検索ライブラリから追い出していた**:`{ ...旧レコード, id: 新 id }` の書き方は「他の行に属する名前」を帯びて DB に書く → 部分一意索引に衝突 → バッチ書き込みは 1 件ずつへ退避してもなお失敗 → その項目の統合成果が**黙って消える**(旧レコードはすでに退場済みで、この置換は何も残さない)。ネーミング判定を「name が空」から「**その名前は自分に属さない**」へ変更。
34
+ - **ベクトルの「補完待ち N 件」が決してゼロにならず、「索引再構築」はやることが無いと言う**:表示面の `missing = total − embedded` の分母に退場行が含まれるが、退場行は設計上正当にベクトルを持たない。補完を駆動する 2 本の SQL はどちらも退場行を除外するため、同一画面に「補完待ち 114」と「やることが無い」が並ぶ。分母の基準をアクティブ行に統一。
35
+ - **投射ガードレールが「動作」でなく「走査」を数えていた**:`maxRecords` は「変更なし」判定の件もクォータに計上し、2 回目のクリックは同じ先頭 N 件を再び掃う——パネルの「もう一度クリックで継続」は嘘(実機症状:`已写 9 · 未变 291 · 剩余 866` が常に不変)。ディスクに触れた件のみ数えるよう変更し、走査総量は `timeBudgetMs` が支える。
36
+ - **台帳のディスク書き込み O(n²)**:`set()` は 1 件ごとに台帳全体を JSON にシリアライズしてアトミックに再書き込み。1200 件を同一ディスクで実測 **9442ms → 1954ms**(ダートフラグ + バッチウィンドウ + `flush()` 強制)。
37
+ - **`NAME_MAX`(40) と `NAME_CLIP_MAX`(28) を二つの数に分離**:文字カウントは ASCII と漢字を同価に扱い、`dsh-agent-teams` / `Python-3.13` は一語で 15 枠を食い、意味上は一、二語の正当な名前が `too-long` と判定された。一律 40 なら `deriveName` が叙述文を文の末尾に写す(実測済み)。ついでに `validateTitle` 内のハードコード 28 も修正(同一閾値に二つの情報源)。
38
+ - **名前ゲートの三箇所の誤除外**:前置き列挙表と名前拒否表を**分離**(裸の主語「用户/团队」が「用户npm账号用户名」のような名詞句を誤って除外しなくなった、実機 10 件)。`has-id-fragment` を「非 ASCII 文字の後の 4 桁以上」に狭めた(`ADR-0006`、`Han-1413141` は通過、実機 4 件)。
39
+
40
+ ### 既知の境界
41
+
42
+ - 反芻の締めの増分投射は `id→updatedAt` のベースライン diff に頼るが、relabel / 退場は `patchMetadata` を通り `updated_time` を触らない ⇒ **metadata のみの書き換えはそのラウンド再投射しない**。
43
+ - P2 の逆方向同期は依然 2 項目未達:起動時の自動フック(エンドポイント + ボタンのみに変更済み)、`pending` のあの一部が `conflicts` の裁定待ち面に入っていない。
44
+ - **翻訳版は 0.20.0 以降フォロー未**(今回は 0.22.0 以降のエントリを補っただけで、0.20/0.21 の空きは残ったまま。別途記録)。
45
+
46
+ ## [0.23.0] — 未リリース(ローカルライン `0.23.0-local.1…8`、2026-10-12…13)
47
+
48
+ ### 追加
49
+
50
+ - **md 権威投射面(P0/P1/U/N10/N11)**:`l1_records.name` 列(ファイル身分キー + 部分一意索引)。`renderRecord` + 双フィンガープリント台帳(`dbDigest`/`fileDigest`)+ `mem-export` / `mem-reconcile` エンドポイント。パネルの「外部アーカイブ」節。投射ルートを **workspace 優先**へ変更(`<ws>/.agents/memory/<类型>/<名>.memory.md`)。古さ判定は `.memory.md.disable` と連動。
51
+ - **P2 逆方向同期(ファイル → 索引)**:台帳の双 digest で**三者象限**を——ファイルのみ変化なら DB へ書き戻し正規レンダリングで書き直す(書き戻しループを解消)、DB のみ変化なら `exportRecords` を再利用してファイルを書き直す、**両側が変わったなら両側とも触らず** `pending` を掲げるのみ。`.disable` は退場経路でファイルは削除しない。出所不明の新ファイルは数えるだけで DB に入れない(インポートは書き込みカーネルを通過する必要がある)。エンドポイント `dsh-memory/mem-sync`。
52
+ - **P3 アーカイブ + 物理削除**:`exportThenPurge` のゲートを DB 全体のハッシュから**バッチレベルの投影**へ変更(並行蒸留でこのバッチと無関係なレコードを少しでも変えると、旧実装はクリーンアップを永久に削除不可にしていた)。削除後、人が読む `retired.md` を書き + このバッチの投射ファイル(`.disable` を含む)をスナップショットディレクトリへ移動。`cleanup-retired` のドライランは**削除待ちリストのプレビュー**を返す。図投影索引テーブルに `forgetRecords` を追加(これまで全リポジトリは追加のみで削除なし——スナップショットから復元したレコードは投影行が残るため「投影済み」とみなされ、**永久に再投影されない**。検索図は静かに 1 件欠けてもエラーを出さない)。
53
+ - **P4.1 デフォルト類 `unclassified` + P4.2 本文の書式正規化**(`normalizeContentMd`)。冪等は必須要件:冪でないと台帳の `fileDigest` が毎回変わり、書き戻しループをレンダラ自身が引き起こす。書式のみで意味は触らない(散文を bullet 化しない、H1 を挿入しない、本文にメタデータを詰めない)。
54
+ - **孤児投射ファイルのアーカイブ `dsh-memory/mem-orphans`**:「台帳が私たちの書き込みを記録し、現在どのレコードもこのパスを引き受けていない」ファイルのみ移動。台帳にない出所不明のファイルは**一切触らない**(人が投射ディレクトリに置き、同期戻りを待つ入力かもしれない)。削除せず移動のみで、相対の形と原文を保持。
55
+
56
+ ### 動作修正(召回表示面)
57
+
58
+ - 召回項目はもう一瞬で消えない:view に `body` / `retired` を持たせ、`session_recalled` 行の摘出をやめ、pill に「古くなったと判定」の取り消し線傍注。
59
+ - 起動時に既存の退場残骸を清掃(手元実測で 725 行がまだ `l1_fts` に汚れて残存)。退場の不変条件に 2 本のバイパス書き込み経路を追加(「失効フラグ後に検索面が復活」を修正)。
60
+ - 召回スコアリングのエンドツーエンド:`-1..5`(0..5 は関連度。`-1` は古さ宣言と退場)、スコアは成熟度指標に入る(`-1/1/2` は下げて沈め、`4/5` は上げて浮上させる)。
61
+ - workspace 内容ルーティングの初実装(dsh エコシステム → `rewrite-agently`、非 dsh → `agent-no-dsh`。**`workspace_id` のみ書き、`scope` を触らず、`updated_time` も触らない**、`l1_fts` 行がそれぞれ持つ帰属列も同期)。
62
+
63
+ ### 規律
64
+
65
+ - memport の巨大関数 2 本を 2 ラウンドで分割(Extract Function、動作保持、CLI ゴールデン標準は 1 バイト単位で回帰)。
66
+ - エンドポイント契約の**五箇所同時変更**規律は継続有効(`MEMORY_ENDPOINTS ≡ switch ≡ contract 双 map ≡ contract-keys 計数 ≡ config`)、計数チェーン 55→56→57→58→59。
67
+
68
+ ## [0.22.2] — 2026-10-12
69
+
70
+ ### 追加
71
+
72
+ - スキンの三状態(auto/light/dark)+ トークン上書きブロック。パネル 11 Tab を一行に圧縮。
73
+ - `memory_import` の `ext_key` 冪等(`l1_records.ext_key` + 部分一意索引 + `deduped` 受領)。
74
+ - **Memport Connect**:`.mem` の解析 / 事前絞り込み / スキャン + 出所レジストリ + Connect Tab(実装横断の sha256 ゴールデン標準整合)。
75
+ - **スキル結晶化**:skill-store(JSON sidecar)+ 候補検出 + スキル召回注入 + 看板スイッチ `skillsEnabled`。
76
+ - G4 図の因果エッジ(导致 / 因为 / 修复了 / 取代、`projectorVersion` を bump しない)。
77
+ - G3 成熟度の読み時派生(レコードカードのバッジ + 矛盾裁定ビューの傍注。自動裁定には参加しない)。
78
+ - G1 `usageScenario` のゲート付きエンドツーエンド(抽出 → `metadata.dsh_usage_scenario` に着地 → 召回の細目順位付け。off は 1 文字も変わらない)。
79
+ - G2 タイプ別叙述テンプレート(ゲート付きプロンプト変種。off は on の前綴)。
80
+ - wing / 認知 hall の二軸が混ざらない(直交アクセサ + 値域の非交わり回帰ロック)。
81
+ - **G-live 今セッションの活召回セット**:永続 sidecar + `session-recalled` 読み取り専用エンドポイント + pill の読み取り専用リスト。
82
+ - `memoryRecall` のセッション認識投影(brief サイドバー「今セッション召回」区分のデータ源、`init(header).id`)。
83
+ - `cfg.slots.migrateLegacy`(デフォルト off):「常駐に固定され、内容は活 L1 がすでに担っている」rule スロットをゆるやかに退場。
84
+
85
+ ### 修正
86
+
87
+ - 反芻の書き戻しで保留カウントが戻る / 増える(ruminate は空メッセージを渡すよう変更、`enqueueSessionSlices` と同義)。
88
+ - 反芻 finalize と `doLightRefresh` の L3 強制実走 + カウントゼロ化 + `state.save()` 書き込み(「保留 L2/L3 は反芻後も消えず、再起動で再び戻る」を修正)。
89
+
90
+ ### 規律
91
+
92
+ - すべての新機能はデフォルト off。off 状態の成果物と注入は 1 文字も変わらない。プラグイン横断の表示契約(`memorySlots` 投影)は結線を維持。
93
+
94
+ ## [0.22.1] — 2026-10-09
95
+
96
+ ### 修正
97
+
98
+ - **フローティングレイヤーの下地を不透明に**:入力バーの記憶フローティング(`.dsh-mem-popover`)とドロップダウン / フィルターパネル(`.dsh-mem-pop`)は当初ホストの `--dsw-specific-menu` に追従していたが、ホストはそれを半透明ガラスの値に解決するため、パネルが背景を透かした。現在、**不透明な `bg-primary` 下地**の上にエイリアス層を重ねる(underlay 手法)——ホストの alpha がどうであれパネルは透けない。
99
+
100
+ ## [0.22.0] — 2026-10-09
101
+
102
+ ### 変更
103
+
104
+ - **宣言面の 15rc 適合**:9 本の dsh peers が公開済みホスト rc すべてをカバー(`0.1.0-rc.2..0.2.0-rc.2`、1 本ずつ `npm view` で立証し各ラインの集合も一致)、すべて optional。`engines >= 0.1.0-rc.2` は粗い柵(精密なゲートは peers)、`package.json` と `dsh.plugin.json` を同期。
105
+ - **双マニフェストのバージョンを正しい値へ戻す**:`dsh.plugin.json` はそれまで `0.20.0-beta.6-dsh0.2.0.1` にドリフト、本バッチで `package.json` と 1 文字単位で整合(V1 ゲート)。
106
+ - **`dsh.client.inject` を `ui-primitives` のみに縮小**:`dsh-client-connection` は 0.1.2 からパッケージとして存在し、宣言すると client エントリー全体が 0.1.0/0.1.1 でハングする(`rpc.ts` はとっくに当該コネクションを遅延 `ctx.get`)。
107
+
108
+ ### 規律
109
+
110
+ - すべての build 型リポジトリに `prepack: npm run build` を注入——`npm pack` は prepack のみ発火し `prepublishOnly` は発火しない。これは stale-build 冤罪事件の三層防衛線のひとつ。
111
+
112
+ ## [0.21.0] — 2026-10-04
113
+
114
+ ### 追加
115
+
116
+ - **ツールグループ封印(記憶ライブラリパネル → 記憶 → ツール封印)**:5 系統のスイッチ(room 管理 / graph グラフ / ruminate 反芻 / conflict 衝突 / mutate 書き込み・削除、13 個のツールをカバー)。オフ=当該グループのツールは**登録しない**、モデルのツール一覧から直接消える(実行時に拒否するのではない)。切替は volatile のホット更新で即時反映、再起動不要。コア読み取り(memory_search / memory_read_scene / memory_receipts / conversation_search)とスロット三件は制御対象外。背景:グループ化ツールの多く(Room 治理、反芻など)は日常的な使用頻度が極めて低く、一覧に常駐しても注意を無駄に奪い誤呼び出しを誘うだけ。
117
+ - **memory_slot_write の mem_ 参照の実在性検証**:refs 内の `mem_*` 形の L1 record_id は書き込み前に `getByIds` の実在性検証を通る。幻覚や綴り間違いの id は即座に拒否し memory_search を経由するよう促す——「search が起動した記憶」がスロット参照に入ったなら必ず実レコードであることが保証される(brief 側の名前略述解釈によって確かな入力が得られる)。ファイルパス/URL 系の refs は検証しない。
118
+
119
+ ## [0.20.4] — 2026-10-04(ローカルビルド、未リリース)
120
+
121
+ ### 修正
122
+
123
+ - **投射 refViews の解釈を全面的にフォールトトレラント化**:`resolveRefViews` 内の L1 `getByIds` 呼び出しに try/catch を追加——registry の drive に例外保護がなく、解釈層で何らかの例外が投げられると(sqlite ビジー / バックエンドの降格 / 記録状態の異常)、セッションイベント駆動の全経路、さらにはホストプロセスまで巻き崩す。失敗時は当該フレームが refViews を持たないよう降格(フロントエンドは元の refs にフォールバック)。
124
+
125
+ ## [0.20.3] — 2026-10-03
126
+
127
+ ### 修正
128
+
129
+ - **`memory_search` のレンダリングテキストに id を付与**:v0.20.2 は record_id を出力 JSON と schema に追加したが、モデルが見るのは render 成果物であって生の JSON ではない——レンダリング行に id が無く、モデルにとって返さないのと同じ(実機再測で発見)。各結果の末尾を `— id: mem_xxx` とし、そのままスロット refs に書き込める。
130
+
131
+ ## [0.20.2] — 2026-10-03
132
+
133
+ ### 修正
134
+
135
+ - **投射 `memorySlots` のダーティ判定を任意のイベントへ緩和**:これまで `tool/result`(settled かつ非 error)のときのみ store rev でダーティ判定していた——書き込み後に「たまたま次のツール結果が来る」のを待たないと更新せず、セッション横断の閲覧は閲覧側セッション自身のツール呼び出しを待つ必要があった。実機では書き込み後サイドバーが長いこと空フレームに留まる点が露呈した。現在は任意のコミット済みイベントで O(1) の rev 比較を行い、rev が変われば再構築してプッシュ。isError ガードは除去(rev は実際の変更後のみ増え、イベントはトリガーであってデータ源ではない)。
136
+ - **常駐注入を `<system-reminder>` タグフレームへ変更**(dsh-agent-instructions の AGENTS.md 注入 house style に合わせる):user ロールの担い手は変えないが、タグ枠 + 権威宣言(応答不要 / 復述するな / システムプロンプトとユーザーの直接命令を上書きしない)で提示——弱いモデルがスロット内容をユーザーの発話としてそのまま復述し通常の返答を妨げる問題を修正。スロット本文内の閉じタグをエスケープ(`</system-reminder>`)し、スロット内容がフレーム境界を偽造するのを防ぐ。
137
+
138
+ ### 追加
139
+
140
+ - **`memory_search` の結果に `id`(L1 record_id)を載せる**:「検索で id が取れない → スロット refs を書けない / memory_receipts に供給できない」のデッドロックを解除。schema の説明に id の二つの行き先を注記。
141
+ - **wire view に `refs` + `refViews` を載せる**:`mem_*` 系の参照は投射フレーム構築時に L1 `getByIds` で `[type] 名称简述`(content の先頭行、80 字で切り詰め)へ解釈され、brief-sidebar(≥0.5.0-beta.2)が直接描画。パス/URL 系の参照はリテラルのまま。欠落 / 退場済みレコードはエントリを作らない。解釈はフレーム構築時に行われる——参照集合はスロットを書き込む時点で凍結し、L1 レコードの事後編集は古いフレームへ流れ込まない。自前実装の schema は付加フィールドに対し「存在するときだけ検証」するため、古い checkpoint 行はそのまま全通過(stateVersion は動かさない)。
142
+
143
+ ## [0.20.1] — 2026-10-03(正式版へ昇格。beta 渠道は beta.1 以降の全機能を確定版として収載)
144
+
145
+ Hall·Room 分類管理の全チェーン(二層レジストリ / merge / rename / retire / update / 編入 / 記録付き退場 / 未登録の退場は条目補記)、Hall と Room の独立管理ページ(検索絞り込み、デフォルト折り畳み、ポインタのドラッグで分類、退場フィルタ)、老化ウェイト表示 + 召回使用統計(topN に入って初めて used と数える)。正式化直前の最後の beta は 0.20.0-beta.26 で、内容は 0.20.1 と一致。`dsh-0.2.0-beta` 渠道は後続 beta を引き続き受け付ける。
146
+
147
+ ## [0.20.0-beta.26] — 2026-10-03
148
+
149
+ ### 追加(Hall/Room 増加後の使い勝手)
150
+
151
+ - **Hall/Room の名称検索絞り込み**:Hall ページに検索ボックスを新設(slug、表示名、別名、大文字小文字区別なし)——hall 自身のヒット時は全ての子 room を表示、そうでなければヒットした子 room のみ残し、グループ全体がヒットしなければ非表示。検索中は一致グループを自動展開(折り畳み状態が結果を隠さない)。自生・未登録区も同じく絞り込む。Room ページにも同型の検索ボックス、退場フィルタ chips と重ねて有効。
152
+ - **Hall グループの折り畳み、デフォルトは全折り畳み**:hall 頭部は「合計 N 件 · M 個 room」のみ表示し、頭部か ▸/▾ ボタンで子 room を展開/折り畳み。「全て展開 / 全て折り畳み」の一括ボタン。展開状態は localStorage に記憶(`dsh.memory.halls.open`)。クリック選択による分類(hall 頭部クリックで分類完了)の優先順位は不変。
153
+
154
+ ## [0.20.0-beta.25] — 2026-10-02
155
+
156
+ > 自生 room の退場後に状態が見えなくなる修正 + Hall 子 room の表示規則(ユーザー裁定)。
157
+
158
+ ### 修正 / 変更
159
+
160
+ - **自生・未登録の room は退場で即「退役 / 復元」に**:これまで退場はレコードをソフト削除するだけで、語彙に条目がなく変化する余地がなく、ボタンは常に「編入 / 退場」だった。現在は retire withRecords が未登録 slug に対し**自動で grown の登録条目を補い retired に設定**——パネル行が即座に「退役」状態へ切り替わり、「復元」(active:true)で語彙に復帰。永続化し、再起動でも消えない。
161
+ - **Hall ページの子 room は active のみ表示**:retired / 退場した room は hall グループ下に出さない(Room ページで「退役」フィルタ付きで閲覧)。グループ集計カウントもこれに伴い active 子類のみを含める。
162
+
163
+ ## [0.20.0-beta.24] — 2026-10-02
164
+
165
+ ### 修正
166
+
167
+ - **Hall ページの展開/退場を Room ページと揃える**:Hall ページの room 行展開もアクティブ記録のみ取得(`retired:false`)。退場確認後、当該 room が展開中なら展開区を自動更新。(beta.23 は Room ページのみ補い Hall ページの同期が漏れていた——ユーザー実測の「退場を押しても効果が見えない」のもう一つの箇所。)
168
+
169
+ ## [0.20.0-beta.23] — 2026-10-02
170
+
171
+ > **Room ページの退場フィルタを補完**(beta.22 のフィルタ chips はパッチスクリプトの途中失敗でディスクに載らず、バッジのみがパッケージに入った——今回項目ごとに Edit で確定しすべて緑で検証)。
172
+
173
+ ### 修正 / 追加
174
+
175
+ - **退場フィルタ chips**(Room ページ、登録フォーム上部):すべて / アクティブ(語彙未退役) / 退役済み。
176
+ - **退場効果の即時反映**:展開エントリは**アクティブ**記録のみ取得(`retired:false`)——退場後、展開区は即「記憶条目なし」。退場確認後に当該 room が展開中なら**自動更新**。[退場済み] バッジ + グレー化フォールバック(beta.22 に含まれ済み)。
177
+
178
+ ## [0.20.0-beta.22] — 2026-10-02
179
+
180
+ > 退場効果の可視性 + Room ページの退場フィルタ(実測フィードバック:退場確認後に画面が変わらず、絞りようも無かった)。
181
+
182
+ ### 修正 / 追加
183
+
184
+ - **退場効果の即時反映**:Room ページでエントリを展開すると**アクティブ**記録のみ取得(`retired:false`)——退場後、展開区は即「この Room には記憶条目がありません」と表示。退場確認後に当該 room が展開中ならその条目を**自動更新**。混在表示のフォールバックとして、退場済み条目は [退場済み] バッジ + グレー化。
185
+ - **退場フィルタ**:Room ページに「すべて / アクティブ / 退役済み」chips を追加(語彙の退役状態フィルタ)。
186
+
187
+ ## [0.20.0-beta.21] — 2026-10-02
188
+
189
+ > **記録付き退役**:room を退役するとき、オプションで**その配下の全アクティブ記憶も共に退場**させられる(従来は動詞表だけで、自生 room は特に処理手段が無かった)。
190
+
191
+ ### 追加
192
+
193
+ - **`retire withRecords`**(Room/Hall ページの「退場」ボタン、赤):語彙の退役 + 当該 room 配下の全**アクティブ**記録をバッチソフト削除(各バッチ ≤200、records-delete と同一プリミティブ。reason=manual)——記録は記憶ページの「退場済み」区画で一件ずつ復元可能。自生・未登録行にも「退場」を付ける(記録のみ退役、語彙条目は触らない)。レスポンスに `retiredRecords` 件数を伴う。
194
+ - 「孤児エクスポート」ボタンを**記憶クエリパネル**へ逆移転(孤児フィルタ行内にインライン)。
195
+
196
+ ### 修正
197
+
198
+ - recall-usage のテスト分離(永続化往復ケースの並行競合)。RoomTab の退役確認ダイアログでリテラル `\n` が表示される修正。
199
+
200
+ ## [0.20.0-beta.20] — 2026-10-02
201
+
202
+ > **Room 独立タブ**(Hall と分離):room の存在・名称・条目はそれぞれ管理面を持つ。記憶ページはもう Room タグを積み上げない。
203
+
204
+ ### 追加
205
+
206
+ - **「Room」タブ**(Hall の後):全 room をフラット列挙(登録条目 ∪ 自生・未登録)——**存在**(二層 slug 登録 / grown を編入 / 退役・復元)、**名称**(表示名 + 分類説明を編集。改名は二層 slug が可で記録は随伴)、**条目**(▸ で当該 room の記憶条目を閲覧、デフォルト折り畳み、初回は先頭 10 件取得)。孤児エクスポート / 高権限スイッチはページに随行。
207
+ - **登録後の再編集**:新 `room-admin update`(label/description の書き換え、未指定のフィールドは触らない)+ store の `RoomRegistryStore.update` + ツール `memory_room_admin action=update` + パネルの「編集」入口——これまで登録後の label/説明は空欄補充のみで書き換え不可だった。
208
+ - **room 行のコンテンツ展開**(Hall ページ room 行と同型):デフォルト折り畳み、▸ で展開し条目を表示。
209
+ - **記憶ページの Room ブロック分離**:slug chips / ページング / 展開ブロックを除去(Hall/Room ページと重複)、「無バインド · N」孤児フィルタと誘導文言のみ残す——room タグの閲覧/管理は Hall/Room ページに帰す。
210
+
211
+ ### 変更
212
+
213
+ - 合併/分類/改名のフォームとプレビューを sticky で追従スクロール(hall が多いとき確認ダイアログを探す上下スライドが不要に)。
214
+ - ポインタ自作のドラッグ(ego-browser と同型の pointer 方式、一部の webview で HTML5 DnD が発火しないことへのフォールバック)。
215
+
216
+ ## [0.20.0-beta.19] — 2026-10-02
217
+
218
+ > 分類インタラクションの再作(実測フィードバック:HTML5 ドラッグが一部の webview で発火しない。hall をクリック後もプレビューが元行に埋もれて「反応なし」に見える)。
219
+
220
+ ### 変更
221
+
222
+ - **ポインタ自作ドラッグ**(ego-browser と同型の純 pointer 方式):room / 自生 slug を長押し → 浮遊ゴースト chip が手に追従 → hall 頭部へホバーで破線ハイライト → 離して分類。HTML5 DnD に依存せず、あらゆる webview で有効。クリック選択による分類(「分類」/「割当」→ 選択態 → hall 頭部クリック)は保持。
223
+ - **グローバル操作バー**:合併/分類/改名のフォームと dryRun プレビューを**ページ先頭に常駐**(赤い確認ダイアログが行スクロールに連動せず、元 room 行に埋もれない)——hall クリック後は必ず目に入る。
224
+ - **room 行レイアウト**:ボタンを一行に固定し折り返さない(エクスポートがもはや孤行にならない)。名称/別名は左側情報区で自然改行(別名は語の途中でも改行可)。
225
+
226
+ ## [0.20.0-beta.18] — 2026-10-02
227
+
228
+ ### メンテナンス
229
+
230
+ - lint の帳消し:beta.17 の isTag→isRoomSlug 置換が stats.ts / rooms-registry.ts に残した二つの死 import(リリースゲートの見逃し——パイプ後 `$?` が取るのは tail の終了コード、D2 の穴の再発)。機能変更なし。
231
+
232
+ ## [0.20.0-beta.17] — 2026-10-02
233
+
234
+ > **再起動後に hall/room 関係が失われる修正**:`rooms-registry.json` のローダはなお `isTag` で slug を絞っていた——再起動時のディスク読み込みで全ての `major/minor` 二層条目が不正として**黙って破棄**されていた(単段 hall は通るので生き残る)。これは isTag/isRoomSlug 混用の三箇所目。同バッチで `normTags` の同型の地雷も除去。
235
+
236
+ ### 修正
237
+
238
+ - **ローダが二層条目を落としていた**(`store/rooms-registry.ts` init):絞込みを `isRoomSlug` へ変更。**ディスク上の rooms-registry.json データは無傷**(二層条目は常にファイル内にあり、起動時のみ捨てられていた)——アップグレード後リロードすると関係は自動復帰し、修復操作は不要。
239
+ - **normTags が slash タグを洗い流していた**(`metadata-validators.ts`):「あらゆる tags 書き戻し地点はここを通る」ゲートが isTag を使っており、分類が書き戻す `hall/minor` タグは次の蒸留/再ラベルで触れられたとき黙って剥がされる。二層 room slug は通す(三層は依然拒否)。`isRoomSlug` の事実源を当該ファイルへ近接移動(依存循環を回避)、rooms-registry の re-export は互換維持。
240
+ - **list-records の二層 tag 絞り込みが誤って拒否**(stats.ts tagSel と同型):`isRoomSlug` へ変更——Hall ページで二層 room の記録絞り込みをクリックすると従来 400 エラーになっていた。
241
+ - 赤テスト先行 ×3(二層の永続化往復 / normTags 通過 / 統合の二層 tag 絞り込み)、赤を検証後に修正で緑へ。
242
+
243
+ ## [0.20.0-beta.16] — 2026-10-02
244
+
245
+ > **自生・未登録 slug を即 hall へ分類**:下部「自生・未登録」区の各 chip を hall 頭部へドラッグ可能に——編入 + その子類への帰属を一手で完了。
246
+
247
+ ### 追加
248
+
249
+ - **grown chip のドラッグ/クリック分類**:未登録 slug(例 `git-commits`)を hall 頭部へドラッグ(または chip の「割当」ボタンで選択態に入り、目標 hall をクリック)→ dryRun プレビュー → 確認して実走。意味 = **その場で編入(from, source=grown)→ `hall/子类` へ rename**:記録 tags は随伴、旧名は目標の別名に入り、条目は active で ⭐ を付けない(編入身分)。自分の hall 配下へ戻る二層 slug(例 `dsh-plugin/xxx`)= その場で編入。
250
+ - 組合せ順序は統合テストで固定(markMered は未登録 from だと早退——まず from を編入してから rename)。execMerge は未登録 from に対し自動で編入を補う。
251
+
252
+ ## [0.20.0-beta.15] — 2026-10-02
253
+
254
+ > 分類の実測フィードバックへの二件連続修正:①改名後の条目が誤って「退役済み」を帯びる(標注語彙から落ちる)。②HTML5 ドラッグが一部の webview で効かない → **クリック選択による分類**の主経路を追加。
255
+
256
+ ### 修正
257
+
258
+ - **分類(改名)後の条目が誤って retired 表示**:renameRoom は merge のオーケストレーションを再利用しており、`markMerged` の「旧条目を退役へ転じる」が引っ張られていた——分類後の新 room が「退役済み」を表示し**標注器語彙から落ちていた**(listActive 絞り込み)。現在は rename の締めで先行状態を復元(active 条目は改名後も active)。真の merge(和集合セマンティクス)は影響なし。赤テスト先行(unit + HTTP 面の統合)。
259
+
260
+ ### 変更
261
+
262
+ - **クリック選択による分類を主経路に**:room 行の「分類」クリック → 選択態に入る(ボタンが「hall を選択…」に変わり、全 hall 頭部が破線ハイライト)→ 目標 hall 頭部クリック → dryRun プレビュー → 確認して実走。ドラッグは保持(対応環境では引き続き使える)が、もはや依存しない。
263
+
264
+ ## [0.20.0-beta.14] — 2026-10-02
265
+
266
+ > 記憶カードに**老化ウェイト**と**召回使用**表示を追加し、「老化ウェイト効果統計」のデータ蓄積を開始。口径(ユーザー裁定):**topN(コンテキストへ注入された)に入って初めて使用と数える**。topN に入らなかった参加試行 = 試行のみ計上。
267
+
268
+ ### 追加
269
+
270
+ - **カードフィールド**:「老化 N%」chip(読み取り経路の減衰係数 `max(0.5, 0.5^(Δ天/半衰期))`、召回順位付けと同式同源。≤60% は赤=老け)+「用 used/attempts」カウント(title に最近使用/試行時刻)。ツールバーに集約「召回使用 used/attempted(rate%)」を追加。
271
+ - **統計面**:`RecallUsageStore`(recall-usage.json sidecar、rooms-registry と同族の規律——破損時は読み取り専用降格のみで、召回読み取り経路を絶対にブロックしない)。毎ラウンドの召回を注入/全抑制/予算ゼロ化の三終態で記録(候補 attempts++、注入 used++、タイムスタンプは最新を採用)。メモリ即時 + デバウンス 5s でアトミック書き込み、5 万件で最新試行順に淘汰。未組込み=ゼロコストのバイパス。
272
+ - 契約:UiRecord に `agingWeight`/`usage`、ListRecordsResponse に `usageSummary`(任意フィールド、旧クライアントは断裂ゼロ)。契約キー数は不変。
273
+
274
+ ### 効果統計の口径(後続分析用)
275
+ - usageSummary: tracked(統計のある記憶数)/ attempted(Σ試行)/ used(Σ使用)/ rate(使用率%)
276
+ - 細粒度分析(タイプ/年齢帯別の使用分布、半減期チューニングの根拠)のデータは本版から蓄積、分析ビューは別途協議。
277
+
278
+ ## [0.20.0-beta.13] — 2026-10-02
279
+
280
+ > 分類ロジック補完:room を既存 hall 配下へ寄せる(従来は新 hall 追加、または別 room へ合併して身分を抹消するのみ)。パネルは**ドラッグ分類**に対応——room をドラッグして hall 頭部に置くだけ。
281
+
282
+ ### 追加
283
+
284
+ - **Hall ページのドラッグ分類**:room 行をドラッグ可(hiPriv オン時はグリップカーソル)、hall 頭部がドロップ先(破線ハイライト)。離す = リネームをプリフィル(major/minor)し直接 dryRun プレビュー、確認で実走——記録は随伴し、旧名は別名へ、グループビューは即当該 hall 配下へ掛かる。タッチ/ドラッグ非対応環境は room 行「分類」ボタンか改名フォーム内の hall クイック選択 chips でフォールバック。
285
+ - バックエンド修正:`renameSlug` の目標検証 `isTag` → `isRoomSlug`——従来二層目標(major/minor)は誤って拒否され「hall 配下へ分類」の道が実際には通っていなかった(かつ rename のオーケストレーションは先に記録を書き戻してからレジストリ改名で例外を投げ、半端な状態を残す)。C3 の除去/変更規律に従い:赤テスト先行(unit + HTTP 面統合各 1)、赤を検証後に修正で緑へ。
286
+
287
+ ### 修正
288
+
289
+ - 同上:`renameSlug` 二層目標の検証(beta.5 で導入した欠落)。
290
+
291
+ ## [0.20.0-beta.12] — 2026-10-02
292
+
293
+ > lint の帳消し + 除去規律を明文化(ENGINEERING-NOTES に C3 追加)。**機能変更なし**。
294
+
295
+ ### メンテナンス
296
+
297
+ - **eslint の帳消し(13 error → 0)**:longtask 除去の残渣(stats.ts の死 import ×2、RecordsTab の死 state)+ より古いバッチの滞納(recluster.ts の死 interface と let、rooms-registry.ts / ruminate.ts / room-review.ts / テスト二ファイルの死 import と let)。残る 4 つの warning はベースライン既存(primitives/tools の any)。
298
+ - **ENGINEERING-NOTES に C3「除去も TDD」を追加**:除去は先にテストで新期待を表現(赤)→ 実装除去(緑)。lint は削除型変更で必ず走らせるゲート(unused import = 除去漏れの自動探知器)。
299
+
300
+ ## [0.20.0-beta.11] — 2026-10-02
301
+
302
+ > Hall·Room **統合テスト**入庫(`tests/hall-room.integration.test.ts`:HTTP 面全チェーン × 実ストレージのユーザージャーニー、9 ケース)。統合初走りで単体テストのブラインドスポットを一つ捕捉し修正。
303
+
304
+ ### 修正
305
+
306
+ - **rooms-get の合併ビュー source が `pre-registered` 固定**(beta.4 で導入):レジストリ条目をカウント一覧へ併合する際 source を書き込んでおり、編入された(source=grown)条目はパネルのカウント chips 上で常に ⭐ 事前登録バッジを被る——身分の改竄。現在は条目の実 source を使用(⭐ は事前登録のみ。編入は grown を表示)。単体テストのブラインドスポットの原因:rooms-registry の単体テストは store 層のみで、エンドポイントの合併行が grown 条目の source をアサートしていなかった。
307
+
308
+ ### テスト
309
+
310
+ - `hall-room.integration.test.ts`:空表からの自生カウント → 二層登録/不正 slug 拒否 → 編入 → 三 kind エクスポート → merge dryRun 書き込みゼロ → 実走(バックアップ書き込み / 退場行の書き換え / metadata 保全 / シーン再計算 enqueue source='room-merge')→ rename 別名 → retire/復元 → 大類 200 上限 + 小類は枠を食わない → 破損時の読み取り専用降格レッドライン(rooms-get はブロックせず、ディスクへ書き戻さない)。
311
+
312
+ ## [0.20.0-beta.10] — 2026-10-02
313
+
314
+ > **longtask(長任務モード)の全量除去**:この機能群の帰属はもと context-compression 側にある(「圧縮起動を建議」はそちらの領域)。pm への実装は誤載——beta.8 で浮遊ボールを除去し、本版で残ったバックエンドを除去し切る。pm は純記憶領域へ回帰。将来「末尾を即時蒸留」等が必要なら pm 本位で再設計して再起案する。
315
+
316
+ ### 除去
317
+
318
+ - **エンドポイント `longtask-hint-get` / `longtask-compress-tail`**(契約キー 48 → 46)および `compressTailTurns` / デバウンス ruminate の閉ループ:コンテキスト計量(`ContextUsageStore`)、todo ドリフト検出(`TodoRefStore`)、建議判定も共に除去。`hooks/long-task.ts`、`store/context-usage.ts`、`store/todo-ref.ts` の三ファイルを削除(todo/write イベントの declare module 拡張を含む)。
319
+ - **`cfg.longTask.*` 設定ブロック**(デフォルト値 + 二箇所の Schema):旧設定ファイル内の longTask キーは schema が無視するため移行不要。
320
+ - **セッションレベルの `longTask` フラグと末尾圧縮ウォーターマーク `lastTailCompressedTurn`**(session-modes):旧 session-modes.json の残留キーは読込フィルタで自然に無視される。
321
+ - **`session-mode-set` の `mode` を必須に復帰**(当該の省略化は longtask の二者択一のために存在)。`longTask` のリクエスト/レスポンスフィールドは削除。
322
+ - 保持:beta.9 の roomRegistry RPC 結線修正(独立して成立)。Hall 管理ページと Room 分類管理面は不変。
323
+
324
+ ## [0.20.0-beta.9] — 2026-10-02
325
+
326
+ > パネル RPC の全経路で deps が漏れていた問題を修正:`roomRegistry` と `longTaskDeps` が rpcHandler の sources 組み立て時に失われ、パネル側の Room 管理 / 長任務エンドポイントが常に「未組込み」になっていた(ツール面は直接渡すため影響なし、ゆえに beta.4 以来ツールは動くがパネル登録はエラー続きだった)。
327
+
328
+ ### 修正
329
+
330
+ - **`registerMemoryRpc` の rpcHandler が `roomRegistry`/`longTask` を漏らしていた**(beta.4 で導入):HTTP ディスパッチは統一して `buildEndpointDeps` を通るが、sources は 7 項目のみ帯同——`rooms-get` は registry を返さず、`room-register`/`room-admin` は「Room レジストリ未組込み(初期化にはプラグイン再読込が必要)」を投げ、`longtask-hint-get`/`longtask-compress-tail` は常に disabled。現在は sources と共に配信。回帰テストが HTTP 面全経路を固定(register → rooms-get 合併 → room-admin、rpc.test.ts)。
331
+
332
+ ## [0.20.0-beta.8] — 2026-10-02
333
+
334
+ > 浮遊ボール UI を降ろす:懸浮建議パネルの帰属は context-compression 側にある(「圧縮起動を建議」はそちらの領域)。pm への実装は誤載——beta.1 以来同梱されていた FAB を本版で除去。
335
+
336
+ ### 除去
337
+
338
+ - **浮遊ボール + 建議カード(`client/src/longtask-fab.ts`、beta.1 以来同梱)**:まるごと除去し、クライアントは二座に戻る——`settings.section`(記憶パネル)+ `conversation.input.left`(段階 pill)。もはやアプリ全体の懸浮 UI は無い。長任務モード本体(コンテキスト計量 / todo 参考 / 末尾 turn 圧縮)は影響なし。`longtask-hint-get`/`longtask-compress-tail` エンドポイントはバックエンド面として保持し、長任務スイッチと手動圧縮入口は確定版時に記憶設定分節へ落とす。
339
+
340
+ ## [0.20.0-beta.7] — 2026-10-02
341
+
342
+ > Room 分類管理第三船(**管理パネル巻**):専用「Hall」タブで hall(大類)+ room(小類)を一緒に管理——Room の手動閲覧/管理は以後 agent ツールを借りない。
343
+
344
+ ### 追加
345
+
346
+ - **「Hall」管理タブ**(「シーン」の後):hall グルーピングツリー——`major/minor` はその prefix 大類に帰し、standalone slug は自が hall(hall であり配下唯一の room)。hall 頭行は集約カウント + ワンクリック「+小類」(`hall/` をプリフィル)。room 行は ⭐事前登録 / source / 状態 / 別名 / カウントを表示し、retired はグレー化。UI 用語 Hall/Room はグループビューで、Wing(`metadata.hall` 領域)および認知 hall とは無関係(ADR-0020 §7 曖昧さ解消)。
347
+ - **全操作の UI 入口(高権限 memoryMutate ゲート)**:二層 slug 登録(制御されたフォーム、placeholder `dsh-plugin` / `dsh-plugin/merge`)。自生 slug の**編入**(`source=grown`)。**改名/合併**は新 RPC 経由——dryRun プレビュー(影響件数+サンプル)→「確認実行」で実走、memory_room_admin ツールと同一オーケストレーション(実行前自動バックアップ + 完了後 scene 再計算 enqueue)。退役/復元はワンクリック(復元は二次確認なし、退役は確認)。room ごとの記録リスト CSV エクスポート。語彙/孤児エクスポートは本ページへ集約。合併/改名には「反芻がアイドル時に実行」ヒントを付す。
348
+ - **新エンドポイント `dsh-memory/room-admin`**(merge/rename/retire。memoryMutate ゲート、エンドポイント側 throw セマンティクス):契約キー 47 → 48。`rooms-export` に `kind='records'`(Room 別に記録リストをエクスポート、`tag` 必須)。`room-register` に任意の `source`(編入は `grown` を渡す)。
349
+ - 記憶 Tab の Room ブロックのスリム化:管理サブパネルを除去(孤児エクスポートは頭部行へ上方移動)、示唆は Hall ページを指す。
350
+
351
+ ### 修正
352
+
353
+ - `rooms-export` records 分岐の kind 型絞り込み(TS2322)と歴史的な文字化けエラー文言。CHANGELOG beta.1-beta.5 の重複見出し行の修正。
354
+
355
+ ## [0.20.0-beta.6] — 2026-10-01
356
+
357
+ ### 修正
358
+
359
+ - **標注器語彙をレジストリへ接続(beta.5 の漏項補完)**:beta.5 の merge/rename/retire は実装済みだったが、候補標注器(`annotateOrphanCandidates`)の語彙は依然として純自生集約だった——事前登録の Room は候補に全く入らない。現在は OrphanAnnotateIO が registry を帯同:合併語彙 = レジストリ条目を先頭に並べ(count=0、label/description 付き)+ 自生ディレクトリ、上限 120。ruminate と memory_room_admin annotate の両経路が引数を渡す。**事前登録 Room がこの瞬間から候補標注に実質的に影響する**。
360
+
361
+ ## [0.20.0-beta.5] — 2026-10-01
362
+
363
+ > Room 分類管理第二船(**破壊的面**)。dryRun デフォルト true——merge/rename は先に影響面をプレビューし、確認後に実走。実行前に `rooms-merge-backups/` へ自動バックアップ。
364
+
365
+ ### 追加
366
+
367
+ - **Room レジストリの二層制**:slug が `major` または `major/minor` の二層に対応(例 `dsh-plugin`、`dsh-plugin/merge`)。**大類上限 200**、小類の細分は大類枠を食わない(総量保険 2000)。isTag 語彙は緩和しない(slash はレジストリ層でのみ許可)。
368
+ - **merge/rename/retire(ツール `memory_room_admin`、高権限)**:merge はカーソルで一致レコード全件の tags を書き換え(書き込み前 read-merge-write、roomCandidates/roomReview/hall/anchors 等のキーは保全。退場済み行も含みカウント口径と一致)。rename = merge 1:1 + レジストリ改名(aliases は旧名を吸収)。retire は語彙退役のみ(存量は触らない)。merge/rename と反芻の並行は相互上書き——実行時間をずらす(ツールヒントと ADR-0020 にいずれも宣言済み)。
369
+ - **書き換え安全三点セット**:dryRun はデフォルト affected+プレビューのみで書き込みゼロ。実行前に一致レコードを `rooms-merge-backups/<ts>-<slug>.json` へ自動バックアップ。完了後自動で `invalidateRooms` + 影響された (family, scene) 別に scene 再計算を enqueue(`source='room-merge'`)。
370
+ - **パネル Room 管理サブパネル**(高権限オンのあと表示):登録フォーム(slug/名称/説明、新 RPC `room-register` 経由)、孤児リストのエクスポート。合併/退役の建議は agent ツール経由(dryRun プレビューの方が詳しい)。
371
+ - エンドポイント面 46 → 47(`room-register`)。
372
+
373
+ ## [0.20.0-beta.4] — 2026-10-01
374
+
375
+ > Room 分類管理第一船(**ゼロドリフト面**):レジストリが空 = beta.3 の挙動と一字一句一致。merge/rename/retire の破壊的面は beta.5 に伴う(dryRun デフォルト true は一版温存)。
376
+
377
+ ### 追加
378
+
379
+ - **Room レジストリ(`rooms-registry.json` sidecar)**:事前に企画済みの Room を登録(slug/label/description)。破損/空 → 純自生ディレクトリへ降格フォールバック、パネルと標注器を絶対にブロックしない。上限 200 で乱造を防ぐ。`rooms-get` はエンドポイント層で合併:登録条目は count=0 でも語彙に入り `source`/`label` を帯同、レスポンスに全量フィールド `registry` を追加(クライアントは任意で読み取り)。
380
+ - **エクスポートエンドポイント `dsh-memory/rooms-export`**(kind=rooms|orphans、CSV 直接出力):rooms = レジストリ ∪ 自生語彙をカウント付きで。orphans = Room バインドの無いアクティブ記録リスト(候補/復査状態列を含む)。
381
+ - **ツール `memory_room_admin`**(action=list|register):list はレジストリ + 自生の総覧。register は Room を事前登録(高権限ゲート、冪等な補完)——`memory_room_review` の逐件復査と合わせ、agent に「登録→事前マーク→一件ずつ確認」の完全な分類管理入口を与えた。
382
+ - クライアント:Room chip に「事前登録/自生」の source 標識。孤児 chip に復査待ちセマンティクス。
383
+
384
+ ## [0.20.0-beta.3] — 2026-10-01
385
+
386
+ ### 追加
387
+
388
+ - **記録パネル Room 分類の改善**:①展開/折り畳み(折り畳み = 頭部 + 高頻度上位 8 Room のプレビュー、開閉状態は永続化)。②展開時は全量ページング(各ページ 40、◀▶ で頁送付)、従来の「先頭 40 のみ表示」のハード切り捨てを置換。③**孤児記憶フィルタ**——首位の「無バインド · N」chip は Room バインドが皆無の記憶のみ表示(`list-records` に `untagged` 絞り込みチャネル追加、`rooms-get` に `orphanCount` 追加、Room カウントと同口径)。④絞り込み条件の即時表示 + ワンクリッククリア。検索経路も同型の孤児フィルタ。
389
+
390
+ ## [0.20.0-beta.2] — 2026-10-01
391
+
392
+ > dsh-0.2.0-beta 渠道 +1:反芻の完全 context 最適化(repo ソフトフェンス / プロジェクト別 scene 移行 / 閉ループ)。longtask(beta.1 参照)と同パッケージで、実機フィードバックをマージ集約。
393
+
394
+ ### 追加
395
+
396
+ - **repo ソフトフェンス(ADR-0015、`recall.scopeFence.*`、デフォルト off)**:repoKey=basename(正規化 cwd)を書き込み時に算定して L1 metadata に入れる(repo_key_name/repo_key_owner/applicability、DEFAULT はゼロ補填、FTS とスナップショットハッシュに入らない)。召回と memory_search の出口は `this-repo`/`cross-project` でソフトに重みを下げ並べ替える(×0.2 チューニング可、**下げるのみで排除しない**、chat 族と未帰属記録はフェンスしない、重複排除経路のセンチネルが誤進入を防ぐ)。ゼロドリフト:デフォルト off 時は召回順の sha1 突き合わせ一致。
397
+ - **scene のプロジェクト別移行(L2 repo 認識 + 再クラスタ)**:L2 統合 prompt が repoKeyName/applicability を見る——this-repo 記録はもはやプロジェクトをまたぐ scene に併合しない。`scene_recluster_jobs` ジョブキュー + ruminate アイドル時の消費者(スナップショット→要約投射削除→失敗時は全体ロールバック、新規 LLM 経路ゼロ)。repo 帰属補修後は repoKey で逆引きした影響 scene を自動 enqueue して再計算。
398
+ - **圧縮閉ループ**:末尾圧縮 enqueue 成功後、10 分デバウンスで一度反芻を起動(フラッシュ→L2→L3→relabel→再クラスタ消費)。「圧縮記録が蒸留樽に取り残される」断点を修正。
399
+
400
+ ## [0.20.0-beta.1] — 2026-10-01
401
+
402
+ > dsh-0.2.0 線初の beta 渠道リリース(`dsh-0.2.0-beta` tag):長任務モードの実機プレビュー。下記以外に、本版はそれ以前 `[Unreleased]` に parked だった全 main 変更(アクティベーションスロット / 出所アンカー / 証拠リーダ / 記憶退場閉ループ / 三軸衝突など)を同時に帯同——これらは 0.1.7 線でリリース済みだが main 線に対応バージョン番号が無かった。
403
+
404
+ ### 追加
405
+
406
+ - **長任務モード(`longTask.*`、デフォルト off)——「長走りセッション」の三点セット:コンテキスト計量、タスク参考、末尾圧縮、加えて非ブロッキングの懸浮建議パネル。**
407
+ - **コンテキスト使用量(`store/context-usage.ts`)**:`assistant/message` の公式 `usage` の入力側(input + cache 読み/書き)を監視し、**最新値**セマンティクスを取る(毎ターンの入力側は既に全履歴を含むため累計しない)。`compaction/summary` 後はゼロ化して再計。純メモリ per-session Map——再起動後の最初の assistant メッセージで再構築できるため、永続化は期限切れサンプルを蘇らせるだけ。
408
+ - **todo 参考(`store/todo-ref.ts` + `hooks/long-task.ts`)**:ホストの構造化 `todo/write` イベント(全量スナップショット。パッケージ型は 0.2.0-rc.1 でも未宣言のため、プラグインは declare module で自己拡張——§E の dsh-compaction の先例と同様)を監視。**長任務セッションのみ**:スナップショットを一つの pinned `todo` スロットへ流し込む(`SlotStore.refreshByTitle` 管理下の刷新——同一主体の反復書き込みは必ずその場で更新しないと、≤8 スロット上限内で閉じたスロットの軌跡が積み上がる)。slot-recall 経由で常駐注入——圧縮が旧コンテキストを追い出した後も、タスクの北極星は残る。隣接スナップショットに対して文字面の Jaccard ドリフト検出(同一スナップショットの反復書き込みはシグナルを希釈しない)。body ≤512 バイト、切り捨ては明示。
409
+ - **末尾 turn 圧縮(`longtask-compress-tail` エンドポイント + `compressTailTurns`)**:(圧縮ウォーターマーク, 最新捕捉済みターン] 内の直近 N ターンを即 `enqueue(force:true)` で記憶へ蒸留——蒸留閾値を待たず、末尾の会話を即検索可能な記憶へ落とす。ウォーターマーク(`SessionModeStore.lastTailCompressedTurn`)は前進のみ、反復押下は天然的に冪等。off 档は完全に隠れる。アンカーの無い旧データは初の圧縮(ウォーターマーク 0)時のみ取り込み——多く取って再蒸留するより少なく取る。
410
+ - **建議状態(`longtask-hint-get`)+ 浮遊ボール(`client/src/longtask-fab.ts`)**:ego-browser 式の vanilla overlay(FAB+パネル、ドラッグ/位置永続化/ビューポートクランプ)。**建議はブロッキングしない**——「コンテキスト占有が `contextThresholdPct` に到達」または「todo ドリフトが `driftThreshold` に到達」かつ長任務 off のときだけ呼吸するような発光を灯す。パネル内:長任務スイッチ(一時的、per-session、**mode を伴わない**——スイッチ切替はユーザー段階をリセットしない)、占有/ドリフトのプログレスバー、手動末尾圧縮ボタン(長任務オンのときのみ使用可)。ポーリングは忙碌 2s / アイドル 5s、RPC 失敗は無言。座席契約は不変(settings.section はちょうど一つ、body 単独インスタンスは席を占めない)。
411
+ - **`session-mode-set` の `mode` を省略可へ**:`mode` と `longTask` の二者択一で必須——長任務スイッチだけ切替するとき段階送信を強制されない(旧クライアントは常に mode を送信、挙動不変)。レスポンス `mode` は現在有効値へ戻す。
412
+
12
413
  ## [0.19.0] — 2026-09-29
13
414
 
14
415
  ### 変更