watashi-db 0.0.20 → 0.0.22

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 (56) hide show
  1. package/.claude-plugin/plugin.json +18 -18
  2. package/CHANGELOG.md +27 -0
  3. package/LICENSE +71 -71
  4. package/dist/config/schema.d.ts +9 -0
  5. package/dist/config/schema.d.ts.map +1 -1
  6. package/dist/config/schema.js +3 -0
  7. package/dist/config/schema.js.map +1 -1
  8. package/dist/config/validator.js +1 -1
  9. package/dist/config/validator.js.map +1 -1
  10. package/dist/database/schema.d.ts.map +1 -1
  11. package/dist/database/schema.js +155 -4
  12. package/dist/database/schema.js.map +1 -1
  13. package/dist/hook.d.ts.map +1 -1
  14. package/dist/hook.js +51 -0
  15. package/dist/hook.js.map +1 -1
  16. package/dist/lint.d.ts +18 -3
  17. package/dist/lint.d.ts.map +1 -1
  18. package/dist/lint.js +91 -34
  19. package/dist/lint.js.map +1 -1
  20. package/dist/server-core.d.ts.map +1 -1
  21. package/dist/server-core.js +25 -0
  22. package/dist/server-core.js.map +1 -1
  23. package/dist/store/merge.d.ts +4 -0
  24. package/dist/store/merge.d.ts.map +1 -1
  25. package/dist/store/merge.js +58 -30
  26. package/dist/store/merge.js.map +1 -1
  27. package/dist/store/schema-drift.d.ts +29 -0
  28. package/dist/store/schema-drift.d.ts.map +1 -0
  29. package/dist/store/schema-drift.js +87 -0
  30. package/dist/store/schema-drift.js.map +1 -0
  31. package/dist/store/sync-manager.d.ts.map +1 -1
  32. package/dist/store/sync-manager.js +48 -0
  33. package/dist/store/sync-manager.js.map +1 -1
  34. package/dist/tools/file-tools.d.ts.map +1 -1
  35. package/dist/tools/file-tools.js +4 -3
  36. package/dist/tools/file-tools.js.map +1 -1
  37. package/dist/tools/maintenance/delete.d.ts.map +1 -1
  38. package/dist/tools/maintenance/delete.js +8 -3
  39. package/dist/tools/maintenance/delete.js.map +1 -1
  40. package/dist/tools/maintenance/index.d.ts.map +1 -1
  41. package/dist/tools/maintenance/index.js +3 -1
  42. package/dist/tools/maintenance/index.js.map +1 -1
  43. package/dist/tools/maintenance/promote.d.ts.map +1 -1
  44. package/dist/tools/maintenance/promote.js +29 -3
  45. package/dist/tools/maintenance/promote.js.map +1 -1
  46. package/dist/tools/maintenance/schema-drift.d.ts +9 -0
  47. package/dist/tools/maintenance/schema-drift.d.ts.map +1 -0
  48. package/dist/tools/maintenance/schema-drift.js +22 -0
  49. package/dist/tools/maintenance/schema-drift.js.map +1 -0
  50. package/dist/types.d.ts +47 -47
  51. package/dist/types.d.ts.map +1 -1
  52. package/dist/types.js +1 -0
  53. package/dist/types.js.map +1 -1
  54. package/docs/config-guide.md +14 -2
  55. package/docs/ja/config-guide.md +14 -2
  56. package/package.json +1 -1
