yoi/tickets/memory-file-format.md
2026-04-26 17:00:38 +09:00

3.9 KiB
Raw Blame History

メモリ機構: ファイル形式 + Linter 土台

背景

docs/plan/memory.md で決めたメモリ機構の永続化レイヤの土台。memory/*knowledge/* の record を保存・編集する際の静的スキーマと、汎用 CRUD への post-write Hook として挟む Linter を成立させる。Phase 1/2、検索ツール、常駐注入、GC はすべてこの層に乗る。

Workflowdocs/plan/workflow.md)も同じ frontmatter / Linter 経路で扱うため、memory/workflow/<slug>.md の frontmatter 検証と書き込み制限も本チケットに含める。実行経路(/<slug> dispatchは別。

要件

ディレクトリと record 種別

  • memory/summary.md — Always-on サマリ1 ファイル固定)
  • memory/decisions/<slug>.md — Decisions
  • memory/requests/<slug>.md — Requests
  • memory/workflow/<slug>.md — Workflowfrontmatter 検証のみ対象)
  • memory/_staging/<id>.json — Phase 1 中間(本チケットはパス予約と Linter 対象外化のみ)
  • knowledge/<slug>.md — Knowledgememory/ の兄弟)

slug は kebab-case小文字英数とハイフン。ファイル名がそのまま識別子で、frontmatter に id / name は持たない。

frontmatter スキーマ

種別ごとの必須フィールドは docs/plan/memory.md §ファイル形式 / §書き込み経路と Linter の表に従う。具体的な必須項目:

  • 共通: created_at, updated_at
  • Decisions: sources, status: open | resolved | replaced、置き換え時 replaced_by: <slug>
  • Requests: sources
  • Knowledge: kind, description, model_invokation, user_invocable, last_sources
  • Summary: updated_atoptional: last_rewritten_from_range
  • Workflow: description, auto_invoke, user_invocable, requires

Linter ルール

静的 errorpost-write Hook が turn を戻し、sub-Worker に自己修正させる。N 回失敗で abort:

  • frontmatter 必須 field 欠落・型違反
  • memory/workflow/ への書き込み禁止sub-Worker のみ。人間編集は対象外)
  • 同 slug での新規作成禁止(既存があれば update に切り替えるサイン)
  • #<slug> / replaced_by: <slug> / requires: [..] が実在 record を指す
  • Decisions status の enum 違反
  • model_invokation: true な Knowledge の description 1024 chars 上限
  • 種別ごとの char 硬上限(具体値は設定ファイルで tune

膨張抑制 Warnerror ではなく改善ヒント):

  • 低重要度 × char の天秤
  • sources 配列長の累積
  • 類似 slug 乱立

適用経路

  • sub-Worker の汎用 CRUDread/write/editへの post-write Hook として挟む
  • 人間編集(エディタ / git commitに対しても同一ルールで検証できる CLI または pre-commit hook 経路を用意(詳細は実装で判断、結果として同じルールが一箇所で定義されていること)

範囲外

  • 検索ツール、常駐注入、Phase 1/2、GC の実装
  • 意味破壊rewrite で主張が落ちる等)の検出 — 監査 LLM 層は将来検討
  • staging JSON の schema — Phase 1 チケット
  • Workflow の /<slug> 実行経路

完了条件

  • 上記パスに手で record を置いて Linter を走らせると、スキーマ違反 / 参照切れ / 同 slug 競合が error として返る
  • sub-Worker が CRUD で書き込んだ際、違反時は turn が戻り自己修正が走る
  • Warn は error を止めず、出力されることが確認できる
  • memory/workflow/ への sub-Worker からの書き込みは error で止まり、人間編集は通る
  • 既存ビルド・テストを壊さない

参照

  • docs/plan/memory.md §ファイル形式 / §書き込み経路と Linter / §Knowledge の採択基準
  • docs/plan/workflow.md §格納先とファイル形式 / §生成・更新ポリシー