[{"data":1,"prerenderedAt":942},["ShallowReactive",2],{"navigation_docs":3,"-docs-memory-search-and-lifecycle":356,"-docs-memory-search-and-lifecycle-surround":937},[4,8,34,64,90,139,157,171,193,227,241,266,312,334],{"title":5,"path":6,"stem":7},"Documentation","\u002Fdocs","docs\u002Findex",{"title":9,"path":10,"stem":11,"children":12},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started\u002Findex",[13,14,18,22,26,30],{"title":9,"path":10,"stem":11},{"title":15,"path":16,"stem":17},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F01.getting-started\u002F01.introduction",{"title":19,"path":20,"stem":21},"Concepts","\u002Fdocs\u002Fgetting-started\u002Fconcepts","docs\u002F01.getting-started\u002F02.concepts",{"title":23,"path":24,"stem":25},"Quickstart (5 minutes)","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002F01.getting-started\u002F03.quickstart",{"title":27,"path":28,"stem":29},"Local development","\u002Fdocs\u002Fgetting-started\u002Flocal-development","docs\u002F01.getting-started\u002F04.local-development",{"title":31,"path":32,"stem":33},"FAQ","\u002Fdocs\u002Fgetting-started\u002Ffaq","docs\u002F01.getting-started\u002F05.faq",{"title":35,"path":36,"stem":37,"children":38},"Architecture","\u002Fdocs\u002Farchitecture","docs\u002F02.architecture\u002Findex",[39,40,44,48,52,56,60],{"title":35,"path":36,"stem":37},{"title":41,"path":42,"stem":43},"Architecture overview","\u002Fdocs\u002Farchitecture\u002Foverview","docs\u002F02.architecture\u002F01.overview",{"title":45,"path":46,"stem":47},"Services","\u002Fdocs\u002Farchitecture\u002Fservices","docs\u002F02.architecture\u002F02.services",{"title":49,"path":50,"stem":51},"Request lifecycle","\u002Fdocs\u002Farchitecture\u002Frequest-lifecycle","docs\u002F02.architecture\u002F03.request-lifecycle",{"title":53,"path":54,"stem":55},"Data model","\u002Fdocs\u002Farchitecture\u002Fdata-model","docs\u002F02.architecture\u002F04.data-model",{"title":57,"path":58,"stem":59},"Status and evidence","\u002Fdocs\u002Farchitecture\u002Fstatus-and-evidence","docs\u002F02.architecture\u002F05.status-and-evidence",{"title":61,"path":62,"stem":63},"Target architecture and authority","\u002Fdocs\u002Farchitecture\u002Ftarget-architecture","docs\u002F02.architecture\u002F06.target-architecture",{"title":65,"path":66,"stem":67,"children":68},"Auth","\u002Fdocs\u002Fauth","docs\u002F03.auth\u002Findex",[69,70,74,78,82,86],{"title":65,"path":66,"stem":67},{"title":71,"path":72,"stem":73},"Overview","\u002Fdocs\u002Fauth\u002Foverview","docs\u002F03.auth\u002F01.overview",{"title":75,"path":76,"stem":77},"Organization and agent model","\u002Fdocs\u002Fauth\u002Forg-project-model","docs\u002F03.auth\u002F02.org-project-model",{"title":79,"path":80,"stem":81},"Issuing API keys","\u002Fdocs\u002Fauth\u002Fissuing-api-keys","docs\u002F03.auth\u002F03.issuing-api-keys",{"title":83,"path":84,"stem":85},"Multi-tenant RLS","\u002Fdocs\u002Fauth\u002Fmulti-tenant-rls","docs\u002F03.auth\u002F04.multi-tenant-rls",{"title":87,"path":88,"stem":89},"Operator sessions and step-up","\u002Fdocs\u002Fauth\u002Foperator-sessions","docs\u002F03.auth\u002F05.operator-sessions",{"title":91,"path":92,"stem":93,"children":94},"Proxy","\u002Fdocs\u002Fproxy","docs\u002F04.proxy\u002Findex",[95,96,99,103,107,111,115,119,123,127,131,135],{"title":91,"path":92,"stem":93},{"title":71,"path":97,"stem":98},"\u002Fdocs\u002Fproxy\u002Foverview","docs\u002F04.proxy\u002F01.overview",{"title":100,"path":101,"stem":102},"Authentication","\u002Fdocs\u002Fproxy\u002Fauthentication","docs\u002F04.proxy\u002F02.authentication",{"title":104,"path":105,"stem":106},"Request routing","\u002Fdocs\u002Fproxy\u002Frequest-routing","docs\u002F04.proxy\u002F03.request-routing",{"title":108,"path":109,"stem":110},"Sessions","\u002Fdocs\u002Fproxy\u002Fsessions","docs\u002F04.proxy\u002F04.sessions",{"title":112,"path":113,"stem":114},"Directives","\u002Fdocs\u002Fproxy\u002Fdirectives","docs\u002F04.proxy\u002F05.directives",{"title":116,"path":117,"stem":118},"Idempotency and budgets","\u002Fdocs\u002Fproxy\u002Fidempotency-and-budgets","docs\u002F04.proxy\u002F06.idempotency-and-budgets",{"title":120,"path":121,"stem":122},"Rate limiting","\u002Fdocs\u002Fproxy\u002Frate-limiting","docs\u002F04.proxy\u002F07.rate-limiting",{"title":124,"path":125,"stem":126},"Provider adapters","\u002Fdocs\u002Fproxy\u002Fprovider-adapters","docs\u002F04.proxy\u002F08.provider-adapters",{"title":128,"path":129,"stem":130},"Auth caching","\u002Fdocs\u002Fproxy\u002Fauth-caching","docs\u002F04.proxy\u002F09.auth-caching",{"title":132,"path":133,"stem":134},"Configuration","\u002Fdocs\u002Fproxy\u002Fconfiguration","docs\u002F04.proxy\u002F10.configuration",{"title":136,"path":137,"stem":138},"Provider routing and resilience","\u002Fdocs\u002Fproxy\u002Fprovider-routing-and-resilience","docs\u002F04.proxy\u002F11.provider-routing-and-resilience",{"title":140,"path":141,"stem":142,"children":143},"Memory","\u002Fdocs\u002Fmemory","docs\u002F05.memory\u002Findex",[144,145,149,153],{"title":140,"path":141,"stem":142},{"title":146,"path":147,"stem":148},"Memory overview","\u002Fdocs\u002Fmemory\u002Foverview","docs\u002F05.memory\u002F01.overview",{"title":150,"path":151,"stem":152},"Write path","\u002Fdocs\u002Fmemory\u002Fwrite-path","docs\u002F05.memory\u002F02.write-path",{"title":154,"path":155,"stem":156},"Search and lifecycle","\u002Fdocs\u002Fmemory\u002Fsearch-and-lifecycle","docs\u002F05.memory\u002F03.search-and-lifecycle",{"title":158,"path":159,"stem":160,"children":161},"Context","\u002Fdocs\u002Fcontext","docs\u002F06.context\u002Findex",[162,163,167],{"title":158,"path":159,"stem":160},{"title":164,"path":165,"stem":166},"Assembly pipeline","\u002Fdocs\u002Fcontext\u002Foverview","docs\u002F06.context\u002F01.overview",{"title":168,"path":169,"stem":170},"Ranking and packing","\u002Fdocs\u002Fcontext\u002Franking-and-packing","docs\u002F06.context\u002F02.ranking-and-packing",{"title":172,"path":173,"stem":174,"children":175},"Intelligence","\u002Fdocs\u002Fintelligence","docs\u002F07.intelligence\u002Findex",[176,177,181,185,189],{"title":172,"path":173,"stem":174},{"title":178,"path":179,"stem":180},"Workers","\u002Fdocs\u002Fintelligence\u002Fworkers","docs\u002F07.intelligence\u002F01.workers",{"title":182,"path":183,"stem":184},"Extraction","\u002Fdocs\u002Fintelligence\u002Fextraction","docs\u002F07.intelligence\u002F02.extraction",{"title":186,"path":187,"stem":188},"Embedder","\u002Fdocs\u002Fintelligence\u002Fembedder","docs\u002F07.intelligence\u002F03.embedder",{"title":190,"path":191,"stem":192},"Extraction evaluation","\u002Fdocs\u002Fintelligence\u002Fevaluation","docs\u002F07.intelligence\u002F04.evaluation",{"title":194,"path":195,"stem":196,"children":197},"API reference","\u002Fdocs\u002Fapi-reference","docs\u002F08.api-reference\u002Findex",[198,199,203,207,211,215,219,223],{"title":194,"path":195,"stem":196},{"title":200,"path":201,"stem":202},"Chat completions","\u002Fdocs\u002Fapi-reference\u002Fchat-completions","docs\u002F08.api-reference\u002F01.chat-completions",{"title":204,"path":205,"stem":206},"Responses","\u002Fdocs\u002Fapi-reference\u002Fresponses","docs\u002F08.api-reference\u002F02.responses",{"title":208,"path":209,"stem":210},"Errors","\u002Fdocs\u002Fapi-reference\u002Ferrors","docs\u002F08.api-reference\u002F03.errors",{"title":212,"path":213,"stem":214},"Health and metrics","\u002Fdocs\u002Fapi-reference\u002Fproxy-health","docs\u002F08.api-reference\u002F04.proxy-health",{"title":216,"path":217,"stem":218},"HTTP route inventory","\u002Fdocs\u002Fapi-reference\u002Fhttp-routes","docs\u002F08.api-reference\u002F05.http-routes",{"title":220,"path":221,"stem":222},"Management API","\u002Fdocs\u002Fapi-reference\u002Fmanagement-api","docs\u002F08.api-reference\u002F06.management-api",{"title":224,"path":225,"stem":226},"Auth gRPC (ValidateToken, ValidateAgent)","\u002Fdocs\u002Fapi-reference\u002Fauth-grpc","docs\u002F08.api-reference\u002F07.auth-grpc",{"title":228,"path":229,"stem":230,"children":231},"MCP","\u002Fdocs\u002Fmcp","docs\u002F09.mcp\u002Findex",[232,233,237],{"title":228,"path":229,"stem":230},{"title":234,"path":235,"stem":236},"Memory server","\u002Fdocs\u002Fmcp\u002Fmemory-server","docs\u002F09.mcp\u002F01.memory-server",{"title":238,"path":239,"stem":240},"Operator gateway","\u002Fdocs\u002Fmcp\u002Foperator-gateway","docs\u002F09.mcp\u002F02.operator-gateway",{"title":242,"path":243,"stem":244,"children":245},"Security","\u002Fdocs\u002Fsecurity","docs\u002F10.security\u002Findex",[246,247,251,254,258,262],{"title":242,"path":243,"stem":244},{"title":248,"path":249,"stem":250},"Security overview","\u002Fdocs\u002Fsecurity\u002Foverview","docs\u002F10.security\u002F01.overview",{"title":100,"path":252,"stem":253},"\u002Fdocs\u002Fsecurity\u002Fauthentication","docs\u002F10.security\u002F02.authentication",{"title":255,"path":256,"stem":257},"Tenant isolation","\u002Fdocs\u002Fsecurity\u002Ftenant-isolation","docs\u002F10.security\u002F03.tenant-isolation",{"title":259,"path":260,"stem":261},"Secrets and keys","\u002Fdocs\u002Fsecurity\u002Fsecrets-and-keys","docs\u002F10.security\u002F04.secrets-and-keys",{"title":263,"path":264,"stem":265},"Prompt injection","\u002Fdocs\u002Fsecurity\u002Fprompt-injection","docs\u002F10.security\u002F05.prompt-injection",{"title":267,"path":268,"stem":269,"children":270},"Operations","\u002Fdocs\u002Foperations","docs\u002F11.operations\u002Findex",[271,272,276,280,284,288,292,296,300,304,308],{"title":267,"path":268,"stem":269},{"title":273,"path":274,"stem":275},"Observability","\u002Fdocs\u002Foperations\u002Fobservability","docs\u002F11.operations\u002F01.observability",{"title":277,"path":278,"stem":279},"Traces and ClickHouse","\u002Fdocs\u002Foperations\u002Ftraces-and-clickhouse","docs\u002F11.operations\u002F02.traces-and-clickhouse",{"title":281,"path":282,"stem":283},"Health checks","\u002Fdocs\u002Foperations\u002Fhealth-checks","docs\u002F11.operations\u002F03.health-checks",{"title":285,"path":286,"stem":287},"Incident response","\u002Fdocs\u002Foperations\u002Fincident-response","docs\u002F11.operations\u002F04.incident-response",{"title":289,"path":290,"stem":291},"Troubleshooting","\u002Fdocs\u002Foperations\u002Ftroubleshooting","docs\u002F11.operations\u002F05.troubleshooting",{"title":293,"path":294,"stem":295},"Billing and budgets","\u002Fdocs\u002Foperations\u002Fbilling-and-budgets","docs\u002F11.operations\u002F06.billing-and-budgets",{"title":297,"path":298,"stem":299},"Evidence and relay","\u002Fdocs\u002Foperations\u002Fevidence-and-relay","docs\u002F11.operations\u002F07.evidence-and-relay",{"title":301,"path":302,"stem":303},"Console","\u002Fdocs\u002Foperations\u002Fconsole","docs\u002F11.operations\u002F08.console",{"title":305,"path":306,"stem":307},"Failure modes and recovery","\u002Fdocs\u002Foperations\u002Ffailure-and-recovery","docs\u002F11.operations\u002F09.failure-and-recovery",{"title":309,"path":310,"stem":311},"Data lifecycle and deletion","\u002Fdocs\u002Foperations\u002Fdata-lifecycle-and-deletion","docs\u002F11.operations\u002F10.data-lifecycle-and-deletion",{"title":313,"path":314,"stem":315,"children":316},"Deployment","\u002Fdocs\u002Fdeployment","docs\u002F12.deployment\u002Findex",[317,318,322,326,330],{"title":313,"path":314,"stem":315},{"title":319,"path":320,"stem":321},"Docker Compose (dev)","\u002Fdocs\u002Fdeployment\u002Fdocker-compose","docs\u002F12.deployment\u002F01.docker-compose",{"title":323,"path":324,"stem":325},"Environment variables","\u002Fdocs\u002Fdeployment\u002Fenvironment-variables","docs\u002F12.deployment\u002F02.environment-variables",{"title":327,"path":328,"stem":329},"Kubernetes","\u002Fdocs\u002Fdeployment\u002Fkubernetes","docs\u002F12.deployment\u002F03.kubernetes",{"title":331,"path":332,"stem":333},"Production readiness","\u002Fdocs\u002Fdeployment\u002Fproduction-readiness","docs\u002F12.deployment\u002F04.production-readiness",{"title":335,"path":336,"stem":337,"children":338},"Reference","\u002Fdocs\u002Freference","docs\u002F13.reference\u002Findex",[339,340,344,348,352],{"title":335,"path":336,"stem":337},{"title":341,"path":342,"stem":343},"Glossary","\u002Fdocs\u002Freference\u002Fglossary","docs\u002F13.reference\u002F01.glossary",{"title":345,"path":346,"stem":347},"Roadmap and gates","\u002Fdocs\u002Freference\u002Froadmap","docs\u002F13.reference\u002F02.roadmap",{"title":349,"path":350,"stem":351},"Architecture decisions","\u002Fdocs\u002Freference\u002Fadr","docs\u002F13.reference\u002F03.adr",{"title":353,"path":354,"stem":355},"Compatibility and versioning","\u002Fdocs\u002Freference\u002Fcompatibility","docs\u002F13.reference\u002F04.compatibility",{"id":357,"title":154,"audience":358,"author":359,"authorUrl":359,"body":360,"coverIndex":359,"coverLabel":359,"coverTone":359,"date":359,"decisionStatus":359,"description":928,"excerpt":359,"extension":929,"featured":930,"historical":930,"meta":931,"navigation":932,"path":155,"readingTime":359,"scope":933,"seo":934,"sourceOfTruth":935,"status":370,"stem":156,"tags":359,"verifiedDate":371,"__hash__":936},"docs\u002Fdocs\u002F05.memory\u002F03.search-and-lifecycle.md","integrator",null,{"type":361,"value":362,"toc":916},"minimark",[363,367,372,377,388,458,488,506,509,513,516,557,573,577,654,690,694,704,707,715,718,722,725,779,786,790,808,812,818,821,838,844,848,862,866,883,887,912],[364,365,366],"p",{},"Reads are tenant- and agent-scoped. Durable search uses pgvector; the hot-cache path is optional. The forget route exists but is not an accepted public lifecycle contract.",[368,369],"page-status",{"status":370,"verified":371},"PROVISIONAL","2026-10-21",[373,374,376],"h2",{"id":375},"search-request","Search request",[364,378,379,383,384,387],{},[380,381,382],"code",{},"POST \u002Fv1\u002Fmemories\u002Fsearch"," requires ",[380,385,386],{},"memory:read"," and accepts:",[389,390,391,404],"table",{},[392,393,394],"thead",{},[395,396,397,401],"tr",{},[398,399,400],"th",{},"Field",[398,402,403],{},"Rules",[405,406,407,418,428,438,448],"tbody",{},[395,408,409,415],{},[410,411,412],"td",{},[380,413,414],{},"agent_id",[410,416,417],{},"Required; the agent scope is not inferred from a client body",[395,419,420,425],{},[410,421,422],{},[380,423,424],{},"query",[410,426,427],{},"1–10,000 characters",[395,429,430,435],{},[410,431,432],{},[380,433,434],{},"limit",[410,436,437],{},"1–50; default 10",[395,439,440,445],{},[410,441,442],{},[380,443,444],{},"min_similarity",[410,446,447],{},"Optional 0–1; defaults to the configured ANN cutoff (0.70)",[395,449,450,455],{},[410,451,452],{},[380,453,454],{},"min_confidence",[410,456,457],{},"0–1; default 0",[364,459,460,461,464,465,468,469,472,473,476,477,480,481,484,485,487],{},"The response returns ",[380,462,463],{},"results[]",", each with the memory, its retrieval ",[380,466,467],{},"similarity",", a ",[380,470,471],{},"rank",", and a ",[380,474,475],{},"source"," of ",[380,478,479],{},"vector"," or ",[380,482,483],{},"full_text",". ",[380,486,467],{}," is the retrieval metric, not the final composite score:",[489,490,491,495],"ul",{},[492,493,494],"li",{},"Vector: cosine similarity.",[492,496,497,498,501,502,505],{},"Full text: ",[380,499,500],{},"ts_rank_cd"," clamped to ",[380,503,504],{},"[0, 1]",".",[364,507,508],{},"The final order is a composite score, so a lower-similarity but much more recent, useful, or confident memory can outrank a stale near-match.",[373,510,512],{"id":511},"two-stage-filtering","Two-stage filtering",[364,514,515],{},"Do not confuse these thresholds:",[389,517,518,531],{},[392,519,520],{},[395,521,522,525,528],{},[398,523,524],{},"Stage",[398,526,527],{},"Default",[398,529,530],{},"Purpose",[405,532,533,546],{},[395,534,535,540,543],{},[410,536,537,538],{},"ANN ",[380,539,444],{},[410,541,542],{},"0.70",[410,544,545],{},"Drops vector candidates before hydration",[395,547,548,551,554],{},[410,549,550],{},"Composite relevance floor",[410,552,553],{},"0.15",[410,555,556],{},"Drops candidates whose relevance component is below the floor before composite scoring",[364,558,559,560,563,564,566,567,569,570,572],{},"Full-text hits have no cosine score. For composite scoring they use a fixed relevance sentinel of ",[380,561,562],{},"0.5","; the HTTP ",[380,565,467],{}," still reports ",[380,568,500],{},". The relevance floor is constrained to stay below ",[380,571,562],{},", otherwise full-text hits would be mass-excluded.",[373,574,576],{"id":575},"retrieval-flow","Retrieval flow",[578,579,584],"pre",{"className":580,"code":581,"language":582,"meta":583,"style":583},"language-mermaid shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","flowchart LR\n  Q[\"Query\"] --> Embed[\"Embed\"]\n  Embed --> ANN[\"HNSW top-k\"]\n  ANN --> Sparse{\"hits \u003C limit?\"}\n  Sparse -->|yes| FTS[\"GIN full-text\"]\n  Sparse -->|no| Merge\n  FTS --> Merge[\"Merge by ID\"]\n  Merge --> Hydrate[\"Hydrate active rows\"]\n  Hydrate --> PII[\"Tier-1 PII re-check\"]\n  PII --> Rank[\"Relevance floor + composite rank\"]\n  Rank --> Out[\"Bounded response\"]\n","mermaid","",[380,585,586,594,600,606,612,618,624,630,636,642,648],{"__ignoreMap":583},[587,588,591],"span",{"class":589,"line":590},"line",1,[587,592,593],{},"flowchart LR\n",[587,595,597],{"class":589,"line":596},2,[587,598,599],{},"  Q[\"Query\"] --> Embed[\"Embed\"]\n",[587,601,603],{"class":589,"line":602},3,[587,604,605],{},"  Embed --> ANN[\"HNSW top-k\"]\n",[587,607,609],{"class":589,"line":608},4,[587,610,611],{},"  ANN --> Sparse{\"hits \u003C limit?\"}\n",[587,613,615],{"class":589,"line":614},5,[587,616,617],{},"  Sparse -->|yes| FTS[\"GIN full-text\"]\n",[587,619,621],{"class":589,"line":620},6,[587,622,623],{},"  Sparse -->|no| Merge\n",[587,625,627],{"class":589,"line":626},7,[587,628,629],{},"  FTS --> Merge[\"Merge by ID\"]\n",[587,631,633],{"class":589,"line":632},8,[587,634,635],{},"  Merge --> Hydrate[\"Hydrate active rows\"]\n",[587,637,639],{"class":589,"line":638},9,[587,640,641],{},"  Hydrate --> PII[\"Tier-1 PII re-check\"]\n",[587,643,645],{"class":589,"line":644},10,[587,646,647],{},"  PII --> Rank[\"Relevance floor + composite rank\"]\n",[587,649,651],{"class":589,"line":650},11,[587,652,653],{},"  Rank --> Out[\"Bounded response\"]\n",[489,655,656,663,670,673,684,687],{},[492,657,658,659,662],{},"The vector path sets ",[380,660,661],{},"hnsw.ef_search"," per transaction.",[492,664,665,666,669],{},"Full-text fallback is controlled by ",[380,667,668],{},"IBEX_MEMORY_SEARCH_FALLBACK_ENABLED"," and only runs for a searchable query when vector hits are below the limit.",[492,671,672],{},"Duplicate IDs keep the vector candidate.",[492,674,675,676,679,680,683],{},"Only ",[380,677,678],{},"status = active"," and ",[380,681,682],{},"deleted_at IS NULL"," rows are returned.",[492,685,686],{},"A read-path Tier-1 structured-PII re-check drops hits containing raw email, phone, SSN, credit-card, or IPv4 patterns rather than returning them.",[492,688,689],{},"PostgreSQL is required for durable reads; Redis is not.",[373,691,693],{"id":692},"hot-cache","Hot cache",[364,695,696,699,700,703],{},[380,697,698],{},"GET \u002Fv1\u002Fmemories\u002Fhot"," is a Redis sorted-set read, not semantic search. It returns the per-agent hot set ordered by the write-time composite score, with relevance fixed at ",[380,701,702],{},"1.0"," because no query exists at write time.",[364,705,706],{},"Keys are tenant-prefixed:",[578,708,713],{"className":709,"code":711,"language":712,"meta":583},[710],"language-text","{org_id}:memory:{memory_id}\n{org_id}:hot_memories:{agent_id}\n","text",[380,714,711],{"__ignoreMap":583},[364,716,717],{},"The hot set is capacity-bounded (50) and trimmed on write. The default read limit is 20. A Redis miss or outage must not widen scope; the durable PostgreSQL path remains the source of truth. Hot hits also pass the Tier-1 PII re-check.",[373,719,721],{"id":720},"scoring-inputs","Scoring inputs",[364,723,724],{},"The composite uses five components with defaults:",[389,726,727,737],{},[392,728,729],{},[395,730,731,734],{},[398,732,733],{},"Component",[398,735,736],{},"Weight",[405,738,739,747,755,763,771],{},[395,740,741,744],{},[410,742,743],{},"Relevance",[410,745,746],{},"0.40",[395,748,749,752],{},[410,750,751],{},"Recency",[410,753,754],{},"0.25",[395,756,757,760],{},[410,758,759],{},"Usefulness",[410,761,762],{},"0.20",[395,764,765,768],{},[410,766,767],{},"Confidence",[410,769,770],{},"0.10",[395,772,773,776],{},[410,774,775],{},"Access frequency",[410,777,778],{},"0.05",[364,780,781,782,785],{},"Recency uses category half-lives over the memory's ",[380,783,784],{},"valid_from",", with the full label set when present. Access frequency is capped at 10 retrievals. These weights are policy inputs, not a claim of semantic correctness.",[373,787,789],{"id":788},"feedback","Feedback",[364,791,792,795,796,799,800,803,804,807],{},[380,793,794],{},"POST \u002Fv1\u002Fmemories\u002F{memory_id}\u002Ffeedback"," records ",[380,797,798],{},"positive",", ",[380,801,802],{},"negative",", or ",[380,805,806],{},"neutral"," with scope validation. Feedback updates the usefulness score and refreshes the hot-cache entry. It is evidence about retrieval quality; it does not rewrite memory content or make a false memory true.",[373,809,811],{"id":810},"forget-and-tombstones","Forget and tombstones",[364,813,814,817],{},[380,815,816],{},"POST \u002Fv1\u002Fmemories\u002F{memory_id}\u002Fforget"," is a provisional GAP-007 contract. It requires the caller's expected lifecycle revision and writes a revision-fenced tombstone in one transaction.",[364,819,820],{},"A successful forget:",[489,822,823,826,829,832,835],{},[492,824,825],{},"Sets a tombstone and increments the lifecycle revision.",[492,827,828],{},"Invalidates workers that captured the pre-forget source-session revision.",[492,830,831],{},"Removes the hot-cache entry after the authoritative commit.",[492,833,834],{},"Makes all reads, searches, feedback, dedup, and conflict candidate loads ignore the row.",[492,836,837],{},"Rejects a stale expected revision instead of overwriting a newer lifecycle state.",[839,840,843],"callout",{"title":841,"type":842},"Not an accepted deletion contract","warning","The forget route is locally implemented but not accepted as a public lifecycle contract. Full-store deletion, projection fencing, restore behavior, and independent verification remain open.",[373,845,847],{"id":846},"what-the-evidence-supports","What the evidence supports",[489,849,850,853,856,859],{},[492,851,852],{},"HNSW and GIN index usage are exercised by integration tests.",[492,854,855],{},"Cross-org, cross-agent, and inactive-row boundaries are tested.",[492,857,858],{},"Revision-fenced forget and cache invalidation are covered by local tests.",[492,860,861],{},"The D1\u002FD2 operator read paths expose metadata only; raw memory content is not an operator shortcut.",[373,863,865],{"id":864},"what-it-does-not-support","What it does not support",[489,867,868,871,874,877,880],{},[492,869,870],{},"A guarantee that every derived copy (cache, trace, analytic projection) is deleted at the same instant.",[492,872,873],{},"Exactly-once projection effects across PostgreSQL and ClickHouse.",[492,875,876],{},"A complete tenant-isolation proof for backups and archives.",[492,878,879],{},"Semantic quality or hosted latency evidence for search ranking.",[492,881,882],{},"A public lifecycle contract with checkpoints, provenance, and retention enforcement.",[373,884,886],{"id":885},"related","Related",[489,888,889,896,901,907],{},[492,890,891,895],{},[892,893,894],"a",{"href":151},"Memory writes"," — dedup, PII, conflict, and labels",[492,897,898,900],{},[892,899,309],{"href":310}," — purge, legal holds, and receipts",[492,902,903,906],{},[892,904,905],{"href":169},"Context ranking and packing"," — how retrieved memories are packed",[492,908,909,911],{},[892,910,255],{"href":256}," — cross-tenant read rules",[913,914,915],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":583,"searchDepth":596,"depth":596,"links":917},[918,919,920,921,922,923,924,925,926,927],{"id":375,"depth":596,"text":376},{"id":511,"depth":596,"text":512},{"id":575,"depth":596,"text":576},{"id":692,"depth":596,"text":693},{"id":720,"depth":596,"text":721},{"id":788,"depth":596,"text":789},{"id":810,"depth":596,"text":811},{"id":846,"depth":596,"text":847},{"id":864,"depth":596,"text":865},{"id":885,"depth":596,"text":886},"The vector-plus-full-text read path, composite ranking, hot cache, feedback, and the provisional tombstone contract.","md",false,{},true,"provisional",{"title":154,"description":928},"services\u002Fmemory\u002Fapp\u002Fread; services\u002Fmemory\u002Fapp\u002Fscoring; services\u002Fmemory\u002Fapp\u002Flifecycle.py","1SNxdFSzIbpg0VOTJsdP1M_aj0kEDIwAU9kLuEwXQv4",[938,940],{"title":150,"path":151,"stem":152,"description":939,"children":-1},"How a memory moves from validated input through PII, dedup, conflict handling, labels, and durable storage.",{"title":158,"path":159,"stem":160,"description":941,"children":-1},"Budgeting, parallel retrieval, ranking, packing, formatting, and safe degradation for LLM context.",1792875075779]