@@ -1,18 +1,18 @@
1
- {
2
- "name": "watashi-db",
3
- "version": "0.0.20",
4
- "description": "わたしDB - パーソナルコンテキストデータベース。ユーザーの好み・スキル・価値観・意思決定をセッション横断で記憶・活用します。",
5
- "author": { "name": "watashi-db" },
6
- "repository": "https://github.com/bareforge/watashi-db",
7
- "license": "BUSL-1.1",
8
- "keywords": ["memory", "personalization", "context", "mcp"],
9
- "mcpServers": {
10
- "watashi-db": {
11
- "command": "npx",
12
- "args": ["-y", "watashi-db@latest"]
13
- }
14
- },
15
- "skills": "./skills/",
16
- "agents": "./agents/",
17
- "hooks": "./hooks/hooks.json"
18
- }
1
+ {
2
+ "name": "watashi-db",
3
+ "version": "0.0.22",
4
+ "description": "わたしDB - パーソナルコンテキストデータベース。ユーザーの好み・スキル・価値観・意思決定をセッション横断で記憶・活用します。",
5
+ "author": { "name": "watashi-db" },
6
+ "repository": "https://github.com/bareforge/watashi-db",
7
+ "license": "BUSL-1.1",
8
+ "keywords": ["memory", "personalization", "context", "mcp"],
9
+ "mcpServers": {
10
+ "watashi-db": {
11
+ "command": "npx",
12
+ "args": ["-y", "watashi-db@latest"]
13
+ }
14
+ },
15
+ "skills": "./skills/",
16
+ "agents": "./agents/",
17
+ "hooks": "./hooks/hooks.json"
18
+ }
package/CHANGELOG.md CHANGED
@@ -7,6 +7,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.0.22] - 2026-06-10
11
+
12
+ ### Added
13
+ - **マージのレコード単位耐性(柱1)** — `mergeFromRemote` の各テーブルマージを 1 レコード単位の try-catch にし、制約違反等で 1 件が失敗しても残りのレコード・他テーブルの取り込みを続行する。`MergeStats` に `failed` / `errors`(代表最大 10 件)を追加。従来は 1 件の NOT NULL 違反でマージ全体が中断し、それが stderr にしか出ないため同期停止がサイレントに進行していた。
14
+ - **sync 健康の hook 通知(柱2)** — 同期マージの失敗を store_meta(`last_merge_error` / `last_merge_error_at`)に永続化し、UserPromptSubmit hook が毎プロンプト軽量に読んで「【⚠ watashi-db 同期の異常】」として注入する。通知対象: (1) 直近マージで 1 件も取り込めなかった理由(スキーマバージョン不一致スキップ含む — 従来 stderr のみのサイレント経路)、(2) レコード単位の取り込み失敗の要約、(3) 他デバイスからの取り込みが 7 日以上成功していない(`last_synced_at` ベース)、(4) schema drift 検出結果(`schema_drift_summary`)。
15
+ - **schema drift 検出(柱5)** — `watashi_maintain action='schema_drift'` を新設。正規スキーマ(最新 `initializeSchema` を適用した :memory: DB)と実 DB の PRAGMA を突き合わせ、同じ schema_version でも生じる差異(NOT NULL 制約の欠落・カラム欠落・型不一致)を検出する。サーバー起動時にも store ごとに 1 回検出して `schema_drift_summary` を store_meta に記録し、hook 通知に乗せる。
16
+
17
+ ### Fixed
18
+ - **claims の NOT NULL 制約 drift による sync サイレント破綻** — `ALTER TABLE ... RENAME COLUMN` が旧カラムの制約を引き継ぐため、マイグレーション経由の既存 DB と新規 DB(フルスキーマ定義)で `claims.l2_subject` 等の NOT NULL 有無がズレ、デバイス間マージが NOT NULL 違反でサイレントに失敗し続けていた(実環境で 83 日間同期停止)。V37 で全 DB を「NOT NULL なし」へ収束(緩和方向=既存データ無損失。SPO 必須はアプリ層 `store_claim` で担保)。フルスキーマ(applyV1 squash)側からも NOT NULL を除去し、新規 DB との drift 再発を防止。
19
+
20
+ ### Migration
21
+ - **V37 への自動マイグレーション** — claims テーブルを再作成して `l2_subject` / `l2_predicate` / `l2_object` の NOT NULL を除去(`l1_content` の逆向き drift も解消)。退避したトリガー/インデックスの復元は、旧バージョンの残骸(V32 が DROP できなかった旧 `status` カラムを参照する `idx_claims_status` 等)で失敗しうるため個別 try-catch でスキップ+stderr 警告(残骸はテーブル再作成とともに消滅するのが正しい)。unified_search 連携トリガー(V32 形式・全 11 テーブル)と claims_fts 同期トリガー(V28 形式)は正規形で再作成し、V31 形式のまま残存していた旧トリガーも収束させる。冪等チェックは「`claims_unified_insert` が旧 status を参照していたら再作成」を含む。ロールバック不要。
22
+ - **注意: 同期は全デバイスが V37 に揃うまで再開されない** — マージは同一 schema_version のみ対象のため、本バージョンへ全デバイスを更新すること(不一致は hook 通知で可視化される)。
23
+
24
+ ### Tests
25
+ - `tests/schema.test.ts` に V37 検証を追加(NOT NULL 除去・status 残骸掃除・トリガー正規形・claims_fts 動作・新規 DB の制約収束)。全 968 テスト緑。
26
+
27
+ ## [0.0.21] - 2026-06-08
28
+
29
+ ### Added
30
+ - **`lint.custom_terms`(ユーザー定義の秘匿文字列ブロック)** — config の `lint` に `custom_terms: string[]` を追加。書き込み内容に、列挙した固定文字列(取引先名・案件コード・アカウント名など、正規表現で表せない固有名詞)が含まれていたら、`secret_detection` の mode に関わらず常に書き込みを拒否する。既存 lint 機構の 3 つ目の検出器として `applyLint` に統合(`lintSecrets` / `lintMalformed` に並ぶ `lintCustomTerms`)。狙いはマルチデバイス同期で秘匿情報が他デバイスへ漏れるのを防ぐこと。config.json はローカル専用(同期されず GitHub にも載らない)なので秘匿語の置き場所として安全。検出語そのものはエラー応答に出さず(再漏洩防止)、該当フィールド名のみ返す。既存挙動は無変更・後方互換(未設定時は `[]`)で、全書き込みツールは `applyLint(params, getLintMode())` のまま無変更(custom_terms は内部で config から取得)。`docs/config-guide.md`(英日)の lint セクションを「3 つの検出器」の説明に拡充。(Issue #62)
31
+
32
+ ### Fixed
33
+ - **lint の走査がネストを辿らず入れ子 string[] を見逃していた** — `lintSecrets` / `lintMalformed` / `lintCustomTerms` を共通の再帰 traversal (`visitStrings`) に統一し、オブジェクト配下の string[](例: practice の `applies_when.cwd_patterns`)も走査するようにした。従来は top-level の string / string[] のみで、cwd_patterns のようなパス(社名・案件名を含みやすい)が素通りしていた。(Codex レビュー指摘)
34
+ - **`watashi_maintain` の promote / delete が lint を経由していなかった** — `promote`(既存レコードを別 store へ複製)はコピー前に行テキストを lint し、block なら昇格を中止(非同期 store → 同期 store の昇格で秘匿語が乗るのを防ぐ)。`delete` の `delete_reason`(audit log に保存・同期対象)も書き込み前に lint する。(Codex レビュー指摘)
35
+ - **lint 対象フィールドの取りこぼしを補完** — `store_user_file` の `original_filename`(ファイル名)と promote の audit に載る Store 名も lint 対象に追加。promote / delete も warn モードの警告を成功レスポンス(`lint_warnings`)に載せ、既存の書き込み系ツールと挙動を統一。(Codex 2巡目レビュー指摘)
36
+
10
37
  ## [0.0.20] - 2026-05-31
11
38
 
12
39
  ### Added
package/LICENSE CHANGED
@@ -1,71 +1,71 @@
1
- Business Source License 1.1
2
-
3
- Parameters
4
-
5
- Licensor: bareforge
6
- Licensed Work: watashi-db 0.0.20
7
- The Licensed Work is (c) 2026 bareforge
8
- Additional Use Grant: You may make use of the Licensed Work, provided that
9
- you may not use the Licensed Work for a Commercial
10
- Purpose.
11
- A "Commercial Purpose" means use in or for a product
12
- or service that is sold, offered for sale, licensed,
13
- or otherwise made available to third parties for a fee
14
- or other commercial consideration.
15
- Non-commercial use, personal use, educational use,
16
- and evaluation use are always permitted.
17
- Change Date: 2029-05-31
18
- Change License: Apache License, Version 2.0
19
-
20
- For information about alternative licensing arrangements for the Licensed Work,
21
- please contact: bareforge.license@outlook.jp
22
-
23
- -----------------------------------------------------------------------------
24
-
25
- Notice
26
-
27
- Business Source License 1.1
28
-
29
- License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved.
30
- "Business Source License" is a trademark of MariaDB Corporation Ab.
31
-
32
- Terms
33
-
34
- The Licensor hereby grants you the right to copy, modify, create derivative
35
- works, redistribute, and make non-production use of the Licensed Work. The
36
- Licensor may make an Additional Use Grant, above, permitting limited production
37
- use.
38
-
39
- Effective on the Change Date, or the fourth anniversary of the first publicly
40
- available distribution of a specific version of the Licensed Work under this
41
- License, whichever comes first, the Licensor hereby grants you rights under the
42
- terms of the Change License, and the rights granted in the paragraph above
43
- terminate.
44
-
45
- If your use of the Licensed Work does not comply with the requirements currently
46
- in effect as described in this License, you must purchase a commercial license
47
- from the Licensor, its affiliated entities, or authorized resellers, or you must
48
- refrain from using the Licensed Work.
49
-
50
- All copies of the original and modified Licensed Work, and derivative works of
51
- the Licensed Work, are subject to this License. This License applies separately
52
- for each version of the Licensed Work and the Change Date may vary for each
53
- version of the Licensed Work released by Licensor.
54
-
55
- You must conspicuously display this License on each original or modified copy of
56
- the Licensed Work. If you receive the Licensed Work in original or modified form
57
- from a third party, the terms and conditions set forth in this License apply to
58
- your use of that work.
59
-
60
- Any use of the Licensed Work in violation of this License will automatically
61
- terminate your rights under this License for the current and all other versions
62
- of the Licensed Work.
63
-
64
- This License does not grant you any right in any trademark or logo of Licensor
65
- or its affiliates (provided that you may use a trademark or logo of Licensor as
66
- expressly required by this License).
67
-
68
- TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON AN
69
- "AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS
70
- OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF MERCHANTABILITY,
71
- FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND TITLE.
1
+ Business Source License 1.1
2
+
3
+ Parameters
4
+
5
+ Licensor: bareforge
6
+ Licensed Work: watashi-db 0.0.22
7
+ The Licensed Work is (c) 2026 bareforge
8
+ Additional Use Grant: You may make use of the Licensed Work, provided that
9
+ you may not use the Licensed Work for a Commercial
10
+ Purpose.
11
+ A "Commercial Purpose" means use in or for a product
12
+ or service that is sold, offered for sale, licensed,
13
+ or otherwise made available to third parties for a fee
14
+ or other commercial consideration.
15
+ Non-commercial use, personal use, educational use,
16
+ and evaluation use are always permitted.
17
+ Change Date: 2029-06-10
18
+ Change License: Apache License, Version 2.0
19
+
20
+ For information about alternative licensing arrangements for the Licensed Work,
21
+ please contact: bareforge.license@outlook.jp
22
+
23
+ -----------------------------------------------------------------------------
24
+
25
+ Notice
26
+
27
+ Business Source License 1.1
28
+
29
+ License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved.
30
+ "Business Source License" is a trademark of MariaDB Corporation Ab.
31
+
32
+ Terms
33
+
34
+ The Licensor hereby grants you the right to copy, modify, create derivative
35
+ works, redistribute, and make non-production use of the Licensed Work. The
36
+ Licensor may make an Additional Use Grant, above, permitting limited production
37
+ use.
38
+
39
+ Effective on the Change Date, or the fourth anniversary of the first publicly
40
+ available distribution of a specific version of the Licensed Work under this
41
+ License, whichever comes first, the Licensor hereby grants you rights under the
42
+ terms of the Change License, and the rights granted in the paragraph above
43
+ terminate.
44
+
45
+ If your use of the Licensed Work does not comply with the requirements currently
46
+ in effect as described in this License, you must purchase a commercial license
47
+ from the Licensor, its affiliated entities, or authorized resellers, or you must
48
+ refrain from using the Licensed Work.
49
+
50
+ All copies of the original and modified Licensed Work, and derivative works of
51
+ the Licensed Work, are subject to this License. This License applies separately
52
+ for each version of the Licensed Work and the Change Date may vary for each
53
+ version of the Licensed Work released by Licensor.
54
+
55
+ You must conspicuously display this License on each original or modified copy of
56
+ the Licensed Work. If you receive the Licensed Work in original or modified form
57
+ from a third party, the terms and conditions set forth in this License apply to
58
+ your use of that work.
59
+
60
+ Any use of the Licensed Work in violation of this License will automatically
61
+ terminate your rights under this License for the current and all other versions
62
+ of the Licensed Work.
63
+
64
+ This License does not grant you any right in any trademark or logo of Licensor
65
+ or its affiliates (provided that you may use a trademark or logo of Licensor as
66
+ expressly required by this License).
67
+
68
+ TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON AN
69
+ "AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS
70
+ OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF MERCHANTABILITY,
71
+ FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND TITLE.
@@ -106,10 +106,13 @@ export declare const EmbeddingConfigSchema: z.ZodObject<{
106
106
  export type EmbeddingConfig = z.infer<typeof EmbeddingConfigSchema>;
107
107
  export declare const LintConfigSchema: z.ZodObject<{
108
108
  secret_detection: z.ZodDefault<z.ZodEnum<["block", "warn", "off"]>>;
109
+ custom_terms: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
109
110
  }, "strict", z.ZodTypeAny, {
110
111
  secret_detection: "block" | "warn" | "off";
112
+ custom_terms: string[];
111
113
  }, {
112
114
  secret_detection?: "block" | "warn" | "off" | undefined;
115
+ custom_terms?: string[] | undefined;
113
116
  }>;
114
117
  export type LintConfig = z.infer<typeof LintConfigSchema>;
115
118
  /** Store名・Context名に使用可能な文字パターン */
@@ -213,10 +216,13 @@ export declare const RawConfigSchema: z.ZodObject<{
213
216
  default_context: z.ZodString;
214
217
  lint: z.ZodOptional<z.ZodObject<{
215
218
  secret_detection: z.ZodDefault<z.ZodEnum<["block", "warn", "off"]>>;
219
+ custom_terms: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
216
220
  }, "strict", z.ZodTypeAny, {
217
221
  secret_detection: "block" | "warn" | "off";
222
+ custom_terms: string[];
218
223
  }, {
219
224
  secret_detection?: "block" | "warn" | "off" | undefined;
225
+ custom_terms?: string[] | undefined;
220
226
  }>>;
221
227
  embedding: z.ZodOptional<z.ZodObject<{
222
228
  provider: z.ZodDefault<z.ZodString>;
@@ -303,6 +309,7 @@ export declare const RawConfigSchema: z.ZodObject<{
303
309
  } | undefined;
304
310
  lint?: {
305
311
  secret_detection: "block" | "warn" | "off";
312
+ custom_terms: string[];
306
313
  } | undefined;
307
314
  client_policies?: Record<string, {
308
315
  read: {
@@ -343,6 +350,7 @@ export declare const RawConfigSchema: z.ZodObject<{
343
350
  } | undefined;
344
351
  lint?: {
345
352
  secret_detection?: "block" | "warn" | "off" | undefined;
353
+ custom_terms?: string[] | undefined;
346
354
  } | undefined;
347
355
  client_policies?: Record<string, {
348
356
  read?: {
@@ -380,6 +388,7 @@ export interface ResolvedContext {
380
388
  /** 解決済みLint設定 */
381
389
  export interface ResolvedLintConfig {
382
390
  secret_detection: "block" | "warn" | "off";
391
+ custom_terms: string[];
383
392
  }
384
393
  /** 解決済みクライアントポリシー */
385
394
  export interface ClientPolicyAccess {
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -65,6 +65,9 @@ export const EmbeddingConfigSchema = z.object({
65
65
  // --- Lint 設定 ---
66
66
  export const LintConfigSchema = z.object({
67
67
  secret_detection: z.enum(["block", "warn", "off"]).default("warn"),
68
+ // ユーザー定義の秘匿文字列(社名・案件名・アカウント名等)。書き込み内容にマッチしたら
69
+ // secret_detection の mode に関わらず常に block する。config はローカル専用(sync 対象外)。
70
+ custom_terms: z.array(z.string()).default([]),
68
71
  }).strict();
69
72
  // --- Config 全体 ---
70
73
  /** Store名・Context名に使用可能な文字パターン */
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -131,7 +131,7 @@ export function validateAndResolveConfig(raw) {
131
131
  }
132
132
  // 5. Lint設定の解決
133
133
  const resolvedLint = config.lint
134
- ? { secret_detection: config.lint.secret_detection }
134
+ ? { secret_detection: config.lint.secret_detection, custom_terms: config.lint.custom_terms }
135
135
  : undefined;
136
136
  // 6. クライアントポリシーのバリデーション & パススルー
137
137
  let resolvedClientPolicies;
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/config/validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/config/validator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAgD3C,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEjD;AAOD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAwF5D"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/database/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAiD3C,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEjD;AAOD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAwF5D"}
@@ -38,7 +38,8 @@ import fs from "node:fs";
38
38
  // 2026-03-24 修正: V31追加(File Vault — user_files テーブル + unified search統合)
39
39
  // 2026-04-02 修正: V34追加(user_topics.device_id 欠落修復)
40
40
  // 2026-05-29 修正: V36追加(practices テーブル新設 — 作業実践の判断則セット、Decision 01KSPW75M429QKY5FZVJ6P5N9H)
41
- const SCHEMA_VERSION = 36;
41
+ // 2026-06-10 修正: V37追加(claims SPO/l1_content の NOT NULL 制約を全DBで「なし」に収束 — sync サイレント破綻対策)
42
+ const SCHEMA_VERSION = 37;
42
43
  // devMode フラグ(startServer から schema 初期化経路に伝播)
43
44
  // develop.db では released: false のマイグレーションも適用する
44
45
  let _devMode = false;
@@ -251,6 +252,9 @@ function _applyMigrations(db, version) {
251
252
  if (version < 36) {
252
253
  applyV36(db);
253
254
  }
255
+ if (version < 37) {
256
+ applyV37(db);
257
+ }
254
258
  }
255
259
  /**
256
260
  * V1スキーマ: V30相当のフルスキーマ(squash済み)
@@ -492,12 +496,14 @@ function applyV1(db) {
492
496
  db.exec(`
493
497
  -- --------------------------------------------------------
494
498
  -- claims: 知識断片(L2 SPO三つ組)
499
+ -- V37: SPO に NOT NULL を付けない(旧DBとの制約収束。SPO 必須はアプリ層 store_claim で担保)。
500
+ -- ここに NOT NULL を戻すと新規DBが毎回 applyV37 の再作成パスを通り、マージ非互換も再発する。
495
501
  -- --------------------------------------------------------
496
502
  CREATE TABLE IF NOT EXISTS claims (
497
503
  id TEXT PRIMARY KEY,
498
- l2_subject TEXT NOT NULL,
499
- l2_predicate TEXT NOT NULL,
500
- l2_object TEXT NOT NULL,
504
+ l2_subject TEXT,
505
+ l2_predicate TEXT,
506
+ l2_object TEXT,
501
507
  category TEXT NOT NULL CHECK(category IN ('preference','identity','skill','value','workflow','knowledge','custom')),
502
508
  scope TEXT NOT NULL DEFAULT 'global',
503
509
  confidence REAL NOT NULL DEFAULT 0.8 CHECK(confidence >= 0.0 AND confidence <= 1.0),
@@ -7590,6 +7596,151 @@ function hasColumn(db, table, column) {
7590
7596
  *
7591
7597
  * Decision: 01KSPW75M429QKY5FZVJ6P5N9H
7592
7598
  */
7599
+ /**
7600
+ * V37: claims の l2_subject/l2_predicate/l2_object の NOT NULL 制約を外す(緩和方向の制約収束)。
7601
+ *
7602
+ * 背景: applyV27 の `ALTER TABLE claims RENAME COLUMN subject TO l2_subject` は旧カラムの制約を引き継ぐため、
7603
+ * 旧 subject が NOT NULL でないDBでは l2_subject も NOT NULL を持たず、新規DB(フルスキーマ定義は NOT NULL)と
7604
+ * 制約がズレた。この差が device 間マージで NOT NULL 違反を起こし sync をサイレント破綻させていた。
7605
+ * 全DBを「NOT NULL なし」へ収束させマージ非互換を解消する(制約を緩める方向=既存データは無損失)。
7606
+ * SPO 必須はアプリ層(store_claim)で担保する。l1_content の逆向き drift(旧DBで NOT NULL 残存)も同時に解消する。
7607
+ *
7608
+ * SQLite は列制約の変更にテーブル再作成が要る。claims に依存するトリガー/インデックスは
7609
+ * sqlite_master から定義を取得して動的復元する(定義のハードコード漏れと FTS 破損を防ぐ)。
7610
+ */
7611
+ function applyV37(db) {
7612
+ // 冪等性: l2_subject と l1_content がどちらも正規(NOT NULLなし)で、unified トリガーも
7613
+ // 正規形(V31 形式の new.status 参照が残っていない)なら再作成不要
7614
+ const cols = db.prepare("PRAGMA table_info(claims)").all();
7615
+ const subj = cols.find((c) => c.name === "l2_subject");
7616
+ const l1 = cols.find((c) => c.name === "l1_content");
7617
+ const trgSql = db.prepare("SELECT sql FROM sqlite_master WHERE type='trigger' AND name='claims_unified_insert'").get()?.sql ?? "";
7618
+ const staleTrigger = /new\.status\b/.test(trgSql);
7619
+ if (subj && subj.notnull === 0 && l1 && l1.notnull === 0 && !staleTrigger) {
7620
+ db.exec("INSERT INTO schema_version (version) VALUES (37)");
7621
+ return;
7622
+ }
7623
+ // claim_history/claim_evidence 等が claims(id) を参照するため、再作成中は FK を一時無効化する
7624
+ // (applyV7 等の既存テーブル再作成と同じパターン。PRAGMA は transaction 外で設定する必要がある)
7625
+ const fkState = db.pragma("foreign_keys");
7626
+ db.pragma("foreign_keys = OFF");
7627
+ const transaction = db.transaction(() => {
7628
+ // claims に付随するトリガー/インデックスの定義を退避(DROP TABLE で連鎖削除されるため)
7629
+ const aux = db.prepare("SELECT sql FROM sqlite_master WHERE tbl_name='claims' AND type IN ('trigger','index') AND sql IS NOT NULL").all();
7630
+ // NOT NULL を l2_subject/predicate/object から外した新テーブル(他カラムは applyV1 と同一)
7631
+ db.exec(`
7632
+ CREATE TABLE claims_new (
7633
+ id TEXT PRIMARY KEY,
7634
+ l2_subject TEXT,
7635
+ l2_predicate TEXT,
7636
+ l2_object TEXT,
7637
+ category TEXT NOT NULL CHECK(category IN ('preference','identity','skill','value','workflow','knowledge','custom')),
7638
+ scope TEXT NOT NULL DEFAULT 'global',
7639
+ confidence REAL NOT NULL DEFAULT 0.8 CHECK(confidence >= 0.0 AND confidence <= 1.0),
7640
+ l2_evidence TEXT,
7641
+ l2_falsifier TEXT,
7642
+ l1_content TEXT,
7643
+ search_summary TEXT,
7644
+ l1_embedding BLOB,
7645
+ hit_count INTEGER NOT NULL DEFAULT 0,
7646
+ last_hit_at TEXT,
7647
+ promoted_from_store TEXT,
7648
+ promoted_from_id TEXT,
7649
+ validity_status TEXT NOT NULL DEFAULT 'active' CHECK(validity_status IN ('active','invalidated','superseded')),
7650
+ is_archived INTEGER NOT NULL DEFAULT 0,
7651
+ promoted_to TEXT,
7652
+ user_input TEXT,
7653
+ source_tool TEXT,
7654
+ session_id TEXT,
7655
+ client_name TEXT,
7656
+ client_version TEXT,
7657
+ created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f','now')),
7658
+ updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f','now'))
7659
+ )
7660
+ `);
7661
+ // データ移行(明示カラム指定で順序非依存)
7662
+ const colNames = [
7663
+ "id", "l2_subject", "l2_predicate", "l2_object", "category", "scope", "confidence",
7664
+ "l2_evidence", "l2_falsifier", "l1_content", "search_summary", "l1_embedding",
7665
+ "hit_count", "last_hit_at", "promoted_from_store", "promoted_from_id", "validity_status",
7666
+ "is_archived", "promoted_to", "user_input", "source_tool", "session_id",
7667
+ "client_name", "client_version", "created_at", "updated_at",
7668
+ ].join(", ");
7669
+ db.exec(`INSERT INTO claims_new (${colNames}) SELECT ${colNames} FROM claims`);
7670
+ db.exec("DROP TABLE claims");
7671
+ db.exec("ALTER TABLE claims_new RENAME TO claims");
7672
+ // 退避したトリガー/インデックスを復元(claims_fts/unified_search への外部コンテンツトリガー含む)。
7673
+ // 旧マイグレーション経路の DB には claims_new に存在しないカラムを参照する残骸定義が残りうる
7674
+ // (例: V32 が DROP できなかった旧 status カラムへの idx_claims_status、V31 形式の unified トリガー)。
7675
+ // 残骸はテーブル再作成とともに消滅するのが正しいため、復元失敗はスキップして警告のみ出す。
7676
+ for (const { sql } of aux) {
7677
+ try {
7678
+ db.exec(sql);
7679
+ }
7680
+ catch (e) {
7681
+ process.stderr.write(`[watashi-db] V37: 残骸定義の復元をスキップ: ${sql.replace(/\s+/g, " ").slice(0, 100)} ` +
7682
+ `(${e instanceof Error ? e.message : String(e)})\n`);
7683
+ }
7684
+ }
7685
+ // unified_search トリガーを正規形で再作成する(V32 と同じパターン)。
7686
+ // 実DBには V32 のトリガー再作成が効いていない V31 形式(new.status 参照)の unified トリガーが
7687
+ // 残存しうる(claims 分は上の復元で消えるが、他テーブル分は放置すると検索インデックスの劣化が続く)。
7688
+ const allTriggerTables = ["claims", "episodes", "decisions", "theories", "insights", "models",
7689
+ "user_memos", "user_plans", "user_issues", "user_topics", "user_files"];
7690
+ for (const tbl of allTriggerTables) {
7691
+ db.exec(`DROP TRIGGER IF EXISTS ${tbl}_unified_insert`);
7692
+ db.exec(`DROP TRIGGER IF EXISTS ${tbl}_unified_update`);
7693
+ db.exec(`DROP TRIGGER IF EXISTS ${tbl}_unified_delete`);
7694
+ }
7695
+ db.exec(`DROP TRIGGER IF EXISTS unified_search_fts_insert`);
7696
+ db.exec(`DROP TRIGGER IF EXISTS unified_search_fts_update`);
7697
+ db.exec(`DROP TRIGGER IF EXISTS unified_search_fts_delete`);
7698
+ createUnifiedSearchTriggers(db);
7699
+ // claims_fts 同期トリガーも正規形(V28 形式)で再作成する(復元で旧定義が立った場合の収束)
7700
+ db.exec(`DROP TRIGGER IF EXISTS claims_fts_insert`);
7701
+ db.exec(`DROP TRIGGER IF EXISTS claims_fts_update`);
7702
+ db.exec(`DROP TRIGGER IF EXISTS claims_fts_delete`);
7703
+ db.exec(`
7704
+ CREATE TRIGGER claims_fts_insert AFTER INSERT ON claims BEGIN
7705
+ INSERT INTO claims_fts(rowid, l2_subject, l2_predicate, l2_object, l2_evidence, l1_content, search_summary)
7706
+ VALUES (new.rowid, new.l2_subject, new.l2_predicate, new.l2_object, new.l2_evidence, new.l1_content, new.search_summary);
7707
+ END
7708
+ `);
7709
+ db.exec(`
7710
+ CREATE TRIGGER claims_fts_update AFTER UPDATE ON claims BEGIN
7711
+ INSERT INTO claims_fts(claims_fts, rowid, l2_subject, l2_predicate, l2_object, l2_evidence, l1_content, search_summary)
7712
+ VALUES ('delete', old.rowid, old.l2_subject, old.l2_predicate, old.l2_object, old.l2_evidence, old.l1_content, old.search_summary);
7713
+ INSERT INTO claims_fts(rowid, l2_subject, l2_predicate, l2_object, l2_evidence, l1_content, search_summary)
7714
+ VALUES (new.rowid, new.l2_subject, new.l2_predicate, new.l2_object, new.l2_evidence, new.l1_content, new.search_summary);
7715
+ END
7716
+ `);
7717
+ db.exec(`
7718
+ CREATE TRIGGER claims_fts_delete AFTER DELETE ON claims BEGIN
7719
+ INSERT INTO claims_fts(claims_fts, rowid, l2_subject, l2_predicate, l2_object, l2_evidence, l1_content, search_summary)
7720
+ VALUES ('delete', old.rowid, old.l2_subject, old.l2_predicate, old.l2_object, old.l2_evidence, old.l1_content, old.search_summary);
7721
+ END
7722
+ `);
7723
+ // claims の正規インデックスを補完(残骸 idx_claims_status は復元スキップで消滅済み。IF NOT EXISTS で冪等)
7724
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_claims_category ON claims(category)`);
7725
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_claims_scope ON claims(scope)`);
7726
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_claims_validity_status ON claims(validity_status)`);
7727
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_claims_is_archived ON claims(is_archived)`);
7728
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_claims_l2_subject ON claims(l2_subject)`);
7729
+ db.exec(`CREATE INDEX IF NOT EXISTS idx_claims_updated ON claims(updated_at)`);
7730
+ db.exec(`CREATE UNIQUE INDEX IF NOT EXISTS idx_claims_promoted_from ON claims(promoted_from_store, promoted_from_id) WHERE promoted_from_store IS NOT NULL`);
7731
+ // claims_fts(外部コンテンツ FTS)を再構築
7732
+ try {
7733
+ db.exec("INSERT INTO claims_fts(claims_fts) VALUES('rebuild')");
7734
+ }
7735
+ catch { /* claims_fts が無い構成では無視 */ }
7736
+ db.exec("INSERT INTO schema_version (version) VALUES (37)");
7737
+ });
7738
+ transaction();
7739
+ // foreign_keys を元の状態に復元
7740
+ if (fkState.length > 0 && fkState[0].foreign_keys === 1) {
7741
+ db.pragma("foreign_keys = ON");
7742
+ }
7743
+ }
7593
7744
  function applyV36(db) {
7594
7745
  const transaction = db.transaction(() => {
7595
7746
  // === 1. practices テーブル作成 ===