All skills
cat-xierluo avatar

/elements-complaint-generator

@f45a1c1

Use when converting 律师已写好的常规起诉状(md/docx)或对话描述为最高法 67 类官方要素式示范文本形态的 Word 候选文书(法〔2025〕82 号,2025-07-14 全国推广),覆盖民事/商事/行政/知产案由的起诉状、答辩状和相关申请书。不要用于:扫描件直接识别、自由格式文书起草,或代替律师完成法律内容与法院提交要求复核。

Use this Skill: https://skilld.dev/gh/cat-xierluo/legal-skills/elements-complaint-generator

This session only. Nothing lands on disk.

CHANGELOG.md

≈9k tokens on demand. Your agent reads this file only when SKILL.md points to it.

变更日志 — elements-complaint-generator

[0.16.0] - 2026-09-22

新增

  • 新增 tests/smoke_render_longtext.py:自动枚举 68 棵主文书,按模板实际规则生成确定性的长当事人、长诉请和长事实输入,执行正式版 LibreOffice 真实渲染,并输出输入摘要、候选内容哈希、页数、页码、空白页、字形、结构稳定指纹和本地证据路径。
  • 新增 tests/test_longtext_matrix.py 快速合同测试并接入日常 tests/run_e2e.sh;发布级 68×3 矩阵保持独立运行,支持每类预热、三轮计量、旧证据拒绝复用和 --evidence-all-rounds 波动取证。

修复

  • 长文本替换达到阈值时移除模板为短提示设置的巨大右缩进,修复 46、52、53、54 等行政模板内容被压成窄栏并发生渲染裁切的问题;短姓名、日期和金额继续保留原版式。
  • 将末尾空段落承载的实际内容节提升为 body 最终节,保留附件页边距、页脚和方向,同时消除 28 技术合同附件后的“仅页码”空白尾页。
  • PDF 单元格越界检查改用独立绘制 span 的真实字符包围盒,避免零内边距时把左右单元格文字拼成一个跨列词;真实跨线反例继续阻断。
  • 跨页列位检查允许纯新增或纯消失的合法 gridSpan 细化,仅在旧列消失且新列同时出现时判为漂移,修复 24 专利长文本续页误报。
  • 对 300 字以上超长表格行移除冲突的 cantSplit,允许自然跨页;普通行仍强制禁止非必要拆行,10、13、19、57 等临界模板的定向三轮页数已收敛。
  • 将 STZhongsong、Kaiti SC 从 LibreOffice 字体替代候选中归一为稳定的 SimSun,修复同一不可变 47 号候选件被随机替换为华文楷体、娃娃体或华文宋体并产生 4/4/3 页波动的问题;字号、加粗和段落样式继续保持标题与落款层级。

验证

  • 正式版 LibreOffice 26.2.3.2 下,68 棵主文书完成逐类预热与 204 次三轮计量;204/204 均通过 DOCX/PDF 门禁,unstable_cases=[],未出现居中、列位、页码、空白页、裁切、字形或稳定性阻断项,矩阵状态为 DOMAIN_VERIFIED。
  • 生成器可靠性 18/18、版式门禁 56/56、68/68 通用冒烟、113/113 模板静态门禁、21/21 文书家族真实 PDF 渲染及完整 E2E 均通过;68 目标枚举、生产规则链命中、压力输入确定性、候选内容哈希和稳定指纹由快速合同覆盖,且在 PYTHONOPTIMIZE=1 下仍通过。

待办事项

  • 对剩余 45 棵答辩状、第三人意见陈述书单列同等级长文本矩阵,不以主文书结果替代。
  • 选取高风险代表件在 Microsoft Word / WPS 下复核字体、分页、页码与签章位置;当前 DOMAIN_VERIFIED 仅适用于本次正式版 LibreOffice 环境。

[0.15.2] - 2026-09-21

修复

  • 将 E2E Harness 的伪产物路径清单由空格分隔字符串改为 Bash 数组,并逐项引用执行恢复,避免仓库路径或文件名含空格时被错误拆词,进而触发错误删除、错误移动或残留伪 DOCX。

改进

  • 将 ECG-003 恢复探针改为显式含空格文件名,使路径边界问题在不含空格的 CI/worktree 路径中也可稳定回归。

验证

  • tests/test_run_e2e_harness.sh 28/28 通过,覆盖原文件恢复、新文件删除、幂等性及含空格路径恢复。

[0.15.1] - 2026-09-11

新增

  • 新增输入叶路径 Schema、未知/错层级字段失败关闭、批处理参数合同与同目录原子发布回归;批量模式完整透传 --verify-residual、--templates-dir 和未知字段策略。
  • 新增正式版 LibreOffice 渲染器选址、独立 UserInstallation、中文字体候选覆盖验证和 DOCX→PDF 字符存活率门禁;开发版、未知版本或无中文覆盖候选均拒绝作为交付依据。
  • 为 24/25 专利附件的“关联民事案件信息表”新增表名锚点与连续三行语义表头合同,生成层设置 tblHeader,DOCX/PDF 两层按具体目标表验证续页重复表头。
  • 新增出版物残码、逐表居中、跨页列位、合并单元格边界、空白页与 E2E 防假绿的正反例;新增 56/61/62/67 分节/尾段空白页结构回归。

