English | 日本語
All notable changes to EpisodicRAG Plugin will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
/digest Pattern 1 Step 3(source_files 追加)を手編集からスクリプトへ寄せ、JSON 書き出しの改行を LF に固定する。
interfaces/add_shadow_sources.py(ShadowSourceAdder) — SGD のsource_filesへファイル名を追加する CLI。python -m interfaces.add_shadow_sources <level> <filename>...。既登録は skip(冪等)、 呼び出し内の重複は 1 回だけ。既存分析がある場合は 4 要素(digest_type / keywords / abstract / impression)に触れず、PLACEHOLDER 状態(finalize 直後)では件数に応じたプレースホルダー文へ更新する (update_shadow_for_new_loopsと同じFileAppenderの挙動。Step 7 が上書きする前提)。追加処理は既存のShadowGrandDigestManager.add_files_to_shadowへ委譲し、CLI は薄いラッパー。 空文字・パス区切りを含む名前はEpisodicRAGErrorcommands/digest.mdPattern 1 Step 3 を Edit ツールの手編集から上記 CLI へ置換。同じ文書の Step 7 が 「SGD の直接 Edit は事故りやすい」と言いながら Step 3 だけ手編集を指示していた矛盾を解消
save_jsonの改行を LF に固定 —Path.open("w")にnewline="\n"が無く、Windows の text mode 既定で\nが\r\nに変換されていた。ShadowGrandDigest / Provisional / last_digest_times の 書き出しが全て CRLF になり、記憶リポ側で毎回CRLF will be replaced by LFの警告が出ていた (.gitattributesのeol=lfが commit 時に正規化するため履歴は無傷、working copy だけが CRLF)。 回帰テストは二本:出力バイトに\r\nが無いこと(Windows でのみ red になる)と、Path.openがnewline="\n"で呼ばれること(Linux CI でも回帰を捕まえる網)index_writer.apply_indexとtools/check_footer.fix_footerのwrite_textも同型で LF に固定 — 前者は auto-memory の MEMORY.md 書き戻し(git 非追跡ゆえ正規化されず CRLF のまま残る)、後者は/doc-check系の footer 修正。save_jsonと同じ二本立ての回帰テストを各々に付けた (apply_indexは従来テスト無し)
- インストール済み(Daily Use)側はプラグイン更新までは旧コードのまま。
/digestの Step 3 は 更新後に CLI 経路へ切り替わる
ruff 0 / ruff format 302 files already formatted / mypy Success(302 files、CI と同じ起動形)/
pytest 2386 passed, 2 skipped(-m "not slow and not performance")
静的チェックをワークスペース基準へ揃える。挙動の変更は無い。
- ruff の
selectをE,W,F,IからE4,E7,E9,F,I,UP,N,B,SIM,PTHへ拡張。狭い網では CI が green のまま旧記法・危険記法が溜まる(B904の例外連鎖切断、B017の例外型を 絞らない assert、PTHのos.path残存)。型検査ではこの類は出ない E501は新集合に含まれない(E4/E7/E9のみ)ためignoreから落とし、行長の判断を formatter へ一本化- formatter をワークスペース既定へ(
line-length = 100とquote-style = "preserve"を撤去 = 88 桁・クオート正規化)。178 ファイルが再整形された(本ワークスペース最大) - 入れ子
with patch(...)29 箇所を 1 文へ(3.10 の括弧付き context manager)
- UP 系 約 960 件 —
typing.Dict/List/Tuple/Optional/Union→ 組込み総称・X | None。 取り残された未使用 import はif TYPE_CHECKING:配下の字下げ版まで含めて整理 - PTH123 265 件 —
open(x, …)→x.open(…) - B017 4 件 —
Exceptionを実際に投げられる型へ絞った(ValueError/FileNotFoundError/EpisodicRAGError×2)。観測してから絞っており、推測していない - B904 2 件(
from e)/SIM102 2 件(入れ子 if を単文へ) - 障害注入テスト 3 件の patch 先を
builtins.open→patch.object(Path, "open", ...)へ。save_jsonがPath.openを呼ぶようになり、旧 patch では素通り(DID NOT RAISE)に なっていた。テストの意図(書込み失敗→FileIOError)は変えていない
N802144 件は ignore(理由付き)。全てテストの日本語名 (test_50件ちょうどはover_threshold_false等)で、日本語に大文字小文字の区別が無い以上 「lowercase にせよ」は構造上適用できない。本番側のN802は 0 件N8066 件も ignore —patch(...) as MockConfigは unittest.mock の慣習- wakeup skill は
PTHごと ignore — claude.ai へ zip で配る stdlib のみの独立ツリーで、 str のパスを自前 API の境界(config_path: str/self._root: str)で受け渡す。冒頭のsys.path.insertは要素が str でないと import が黙って失敗する(実測:ModuleNotFoundError)。昇格トリガーは wakeup の API 契約を Path 化するとき
- 演算子優先順位 —
a / b / "x.txt".open(...)は.openが文字列に付く。 単純置換で 98 箇所に作り込み、(a / b / "x.txt").open(...)へ AST で直した - str への
.open()—NamedTemporaryFile.nameは str。1 箇所取りこぼした。 残り 264 箇所は全て Path だったことがテストで確かめられた
ruff 1519→0 / mypy Success(本体 300 files・wakeup 11 files、CI と同じ起動形)/ pytest 2686 passed, 5 skipped(前後一致)
- CI を二層に分離(常設ゲートの決定論化) — メイン coverage job の pytest に
-m "not slow and not performance"を追加し、壁時計アサートを持つテスト群を既設の performance 専用 job(-m "slow or performance" --no-cov)へ一本化した。常設ゲートは決定論的に検査できるものだけを検査する形になり、共有ランナーの負荷で CI が確率的に赤くなる事象(v5.9.8 リリース時に実発生)が構造的に消える。同じテストの二重実行も解消。TEST_COUNT バッジの件数はメイン job の選択分(slow / performance を除いた分)を表す - 絶対スループットアサートを格下げ —
test_scale.pyの> 50 files/sec/> 100 ops/sec(マシン性能そのものを検査していた 2 本)を撤去し、merge 結果・生成ファイルの正当性アサート + スループットのprintに置き換えた。検査対象を「速さ」から「正しさ」へ移し、数値は情報として残す。上限系(elapsed < N)は性能回帰の網として温存 - TESTING.md / scripts/README.md を二層運用へ追従 — マーカー説明(
performanceはメイン job で除外される、が実態として真になった)・CI 節・ローカル実行の役割分担・カバレッジ目標・Performance Targets の位置付け(CI が保証する値ではない参考目標)を実態化。併せてpyproject.toml未登録で--strict-markers下では使えなかったfastマーカーの記述を削除
- バージョンバッジを dynamic badge 化(同期作業の構成的排除) — README 日英・
docs/README.mdのバージョンバッジを shields.io の dynamic JSON バッジへ置換し、SSoT(.claude-plugin/plugin.json/ ルートはmarketplace.json)を表示時に読ませる。バッジから実数字が消えたため、bump 時の手動同期そのものが無くなった(v5.9.8 bump で同期漏れにより CI が赤くなった事象への恒久対処) - 整合テストを「数字の一致」から「指し先の検査」へ転換 —
test_version.pyのバッジ検査が、dynamic badge のurl=が正しい SSoT を、query=が$.versionを指すことを検査する形に変更。併せて静的バッジ(badge/version-x.y.z-)の不存在を恒久ゲートとして検査し、EpisodicRAG README 日英の検査(従来 pytest 無検査だった箇所)を新設 - CONTRIBUTING 日英のリリース手順を更新 — バージョン同期表からバッジの手動同期を削除し、リリース手順を 5 ファイル → 4 ファイルへ(バッジは自動追従)
- DigestAnalyzer に
effort: highを明示 — 分析の深さが Digest の品質を直接決める層のため、呼び出し元の設定を継ぐのではなく frontmatter で思考量を固定する(model: opusは据え置き)
- wakeup:
materialize/verifyサブコマンド(配置ドリフトの根絶と fail-open の封鎖)- 背景: ★ 配置物(config / directive / token)は手コピー運用で、config と directive が別々に持ち回されるため「directive だけ新しく config は旧世代(
commit_identity.coauthorが旧モデル名のまま書き戻される)」というドリフトが実運用で発生した。加えて Step 3 は md の Read ゆえ、directive 未配置でも黙って通る fail-open だった materialize --config <path> --out <dir> [--token <path>]: 人格の config を単一 SSoT とし、directive はその隣からdirective_pathで解決して配置。config →wakeup.config.json(固定の汎用名)、token は元の basename のまま(勝手なリネームをせずケース不一致を防ぐ)。全検証を全コピーの前に実行し、半端に materialize された skill root を作らない。人格名は engine に持たせない path 駆動(examples/は見本のまま、他人格の値が repo に入らない)verify [--root <dir>]: config / directive / token の実在・可読性を検査して非ゼロ終了。config行に load_repo の fingerprint を出力(1 デプロイ = 1 人格ゆえ、別人格の config を上げたままの起動事故を検知)。token は可読性のみ検査し中身は一切出力しない- Clean Architecture: 検証方針は UseCase(
usecases/verify_deployment.py+DeploymentProbePort)、ファイル配置は Interface(engine)。TDD(wakeup は 61 → 132 tests)
- 背景: ★ 配置物(config / directive / token)は手コピー運用で、config と directive が別々に持ち回されるため「directive だけ新しく config は旧世代(
- CI に wakeup スキルを追加 — 既存 EpisodicRAG ジョブへ ruff check / ruff format --check・bandit・mypy strict・pytest の 4 系統を追加(従来はローカル実行のみでテスト腐敗のリスクがあった)。workflow 自身の変更も CI トリガに追加
directive_pathの構造検証を domain へ — 相対・POSIX 区切り・親脱出なし・空セグメントなしをWakeupConfig.__post_init__で強制。人格が任意の名前・深さを選べる前提は保ったまま、skill root 外への解決を封じる- SKILL.md: 「デプロイ(zip 化の直前)」節を新設、Step 1 を config 読込から**デプロイ検証(verify)**へ変更、「1 デプロイ = 1 人格」「器交代時に更新する config キー =
commit_identity.coauthor」を明記 - pyproject: ruff の
includeにskills/wakeup/scripts/**/*.py、isortknown-first-partyにusecasesを追加(スキル配下が lint 対象外だった)。当該ツリーへruff formatを初適用
- config 検証の抜け穴 —
load_configがWakeupConfigを try の外で構築していたため、domain のValueErrorがConfigErrorに包まれず素通りしていた(単一エラー面の破れ) - tar アーカイブの非正規メンバー —
extractfile()のNoneを未処理で.read()していた(mypy strict で検出、明示エラーに)
- update_shadow_overall CLI(SGD overall_digest 更新の interface 化) — ShadowGrandDigest の overall_digest 5要素(digest_type / keywords / abstract / impression / timestamp)を JSON 入力から更新する
interfaces/update_shadow_overall.pyを新設- 背景: overall_digest の abstract は 2400 字級の日本語文字列を含み、Edit ツールの exact-match 置換による手動更新は事故りやすい。ShadowIO 経由の JSON ラウンドトリップで安全に更新する
source_filesには触れない(不変条件)。timestamp/metadata.last_updatedは自動更新- 入力バリデーション: 必須4キー・型検査。エラー時 SGD は変更されない
- 使用法:
python -m interfaces.update_shadow_overall <level> <json_file>(--stdin対応)
/digestの SGD 統合更新手順を CLI 化 — Pattern 1 Step 7 / Pattern 2 Step 6・Step 8.5 の「Edit ツールで各フィールドを更新」を、一時ファイル +update_shadow_overall実行の手順に変更(commands/digest.md)。source_files フォーマット規約(1行ずつ)は Pattern 1 Step 3 へ移設
- Windows cp932 コンソールでのログクラッシュ —
logging.StreamHandlerの出力先が cp932(リダイレクト・パイプ時の既定)だと、digest_type に頻出する em-dash「——」(U+2014) がUnicodeEncodeError(--- Logging error ---)を引き起こしていた。setup_logging()がハンドラーの stream を UTF-8 のTextIOWrapperで包み直すよう修正(_utf8_safe_stream()、handler-local な差し替えでsys.stdout自体は変更しない)- 副次効果: パイプ環境で文字化けしていた日本語ログが可読になった
- テスト:
test_logging_config.py::TestHandlerEncodingSafety(cp932 疑似コンソールで内容到達まで検証)
- dream-defrag コマンド(引く dream=auto-memory の GC) —
/digestStep 11 の Auto-dream(足す dream=additive enrichment)と対をなす、Claude Code auto-memory(MEMORY.md+memory/*.md)の reductive な棚卸し- memory-dream の 4 フェーズのうち ③Dedup & Resolve(横断重複統合)・④Prune & Index(完了卒業・index lean 化) を担う(①Mine・②Consolidate は Step 11 の責務)
- サブコマンド:
scan(件数診断・DEFRAG_THRESHOLD=50超過判定)/snapshot(剪定前バックアップ)/rebuild-index(MEMORY.mdをディスク現存に同期、--preview対応) - 判断と決定論の分離: スクリプトは件数集計・snapshot・索引同期の決定論のみ。何を重複/卒業/上位層DRY と見て剪定するかの判断は Claude が
commands/dream-defrag.mdのフローで担う - 安全要件: auto-memory は git 非追跡で revert 不能なため、剪定前 snapshot を必須化。非破壊フロー(snapshot → 候補提示 → ユーザー裁可 → 適用)。snapshot は走査対象 dir の外(永続化 dir 配下
snapshots/)に作成 - 卒業の境界: 完了プロジェクトは
MEMORY.mdlive index からの降格に限定し、EpisodicRAG(Loops/Digests)への実記録は行わない(記憶層は不可侵)。未記録なら削除せずフラグ - Clean Architecture(Domain / UseCase / Interface / Infrastructure)+ TDD(24 tests: defrag 型・DefragScanner 件数判定・snapshot・index round-trip・CLI subcommand)
- 既存
auto_dreamパッケージ内に同居(新パッケージは切らない):domain/auto_dream/defrag_types.py,application/auto_dream/defrag_scanner.py,infrastructure/auto_dream/{snapshot_writer,index_writer}.py,interfaces/dream_defrag.py
- wakeup スキル(claude.ai セッション開始エンジン) — claude.ai でセッション開始時に長期記憶ロード+人格ディレクティブ適用を担う汎用エンジン
- 「汎用エンジン(scripts/)+ ペルソナ固有値(examples/)」を分離。リポ名・ファイル・commit identity・人格方針はすべて config 注入(決め打ちなし、lint で保証)
- 配置物は人格名を含まない汎用名に固定(実行時 config =
wakeup.config.json、directive 名のみ config のdirective_path経由で可変)。ペルソナ固有のサンプルはexamples/(weave.config.json等)に隔離し、実行時パスへの固有名リークを lint で検出 - Clean Architecture(Domain / UseCase / Interface)+ TDD(59 tests: 値オブジェクト・BootSequence・config ローダ・engine・SKILL.md lint〔配置物の汎用名・固有名リーク検証を含む〕)
- 記憶ロードは Read token で SHA 固定取得(claude.ai 共有 IP では未認証 API が枯渇、raw の main は CDN キャッシュで最新が取れないため)
- Private 参照/書き戻し(
claude/*→ PR)に対応。token は tar.gz でスキル同梱(claude.ai はネスト zip 不可のため)、Authorization ヘッダのみで URL 非露出 - 表情 UI は担当しない(VisualExpression スキルと相互参照なし)。両スキルとも単体で完結し、claude.ai のプロジェクト指示で独立に有効化する設計
- auto_dream_scan の出力責務を「メモリ所在通知」に絞り込み(案B運用への移行)
MemoryFileからcontent/content_lengthを除去MemoryIndexからraw_contentを除去- 出力サイズ 68KB → 12.3KB(5.4倍縮減)、Claude Code preview の切り詰め問題が解消
- Claudeは MEMORY.md と各 frontmatter.description で関連性を判定し、関連メモリだけを
pathから個別Readで取得して digest 内容と突合する運用へ commands/digest.mdの Step 11 を案B運用ガイダンスに刷新
- hypothesis FailedHealthCheck in test_template_properties.py
valid_levelsstrategy のwhitelist_categories=("L", "N")は Lo(CJK等)を含み生成候補が数十万となり、Input generation が遅くなって FailedHealthCheck を発火していた("Ll", "Lu", "Nd")+whitelist_characters="_"に絞り、ASCII 英数字+_ に限定- 実行時間 242秒 → 5.80秒(13/13 pass)
- TypedDict 構造検証 / 戻り値検証 / scanner結果検証のテスト9件追加
- domain/auto_dream/types.py、infrastructure/auto_dream/memory_reader.py、interfaces/auto_dream_scan.py の docstring を新責務に合わせ更新
- Auto-dream: メモリ棚卸し機能
- digest処理のStep 11として、Claude Code auto-memoryファイルの自動スキャン・棚卸しを追加
python -m interfaces.auto_dream_scanCLIで実行可能~/.claude/projects/*/memory/配下のメモリファイルを検出・解析- frontmatter(name, description, type)の自動パース(PyYAML不使用、依存ゼロ維持)
- Pattern 1(新Loop検出)・Pattern 2(階層確定)の両方で動作
- メモリ未使用環境では自動スキップ(graceful degradation)
- 新規パッケージ:
domain/auto_dream/,infrastructure/auto_dream/,application/auto_dream/ - Clean Architecture 4層に準拠(Domain → Infrastructure → Application → Interfaces)
- テスト46件追加(domain: 12, infrastructure: 34, application: 8, interfaces: 5)
- 永続化パス
- config.json と last_digest_times.json を
~/.claude/plugins/.episodicrag/に移動 - Claude Codeのプラグイン自動更新(削除→再clone)時に設定が消失しなくなりました
- 環境変数
EPISODICRAG_CONFIG_DIRでカスタムパスを指定可能(テスト用)
- config.json と last_digest_times.json を
- 内部リファクタリング(TDD改善)
digest_auto.pyをdigest_auto/パッケージに分割(548行→5モジュール: models, analyzer, path_resolver, file_scanner, report)CascadeComponentsパラメータオブジェクト追加(Parameter Object Pattern)- シングルトンモジュール(
level_registry,error_formatter,file_naming)のdocstringにリセット方法を明記
-
INDEX.md / INDEX.en.md 新規作成
- 全ドキュメントへのナビゲーション
- 読者別ガイド(初心者/日常利用/トラブル時/開発者/AI向け)
- ドキュメント更新時のチェックリストとしても機能
-
CLAUDE.md 改善
- 「利用可能な機能」セクション追加(コマンド/スキル/エージェント/基本ワークフロー)
- AIが初見でもプラグインを使えるように
-
ドキュメント構成整理
_footer.mdをフッターSSoTのみに簡素化- 各READMEからINDEX.mdへのリンク追加
📖 詳細は DESIGN_DECISIONS.md を参照
-
digest.md リファクタリング
- パターン2を7ステップ→9ステップに再構成
- 目次をパターン別に分離(読み飛ばしやすく)
- 「出力例」→「エラー出力例」に改名(成功例は各Step 9へ移動)
-
スキルドキュメント改善
- 各SKILL.mdにTodoWrite使用ガイドを追加
- スキルドキュメント構造を共通化
- 使用例・出力例を最新化
⚠️ 移行について: v4.x以前からの移行は非推奨です。プラグインの再インストールを推奨します。 既存の対話記録(GrandDigest, ShadowGrandDigest, Loopファイル等)はそのまま使用できます。
-
プラグインルート自動検出
/digest実行時のconfig.json検出エラーを防止- 任意のディレクトリから
/digestを実行可能に
-
Loopレベル追加
last_digest_times.jsonに Loop 層を追加- 全レベル(Loop含む)で最新の
/digest対象を把握可能に
-
シェルスクリプト廃止
- 対話型プロセスを md ファイルに一本化
- 目的: 可読性向上、読み飛ばし防止
-
Bandit セキュリティスキャン統合
make securityでセキュリティ脆弱性をスキャン- CI/CD (GitHub Actions) に security ジョブ追加
- pre-commit フックに Bandit 追加
- 統合テスト
test_bandit_integration.py追加
-
cascade_orchestrator 可読性向上
- 4ステップ制御フローのコメント追加
CascadeStepResult.detailsの構造説明追加
-
CONCEPT.md / CONCEPT.en.md: コンセプトドキュメント新規作成(日英同期 210行/210行)
-
内部リファクタリング: TypedDict分割、Literal型導入、CLI共通ヘルパー統合、バリデーション統合、新デザインパターン4種追加
-
開発ツール: フッターチェッカー、リンクチェッカー(
scripts/tools/)
📖 詳細は DESIGN_DECISIONS.md を参照
⚠️ 移行について: v3.x以前からの移行は非推奨です。プラグインの再インストールを推奨します。 既存の対話記録(GrandDigest, ShadowGrandDigest, Loopファイル等)はそのまま使用できます。
-
config層のClean Architecture分解: 単一configモジュールを3層に再編成
domain/config/- 定数・型検証infrastructure/config/- ファイルI/O・パス解決application/config/- バリデーション・サービス- 移行: インポートパスを層構造に合わせて更新
-
スキルのPythonスクリプト化: 疑似コードから実行可能CLIへ
@digest-setup→python -m interfaces.digest_setup@digest-config→python -m interfaces.digest_config@digest-auto→python -m interfaces.digest_auto- スキル経由の使用は引き続き可能
-
trusted_external_pathsの導入: 外部パスアクセスのセキュリティ強化
- config.jsonに
trusted_external_paths: []フィールド追加 - 外部パス使用時は明示的なホワイトリスト登録が必要
- config.jsonに
- LEARNING_PATH.md: Python学習ドキュメント追加
- Clean Architecture学習の段階的パス
- EpisodicRAGコードベースを教材としたPython学習ガイド
-
バージョンSSoT強化: CONTRIBUTING.mdのバージョン例をプレースホルダー化
- ハードコードされたバージョン番号を
x.y.zに変更 - plugin.jsonへの参照を明示化
- ハードコードされたバージョン番号を
-
英語版ドキュメント同期: syncヘッダー追加
- README.en.md, EpisodicRAG/README.en.md
- QUICKSTART.en.md, CHEATSHEET.en.md
- CONTRIBUTING.mdの規定に準拠した
<!-- Last synced: YYYY-MM-DD -->形式
-
FAQ.md: GitHub検索機能での横断検索ガイドを追加
- リポジトリ内検索(GitHub Web)の案内
- ローカル検索(VS Code)の案内
- 用語インデックスへの参照
-
TESTING.md: テストドキュメント拡充
- GitHub Actions CI/CDバッジ追加
- Codecovカバレッジレポートへのリンク追加
- 層別テストファイル一覧表追加
- カバレッジ目標表追加
- ローカルカバレッジ実行コマンド追加
-
api/domain.md: 主要TypedDictの完全スキーマを追加
- ConfigData(config.json全体構造)
- ShadowDigestData(ShadowGrandDigest.txt全体構造)
- GrandDigestData(GrandDigest.txt全体構造)
- RegularDigestData(確定済みDigestファイル)
- IndividualDigestData(個別ダイジェスト要素)
- TypeScript形式でスキーマを表現
-
DESIGN_DECISIONS.md: 設計判断ドキュメントを新規作成
- Clean Architecture採択理由
- デザインパターン選択の根拠(Facade, Repository, Strategy, Builder, Singleton, Template Method, Factory)
- Pythonプログラミング教材としての価値向上を目的
-
CHEATSHEET.md / CHEATSHEET.en.md: クイックリファレンスを新規作成
- コマンド・スキル早見表
- ファイル命名規則
- デフォルト閾値
- 日常ワークフロー
- 日英完全同期(91行/91行)
-
ドキュメントSSoT強化: 包括的なSSoT参照リファクタリング
- ADVANCED.md: SSoT参照3箇所追加(記憶構造、8階層構造)
- QUICKSTART.md/en.md: SSoT参照追加、日英完全同期(179行/179行)
- API_REFERENCE.md: 「使い方」セクション追加、DESIGN_DECISIONS参照
- ARCHITECTURE.md: DESIGN_DECISIONS参照追加
- CONTRIBUTING.md: DESIGN_DECISIONS参照追加
- README.en.md: Path Format Differencesセクション追加(日英同期 380行/380行)
- FAQ.md: 参照パス修正、CHEATSHEET参照追加
- GUIDE.md: CHEATSHEET参照追加
-
デザインパターンの明示化: API_REFERENCE.mdにパターン一覧を追加
- Facade, Repository, Singleton, Strategy, Template Method, Builder, Factory
-
Loop IDの桁数変更: 4桁→5桁
- 旧形式:
Loop0001 - 新形式:
L00001 - 移行方法: 既存Loopファイルのリネームが必要
# 例: L0001_xxx.txt → L00001_xxx.txt cd your_loops_directory for f in L[0-9][0-9][0-9][0-9]_*.txt; do mv "$f" "L0${f:1}" done
- 影響範囲:
- Loopファイル名
- ShadowGrandDigest.txt 内の
source_files参照 - last_digest_times.json 内の参照
- 旧形式:
-
ドキュメントの完全SSoT化: 用語定義はREADME.mdに一元化
- ユーザーへの影響なし(ドキュメント構造の改善のみ)
-
テストスイートの導入: pytest + hypothesis によるプロパティベーステスト
- 開発者向け変更、エンドユーザーへの影響なし
- バージョン管理の全ファイル同期
Archive (v2.x and earlier)
-
config/init.py: 後方互換性用の再エクスポートを完全削除
extract_file_number,extract_number_only,format_digest_number→domain.file_namingから直接インポートConfigData,LevelConfigData→domain.typesから直接インポート
# 旧(動作しない) from config import extract_file_number, ConfigData # 新(推奨) from domain.file_naming import extract_file_number from domain.types import ConfigData
- 型安全性向上:
Dict[str, Any]→ConfigData(TypedDict) への移行config/path_resolver.py: パラメータ型をConfigDataに変更config/threshold_provider.py: パラメータ型をConfigDataに変更
- config/init.py リファクタリング:
- domain定数の再エクスポートを削除(直接
from domain.constants import ...を使用) - 初期化パターンを即時初期化に統一(遅延初期化を廃止)
- ローカルインポートをモジュールレベルに移動
- domain定数の再エクスポートを削除(直接
- infrastructure/json_repository.py: エラーハンドリングを
_safe_read_json()ヘルパー関数に共通化 - 反復プロパティの動的化:
ThresholdProvider:__getattr__を使用した動的プロパティアクセスDigestConfig: threshold委譲を動的化
- GrandDigestManager のユニットテスト追加 (11件):
get_template()の構造・バージョン・レベル検証load_or_create()の新規作成・既存読み込み・破損ファイル処理update_digest()の正常更新・レベル保持・タイムスタンプ更新
__all__エクスポートの追加:config/path_resolver.pyconfig/threshold_provider.pyinfrastructure/json_repository.pyinfrastructure/logging_config.pyapplication/shadow/cascade_processor.py
agents/README.mdにフッターを追加
config/__init__.py: ローカルインポート (show_pathsメソッド内) をモジュールトップレベルに移動- インポートパスの統一:
from config import LEVEL_CONFIG→from domain.constants import LEVEL_CONFIG
- DEPRECATED メソッド完全削除:
load_or_create,save,find_new_filesを削除
- 型安全性向上:
ProvisionalDigestFile型追加provisional_loader.py,save_provisional_digest.pyの型置換Dict[str, Any]使用箇所を汎用関数のみに限定
- ログ統一:
print→loggerに全面置換 - Facade簡潔化: public APIを整理(DEPRECATED 3メソッド)
- テストカバレッジ拡大
- 型定義統一:
DigestMetadataComplete追加
cascade_processor.py: 型チェック漏れ修正
Clean Architecture リファクタリング完了 - 内部構造を4層アーキテクチャに全面移行
- 後方互換性レイヤー削除: 旧インポートパス(
from validators import ...,from finalize_from_shadow import ...等)は動作しなくなりました - 推奨インポートパス変更:
# 旧(動作しない) from validators import validate_dict from finalize_from_shadow import DigestFinalizerFromShadow # 新(推奨) from application.validators import validate_dict from interfaces import DigestFinalizerFromShadow
-
Clean Architecture 4層構造:
domain/- コアビジネスロジック(定数、型、例外、ファイル命名)infrastructure/- 外部関心事(JSON操作、ファイルスキャン、ロギング)application/- ユースケース(Shadow管理、GrandDigest管理、Finalize処理)interfaces/- エントリーポイント(DigestFinalizerFromShadow, ProvisionalDigestSaver)
-
テスト大幅拡充:
- 新規テストファイル追加
- 全テストが新アーキテクチャに対応
-
ドキュメント更新:
- ARCHITECTURE.md - 4層構造の詳細説明追加
- API_REFERENCE.md - 層別に再構成
- scripts/README.md - 4層構造に全面更新
- CONTRIBUTING.md - 新機能追加ガイド追加
- 依存関係の明確化: 循環参照を解消し、層的依存関係を確立
domain/← 何にも依存しないinfrastructure/← domain/ のみapplication/← domain/ + infrastructure/interfaces/← application/
- 後方互換性レイヤー削除:
scripts/finalize/scripts/shadow/- ルートレベルファイル:
validators.py,digest_times.py,grand_digest.py,shadow_grand_digest.py,finalize_from_shadow.py,save_provisional_digest.py,__version__.py,digest_types.py,exceptions.py,utils.py
開発者向け移行ガイド:
-
インポートパスの更新:
# Domain層 from domain import LEVEL_CONFIG, __version__, ValidationError from domain.file_naming import extract_file_number # Application層 from application.shadow import ShadowUpdater from application.grand import ShadowGrandDigestManager # Interfaces層 from interfaces import DigestFinalizerFromShadow from interfaces.interface_helpers import sanitize_filename
-
詳細: ARCHITECTURE.md および scripts/README.md を参照
- CLAUDE.md: プロジェクト固有のAIエージェント向けガイドライン
- SSoTの場所と参照パターン
- 開発ワークフローとコーディング規約
- 用語統一ルール(Loop, Digest, GrandDigest)
- バックアップ&リカバリ: ADVANCED.md にセクション追加
- 長期記憶の4層構造(Loop/Provisional/階層Digest/Essence)
- 再構築可能性に基づくバックアップ優先度(Loopのみ必須)
- Git連携/手動/クラウド同期の3つの方法
- リカバリ手順(各層別)と推奨頻度
- SSoT参照の徹底:
digest-auto/SKILL.md: 「まだらボケ」説明をREADME.md SSoT参照に簡略化FAQ.md: 「まだらボケ」回答をSSoT参照に簡略化
- バージョン情報統一:
ARCHITECTURE.md,TROUBLESHOOTING.md,API_REFERENCE.mdにバージョンヘッダー追加
- ドキュメント改善:
- ドキュメント健全性診断に基づく改善
- 重複コンテンツ削減
- ADVANCED.md 目次更新
- ドキュメントリファクタリング: 大規模なドキュメント整理
- README.md: トラフィックディレクター化(大幅簡略化)
- docs/README.md: AI Specification Hub に特化
- バージョンフッター削除 - SSoTに集約
- ブレッドクラム追加(docs/配下)
- scripts/README.md: shadow/, finalize/, version.py を追記
- パス参照修正:
homunculus/Toybox→ プレースホルダーに変更skills/digest-config/SKILL.md(line 26, 97)skills/digest-setup/SKILL.md(line 27)
- ドキュメント整備:
- ARCHITECTURE.md: カスケードフローのSSoT参照を追加
- 全docsファイルにブレッドクラムナビゲーション追加
- ペルソナベースのナビゲーションテーブル導入
- shadow/ パッケージ:
shadow_grand_digest.pyを4つのモジュールに分割shadow/template.py: テンプレート生成(ShadowTemplate クラス)shadow/file_detector.py: ファイル検出(FileDetector クラス)shadow/shadow_io.py: Shadow I/O(ShadowIO クラス)shadow/shadow_updater.py: Shadow更新(ShadowUpdater クラス)
- リファクタリング: shadow_grand_digest.py のFacade分割
- 元ファイルはFacadeとして後方互換性を維持
- finalize/ パッケージ:
finalize_from_shadow.pyを4つのモジュールに分割finalize/shadow_validator.py: Shadow検証(ShadowValidator クラス)finalize/provisional_loader.py: Provisional読込(ProvisionalLoader クラス)finalize/digest_builder.py: Digest構築(RegularDigestBuilder クラス)finalize/persistence.py: 永続化処理(DigestPersistence クラス)
- リファクタリング: finalize_from_shadow.py のFacade分割
- 元ファイルはFacadeとして後方互換性を維持
- リファクタリング: 例外処理の完全移行
exceptions.pyの例外クラス(ValidationError,DigestError,FileIOError)を実際に使用開始log_error()→ 適切な例外に置換- 各メソッドの戻り値を
bool/Optionalから例外ベースに変更 - 関連テストを
assertFalse()→assertRaises()に更新
- version.py: バージョン定数のSingle Source of Truth(
DIGEST_FORMAT_VERSION)を新規作成
- リファクタリング: バージョン文字列の集約
- ハードコードされていた
"1.0"をDIGEST_FORMAT_VERSION定数に置換
- ハードコードされていた
- リファクタリング: validators.py の段階的採用
isinstance()→is_valid_dict()/is_valid_list()に置換
- plugin.json: バージョン番号を 1.1.2 に更新(CHANGELOGとの整合性確保)
- digest-auto/SKILL.md: パス参照を修正(Toybox → Weave)
- save_provisional_digest.py: Provisional Digestのフィールド名を
source_fileに統一(digest_types.pyとの整合性確保) - ARCHITECTURE.md: Provisional Digestのフィールド名を
source_fileに統一
- SKILL.md: 実装ガイドラインを共通ファイル(_implementation-notes.md)への参照に変更(重複削減)
- ARCHITECTURE.md: GrandDigest/ShadowGrandDigest/Provisionalのファイル形式をソースコードに合わせて修正
- API_REFERENCE.md: format_digest_number(), PLACEHOLDER_*定数, utils.py関数群を追記
- TROUBLESHOOTING.md: Provisionalパス修正、last_digest_times.jsonパス修正
- GUIDE.md: SSoT参照化によりまだらボケ説明を簡略化、トラブルシューティングをTROUBLESHOOTING.md参照に変更
- GLOSSARY.md: SSoT参照化
- FAQ.md: SSoT参照化
- docs/README.md: SSoTクロスリファレンス表を追加
- skills/digest-setup/SKILL.md: Provisionalディレクトリパス修正
- 全ドキュメントの日付を2025-11-27に統一
- ドキュメント間の重複記載を削減(Single Source of Truth確立)
- GLOSSARY.md: 用語集を新規作成
- QUICKSTART.md: 5分クイックスタートガイドを新規作成
- docs/README.md: ドキュメントハブを新規作成
- skills/shared/: 共通コンポーネントディレクトリを新規作成
_common-concepts.md: まだらボケ、記憶定着サイクルの共通定義_implementation-notes.md: 実装ガイドラインの共通定義
- CHANGELOG.md: 変更履歴ファイルを新規作成
- ARCHITECTURE.md: バージョン表記を1.3.0から1.1.0に修正(整合性確保)
- README.md: プラグインパスを
@Plugins-Weaveに統一 - TROUBLESHOOTING.md: ファイル命名規則の説明を修正
- digest-setup/SKILL.md: サンプルパスを変数形式に変更
- digest-config/SKILL.md: サンプルパスを変数形式に変更
- digest-auto/SKILL.md: サンプルパスを変数形式に変更
- ドキュメント間のバージョン不整合を解消
- プラグイン名(@Toybox → @Plugins-Weave)の統一
- ファイル命名規則の説明を正確な形式に修正
- 初回リリース
- 8階層の記憶構造(Weekly〜Centurial)
/digestコマンド@digest-setupスキル@digest-configスキル@digest-autoスキル- DigestAnalyzerエージェント
- GrandDigest/ShadowGrandDigest管理
- Provisional/Regular Digest生成
- まだらボケ検出機能
- MAJOR: 互換性のない変更
- MINOR: 後方互換性のある機能追加
- PATCH: 後方互換性のあるバグ修正
EpisodicRAG by Weave | GitHub