"""Greedy-path verification on fixed symbols, not an assistant-model run."""
import json
def verify(prefix,draft,target):
    if not isinstance(draft,str) or not draft:raise ValueError("nonempty draft required")
    if not target.startswith(prefix) or len(prefix)>=len(target):raise ValueError("unfinished target prefix required")
    if len(draft)>len(target)-len(prefix):raise ValueError("draft extends beyond target")
    accepted=""
    for candidate in draft:
        expected=target[len(prefix)+len(accepted)]
        if candidate!=expected:
            return {"accepted":accepted,"target_added":expected,"output":prefix+accepted+expected,"reason":"first_mismatch"}
        accepted+=candidate
    pos=len(prefix)+len(accepted)
    bonus=target[pos] if pos<len(target) else ""
    return {"accepted":accepted,"target_added":bonus,"output":prefix+accepted+bonus,"reason":"all_draft_matched"}
if __name__=="__main__":
    target="ABCDEFG"
    cases=[("","ABX","ABC"),("","ABC","ABCD"),("","XBC","A"),("ABCD","EFG","ABCDEFG")]
    results=[]
    for prefix,draft,expected in cases:
        result=verify(prefix,draft,target)
        assert result["output"]==expected and target.startswith(result["output"])
        results.append({"prefix":prefix,"draft":draft,**result})
    print(json.dumps(results,indent=2))
