Prepare exact informed-decision catalogue maintenance decision packet
Assistant: codex Assistant-Model: gpt-6.1-sol Assistant-Session: 01a126e1-76f8-7643-8cf3-e93336539ade
This commit is contained in:
parent
c89614ec81
commit
5d80644efa
29 changed files with 2033 additions and 0 deletions
34
tools/validate_catalogue_bootstrap_packet.py
Normal file
34
tools/validate_catalogue_bootstrap_packet.py
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
"""Offline human packet validation; does not authenticate or submit its author."""
|
||||
import argparse,base64,copy,hashlib,json,sys
|
||||
from pathlib import Path
|
||||
|
||||
def validate(root,infd_root):
|
||||
sys.path.insert(0,str(infd_root))
|
||||
import jsonschema
|
||||
from informed_decision.intake import validate_submission,SubmitterGrant,IntakeRefused
|
||||
from informed_decision.lifecycle_commands import decode_memo,decode_documents
|
||||
env=json.loads((root/'intake.json').read_text());commands=json.loads((root/'lifecycle-commands.json').read_text())
|
||||
schema=json.loads((infd_root/'schemas/memo-intake.schema.json').read_text());jsonschema.validate(env,schema)
|
||||
grant=SubmitterGrant('state-hub',frozenset({'decision-record'}),frozenset({'net-kingdom-admins'}))
|
||||
parsed=validate_submission(env,submitter_id='state-hub',grant=grant);memo=decode_memo(commands[0]['register']['memo']);docs=decode_documents(commands[0]['register']['documents'],memo)
|
||||
assert env['memo']==commands[0]['register']['memo']==json.loads((root/'memo.json').read_text())
|
||||
assert commands[0]['review']['options']['approval_intent']==env['approval_intent']
|
||||
assert len(docs)==len(memo.packet)==len(parsed.packet)==20
|
||||
for item in env['packet']:
|
||||
source=root/next(x['label'] for x in env['memo']['packet'] if x['item_id']==item['item_id'])
|
||||
assert item['content'].encode()==source.read_bytes()
|
||||
assert len(json.dumps(commands[0]['register']).encode())<=256*1024
|
||||
assert hashlib.sha256((root/'executor.py').read_bytes()).hexdigest()=='b0dbbb9786e927055030acf849a72e9a44e9d3d55c84efdf245e419d381684f3'
|
||||
assert hashlib.sha256((root/'supervisor-transport.py').read_bytes()).hexdigest()=='3e594e0e8561100ae1eeb34d7208cd5b5e387ae56c29689f155aed94219770f3'
|
||||
negatives=[]
|
||||
for label in ['packet-content-tamper','boolean-memo-version','approval-prebound']:
|
||||
trial=copy.deepcopy(env)
|
||||
if label=='packet-content-tamper':trial['packet'][0]['content']+='\nchanged'
|
||||
elif label=='boolean-memo-version':trial['memo']['version']=True
|
||||
else:trial['memo']['approval_id']='fixture-unapproved'
|
||||
try:validate_submission(trial,submitter_id='state-hub',grant=grant)
|
||||
except IntakeRefused:negatives.append(label)
|
||||
else:raise AssertionError('negative accepted')
|
||||
return {'offline_only':True,'full_intake_and_schema_valid':True,'typed_lifecycle_memo_valid':True,'lifecycle_document_hashes_valid':len(docs),'source_files_equal_packet':True,'negative_intake_guards':negatives,'register_payload_bytes':len(json.dumps(commands[0]['register']).encode()),'submission_digest':parsed.submission_digest,'submitter_grant_is_offline_shape_assumption_only':True,'native_admission_or_authenticity_proved':False}
|
||||
if __name__=='__main__':
|
||||
p=argparse.ArgumentParser(description=__doc__);p.add_argument('packet',type=Path);p.add_argument('--informed-decision-root',type=Path,default=Path('/home/worsch/informed-decision'));a=p.parse_args();print(json.dumps(validate(a.packet,a.informed_decision_root),sort_keys=True))
|
||||
Loading…
Add table
Add a link
Reference in a new issue