digraph MatchDayMemory { graph [rankdir=LR, bgcolor="#f7f8fa", pad="0.3", nodesep="0.34", ranksep="0.56", fontname="Arial", label="MatchDay v3 — Persistent MemoryAgent lifecycle", labelloc="t", fontsize=22, fontcolor="#17202b"]; node [shape=box, style="rounded,filled", fontname="Arial", fontsize=9, color="#b8c3cf", fillcolor="#ffffff", fontcolor="#17202b", margin="0.14,0.09"]; edge [fontname="Arial", fontsize=8, color="#5e6f80", fontcolor="#536273", arrowsize=0.7]; statement [label="User statement / correction / forget\nExplicit package choice", fillcolor="#fff3dc", color="#d7a54d"]; behavior [label="Repeated verified behavior\nDistinct root trips only", fillcolor="#fff3dc", color="#d7a54d"]; extract [label="Grounded candidate extraction\nMinimal source span · typed key/value"]; policy [label="Deterministic memory decision\nADD · UPDATE · DELETE · NONE", fillcolor="#e9f6ef", color="#79b89c"]; subgraph cluster_store { label="Owner-scoped PostgreSQL memory"; color="#79b89c"; style="rounded,filled"; fillcolor="#edf8f2"; fan [label="Fan profile namespace\nDurable preferences"]; trip [label="Trip namespace\nFixture + host + date scoped"]; versions [label="Immutable versions\nSource · confidence · expiry · sensitivity"]; lifecycle [label="Lifecycle ledger\nSupersede · tombstone · decay · reinforce"]; reuse [label="Deduplicated use/outcome ledger\nApplied · impact · conflict · success"]; } query [label="New trip or refinement\nCurrent input stays authoritative", fillcolor="#dbeefa", color="#5b9bc6"]; candidates [label="Scoped candidate retrieval\nOwner + active trip only"]; score [label="Usefulness scoring\nExact · semantic · recency · source\nReuse · impact · conflict · privacy"]; budget [label="Context budget gate\nOne record/key · result + character caps"]; recall [label="Bounded recalled context\nProvenance + precedence visible", fillcolor="#e9f6ef", color="#79b89c"]; planner [label="Qwen planning + deterministic safety\nCurrent trip > profile memory"]; outcome [label="Verified result and user action\nFeeds evidence, never raw provider prose"]; profile [label="Judge-visible profile\nInspect · add · edit · delete · disable"]; statement -> extract; behavior -> extract [label="promotion threshold"]; extract -> policy; policy -> fan [label="durable profile"]; policy -> trip [label="one-trip fact"]; fan -> versions; trip -> versions; versions -> lifecycle; lifecycle -> candidates; reuse -> score; query -> candidates; candidates -> score -> budget -> recall -> planner; query -> planner [label="explicit precedence"]; planner -> outcome; outcome -> reuse; outcome -> behavior; versions -> profile; profile -> policy [label="owner mutation"]; }