21 lines
2.6 KiB
Python
21 lines
2.6 KiB
Python
from pathlib import Path
|
|
import subprocess,json,hashlib,re,yaml,urllib.request
|
|
root=Path('/home/worsch/key-cape');out=Path('/home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-17/key39-finalization-blocking-reason-r1');out.mkdir()
|
|
rel='workplans/KEY-WP-0039-openbao-negative-probe-tokens.md';p=root/rel
|
|
|
|
def git(*args):return subprocess.check_output(['git','-C',str(root),*args]).decode()
|
|
base=git('rev-parse','HEAD').strip();assert base=='26ec9bb9b195ad377448570d6b161fd682311a0b';assert not git('status','--porcelain=v1');assert git('ls-remote','origin','refs/heads/main').split()[0]==base
|
|
with urllib.request.urlopen('http://127.0.0.1:8000/tasks/03da4c38-1dac-53b1-8b0b-e697df48e9d3',timeout=30) as response:task_before=json.load(response)
|
|
assert task_before.get('needs_human') is False
|
|
before=p.read_text();old='registration authorization already resolved.';new='original secrets-engine-openbao registration go remains resolved; probe/coding-client custody and attended readiness are not established.';assert before.count(old)==1;after=before.replace(old,new)
|
|
blocks=lambda text:[yaml.safe_load(t) for t in re.findall(r'^```task\n(.*?)^```',text,re.M|re.S)]
|
|
b=blocks(before);a=blocks(after);assert len(a)==len(b)==3
|
|
for oldblock,newblock in zip(b,a):
|
|
if oldblock['id']=='KEY-WP-0039-T02':
|
|
expected={**oldblock,'blocking_reason':oldblock['blocking_reason'].replace(old,new)};assert newblock==expected
|
|
else:assert oldblock==newblock
|
|
assert before.split('---',2)[1]==after.split('---',2)[1]
|
|
(out/'KEY39.preimage.md').write_text(before);(out/'KEY39.proposed.md').write_text(after)
|
|
baseline={'base_commit':base,'branch':git('branch','--show-current').strip(),'status':git('status','--porcelain=v1'),'index':git('ls-files','--stage'),'path':rel,'before_sha256':hashlib.sha256(before.encode()).hexdigest(),'after_sha256':hashlib.sha256(after.encode()).hexdigest(),'frontmatter':yaml.safe_load(before.split('---',2)[1]),'task_blocks':b,'task_blocks_after':a,'only_task_field_delta':{'task':'KEY-WP-0039-T02','field':'blocking_reason','old':b[1]['blocking_reason'],'new':a[1]['blocking_reason']},'needs_human_before':False,'task_before_public_metadata':{k:task_before.get(k) for k in ('id','status','needs_human','workplan_id','blocking_reason')}};(out/'baseline.json').write_text(json.dumps(baseline,indent=2)+'\n')
|
|
p.write_text(after);(out/'one-path.patch').write_text(git('diff','--',rel));assert git('diff','--name-only').splitlines()==[rel]
|
|
print(json.dumps({'status':'only authorized blocking_reason suffix changed','needs_human':False,'all_other_task_and_frontmatter_fields_unchanged':True,'base':base}))
|