[{"data":1,"prerenderedAt":830},["ShallowReactive",2],{"navigation_docs":3,"-docs-context-ranking-and-packing":356,"-docs-context-ranking-and-packing-surround":825},[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":168,"audience":358,"author":359,"authorUrl":359,"body":360,"coverIndex":359,"coverLabel":359,"coverTone":359,"date":359,"decisionStatus":359,"description":816,"excerpt":359,"extension":817,"featured":818,"historical":818,"meta":819,"navigation":820,"path":169,"readingTime":359,"scope":821,"seo":822,"sourceOfTruth":823,"status":367,"stem":170,"tags":359,"verifiedDate":368,"__hash__":824},"docs\u002Fdocs\u002F06.context\u002F02.ranking-and-packing.md","architect",null,{"type":361,"value":362,"toc":801},"minimark",[363,369,373,378,381,444,447,470,473,477,483,493,496,524,528,531,536,539,593,608,619,623,637,643,666,670,673,712,715,719,722,736,740,743,746,750,774,778],[364,365],"page-status",{"note":366,"status":367,"verified":368},"Pipeline is implemented locally; caller auth, exact tokenizer parity, and hosted SLO evidence remain open","PROVISIONAL","2026-10-21",[370,371,372],"p",{},"Context assembly is a bounded selection problem, not “retrieve top-k and concatenate.” The service has to reserve room for the model's response, the directive, recent messages, tool schemas, formatter markup, and safety margin before it can spend tokens on memory.",[374,375,377],"h2",{"id":376},"retrieval","Retrieval",[370,379,380],{},"The service runs three branches concurrently:",[382,383,384,400],"table",{},[385,386,387],"thead",{},[388,389,390,394,397],"tr",{},[391,392,393],"th",{},"Branch",[391,395,396],{},"Source",[391,398,399],{},"Default timeout",[401,402,403,418,431],"tbody",{},[388,404,405,409,412],{},[406,407,408],"td",{},"Directive",[406,410,411],{},"Redis-backed directive lookup",[406,413,414],{},[415,416,417],"code",{},"5ms",[388,419,420,423,426],{},[406,421,422],{},"Hot memory",[406,424,425],{},"Memory service hot-cache reads",[406,427,428],{},[415,429,430],{},"15ms",[388,432,433,436,439],{},[406,434,435],{},"Cold memory",[406,437,438],{},"Memory service semantic search",[406,440,441],{},[415,442,443],{},"45ms",[370,445,446],{},"There is no fourth history branch. Recent messages arrive in the request and are token-counted directly; the session checkpoint table stores message hashes, not message text, so the context service cannot read history from it.",[370,448,449,450,453,454,457,458,461,462,465,466,469],{},"The outer retrieval wall is ",[415,451,452],{},"min(IBEX_CONTEXT_TIMEOUT, IBEX_CONTEXT_DEADLINE_MS)"," — by default ",[415,455,456],{},"min(45ms, 40ms)",". A slow branch is cancelled, while already completed branches are kept. Each branch records ",[415,459,460],{},"success",", ",[415,463,464],{},"timeout",", or ",[415,467,468],{},"error"," and can degrade independently.",[370,471,472],{},"Cold search embeds the query inside the memory service. The context service must not call the embedder itself; doing so would pay the embedding latency twice inside the deadline.",[374,474,476],{"id":475},"budget-calculation","Budget calculation",[370,478,479,482],{},[415,480,481],{},"BudgetCalculator"," uses the model capability catalog and a tokenizer-family policy:",[484,485,491],"pre",{"className":486,"code":488,"language":489,"meta":490},[487],"language-text","usable_budget =\n  context_window\n  − response_reserve\n  − safety_buffer\n  − directive_tokens\n  − messages_tokens\n  − tool_schema_tokens\n  − formatter_overhead_tokens\n","text","",[415,492,488],{"__ignoreMap":490},[370,494,495],{},"Key properties:",[497,498,499,503,506,518,521],"ul",{},[500,501,502],"li",{},"The response reserve is bounded: at least 500 tokens, at most 4,096, and by default 15% of the context window, not exceeding the model's max output.",[500,504,505],{},"The safety buffer is a fraction of the context window from the tokenizer policy.",[500,507,508,509,513,514,517],{},"Formatter overhead is estimated ",[510,511,512],"strong",{},"before"," packing: fixed section joins, the nonce-bearing memory wrapper, and the directive safety sentence. This keeps the packer's ",[415,515,516],{},"total_tokens ≤ token_budget"," invariant meaningful after formatting.",[500,519,520],{},"Usable budget is clamped at zero. A budget below 256 tokens is marked constrained.",[500,522,523],{},"Counts are estimates, not exact tokenizer output. The catalog records the estimate kind and tokenizer family so mixed assumptions fail instead of silently combining.",[374,525,527],{"id":526},"memory-ranking","Memory ranking",[370,529,530],{},"There are two different scores, and confusing them produces incorrect expectations.",[532,533,535],"h3",{"id":534},"memory-service-composite","Memory-service composite",[370,537,538],{},"The durable read path ranks hydrated candidates with a weighted sum:",[382,540,541,551],{},[385,542,543],{},[388,544,545,548],{},[391,546,547],{},"Component",[391,549,550],{},"Weight",[401,552,553,561,569,577,585],{},[388,554,555,558],{},[406,556,557],{},"Relevance",[406,559,560],{},"0.40",[388,562,563,566],{},[406,564,565],{},"Recency",[406,567,568],{},"0.25",[388,570,571,574],{},[406,572,573],{},"Usefulness",[406,575,576],{},"0.20",[388,578,579,582],{},[406,580,581],{},"Confidence",[406,583,584],{},"0.10",[388,586,587,590],{},[406,588,589],{},"Access frequency",[406,591,592],{},"0.05",[370,594,595,596,599,600,603,604,607],{},"Recency uses category-specific half-lives. Before the weighted sum, ",[415,597,598],{},"rank_hydrated_hits"," applies a scoring-time relevance floor. The default is ",[415,601,602],{},"0.15","; values at or above ",[415,605,606],{},"0.5"," are rejected so full-text sentinel hits are not mass-excluded.",[370,609,610,611,614,615,618],{},"This is distinct from the retrieval-time cosine cutoff (",[415,612,613],{},"min_similarity",", default ",[415,616,617],{},"0.70"," in the production vector path). The retrieval cutoff runs before hydration; the relevance floor runs after hydration and before composite scoring.",[532,620,622],{"id":621},"context-packer-score","Context packer score",[370,624,625,626,461,629,632,633,636],{},"The context service consumes only ",[415,627,628],{},"similarity",[415,630,631],{},"confidence",", and ",[415,634,635],{},"rank"," from the memory HTTP response. Until memory exposes its numeric composite on that wire, the packer uses a labeled interim score:",[484,638,641],{"className":639,"code":640,"language":489,"meta":490},[487],"interim = 0.85 × similarity + 0.15 × confidence\n",[415,642,640],{"__ignoreMap":490},[370,644,645,646,649,650,653,654,657,658,661,662,665],{},"Both inputs must be finite and in ",[415,647,648],{},"[0, 1]",". The field is named ",[415,651,652],{},"composite_score"," on the internal ",[415,655,656],{},"ScoredMemory"," type for formatter\u002Fproto alignment, but it is ",[510,659,660],{},"not"," the memory-service composite. Per-request ",[415,663,664],{},"AssemblyOptions"," weights are a forward contract and do not yet override this formula.",[374,667,669],{"id":668},"packing","Packing",[370,671,672],{},"The packer solves a 0\u002F1 knapsack under the usable token budget.",[674,675,676,683,686,697,700,703,706],"ol",{},[500,677,678,679,682],{},"Sort candidates by descending interim score, then ",[415,680,681],{},"memory_id"," for deterministic ties.",[500,684,685],{},"Discretize the budget into 16-token buckets.",[500,687,688,689,692,693,696],{},"Run a numpy-vectorized dynamic program when ",[415,690,691],{},"n × (buckets + 1)"," is within the cell ceiling (default ",[415,694,695],{},"70 × 6251",").",[500,698,699],{},"If the table is too large, fall back to score-descending greedy with a bounded consecutive-skip limit.",[500,701,702],{},"Repair the DP result so exact per-memory estimates never exceed the budget.",[500,704,705],{},"Refill and locally improve after repair instead of accepting floor-bucket stranding.",[500,707,708,709,711],{},"Emit packed memories in descending score, then ",[415,710,681],{},".",[370,713,714],{},"The result records whether the DP or greedy path ran, how many candidates were evaluated, how many were excluded for budget, and whether the budget was reached. An empty candidate set is not a truncation; a non-positive budget with candidates present is.",[374,716,718],{"id":717},"formatting","Formatting",[370,720,721],{},"The formatter is deterministic and treats memory as untrusted data:",[497,723,724,727,730,733],{},[500,725,726],{},"Directive, history, memories, and tools have a fixed order.",[500,728,729],{},"Memory blocks use a per-assembly nonce in the opening tag and an explicit safety sentence telling the model to treat the block as data.",[500,731,732],{},"Attribute values and bodies are escaped so a memory cannot forge a closing tag or inject an element boundary.",[500,734,735],{},"The formatter serializes; it never parses memory markup or executes instructions found in a memory.",[374,737,739],{"id":738},"degradation","Degradation",[370,741,742],{},"The proxy may proceed without assembled context when context assembly is disabled, the client is absent, memory is skipped, retrieval fails, or the deadline is exceeded. The fallback is directive-only or history-only context, with headers and metadata recording that assembly was attempted and degraded.",[370,744,745],{},"Degradation is quality loss, not an authorization change. A failed retrieval must not widen visibility or invent a memory.",[374,747,749],{"id":748},"known-limits","Known limits",[497,751,752,762,765,768,771],{},[500,753,754,755,758,759,711],{},"Caller authentication at the context gRPC boundary is not implemented; non-loopback use trusts caller-supplied ",[415,756,757],{},"org_id"," and ",[415,760,761],{},"agent_id",[500,763,764],{},"Token counts are conservative estimates, not an exact model tokenizer.",[500,766,767],{},"The packer optimizes the interim score, not the memory-service composite.",[500,769,770],{},"Per-request weight fields are not wired.",[500,772,773],{},"No hosted p99 or end-to-end assembly SLO exists; the deadlines are local budgets.",[374,775,777],{"id":776},"related","Related",[497,779,780,786,791,796],{},[500,781,782,785],{},[783,784,164],"a",{"href":165}," — service surface and degradation",[500,787,788,790],{},[783,789,154],{"href":155}," — memory-side retrieval and filters",[500,792,793,795],{},[783,794,150],{"href":151}," — how candidates are produced",[500,797,798,800],{},[783,799,49],{"href":50}," — where assembly sits in the proxy path",{"title":490,"searchDepth":802,"depth":802,"links":803},2,[804,805,806,811,812,813,814,815],{"id":376,"depth":802,"text":377},{"id":475,"depth":802,"text":476},{"id":526,"depth":802,"text":527,"children":807},[808,810],{"id":534,"depth":809,"text":535},3,{"id":621,"depth":809,"text":622},{"id":668,"depth":802,"text":669},{"id":717,"depth":802,"text":718},{"id":738,"depth":802,"text":739},{"id":748,"depth":802,"text":749},{"id":776,"depth":802,"text":777},"How retrieved memories become a bounded, deterministic context block without exceeding the model budget.","md",false,{},true,"provisional",{"title":168,"description":816},"services\u002Fcontext\u002Fapp\u002Fretrieval.py; services\u002Fcontext\u002Fapp\u002Fbudget.py; services\u002Fcontext\u002Fapp\u002Fscoring.py; services\u002Fcontext\u002Fapp\u002Fpacker.py; engineering\u002Fadr\u002F0068-composite-relevance-gate.md; engineering\u002Fadr\u002F0069-context-packer-dp-knapsack.md","O8RmEs-YstlghDk9S3U3bWzMBMCjjrnHQInf50u_Ugc",[826,828],{"title":164,"path":165,"stem":166,"description":827,"children":-1},"Bounded retrieval, ranking, packing, formatting, and degradation for agent context.",{"title":172,"path":173,"stem":174,"description":829,"children":-1},"Asynchronous workers, extraction, embeddings, deletion orchestration, and billing rollups.",1792875075962]