修复

  • 按页面内每个表格带独立检查水平居中,避免两个反向偏移表互相抵消;跨页列位只比较页顶续接签名,并以语义锚点、重复表头或内部列位连续性确认表格身份,避免把相邻新表误判为续表。
  • 单元格文字越界改为要求与真实竖线有实质纵向重叠,消除合并行文字包围盒轻触相邻行边界产生的波动,同时保留真实跨列反例拦截。
  • 清理 24/25 模板正文与图形中的 398/399/430/431 书册页码,保留底部连续 PAGE 域;按关系目标与文件哈希失败关闭,防止误删普通图片或正文数字。
  • 保留附件前同方向官方分节,禁止再叠加硬分页;合并其余同方向书册分节,并删除最终 sectPr 前无文字、域、图形、分页或分节语义的空段落,消除 25、56、61、62、67 的真实或偶发“只有页码”空白页。
  • 修复中文字形 .notdef 假阳性、24 横向附件合法合并行列位误报、09 页底旧表与页顶新表误报,以及 32/33 合并行文字轻触边界误报。

改进

  • tests/run_e2e.sh 启用 pipefail,每次使用全新证据目录并把断言绑定到本次产物;tee、grep、tail 后仍传播生产者真实退出码,异常退出恢复测试伪文件。
  • 重复表头不再以“文档中任意表存在 tblHeader”作为全局放行条件;没有表级合同的 09 等普通键值表不受误伤,合同缺失、重复命中、锚点错位或行数不足均失败关闭。
  • 更新公开说明,删除“像素级保真、可直接提交法院”和答辩状未接入等失实表述,明确 DOMAIN_VERIFIED 的渲染器与法律复核边界。

验证

  • 单元/反例门禁:输入失败关闭 6/6、生成可靠性 12/12、渲染器 6/6、版式 52/52、字体 14/14、出版物残码 12/12、语义表头生成 14/14、语义表头门禁 8/8、E2E harness 28/28。
  • 113/113 模板静态矩阵通过;21 类文书家族连续三轮真实 PDF 渲染 63/63 通过;56/61/67 各 8 次、62 共 10 次不可变 DOCX 独立渲染均无空白页;完整 tests/run_e2e.sh 通过。
  • 人工视觉复核 24 号第 13→14 页和 25 号第 10→11 页:三行语义表头重复、表格居中、列线连续、页码底部居中,未发现 398/399/430/431 残码。

待办事项

  • 68 棵主文书逐树长当事人、长请求、长事实压力渲染仍未完成;不得把当前家族抽样扩大为“全案由像素级保真”。
  • 当前案由级输入路径实际消费合同、公开材料匿名化和许可证统一仍按 Skill 任务队列继续推进。

[0.15.0] - 2026-08-30

新增

  • 新增独立 scripts/layout_gate.py:同时检查最终 DOCX 的 A4 节属性、对称边距、表格显式居中、固定列布局、tblGrid/tcW/gridSpan 守恒、行 cantSplit、页脚关系和 PAGE 域,并通过 LibreOffice + PyMuPDF 检查真实 PDF 的页面尺寸、表格中心线、连续居中页码和空白页。
  • 新增 config/layout-policy.json 管理逐模板版式策略;22 著作权法院实际发放基准件明确不带页码,作为显式例外保留。
  • 新增 10 个版式最小正反例,覆盖表格偏左、列宽不守恒、行可拆页、硬编码/缺失/重置页码、空白页和合法长文本;新增“失败不覆盖既有目标件”回归,以及 113 棵模板静态矩阵与 21 类文书真实 PDF 渲染矩阵。

修复

  • 重写节合并逻辑:保留横竖版切换边界,宽表在纵向容不下而横向可容纳时自动修正方向,避免 24/25 专利模板正文和附件互相污染页面方向。
  • 所有表格改为显式 center + fixed + tblInd=0,左右页边距按当前节最宽表对称计算;所有表格行加入 cantSplit,清理表内人工硬分页符。
  • 页脚纯数字改为 PAGE 域并居中,补齐节级默认页脚关系;仅第一节从 1 开始,后续节禁止重置;统一有效页脚距离,修复“XML 中有 PAGE、真实 PDF 却无页码”的假通过。
  • 附件起页逻辑跨空段检查已有分节,避免“分节符 + 分页符”叠加产生空白页。
  • 修复 _pick_in_window 返回值丢失导致的规则执行异常,以及 05/06/24/60 模板中已由 fail-closed 门禁暴露的字段锚点差异;移除 23/24/27/30 测试 fixture 中模板不存在、此前会被静默丢弃的字段。

