python 3.12.15 numpy 2.5.4 20 tenants x 200 docs = 4000 chunks, dim 256, k=5, 90 queries per tenant (1800 per design) == retrieval designs: queries with a leak / total, leaked chunks, queries returning < k results == no filter: leaked queries 1800/1800, leaked chunks 7975, short results 0/1800 own-content leaked 600/600 chunks 2276 short 0 copied-other-tenant leaked 600/600 chunks 2874 short 0 generic leaked 600/600 chunks 2825 short 0 prompt-only rule: leaked queries 1800/1800, leaked chunks 7975, short results 0/1800 own-content leaked 600/600 chunks 2276 short 0 copied-other-tenant leaked 600/600 chunks 2874 short 0 generic leaked 600/600 chunks 2825 short 0 post-filter top-50: leaked queries 0/1800, leaked chunks 0, short results 1536/1800 own-content leaked 0/600 chunks 0 short 454 copied-other-tenant leaked 0/600 chunks 0 short 539 generic leaked 0/600 chunks 0 short 543 filter skipped when tenant falsy: leaked queries 0/1800, leaked chunks 0, short results 0/1800 own-content leaked 0/600 chunks 0 short 0 copied-other-tenant leaked 0/600 chunks 0 short 0 generic leaked 0/600 chunks 0 short 0 partitioned (pre-filter, fail closed): leaked queries 0/1800, leaked chunks 0, short results 0/1800 own-content leaked 0/600 chunks 0 short 0 copied-other-tenant leaked 0/600 chunks 0 short 0 generic leaked 0/600 chunks 0 short 0 == edge-case auth inputs against 'filter skipped when tenant falsy' vs 'partitioned' == tenant='' falsy-bug: returned 5 chunks, 3 tenants partitioned: PermissionError tenant=None falsy-bug: returned 5 chunks, 3 tenants partitioned: PermissionError tenant='t99' (unknown) falsy-bug: returned 0 chunks, 0 tenants partitioned: PermissionError == semantic/answer cache == cache keyed by query only : hits 20/20, leaked answers 20/20 cache keyed by (tenant, query): hits 0/20, leaked answers 0/20