"""Test source dependencies of cached answers without calling a retriever or LLM."""
import copy,json
from pathlib import Path
base={'a':dict(live=True,version=3,allowed={'alice'}),
      'b':dict(live=True,version=7,allowed={'alice'})}
answers={'one-source':{'a':3},'two-source':{'a':3,'b':7}}

def permitted(deps,state,user):
    return all(doc in state and state[doc]['live'] and user in state[doc]['allowed']
               and state[doc]['version']==version for doc,version in deps.items())

rows=[]
for name in ['unchanged','revoke-a','delete-a','update-b','missing-a']:
    state=copy.deepcopy(base)
    if name=='revoke-a':state['a']['allowed']=set()
    if name=='delete-a':state['a']['live']=False
    if name=='update-b':state['b']['version']=8
    if name=='missing-a':del state['a']
    for answer,deps in answers.items():
        current=permitted(deps,state,'alice')
        expected=name=='unchanged' or (name=='update-b' and answer=='one-source')
        assert current==expected
        rows.append(dict(change=name,answer=answer,naive_cache_serves=True,guard_serves=current,
                         unsafe_naive_serve=not current))
assert sum(r['unsafe_naive_serve'] for r in rows)==7
assert permitted(answers['one-source'],base,'bob') is False
result=dict(cases=rows,unsafe_naive_serves=7,guard_allowed=3,guard_denied=7,
            extra_cross_user_check='denied',assertions='passed',
            scope='Local current-state predicate, not vector search, LLM behavior or erasure proof')
Path(__file__).with_name('results.json').write_text(json.dumps(result,indent=2)+'\n')
print(json.dumps(result,indent=2))