改进

  • fill_template.py 默认使用 --layout-check rendered,先在临时候选件上完成内容完整性和真实渲染门禁,再原子发布到目标路径;规则异常、可靠直接写入字段有值却全部 skipped、残留旧串、几何/页码失败或渲染失败均非零退出,已有目标文件不被覆盖。
  • --layout-check docx 仅供开发期批量回归,off 仅供诊断;两者均不得作为最终版式已验证的证据。

验证

  • 113/113 模板树 DOCX 静态版式门禁通过;21/21 doc_type 文书家族真实 PDF 渲染通过;版式门禁 10/10 正反例通过;既有内容断言与 68/68 通用级冒烟通过。
  • 空白页判断会剔除页脚区纯数字,只有页码而无正文/图形的页面也会失败;24/25 尾页经文本层复核为真实注释内容,不是空白页。
  • 68 棵主文书逐树长文本压力渲染和页面截图矩阵、跨机器专有字体可用性仍列为 P0-1 后续工作,本版本不据抽样结果恢复“像素级保真”声明。

0.14.0(2026-08-28)— 22 案由法院件基准模板 + 几何宽度感知 + 引擎补链(250612 案第二轮实战)

模板源替换(DEC-011)

  • templates/22-侵害著作权及邻接权纠纷-民事起诉状 以法院实际发放形态件(律师核准 2 表版) 反向清空替换:2 表干净结构、字段不跨 tc、几何=表宽 9344+页边距 1133/1417
  • 原 OLE2→docx 入库源 6 表拆分/字段跨 tc 的问题对该案由不再存在;manifest 已记 provenance

几何修复(推翻 v0.13 的 1800 边距归一)

  • merge_sections_and_normalize 边距改宽度感知:仅当表宽 > 可用宽时收窄左右边距 (优先法院件几何 1133/1417,仍不够则对称收窄);不再无条件归一 1800
  • 根因:归一后可用 8306 < 表宽 9344 → 溢出 → 催生"缩表 7008"错误修补路线(qa-checklist 基准勘误)

引擎补链(250612 五轮返工复盘 QA 待修清单)

  • build_rules_22_copyright:客体五要素/停止侵权(前置框☑+作品名/登记号)/其他请求/ 时间地点/信网权尾随框☑/侵权通知否☑/行为方式12☑/关联案件无☑/合理费用行首有☑
  • make_swap_rule 新原语:覆盖"框在选项前"与"尾随框"勾选形态
  • make_fee_row 重写:结构保持+布局无关(单段式/分段式通吃),不再整段重写吞模板结构
  • 通用层:代理人块窗口化(有☑/特别授权☑/独立电话段);住所地字段名映射修复 (标签"住所地(户籍所在地)"≠字段"住所地",250612 两处住所地全空的根因)
  • skipped 规则明细默认打印(静默跳过=交付缺口)

二轮审计补遗(同日)

  • 完整表述框填充:make_insert_paragraphs_rule 新原语——在"(可完整表述诉讼请求/事实与理由)"说明段后 插入 elements 的 完整表述 list(复制说明段段落结构、清除楷体/小字号覆盖,保持正文默认字体); 此前 48 断言未覆盖该区,属真实交付缺口
  • 通用勾选锚机制加固:锚段无 □ 时跳过继续找勾选行(原先一击即断——插入的完整表述段落 提及"署名权、复制权"会把锚引走,权项两☑静默丢失)
  • 断言扩至 57 项(完整表述 8 项 + 姓名计数口径修正 ×2);页脚结论:法院件本身无页码, 输出与法院件一致,不加 PAGE 域

回归

  • 250612 案 260826 MD → 48/48 断言(含几何/串填/勾选群)+ 视觉核验通过
  • e2e 全部案由回归 + 冒烟 68/68;断言改全文空白归一(配合结构保持版 fee 行)

0.13.4(2026-08-18)— 边距归一 + 附件独立分页

修复

  • 所有 sectPr pgMar 统一为 top/bottom=1440(25mm) left/right=1800(31mm)(之前只改末尾节)
  • 附件前插入 <w:br type="page"/>:保证附件+证据清单新起一页,不遗留在主体页末尾
  • 修复 heredoc 破坏的 f-string({W}t → Wt 常量),附件分页此前未生效

回归

  • e2e 28 产物全绿 + 冒烟 68/68

0.13.3(2026-08-18)— 页脚 PAGE 域修复 + 主体内硬分页清理

用户反馈(真实案件 22 著作权)

  • 模板 footer 用 <w:t>351</w:t> 等硬编码页码,渲染后永远显示 351
  • fix_footers_and_pagination:每个 footer*.xml 含纯数字 <w:t> 时替换为 PAGE 域 (<w:fldChar begin/><w:instrText>PAGE</w:fldChar separate/><t>1</t><end/>)
  • 4 个 footer 验证全部生效(PAGE instr 存在,<w:t>1 为占位)

保留句段清理

  • merge_sections_and_normalize 增强:清理表内残留硬分页符(<w:br type="page">)
  • 验证:22 树源 0→渲染后 0(本来就无硬分页)

回归

  • e2e 28 产物全绿 + 冒烟 68/68

0.13.2(2026-08-18)— 节结构修复:主体连续+调解意愿/证据清单独立分页

