アーキテクチャ全体像
3 トラックを 1 枚にまとめた全景図です。実線は主な処理の流れ、トラック間をまたぐ破線はシステムを自律的に動かす 4 本のイベントフローを示します。13 個の group bracket が関連コンポーネントを囲み、各 group のあとにコンポーネントの詳しい説明が続きます。
一、書き込みトラック — 会話が保管庫に入るまで
記憶が保管庫に入るトラック
書き込みトラックでは、記憶の保存を荷物の入庫にたとえています。入口には 3 つの関門があります。最初に「うん、そう」「いいよ」のような中身のない言葉を除き、次に不審な指示を遮断して奇妙な内容によるシステムへの悪影響を防ぎ、最後に既存の情報との重複を止めます。3 つすべてを通過して初めて保管します。これらの関門を設けたのは、何でも保存するとノイズに埋もれて本当に役立つ情報が見つからず、かといって保存しなければ、今話した内容が消えてしまうからです。
保管先も 2 つに分かれます。一方は意味の類似度で保存し、もう一方は人・出来事・物の関係を分解して別に記録します。各記録には出典を付け、あとから元の会話をたどれるようにします。この 3 つの関門と 2 系統の保管の全工程は、こちらの記事に詳しく書きました。
誰かが話した
会話が終わると、バックグラウンドで処理が始まります。
発言が入口に届く
「ひと続きの発言が終わり、残しておきたい」
出典を選ばない · どの session も受け取る
バックグラウンドで作業開始
「書き込んだ瞬間にバックエンドのパイプラインが動き、フロントエンドは待たない」
書き込み直後に起動 · ブロックしない
3 つのセキュリティゲート
保管庫に入る前の 3 段階のフィルタです。順番は入れ替えられません。
無駄話を除く
「挨拶、文字化け、中身のない文字列は先に捨てる」
G1 · 情報密度の低さを判定
露骨な指示の紛れ込みを防ぐ
「『これまでの指示をすべて無視して』のような紛れ込みは、最初の関門で即座に却下」
G2 · 5 種類の注入パターン
偽装を防ぐ
「身分の詐称、時系列の偽装、エンコードによる混入 — 5 種類の偽装を専用に検査」
G2 の姉妹機能 · 5 種類を検知
重複を照合
「過去のものに似すぎている? スキップ、統合、置換、追加のどれにするか決める」
G3 · 4-way の判断
校正と登録
表記を統一してから、2 種類の索引に変換して一緒に登録します。
校正係
「『来週木曜』『2026-04-30』『Apr 30』をすべて同じ表記に統一」
4 つのサブモジュール · 中国語の前処理
指紋に圧縮
「各発言をバーコードのような数字列の指紋に圧縮」
1024 次元 · 常駐サブプロセス
字面の索引
「文字どおりの対応を調べるカード目録で、指紋を補完」
分かち書き索引 · サービス全体の平均長
2 冊の目録を一緒に調べる
「本を探すとき、2 冊の目録を同時に開いて結果を統合・ランキング」
ハイブリッド索引 · 逆順位融合
知識グラフを作る
各発言を関係に分解し、出典を記録します。主処理と並行して進みます。
3 点セットに分解
「誰が → 何をした → 誰に対して、の 3 点セットを抽出」
20 種類の関係 · エンティティの正規化
同一人物を見分ける
「ChatGPT と GPT は同じ相手 — 3 段階の照合で確認」
3 段階 · 正規化 + 指紋 + LLM
出典を記録
「各記録に『誰が、いつ言ったか、どれほど信頼できるか』という履歴を付ける」
出典追跡 · 信頼スコア
並行するパイプライン
「主処理が動く間、グラフも同時に構築し、互いを妨げない」
イベント駆動 · ブロックしない
二、バックグラウンドトラック — 忘れることを学ぶ
忘れることを学ぶトラック
私はバックグラウンドトラックを、保管庫に「忘れる」ことを教える夜勤の棚卸し担当だと考えています。深夜に定期巡回し、5 つの手順を踏みます。まず在庫を確認し、次に最近注目されている情報を探し、重複や矛盾の可能性がある内容を照合・統合し、確認済みの要点を要約に圧縮します。最後に、誰も見なくなった古いデータを要処理としてマークします。このトラックがなければ、倉庫には物が入るばかりで、半年後には何も見つけられないほど散らかってしまいます。
そばには補助役が 2 人います。1 人は粗探しをして自己矛盾する記憶を見つけ、もう 1 人は私の最近の関心を静かに記録して、棚卸し担当が私の気にかける分野から優先して扱えるようにします。この夜勤の全工程と、残すかどうかの判断の仕組みは、こちらの記事に詳しく書きました。
深夜にだけ動く
午前 4 時になり、条件がそろって初めて起動します。
午前 4 時のアラーム
「昼間は邪魔せず、毎日 4 時に整理を始める」
毎日のスケジュール · フロントエンドに影響しない
2 つの起動条件
「前回から 24 時間以上たち、さらに会話が 5 件たまって初めて動く」
時間 + 累積量の両条件
5 段階の夢
夜に眠るように、5 段階で昼間の出来事を整理します。
全体を見る
「まず今日と昨日の差を見て、作業するか決める」
階層別分布のスナップショット
重要なものを探す
「最近繰り返し現れる人・出来事・物を主役として印を付ける」
複数シグナルのエッジ · シード計算
考える
「文脈を読んでから所感を生成し、三者による判定で確認」
三者判定 + 時間的な矛盾の検知
棚に収める
「同義のものを統合し、衝突を解き、乱れを整える」
統合 / 置換 / 共存
退場
「誰も見なくなったものを退場候補として印付けし、倉庫があふれないようにする」
減衰スコア + 階層別要約
真偽の校正係
夢の中でも 4 段階で確認し、矛盾と誤りを拾い上げます。
4 段階で順に確認
「まずグラフを見て、事実を確かめ、LLM に渡し、最後に人が再確認する」
4 段階で順に確認 · 変化しやすい述語
5 種類のシグナル
「共起回数だけでなく、5 種類の手がかりを合わせて判断」
共起 + 会話 + 近隣 + 種類 + 意味
新旧の衝突
「2 つの事実がぶつかったら、三者判定で統合、置換、共存を決める」
統合 / 置換 / 共存 · 上位の判定へ
人の確認に回す
「機械が判断しかねるものは、キューに残して人の再確認を待つ」
自動承認 + 人による補完
関心と探索
事実だけでなく、好み、欠落、意外な発見、古い写真の保管方法も記録します。
3 層の注意力
「7 日は最近、30 日は振り返り、90 日でフェードアウト — 注意力を 3 層に分ける」
活発 / 履歴 / フェードアウト
毎日の日記
「毎日日記を自動で書き、その日によく話した人と出来事を記録」
日次集計 · 話題とエンティティ
欠落を示す
「繰り返し尋ねても見つからないものに『ここに穴がある』と印を付ける」
2 回以上、不正解と判定
意外な発見を掘り出す
「クラスタ間の橋、間接的な強いつながり、知識の欠落という 3 つの入口から意外な発見を探す」
意外な発見のパイプライン · 重み付きコミュニティ検出
好みと習熟度を記録
「出来事だけでなく、好きかどうか、どこまでできるか、上達したかも記録」
10 種類の好みのバージョン履歴 + 3 段階の習熟度
古い写真の白黒サムネイル
「古いデータを白黒サムネイルにして保管し、要約は残すが元には戻さない」
3 段階の縮退 · 一方向の要約
三、想起トラック — 必要な記憶を浮かび上がらせる
記憶を思い出すトラック
私は想起トラックをレストランの接客係にたとえています。客が質問すると、まず質問の種類(事実を調べたいのか、関連を探したいのか、雑談なのか)を判断します。続いて厨房が各倉庫から同時に食材を取り寄せ、品質管理が合わないものを除き、提供前にもう一度安全検査をして内容を確かめます。保存され整理された記憶は、この段階で適切なタイミングに自動的に浮かび上がり、毎回苦労して探す手間を省きます。
さらに、厨房にはバックグラウンドでひそかに下ごしらえをする班がいます。私が次に何を尋ねるかを予測して関連する記憶を先に用意し、私が口を開けばすぐに出せるようにして、処理全体を省きます。注文から提供までの想起の仕組みは、こちらの記事に詳しく書きました。
客に合わせて料理を出す
客が来たら、まず意図を判断し、どの層を探すか決めます。
意図を読む
「事実を調べる、関係を探す、それとも自由に探索する? 6 種類の意図に振り分ける」
6 種類の意図 · キーワードと意味を並行して確認
給仕の記憶
「給仕はあなたのよく頼む料理を覚え、先にその料理を出す」
注意力の事前分布 · 7/30/90 日
層ごとに振り分ける
「質問によって探す層を変え、全部をむやみに調べない」
意図に応じた 4 種類の検索戦略
先に答えを思い描いてから探す
「まず理想的な答えを頭の中で想像し、それを使って照合する」
仮説文書の埋め込み
高速検索
まず倉庫で大まかに絞り、11 段階の重み付けで並べます。よく使う指紋はキャッシュにも残します。
意味で倉庫を探す
「まず意味で探し、似たものの集まりを見つける」
ハイブリッド検索 · 逆順位融合
11 段階のランキング
「新しさ、重要さ、信頼性など、11 の側面を合わせて評価」
新しさ / 重要度 / 信頼 / フィードバック / 減衰など
味付けの比率
「質問の好みによって、味付けの比率を変える」
デフォルト 0.3/0.7 · 意図に応じて微調整
指紋のキャッシュ
「計算済みの指紋を手元にしまい、次回はすぐに取り出す」
キャッシュ · 24 時間で失効
もう一度厳選
大まかに選んだものを精選係に渡しますが、スキップも停止もできます。
精選係
「大まかに選んだものを、精選係が 1 件ずつ詳しく見る」
クロスエンコーダー · 0.6B
首位が圧倒的なら省略
「首位が大きくリードしていれば、もう厳選する必要はない」
3 つのスキップ規則
故障したらスキップ
「精選係が故障したら、10 分間は迂回して全体を止めない」
3 回失敗 → 600 秒間迂回
じっくり考える 5 つの手
じっくり考える経路でだけ使う予備の 5 手です。事実から全体像、最後に自己確認まで進みます。
事実層で隣を探す
「『誰が 何をした 誰に対して』の層から、直接隣のものを拾う」
3 点セットのクエリ
コミュニティ層で関連を探す
「同じ小さな集まりから、関連する人・出来事・物を探す」
コミュニティ検出
要約層で全体を見る
「事前に書いた要約を読み、待たずに全体像をつかむ」
事前生成した要約 · 遅延ゼロ
グラフをたどる
「シードとなるエンティティから出発し、グラフの道をゆっくり進む」
パーソナライズしたランダムウォーク
回答前の自己チェック
「提供前に料理人がもう一口味見し、違っていたら作り直す」
4 段階の検証 · デフォルト/深掘り/判定/オフ
出荷前
形を整えてもう一度消毒し、裏では次の料理もひそかに準備します。
盛り付ける
「字数の予算内で取捨選択し、答えをきれいに並べる」
3 種類のレイアウト · 予算を考慮した梱包
出荷前に再消毒
「提供前にもう一度、汚れたものが混じっていないか確認する」
出力側の検知 + サニタイズ
次の料理をひそかに準備
「あなたがまだ食べている間に、厨房ではもう次の料理を用意している」
5 段階のパイプライン · 入場制御
四、3 つのトラックを貫く設計層
書き込み、バックグラウンド、想起の 3 トラックには、「無駄を削る、複雑さを分ける、例で検証する」という共通の原則があります。各所の細部は、この 3 層の原則を体現しています。
3 層の設計原則
無駄を削り、複雑さを分け、例で検証して、仕組み全体を自律的に動かします。
負担を減らす 3 手
「無駄を削る、複雑さを分ける、例で検証する — 3 トラックの安全検査、分割、自己チェックに対応」
認知負荷の 3 原則
4 本のパイプライン
「4 本のパイプラインがそれぞれの役割を担い、仕組み全体を自律的に動かす」
記憶 / 受信 / 洞察 / 熟考
パイプラインの抽象化
「自動工場では各作業員が 1 つの仕事だけをし、組み合わせるとパイプラインになる」
Operator / Pipeline / Observable
---
ここまでで地図は完成です。Write トラックは会話を収め、Background トラックは整理しながら忘れることを学び、Read トラックは必要な記憶を適切なときに浮かび上がらせます。
3 トラックをつないでいるのは、無駄を削り、複雑さを分け、例で検証する原則です。その姿はどのトラックにも見られます。
もちろん、どんなツールも万能ではありません。理論も技術も使い方も進歩し続け、memvault も時間とともに成長します。この記事は現時点の進捗を写した 1 枚の写真としておきます。将来、大幅な改版があれば別の記事で説明します。memvault 三部作は、いったんここで締めくくります。
アーキテクチャ全体像
13 個の group bracket は、この entry-agnostic pipeline の全景図の下にあるコンポーネント cards に対応し、トラックをまたぐ 4 本の dashed event flows はシステムの自律的な骨格を示します。
一、Write Track
Write Track
記憶の書き込み経路は SanitizeGate が統括し、永続化の前に 3 つの防御線を通ります:
NoiseFilter:情報量のない雑談を除きます。
InjectionGuard + PoisoningDetection:prompt injection とコンテンツ汚染を防ぎます。
DedupOp:embedding cosine で既存データと照合し、十分に似ていればその場で遮断します。
通過すると、 Hybrid Indexingに入ります。ベクトルは memvault.blocks(pgvector 768d)に保存し、知識グラフは L0 Triple(subject/predicate/object)に分解して kg-opsに書き込みます。各データには Provenance(session_id / turn_index)が付いており、あとから追跡できます。また先に ContentNormalizer で形式を統一し、ノイズによる embedding 空間の汚染を防ぎます。
2 系統の書き込みの理論的基礎は、論文 Don't Forget to Connect! Improving RAG with Graph-based Reranking(2405.18414)にあります。完全な pipeline、3 つの防御線の判定基準、KG の抽出戦略は、 memvault Write Track の詳細記事。
Trigger
会話が保存されるとすぐ起動し、バックグラウンドのパイプラインは fire-and-forget で動きます。
Session Input
「entry-agnostic の入口で、どの session も受け取る」
session boundary · 出典を選ばない
after_create Hook
「書き込み直後にバックグラウンドの pipeline を起動し、フロントエンドをブロックしない」
asyncio.ensure_future() · fire-and-forget
Sanitize Gate
順番に通る 3 つのゲートで、non-commutative です。
NoiseFilter (G1)
「挨拶、文字化け、情報密度の低いパターンを削る」
core.noise.NoiseFilter · low-info regex + density
InjectionGuard (G2)
「露骨な prompt-injection を防ぐ」
5 categories · instruction_override / role_tag / encoded / markdown / separator_flood
PoisoningDetection
「G2 の姉妹コンポーネントで、5 種類の偽装を防ぐ」
memvault.security.poisoning · authority/role/markdown/temporal/base64 + Shannon entropy
DedupOp (G3)
「4-way decision で、類似度が高いものは LLM arbitration に回す」
SKIP / MERGE / SUPERSEDE / CREATE · cosine + Contradiction
Normalize & Index
コンテンツを正規化し、Hybrid の 2 種類の索引に登録します。
ContentNormalizer
「時間表現、通貨、単位、中国語の前処理を統一表記にする」
libs/text-ops · 4 つのサブモジュール + preprocess_chinese
Qwen3 Embedding (MLX)
「各記憶を 1024 次元のベクトル指紋に圧縮」
omlx_bridge.py · 1024d · persistent subprocess
BM25 Sparse
「字面の索引で、dense を補完する」
sparse_tokenizer · per-service avgdl
Hybrid Index → Qdrant
「Dense + BM25 RRF で想起結果を融合」
qdrant_search · Reciprocal Rank Fusion
KG Construction
L0 のトリプル抽出 + provenance を、event-driven で並行実行します。
L0 Triple 抽出
「(s, p, o) の 3 点セットを抽出」
20 predicates · entity normalization
Entity Resolution
「3-tier alias の統合:正規化 → 埋め込み → LLM」
3-tier · ChatGPT == GPT
Memory Provenance
「各トリプルに source + trust_score を付ける」
source_tracker · trust_score
Reactive KG Pipe
「event-driven で、主な書き込みをブロックしない」
fire-and-forget · 並行 pipeline
二、Background Track
Background Track
オフライン整理は DreamLoop が毎日 4AM に起動し、 core/src/modules/memvault/dream/ の 5 段階の pipeline で動きます:
orient:記憶の tier ごとの現在のスナップショットを取得します。
signal: MultiSignalEdges(access / cite / co-occur)を集約します。
reflect: TemporalConflictを実行し、二重時間軸(bi-temporal)の矛盾を検知します。
consolidate:階層別の要約(TierDigest)を作り、意味が同じ記憶を統合します。
prune:減衰スコアに基づき、淘汰候補に印を付けます。
別経路では、 KnowledgeLint が 4 段階の審査(グラフ構造 → grounding → LLM → 3 段階の確認)で誤りを修正します。また、 InterestProfile が私の話題の注目度を追跡して SurpriseDiscoveryにフィードバックし、やり取りは少なくても可能性の高い記憶を積極的に掘り出します。
このバックグラウンド整理の設計は、部分的に HippoRAG: Neurobiologically Inspired Long-Term Memory for LLMs(2405.14831)の統合の概念に対応します。Dream Loop の 5 段階の閾値、衝突解決戦略、KnowledgeLint v2 の詳細は、 memvault Background Track の詳細記事。
Trigger
Cronicle のスケジュール + 2 条件のゲートです。
Cronicle 4AM
「毎日 04:00 にスケジュールし、フロントエンドのピークを避ける」
Cronicle 4105 · daily schedule
Dual-Gate
「時間 + 累積量の両条件を満たすと起動」
(now - last) > 24h ∧ sessions_since ≥ 5
Dream Loop
OODA-like の 5 段階:Orient → Signal → Reflect → Consolidate → Prune。
Orient
「tier 分布のスナップショットで差の規模を見る」
tier distribution snapshot
Signal
「PPR seed を計算してシグナルの中心を見つける」
MultiSignalEdges · PPR seed
Reflect
「LLM の三者判定 + 時間的な矛盾の検知」
3-way judge + Temporal Conflict
Consolidate
「merge / supersede / coexist の 3 択」
merge / supersede / coexist
Prune
「decay score に基づき、tier digest も使う」
decay score + tier digest
Knowledge Lint
グラフ構造 → 事実性 → LLM → 人による再確認と、4 段階で順に監査します。
4 段階で順に確認
「graph → grounding → LLM → human」
lint v2 · volatile predicate
MultiSignalEdges
「純粋な共起の代わりに 5 signals fusion を使う」
co-occurrence + session + Adamic-Adar + type + semantic
Temporal Conflict
「LLM 3-way judge で判定し、RLM に引き上げられる」
MERGE / SUPERSEDE / COEXIST · escalate to RLM
Review Queue
「auto-approve + human-in-loop fallback」
low-confidence → human queue
Interest & Discovery
注意力の階層化 + 関心/欠落/意外な発見の掘り起こし + tier の縮退。
Attention Windows
「7/30/90 日の 3 層の注意力」
active / historical / fading
Daily Snapshot
「毎日 top intents/entities を集約」
SQL aggregation · top intents/entities
Knowledge Gap
「verdict=INCORRECT の累計で欠落に印を付ける」
verdict=INCORRECT ≥ 2
Surprise Discovery
「cross-community の橋 / indirect-strong / knowledge-gap」
surprise_ops · Leiden weighted triggers
Attitude + Skill Layer
「10 種類の attitude のバージョン履歴 + L1/L2/L3 skill」
attitude version chain + skill levels
Tier Digest
「warm→cold→frozen の一方向の LLM 要約」
summary ≤ 400 chars · 元に戻せない
三、Read Track
Read Track
読み出し経路の入口は QueryClassifyで、質問の種類に応じて戦略を変えますが、主軸は共通の 11 段階の評価 pipeline です:
QueryRouter:質問を事実、関連、雑談の 3 経路に分けます。
ScoringPipeline:BM25、dense retrieval、知識グラフのホップを組み合わせて並行して評価し、AttnRes intent-dependent の重み付けで統合します。
CascadeRecall:ベクトル検索で見つからない場合、知識グラフに深く入り、多段階で推論します。
Reranker:Jina Reranker v3 MLX で再ランキングします。
OutputFormatter + ReadTimeSanitize:出力前に injection をもう一度検査します。
バックグラウンドには SlowThinkerもあり、会話の SSE ストリームを監視し、次の query を予測して候補 block を prefetch します。予測が当たれば、pipeline 全体をもう一度実行するコストを省けます。
intent-dependent の重み付き統合の理論的根拠は、論文 Attention as a Hint: Detecting Irrelevant Contexts via Attention Weight(2603.15031)にあります。3 経路の振り分け基準、11 段階の評価関数、SlowThinker の予測モデルは、 memvault Read Track の詳細記事 に詳しく書きました。
Query Routing
意図分類 + attention prior + layer routing + HyDE。
QueryClassify
「6 intent を kw ∥ sem で並行判定し、信頼度が低ければ LLM に送る」
6 intent · kw ∥ sem → LLM (low conf)
Personalized Router
「attention prior でよく扱う話題を優先」
attention prior · 7/30/90
Layer Routing Matrix
「intent に応じた 4 種類の検索戦略」
intent → SEMANTIC / HYBRID / ILIKE / SKIP
HyDE Expansion
「まず仮説的な答えを生成し、embed して照合」
Hypothetical Document Embeddings
Fast Search
Hybrid による想起 + 11 段階の重み付け + intent-tuned blending + Redis cache。
qdrant_search
「hybrid Dense + BM25 RRF」
qdrant_search · hybrid + RRF
11-Stage Scoring
「11 段階の重み付けで最終スコアを合成」
recency / import / trust / feedback / length / decay / PPR / semantic / minscore / noise / dedup
Score Blending
「intent-tuned の比率」
default 0.3/0.7 · intent-tuned
Embedding Cache
「Redis に query の埋め込みをキャッシュ」
Redis · 24h TTL
Reranking
Cross-encoder による第 2 段階の精密なランキング + skip + circuit breaker。
Jina Reranker v3
「MLX cross-encoder で精密にランキング」
MLX · 0.6B · cross-encoder
Attention Gate
「3 skip rules、TurboQuant+ に着想を得たもの」
3 skip rules · TurboQuant+ inspired
Circuit Breaker
「3 failures で 600s recovery を起動」
3 failures → 600s recovery
Cascade Recall
Slow-only の 5 手:L0 → L1 → L2 → PPR → CRAG。
L0 Triple
「3 点セットから隣接要素を直接検索」
(s, p, o) lookup
L1 Community
「Leiden community detection」
Leiden detect
L2 Summary
「LLM による事前生成の要約で、遅延ゼロ」
pre-generated · zero-latency
PPR Walk
「igraph PPR、HippoRAG に着想を得たもの」
HippoRAG-inspired igraph PPR
CRAG Verification
「4 モードの自己チェック:default / deep / rlm / none」
evaluate=default/deep/rlm/none
Output
Budget-aware な整形 + 出力側の sanitize + Slow Thinker の別経路。
Output Formatter
「token の予算内で packing」
format=text/json/cards · budget-aware packing
Read-Time Sanitize
「出力側でもう一度サニタイズ」
is_unsafe_for_injection + sanitize_for_injection
Slow Thinker (別経路)
「5-op pipeline で次のラウンドに備える」
5-op pipeline · Admission Control · VoiceAgentRAG-inspired
四、3 つのトラックを貫く設計層
3 トラックに共通する設計層 — CLT が哲学的な frame、4 Event Flows が自律的な骨格、Reactive 抽象が関数合成の基盤です。
Cross-cutting
CLT の 3 原則 + 4 event flows + Reactive 抽象。
CLT の 3 原則
「無駄を削る / 複雑さを分ける / 例で検証する。それぞれ sanitize / segment / verify に対応」
Sweller 1988 · 認知負荷理論
4 Event Flows
「4 本の event-driven pipeline がそれぞれの役割を担う」
Memory→KG / Capture→KG / Intelligence→Block / Query→SlowThinker
Reactive 抽象
「Operator / Pipeline / Observable / Subject の 4 点セット」
libs/ops-core · RxJS-inspired
3 トラックの deep dive は三部作に分かれています。この記事ではそれらを 1 枚の全景図にまとめ、全体を貫く設計層を取り出しました。CLT は私の設計哲学、4 Event Flows は自律的に動く骨格、Reactive 抽象は関数合成の基盤です。
ここに書かなかったものの大半は、長期的な調整が必要なパラメータです。評価の重み、先読みの的中率、カスケードの境界、知識グラフ抽出の信頼度閾値などです。これらの値はデータ分布に応じて毎月微調整するもので、新しいコンポーネントではありません。
もちろん、万能なツールはありません。理論、技術、ツールは進歩し続けており、memvault も進化を重ねます。この記事は現時点の進捗の棚卸しとしておきます。将来、大幅な改版があれば別の記事で説明します。memvault 三部作は、いったんここで締めくくります。