        d=Document(f/'source.docx');before=json.loads((f/'links-before.json').read_text());found=[]
        for i,p in enumerate(d.paragraphs,1):
            for link in p._p.findall(qn('w:hyperlink')):
                texts=link.findall('.//'+qn('w:t'));texts[0].text=str(output.get('labels',{}).get('link'+str(i),''))
                for other in texts[1:]:other.text=''
        d.save(f/'rewritten.docx');r=Document(f/'rewritten.docx')
        for i,p in enumerate(r.paragraphs,1):
            for link in p._p.findall(qn('w:hyperlink')):
                rid=link.get(qn('r:id'));found.append({'id':'link'+str(i),'label':''.join(x.text or '' for x in link.findall('.//'+qn('w:t'))),'rid':rid,'target':r.part.rels[rid].target_ref})
        ck('三个链接的关系ID与目标未改',[(r['rid'],r['target']) for r in found]==[(r['rid'],r['target']) for r in before]);ck('模型改写标签实际写入',[r['label'] for r in found]==['Read guide','View schedule','Open checklist']);result={'before':before,'after':found};add_native(f/'rewritten.docx')