用户反馈(真实案件 22 著作权)

  • 之前版删了全部 4 个段落级 sectPr,主体 4 表连续但调解意愿/证据清单也连在一起
  • 现在版保留最后 1 个段落级 sectPr(调解意愿前)+ 末尾 sectPr
  • 表格分布:表 1-4(主体)连续 → [24] 节分隔 → 表 5(调解意愿+具状人)独立 → [47] 末尾 → 表 6(证据清单)独立
  • 实际效果:3 个内容块(主体 / 调解意愿 / 证据清单)自然分页 + 表格连续排版

回归

  • e2e 28 产物全绿 + 冒烟 68/68

0.13.1(2026-08-18)— 节合并:表格连续排版 + 页边距归一

用户反馈修复(真实案件测试发现)

  • 官方模板用 4 个段落级 sectPr 把表单分成 5 节(每节窄边距 top=7mm 强制新页) → 表格视觉断裂 + 页边距不正常
  • merge_sections_and_normalize:渲染后删除段落级 sectPr(从 pPr 内嵌套层级移除), 全文档使用 body 末尾标准 sectPr(top=1440=25mm left=1800=31mm)
  • 效果:sectPr 5→1,6 个表格连续排版不再跨页断裂,页边距正常
  • 技术坑:sectPr 嵌套在 w:p/w:pPr 内,须 而非 (Element is not a child of this node)

隐私

  • 真实案件(张睿 v 田连明)测试通过 13/13 断言;产物在案件目录未入库

0.13.0(2026-08-18)— 答辩状 45 棵树全量接入(113/113 全覆盖)

答辩状/第三人意见陈述书 45 棵树

  • answer_tree_for(nn) / all_secondary_trees() 路由函数
  • case-type key 格式:NN-answer(如 06-answer、44-answer)
  • 通用层直接兼容(当事人块/勾选/落款条件装配)——无需专用构建器
  • tests/smoke_answers.py:45/45 冒烟通过(当事人/性别勾选/双日哨兵)

113/113 全覆盖完成线

  • 68 主文书(精调 key + 数字 key)+ 45 答辩状(NN-answer key)= 113 棵模板树全部可渲染

0.12.0(2026-08-18)— case-types 68/68 定稿补全 + 端到端真实演示

case-types 定稿 68 份全量

  • 14 份手写详版(05/06/08/09/10/13/15/21/22/23/24/27/28 及骨格)
  • 54 份程序化生成精简版(含家族标签 + 通用能力说明 + 骨架引用)
  • 覆盖全部编号(01-68),Agent 抽取参考无死角

端到端真实演示(三段式管线验证)

  • 输入:仿真实起诉状 md(周正明 vs 吴志强,民间借贷 35 万)
  • ① 案由匹配:Agent 读 routing → 09-private-lending
  • ② Agent 按 Schema 抽要素 → demo-elements.json
  • ③ 渲染 → 周正明vs吴志强-要素式起诉状.docx(rules=67, ☑=17)
  • 结果断言 20/23(3 项差异为模板空格变体,核心管线全通)

0.11.0(2026-08-18)— 68/68 全案由精调完毕

剩余 24 案由批量接入(家族工厂模式)

  • 26 植物新品种(知产工厂)/ 36 垄断行政(知产行政工厂)
  • 37-40 海事四案由(船舶碰撞/人身损害/货运代理/船员劳务):_civil_generic_specifics(管辖保全+经济损失+计算依据)
  • 41-43 环资三案由(环境污染公益/生态破坏公益/生态损害赔偿):同民事工厂(原告=检察院/环保组织/政府)
  • 44-54 行政十一案由(行政处罚/强执/许可/征收/工伤/信息公开/复议/协议/补偿/赔偿/不履责):_admin_civil_generic(同 31-35 知产行政模式,被告=行政机关)
  • 56-59 国赔四案由(违法刑拘/改判无罪/怠于履职/错误执行赔偿):_enforcement_doc_specifics(身份=赔偿请求人)

68/68 完成线

  • 63 个 build_rules 构建器(叠加模式:通用层 + 5 家族工厂 + 案由特定)覆盖全部编号
  • 通用层(自然人+法人+调解+具状+勾选+多当事人)+ 家族工厂(民事/知产/知产行政/执行/申请书)+ 案由微调
  • 用户裁示:不预判频率,全部接入 ✓

回归

  • e2e 28 产物全绿 + 冒烟 68/68 + 24 新案由批量渲染零规则错误

0.10.0(2026-08-18)— 执行类 61-68 八案由 + 行政法人锚修复

执行类 61-68(60-68 执行全家族 9 案由精调完毕)

  • _enforcement_doc_specifics 共用工厂:身份勾选(申请执行人/被执行人/利害关系人/案外人/法定代表人等 9 选项)
  • 执行依据三字段(机构/文书号/判项主文)+ 银行账户
  • 61 限高解除(身份=被执行人)/ 62 参与分配 / 63 担保 / 64 优先购买 / 65 异议 / 66 复议 / 67 监督 / 68 不予执行

法人锚放宽(DEC-009)

  • 验证条件从"窗口含统一社会信用代码"放宽为"信用代码 OR 法定代表人"二选一
  • 31-35 知产行政被告(国知局/商评委等行政机关,常缺信用代码字段)法人块现在可渲染
  • 副作用:43 环资树前两法人块(公益组织)也命中锚——类型勾选断言放宽为软性

回归

  • e2e 28 产物全绿(+65-objection)+ 冒烟 68/68

0.9.0(2026-08-18)— 60 强制执行申请书精调 + 知产行政五案由 + README

60-enforcement 强制执行申请书(诉讼案件必备,e2e 10/10 全绿)

  • 执行依据五字段:文书类型勾选(判决书/裁定书/调解书/支付令/裁决书)+ 作出机构/案由/文书号/生效日期/判项主文
  • 申请执行事项勾选:金钱给付/本金/利息/迟延履行利息/行为执行等
  • 保全有无 + 保全案号
  • 银行账户(收款信息三字段)

31-35 知产行政五案由(商标驳回/撤销/无效 + 专利驳回/无效)

  • _ip_admin_specifics 共用规则(被告=国知局/商评委等行政机关)
  • 当事人自然人正常渲染;被告法人块在树无"统一社会信用代码"段时不命中(已知边界,可接受——原告主体为主)

README.md

  • GitHub 浏览友好的快速开始/覆盖范围/技术架构/三层 reference 说明

回归

  • e2e 27 产物全绿(+60-enforcement)+ 冒烟 68/68

0.8.0(2026-08-18)— 上册余案由 + 中册补充 12 案由精调(25 精调全上中册覆盖)

新增 12 案由精调

  • 07-house-sale(房屋买卖):管辖/保全 + 合同效力走通用勾选
  • 11-lease(房屋租赁):迟延租金利息句 + 解除合同 + 担保/费用两段式
  • 14-property(物业):_date_amount_inplace 原地保留"截至…止"前缀的带日期金额句(新原语)
  • 12-lease-finance(融资租赁):违约金/滞纳金同段原地填 + 履行/解除窗口勾选 + 判令解除勾选
  • 16-securities-fraud(证券虚假陈述):投资差额损失 + 责任主体两段式 + 费用明细
  • 17/18/20(财产损失/责任/人身保险):共用 _insurance_common(保险金句 + 费用两段式 + 管辖保全)
  • 19-guarantee(保证保险):保险费违约金句 + 后续起算日
  • 25-design-patent(外观设计):经济损失 + 停止侵权 + 律师费凭证行
  • 29-unfair-competition(不正当竞争):经济损失 + 调查取证费凭证行
  • 30-civil-monopoly(民事垄断):经济损失 + 律师费勾选式(30 树无凭证段,与 22/23 差异)

新原语

  • _date_amount_inplace:原地保留模板段前缀("截至 X 日止,ctx Y 元")的带日期金额句——不整段重写,仅 re.sub 填日期与金额
  • _pick_in_window_rules:锚段后 4 段窗口勾选(融资租赁解除选项在后续段)

缺陷修复

  • _date_amount_inplace 命中条件收紧:要求 ctx+空白+元 实际存在(防止 ctx 命中标题行假成功)
  • 30 垄断树名"30-垄断纠纷-民事起诉状"(非"民事诉讼")确认路由正确

回归

  • e2e 扩为 26 产物断言全绿(旧 15 + 新 11 + 05-sample)+ 冒烟 68/68

0.7.0(2026-08-17)— P4 金融机构两案由 + 批量模式 + 版本核查 + 多当事人扩容

P4 精调:08 金融借款 / 10 信用卡

  • 08-loan(12/12):本金/利息(期内+复利+罚息)整段重写、提前还款加速到期、担保/债权费用两段式、贷款人/借款人/还款方式等事实标签
  • 10-creditcard(6/6):本金/利息合计重写、后续利息起算日重写、透支金额/计算标准/违约责任
  • make_yes_no_pair 取值兼容 内容/明细/费用明细 三键名

--batch 批量模式

  • --batch <dir> --output <dir>:目录内每个 *-elements.json 按文件内 case_type 路由渲染为 *-要素式起诉状.docx(子进程隔离防状态串扰)
  • CLI 参数改为可选(--batch 时不需要 --case-type/--elements)

verify_template_version.py(半年复查配套)

  • 对比源目录(上/中/下册)文件 SHA-256 与 manifest,输出 未变更/变更/新增/缺失 四类报告
  • 试跑验证:112 一致 + 1 差异(42 号目录已知命名笔误的自然结果,非官方改版)

多当事人扩容(知产多被告场景)

  • elements 声明 自然人3/4 或 法人3/4 且块不足时,自动复制末块(<w:tr> 表格行优先,否则锚起 5 个 <w:p>)——模板"可复制粘贴"条款的自动版
  • 实测:22 著作权 + 自然人3(陈十)+ 法人3(某电商平台公司)全部生效

回归

  • 13 产物断言全绿 + 多当事人专项 + 冒烟 68/68

0.6.0(2026-08-17)— 通用勾选机制 + 档1 知产/技术商事六案由精调 + reference 补全

通用勾选机制(63 编号全部获得勾选能力)

  • elements 顶层 勾选 键:{"锚文本": "选项原文"|[选项…]}——generic_rules 在锚段勾选独立选项
  • 冒烟自动化验证:每树取首个普通勾选段自动注入并断言 ☑ 生效 → 68/68

档1 精调六案由(叠加模式,当事人走通用窗口)

  • 22-copyright / 23-trademark / 27-tradesecret(知产三兄弟):经济损失金额句 + 费用行重写(费名+凭证勾选;27 费用名=公证费)+ 侵权链接/计算依据标签;权属/赔偿计算大勾选群走通用勾选
  • 24-patent:停止侵权两段式 + 惩罚性赔偿整段重写(包含☑ 基数×(1+倍数))
  • 28-tech:解除确认日期句重写 + 赔偿金"有☑ X 元"形态 + 鉴定两段式
  • 13-construction:工程款日期利息句(09 同款)+ 担保/连带两段式 + 停工/赔偿金额句 + 超付利息重写

精调原语提炼(多案由复用)

  • make_amount_sentence(纯句段 + "是☑/有☑ X 元"勾选句段两形态)
  • make_date_interest_sentence / make_yes_no_pair(空白归一匹配,DEC-004 适用于此)/ make_fee_row

缺陷修复(本轮实测暴露)

  • 叠加顺序:案由特定规则在前、通用层在后——通用勾选先跑会把"包含□"变 ☑ 致特定重写规则锚失效(24 实测踩坑,DEC-007)

reference 补全

  • case-types/ 定稿 9 份(06/15/21/22/23/27/24/28/13,由 fixture+规则反推生成)
  • routing 注册 11 精调案由;e2e 扩为 13 产物断言

回归

  • 13 产物断言全绿(8/8、14/14、15/15、9/9、4/4、8/8、8/8、3/3、4/4、3/3、6/6、6/6、29/29)+ 冒烟 68/68

0.5.0(2026-08-17)— 法人块通用渲染 + 3 个高频案由精调

P5 法人当事人块(通用层,68 树生效)

  • generic_rules 新增法人块:锚=以"名称:"结尾段(含"其他□ 名称:"执行类前缀形态)+ 窗口内"统一社会信用代码:"验证;窗口定向渲染 名称/住所地/注册地/法代(含职务电话)/信用代码 + 类型勾选(选项跨段扫描 +16 窗)+ 所有制勾选(国有[控股/参股]/民营/其他)
  • 当事人键扩展:当事人.法人1 / 法人2(顺序语义,与自然人N 一致)
  • 冒烟断言扩展(法人名称/类型勾选按模板选项条件化)→ 68/68

P1-P3 精调:06 买卖 / 15 劳动 / 21 交通事故

  • 叠加模式(DEC-006):build_rules_NN = generic(当事人/填空/标签/调解/落款)+ 案由特定规则——当事人沿用 自然人N/法人N 键
  • 06 买卖(9/9):价款/迟延利息违约金整段重写、违约类型/瑕疵责任多选/履行或解除窗口勾选、担保与债权费用两段式、出卖人买受人标签、支付方式/违约金定金勾选
  • 15 劳动(4/4):7×「是□ 否□ 明细:」标题锚定位(occurrence 与段非 1:1 时错位的教训)+ 诉讼费纯是/否
  • 21 交通事故(8/8):医疗费/误工费日期段整段重写、营养费等 5 项金额句式、票据凭证有无勾选
  • 注册 slug:06-sale / 15-labor / 21-traffic(_lookup_tree_by_slug 前缀解析)

回归

  • e2e 扩为 7 产物断言(空白归一比较,消除模板多空格假阴性):8/8、14/14、15/15、9/9、4/4、8/8、29/29
  • 冒烟 68/68;路由表精调 5 案由

范围裁示(用户)

  • 答辩状/第三人意见陈述书 45 棵树不做——skill 定位聚焦起诉状生成

0.4.0(2026-08-17)— 68 案由全量接入(通用级自动规则 + 两级接入体系)

两级接入体系

  • 精调级(05 离婚 / 09 民间借贷):案由特定勾选/金额规则全量 + e2e
  • 通用级(其余 66 个主文书编号):scripts/generic_rules.py 从模板树自动推导——当事人块(行块窗口定位,+7 段窗口按标签定向替换,彻底摆脱全局 occurrence)+ 编号标题填空 + 全文唯一标签追加 + 调解意愿 + 具状落款
  • 分发:--case-type 接受精调 key 或两位编号(06/15/21…),resolve_case() 自动路由

通用级关键设计

  • 自然人行锚点:以"姓名:"结尾(含"其他□ 姓名:"前缀形态)且后 3 段含"性别:男"——排除法人/代理人块误锚
  • 当事人键 自然人1/自然人2(顺序语义):法人原告案由(物业/公益诉讼/执行类)中首个自然人可能是对方当事人,防角色错位;兼容 原告/被告 别名
  • 有调解块/具状块才装配对应规则(行政/国赔/执行/刑事自诉自动跳过)

骨架与路由

  • references/skeletons/:66 个主文书骨架批量生成(dump_template_fields.py)
  • case-routing.md 升级三级标记:✅精调 2 / ✅通用级 66 / ⬜答辩状等 45

验证

  • tests/smoke_all.py 全案由冒烟:68/68 通过(当事人/性别勾选/调解单勾/具状日期/双日哨兵/zip 可解析,按模板形态条件断言)
  • e2e 精调回归保持全绿;run_e2e.sh 追加冒烟阶段

0.3.1(2026-08-17)— v0.3 六任务全部完成(双案由 + 三层 reference 闭环)

T4 第二案由:05 离婚(通用层复用验证通过)

  • build_rules_05_divorce():案由特定约 50 条规则;当事人/调解/具状块全部走通用层(build_common_party_rules/build_common_mediation_rules 参数化 occurrence),05 布局差异(代理人插中间→被告姓名=2)仅靠参数吸收
  • references/case-types/05-divorce.md 定稿(Schema + occurrence 勘察结论 + 规则要点)
  • extract_05_divorce regex 兜底(结婚时间/子女抚养/财产归属/抚养费/探望)
  • 新增规则原语:make_pick_option_rule(枚举勾选)/make_fill_after_rule(标题后空段落填入)/make_signature_date_rule(锚定具状段防"日期:"子串污染)

渲染缺陷修复(DEC-004 三铁律,09 同步受益)

  • fill_blanks 防双 suffix("…日日"——09 自 v0.1 带病被子串断言掩盖,本次现形修复)
  • 具状日期锚定具状段("日期:"⊂"出生日期:"污染出生段)
  • 勾选上下文去空格(05 三行"无此问题□ 有此问题□"空格不一致致 occurrence 错位)
  • make_gender_rule 匹配条件稳定化(勾选后段落退出匹配集致索引漂移)

T3/T5/T6

  • T3:build_case_routing.py → case-routing.md(113 行三态标记索引)
  • T5:extraction-prompt-template.md(六步抽取工作流 + 纪律 + 错位提示)
  • T6:SKILL.md §三改三段式(案由匹配→两段抽取→渲染)

回归(多案由 e2e 重构)

  • run_e2e.sh 双案由 × (extract+sample) 带标签断言 + 哨兵:8/8、14/14、15/15、29/29 全绿

0.3.0(2026-08-17)— 三层 reference 架构起步(T1+T2)

T1 通用要素层(证据版)

  • 新增 scripts/verify_common_elements.py:全量扫描 113 棵树做通用标记存在性 + 形态聚类(28 个签名组)
  • 新增 references/common-elements.md:六层覆盖表(L1 当事人自然人 95-113/113 超通用;L5 调解意愿 59-60/113 民事起诉+答辩子集;保全/管辖 ≤29/113 归案由层)+ 文书类型差异备忘(7 类文书角色/落款/调解意愿有无)+ 渲染规则复用清单

T2 模板字段反推

  • 新增 scripts/dump_template_fields.py:从模板树反推字段骨架(节分组 + 勾选/标签填空/日期占位三分类 + "X□" 选项自动提取),新案由接入从"手写全文档"降为"骨架 + 补提示"
  • 09 树验证:分类与手写 reference 全吻合;05 离婚骨架已生成(references/case-types/05-divorce-skeleton.md,102 段,含房屋/汽车/存款归属、债务承担、子女抚养勾选结构)

待续(TASKS.md T3-T6)

  • 案由路由表 case-routing.md / 05 离婚规则试点 / Agent 抽取提示词模板 / SKILL.md 三段式流程改写

0.2.1(2026-08-17)— 67 类完整版全量入库(113 棵树)+ 三项渲染 bug 修复

全量模板入库

  • 新增 scripts/ingest_full_templates.py:按法〔2025〕82 号完整版(上中下三册)批量入库,113 棵树(上 42 / 中 28 / 下 43),编号 01-68 即上中下顺序;完整版为原生 OOXML docx(无需 soffice 转换,零损失解包)
  • 树命名 <NN>-<案由>[-<文书类型>];源文件 5 处命名笔误规范化(缺"状"、42 号误标环境污染、38 号"人参"→"人身"等,manifest anomalies 留痕)
  • templates/templates-manifest.json 升级 v2:113 条树↔源文件↔SHA-256 溯源
  • 旧 01/02 树退役(源自 67类/ 平铺目录的 soffice 转换版,已被完整版原生树取代);case-type key 02-private-lending → 09-private-lending(对齐完整版编号:离婚=05、民间借贷=09)

渲染 bug 修复(换新树回归时暴露的潜伏问题)

  • 标签吃字:make_text_replace_rule 此前把 match_text 整体换成裸值("姓名:"被吃掉只剩"张三")→ 改为默认 append=True 保留标签("姓名:张三");含空白复合占位("第 条"→"第三条")走 append=False + transform
  • 性别误勾:勾选只替换第一个 □,被告为"女"时勾到"男"→ 新增 make_gender_rule 按"男□/女□"值勾选
  • 子串双勾:"了解□"是"不了解□"的子串,调解意愿区出现双 ☑ 且第 5 处漏勾 → 新增 replace_option_check(前字符≠"不"的独立选项才勾)+ benefits 循环跳过已含 ☑ 的段
  • 段落拆分适配:完整版原生 docx 中"是□/否□"分属不同段落(如"实际清偿之日止:是□"),相关 match_text 收窄锚定

回归

  • 新树 sample:applied=71,8/8 标签保留断言 + 8/8 勾选正确性断言全绿(性别男☑×1/女☑×1、了解☑ 单勾×6、双勾 0、漏勾 0)
  • e2e(md→extract→fill):断言升级为带标签形态后全绿

0.2.0(2026-08-17)— OOXML 源码树架构

架构调整(DEC-056)

  • 模板形态:assets/templates-docx/(zip 二进制)退役 → templates/<案由>/ 解包 OOXML 源码树为唯一权威源;模板变更 git 逐行 diff 可见,每案由完整树自包含(不抽公共 base 防格式混搭)
  • 替换引擎:python-docx → lxml 直接编辑 <w:t>:跨 run 精确替换(单 run 保留前后字符;跨 run 首尾存前后缀、中间清空),不吞字、不破坏字体/段落/表格/勾选框
  • 多 part 覆盖:word/document.xml + header*/footer* 全部文本 part
  • 新增 --verify-residual:替换后扫描残留旧串(防漏填/旧案信息泄漏)
  • 分工明确:Agent(LLM) 负责要素抽取(语义理解);纯代码负责格式保真替换(确定性);regex 抽取器降级为兜底

新增脚本

  • scripts/unpack_docx.py:docx → OOXML 源码树(模板入库)
  • scripts/pack_docx.py:OOXML 树 → docx(打包/校验/出件)
  • skill 内 .gitignore:排除 tests/output/ 运行产物(生成的 docx/elements.json 不入库)

回归验证(对比 v0.1 基线)

  • sample fixture:applied 69→71,☑=22 持平
  • e2e(md 抽取):applied 45 持平,☑ 15→17(lxml 元素去重顺带修复合并单元格勾选 bug)
  • 输出结构:6 表/36 段与模板一致,python-docx 可独立打开

命名决策

  • 保留 elements-complaint-generator(用户终审;候选 element-style-complaint-generator 未采纳)

0.1.0(2026-08-17)— MVP 首版

新增

  • skill 主体:在 skills/elements-complaint-generator/ 建目录
  • SKILL.md:技能定义、运行流程、依赖、限制
  • references/case-types/02-private-lending.md:民间借贷要素 Schema + 字段填充规则
  • assets/templates-docx/02-民间借贷纠纷民事起诉状.docx:LibreOffice OLE2→OOXML 转换产物(保真)
  • assets/templates-docx/01-离婚纠纷民事起诉状.docx:预留案由(规则待实现)
  • templates/templates-manifest.json:模板 SHA-256 元数据
  • scripts/ole2_to_docx.py:批量 OLE2→docx 转换(带 --include glob 精确选择)
  • scripts/fill_template.py:要素→docx 锚点替换核心渲染器
  • scripts/extract_from_markdown.py:C 入口 md→要素抽取器
  • tests/fixtures/02-private-lending-complaint.md:端到端测试用起诉状
  • tests/fixtures/02-private-lending-sample.json:手工构造 elements.json(用于 fill_template 单测)

已知限制(v0.1 留待 v0.2)

  • 仅 02 民间借贷规则完整实现;01 离婚规则未写
  • 仅 C 入口(md);A 对话、B 结构化文件入口未实现
  • 仅自然人当事人;法人/非法人组织要素保留空白
  • 委托代理人姓名抽取有边界 bug(复杂格式漏抽)
  • 5 处"调解好处"勾选去重偶发问题

技术选型

  • 路线 A:OOXML 解包 + 锚点替换(保字体)
  • LibreOffice 25.8.4.2(macOS via brew cask)OLE2→docx
  • python-docx 0.8.11
  • 模板版本:法〔2025〕82 号 2025-07-14 推广版(多渠道交叉比对一致)

Source: SKILL.md on GitHub

1 warning3d3 checks · Risk SAFE
  • Gen Agent Trust Hub3d

    A comprehensive legal document generator that converts complaint drafts into standardized Word files using OOXML templates and layout verification. The skill is professionally designed with clear boundaries between AI-driven extraction and code-driven document generation.

  • Socket3d

    1 alert: gptAnomaly

  • Snyk3d

    Risk: LOW · No issues

Signed by skilld at f45a1c1. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 20 hours ago.

Activeupdated last week
homepage
https://github.com/cat-xierluo/legal-skills
author
杨卫薪律师(微信ywxlaw)
version
0.16.0

README badge

README badge for cat-xierluo/legal-skills/elements-complaint-generator