G21 楷体Word输出规范
C:/Users/xub/.workbuddy/spec/3.行政法规/范式/G21_楷体Word输出规范.md类别:技术规范
名称释义:学位论文(doc_spec.py)/楷体五号(render_kaiti.py)双规范
落位:~/.workbuddy/spec\3.行政法规\范式\G3_楷体Word输出规范.md
版本:V1.0.1(2026-08-31 成文规范整改:四篇式结构 + 模态词等级表 + 术语和定义 + 失效模式表 + 附录 A–D)
工作流(启动顺序 + 升级闭环 · 全域硬约束)
本规范为对应对象(skill/专家)升级/迭代/训练/知识注入的唯一权威依据。任何涉及该对象的改动,必须严格按以下五步闭环执行,缺一不可、全域强制。
启动顺序(每次会话/任务启动,全域铁律)
- 读 MEMORY(拿规则):首步读
~/.workbuddy/MEMORY.md,未读不得动手。 - 跑
_tools代码(强制):凡 .docx/.xlsx 交付物命名与skill/专家迭代升版四件套验证,强制调用~/.workbuddy/_tools/(deliverable.py/check_deliverables.py),禁止手敲文件名。 - 查 README(看 API):动手前查
~/.workbuddy/README/<对象目录名>/README.md;无独立 README 时以 SKILL.md 为 API 权威。 - 查技术规范与 SOP(升级/建夹必过闸):①升级/迭代/训练/知识注入前先读本范式(
~/.workbuddy/spec\3.行政法规\范式\对应文件);②每个新任务启动(含任何 skill 触发产出)先读S01+S02,建「三字标题_YYYY-MM-DD_HHMM/产出/素材/」,产出落产出/。 - 收尾总结(每次任务结束后,200 字铁律):任何任务每次结束后,在最终回复中用约 200 字总结「当前进展 + 核心结论 + 遗留问题」三要素(见
~/.workbuddy/spec\3.行政法规\SOP\S10_任务收尾总结SOP.md);与 S03/S04 收尾三件套、skill/专家迭代升版四件套并存、互不替代。
升级五步闭环(硬约束)
- 闭环链路:读 MEMORY → 跑 _tools → 查 README → 查技术规范与 SOP → 建任务夹(S02),五步必须闭环、全域可执行、覆盖全部 SOP(含 S02 建文件夹)、硬约束。
- 只按本技术规范修改:改动逐条对照本范式对齐,不重写整个 SKILL.md;不碰全域规则(MEMORY.md)与工具链(_tools/),除非其自身变化。
- 无技术规范,拒绝升级:定位不到或用户未提供本范式 → 立即停下、禁止动手改,并回复「请提供其技术规范(如电池专家技术规范)」。
来源:学位论文规范 doc_spec.py(单一事实来源)
文件:
C:\Users\xub\.workbuddy\skills\V1.13.0_lihengbian_DIY_jishubiaozhunpaibanzhushou\doc_spec.py
# -*- coding: utf-8 -*-
"""
V1.13.0_lihengbian_DIY_jishubiaozhunpaibanzhushou —— Word 文档排版技术规范(单一事实来源)
规范来源:华南理工大学硕士学位论文格式(已通过格式审查的终稿样例实测提取)
所有数值单位:长度用 cm(页面/缩进)/ pt(字号/行距),行距用倍数或固定值 pt。
改规范只改本文件,引擎与模板自动跟随。
"""
# ---------------- 页面 ----------------
PAGE = {
"size": "A4", # 21.0 x 29.7 cm
"top_cm": 2.5,
"bottom_cm": 2.5,
"left_cm": 2.5,
"right_cm": 2.5,
"gutter_cm": 0.0,
"header_cm": 1.5, # 页眉距边界
"footer_cm": 1.75, # 页脚距边界(正文区;前置部分用 1.5)
"orient": "portrait",
}
# ---------------- 字体 ----------------
# 中文用宋体/黑体;西文与数字用 Times New Roman(与样例一致)
FONTS = {
"cn_body": "宋体", # 正文中文
"en_body": "Times New Roman", # 正文西文/数字
"cn_heading": "黑体", # 标题中文
"en_heading": "Times New Roman",
"cn_caption": "宋体", # 图/表题中文
"en_caption": "Times New Roman",
"cover": "Times New Roman", # 封面(含中文,靠 eastAsia 回退宋体/黑体)
"code": "Consolas",
"ref_cn": "宋体",
"ref_en": "Times New Roman",
}
# ---------------- 字号(pt) ----------------
SIZE = {
"body": 12.0, # 小四
"chapter": 18.0, # 小二(章标题)
"section": 15.0, # 小三(二级)
"subsection": 14.0, # 四号(三级)
"subsubsection": 12.0, # 与正文同(四级)
"caption": 10.5, # 五号(图/表题)
"abstract_title": 18.0, # 摘要/Abstract 标题
"header": 9.0, # 页眉/页脚
"cover_title_cn": 18.0, # 封面“华南理工大学硕士学位论文”
"cover_title_en": 18.0, # 英文题名
"cover_big": 42.0, # “硕士学位论文”大字
"cover_meta": 10.5, # 封面信息行
"cover_stmt_title": 22.0, # 原创性声明/授权书 标题
"ref": 10.5, # 参考文献条目
"toc": 12.0,
}
# ---------------- 标题对齐 ----------------
HEADING_ALIGN = {
"chapter": "center", # 章标题居中
"section": "left",
"subsection": "left",
"subsubsection": "left",
}
# ---------------- 段落间距(pt) ----------------
HEADING_SPACE = {
"chapter": (12.0, 6.0), # (段前, 段后)
"section": (6.0, 6.0),
"subsection": (6.0, 6.0),
"subsubsection": (6.0, 6.0),
}
# ---------------- 正文段落 ----------------
BODY = {
"align": "justify", # 两端对齐
"first_line_indent_cm": 0.8467, # 首行缩进 2 字符(12pt 字 ≈ 0.4233cm/字)
"line_multiple": 1.5, # 1.5 倍行距
"space_after_pt": 0.0,
}
# ---------------- 图/表题 ----------------
CAPTION = {
"align": "center",
"figure_below": True, # 图题在图下方
"table_above": True, # 表题在表上方
"size": 10.5,
}
# ---------------- 参考文献(GB/T 7714) ----------------
REFERENCE = {
"align": "justify",
"cn_font": "宋体",
"en_font": "Times New Roman",
"size": 10.5,
"line_exactly_pt": 16.0, # 固定值 16pt
"space_before_pt": 6.0,
"space_after_pt": 6.0,
}
# ---------------- 页眉页脚 ----------------
HEADER_FOOTER = {
"header_size": 9.0,
"footer_size": 9.0,
"header_align": "center",
"footer_align": "center",
"front_page_number_fmt": "upperRoman", # 摘要/目录:罗马数字 I II III
"body_page_number_fmt": "decimal", # 正文起:阿拉伯 1 2 3,从 1 重排
}
# ---------------- 封面字段(占位,由输入覆盖) ----------------
COVER_DEFAULTS = {
"cn_title": "基于CTP动力电池包的液冷板结构与热特性研究",
"en_title": "Research on structure and thermal characteristics of CTP power battery liquid cooling plate",
"author": "许炳",
"supervisor": "赵荣超 副教授",
"degree": "工学硕士",
"major": "车辆工程",
"direction": "电动汽车动力电池热分析",
"school": "华南理工大学",
"school_en": "South China University of Technology",
"city": "广州, 中国",
"submit_date": "2022年1月20日",
"defense_date": "2022年5月15日",
"grant_date": " 年 月 日",
"student_id": "201920101161",
"class_no": "U464.9",
"school_code": "10561",
}
# ---------------- 章节编号格式 ----------------
CHAPTER_FMT = "第{num}章" # 一级:第一章
SECTION_FMT = "{a}.{b}" # 二级:1.1
SUBSECTION_FMT = "{a}.{b}.{c}" # 三级:1.1.1
SUBSUBSECTION_FMT = "{a}.{b}.{c}.{d}"
# 颜色(RGB hex,None 表示默认黑)
COLORS = {
"body": None,
"heading": None,
"caption": None,
}
来源:楷体五号规范 render_kaiti.py(KAITI_SPEC)
文件:
C:\Users\xub\.workbuddy\skills\V1.13.0_lihengbian_DIY_jishubiaozhunpaibanzhushou\render_kaiti.py
# -*- coding: utf-8 -*-
"""
楷体五号 版式渲染器(lihengbian_DIY_jishubiaozhunpaibanzhushou 的第二套规范:公众号/规范文档通用排版)
规范来源:《V1.17.0_lihengbian_DIY_gongzhonghaozhushou_技术规范要求》第5章 + 【字体规范】
铁律:全文楷体 / 正文五号(10.5pt) / 行距 1.15 / 正文首行缩进 2 字符 / 标题居中·其余左对齐
用法:python render_kaiti.py 内容.md 输出.docx
说明:与 render.py(学位论文·宋体小四)并列,共用「规范与内容解耦」思想,
改本文件顶部的 KAITI_SPEC 即改全局格式。
"""
import re
import sys
from docx import Document
from docx.shared import Pt, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
# ---------------- 楷体五号 规范(单一事实来源) ----------------
KAITI_SPEC = {
"font_cn": "楷体",
"font_en": "楷体", # 全文楷体(西文/数字亦用楷体)
"size_title": 18.0, # 文档主标题 小二
"size_h1": 15.0, # 章标题 小三
"size_h2": 14.0, # 节标题 四号
"size_h3": 12.0, # 条目标题 小四
"size_body": 10.5, # 正文 五号
"size_code": 9.0,
"line_multiple": 1.15, # 行距 1.15
"first_line_indent_pt": 21.0, # 首行缩进 2 字符(2 × 10.5pt)
"align": {"title": "center", "h1": "center", "h2": "left", "h3": "left"},
"space_before": {"h1": 12, "h2": 8, "h3": 6, "title": 0},
"space_after": {"h1": 6, "h2": 4, "h3": 3, "title": 14},
"page_top_cm": 2.5,
"page_bottom_cm": 2.5,
"page_left_cm": 2.5,
"page_right_cm": 2.5,
}
S = KAITI_SPEC
def _set_run(r, text, size, bold=False):
r.text = text
r.font.name = S["font_en"]
r.font.size = Pt(size)
r.font.bold = bold
rpr = r._element.get_or_add_rPr()
rf = rpr.find(qn('w:rFonts'))
if rf is None:
rf = OxmlElement('w:rFonts')
rpr.append(rf)
rf.set(qn('w:eastAsia'), S["font_cn"])
rf.set(qn('w:ascii'), S["font_en"])
rf.set(qn('w:hAnsi'), S["font_en"])
def _align(p, name):
m = {"center": WD_ALIGN_PARAGRAPH.CENTER, "left": WD_ALIGN_PARAGRAPH.LEFT,
"right": WD_ALIGN_PARAGRAPH.RIGHT, "justify": WD_ALIGN_PARAGRAPH.JUSTIFY}
p.alignment = m.get(name, WD_ALIGN_PARAGRAPH.LEFT)
def _add_runs(p, text, size, base_bold=False):
# 支持行内 **加粗**
for part in re.split(r"(\*\*.*?\*\*)", text):
if not part:
continue
if part.startswith("**") and part.endswith("**"):
_set_run(p.add_run(), part[2:-2], size, True)
else:
_set_run(p.add_run(), part, size, base_bold)
def _spacing(p, before=None, after=None):
pf = p.paragraph_format
pf.line_spacing = S["line_multiple"]
if before is not None:
pf.space_before = Pt(before)
if after is not None:
pf.space_after = Pt(after)
def render(md, out):
doc = Document()
sec = doc.sections[0]
sec.page_width = Cm(21.0)
sec.page_height = Cm(29.7)
sec.top_margin = Cm(S["page_top_cm"])
sec.bottom_margin = Cm(S["page_bottom_cm"])
sec.left_margin = Cm(S["page_left_cm"])
sec.right_margin = Cm(S["page_right_cm"])
# Normal 默认字体
n = doc.styles['Normal']
n.font.name = S["font_en"]
n.font.size = Pt(S["size_body"])
rpr = n.element.get_or_add_rPr()
rf = rpr.find(qn('w:rFonts'))
if rf is None:
rf = OxmlElement('w:rFonts')
rpr.append(rf)
rf.set(qn('w:eastAsia'), S["font_cn"])
rf.set(qn('w:ascii'), S["font_en"])
rf.set(qn('w:hAnsi'), S["font_en"])
lines = md.split("\n")
i = 0
n_lines = len(lines)
in_code = False
code_buf = []
while i < n_lines:
raw = lines[i].rstrip("\n")
s = raw.strip()
# 代码块
if s.startswith("```"):
if in_code:
p = doc.add_paragraph()
_align(p, "left")
_spacing(p, 4, 8)
p.paragraph_format.line_spacing = 1.0
pPr = p._p.get_or_add_pPr()
sh = OxmlElement('w:shd')
sh.set(qn('w:val'), 'clear')
sh.set(qn('w:color'), 'auto')
sh.set(qn('w:fill'), 'F2F2F2')
pPr.append(sh)
for j, cl in enumerate(code_buf):
if j > 0:
p.add_run().add_break()
_set_run(p.add_run(), cl, S["size_code"])
code_buf = []
in_code = False
else:
in_code = True
i += 1
continue
if in_code:
code_buf.append(raw)
i += 1
continue
if not s:
i += 1
continue
if s.startswith("#### "):
p = doc.add_paragraph()
_align(p, S["align"]["h3"])
_spacing(p, S["space_before"]["h3"], S["space_after"]["h3"])
_add_runs(p, s[5:], S["size_h3"], True)
elif s.startswith("### "):
p = doc.add_paragraph()
_align(p, S["align"]["h2"])
_spacing(p, S["space_before"]["h2"], S["space_after"]["h2"])
_add_runs(p, s[4:], S["size_h2"], True)
elif s.startswith("## "):
p = doc.add_paragraph()
_align(p, S["align"]["h1"])
_spacing(p, S["space_before"]["h1"], S["space_after"]["h1"])
_add_runs(p, s[3:], S["size_h1"], True)
elif s.startswith("# "):
p = doc.add_paragraph()
_align(p, S["align"]["title"])
_spacing(p, S["space_before"]["title"], S["space_after"]["title"])
_add_runs(p, s[2:], S["size_title"], True)
elif s.startswith("- "):
p = doc.add_paragraph(style="List Bullet")
_align(p, "justify")
_spacing(p, 0, 2)
p.paragraph_format.left_indent = Cm(0.74)
_add_runs(p, s[2:], S["size_body"])
elif s.startswith("> "):
p = doc.add_paragraph()
_align(p, "left")
_spacing(p, 0, 2)
_add_runs(p, s[2:], S["size_body"])
else:
p = doc.add_paragraph()
_align(p, "justify")
_spacing(p, 0, 0)
p.paragraph_format.first_line_indent = Pt(S["first_line_indent_pt"])
_add_runs(p, s, S["size_body"])
i += 1
doc.save(out)
return out
if __name__ == "__main__":
src = sys.argv[1] if len(sys.argv) > 1 else "内容.md"
out = sys.argv[2] if len(sys.argv) > 2 else "楷五版输出.docx"
render(open(src, encoding="utf-8").read(), out)
print("SAVED", out)
来源:全域 Word 输出技术规范要求(Rule 1/2 路由)
文件:
C:\Users\xub\.workbuddy\MEMORY.md 第258-295行
全域 Word 输出技术规范要求(Craft 模式 · 2026-08-21 确立 · 全域规范)
固化与范围:本规范为用户级全域规范,固化于本文件,对所有工作空间、所有任务、所有 Agent 在 Craft 模式下一律生效。解决「输出 Word 时到底套哪套版式」的路由问题:非公众号文章分流(报告类走楷体五号、论文类走学位论文规范),公众号文章走公众号助手楷体五号规范。
适用前提
- 模式:仅 Craft 模式触发(Ask/Plan 模式不自动套版,由用户确认后再执行)。
- 对象:凡是 Agent 主动生成 / 输出
.docx(Word)版交付物时。
Rule 1 · 非公众号文章 Word → 按「报告类 / 论文类」分流
- 判别:内容不属于公众号文章(无三字标题散文、无【中心思想】/【个人感悟】等模块、非利衡辨公众号流程产出)的技术文档、总结、报告、规范、说明、纪要等,一律归入本类;再按下方两类分流选版式。
- 文档命名(名字 + 时间):
<文档名>_<YYYY-MM-DD_HHMM>.docx,时间戳date +"%Y-%m-%d_%H%M"(分钟精度,下划线+分钟,全域统一)。例:琼州海峡新能源汽车运输安全方案报告_2026-08-22_1215.docx。
Rule 1-1 · 报告类 → 楷体五号规范(render_kaiti.py / G3)
- 覆盖对象:技术洞察报告、理财洞察报告、财报洞察报告、专利/技术交底书、技术文档、总结、规范、说明、纪要等非论文文档。
- 规范依据:
V1.13.0_lihengbian_DIY_jishubiaozhunpaibanzhushou第二套「楷体五号」规范(render_kaiti.py,与公众号助手build_word.py同构)。 - 核心常量:全文楷体;正文五号 10.5pt;行距 1.15;正文首行缩进 2 字符;标题层级 主标题小二 18pt 居中 → 章小三 15pt 居中 → 节四号 14pt 左 → 条目小四 12pt 左。
Rule 1-2 · 论文类 → 学位论文规范(doc_spec.py / DOC)
- 覆盖对象:学位论文、大小论文等论文类文档。
- 规范依据:
V1.13.0_lihengbian_DIY_jishubiaozhunpaibanzhushou默认内置「华南理工大学硕士学位论文」排版规范(已从通过格式审查的终稿实测提取),由doc_spec.py为单一事实来源。 - 核心常量:
- 页面:A4、四边 2.5cm。
- 正文:宋体小四 12pt、两端对齐、首行缩进 2 字符、1.5 倍行距。
- 章标题:黑体小二 18pt 居中;节标题:黑体小三 15pt 左;三级:黑体四号 14pt。
- 图注下 / 表注上居中、宋体 10.5pt;参考文献 Times New Roman 10.5pt、固定 16pt(GB/T 7714)。
- 页眉写章名;摘要/目录罗马数字页码、正文阿拉伯页码从 1 重排;章/节自动编号(第一章 / 1.1 / 1.1.1)。
- 实现:论文类 →
render.py套doc_spec.py;报告类 →render_kaiti.py;改格式只改对应doc_spec.py/render_kaiti.py顶部KAITI_SPEC。
Rule 2 · 公众号文章 Word → V1.17.0_lihengbian_DIY_gongzhonghaozhushou【文章技术规范】
- 判别:内容为公众号文章(三字标题散文、含【摘要】/【中心思想】/【个人感悟】/【辩证哲学】/【利衡辨理论分析】等模块),由公众号助手流程产出。
- 规范依据:
V1.17.0_lihengbian_DIY_gongzhonghaozhushou版式铁律 +V1.13.0_lihengbian_DIY_jishubiaozhunpaibanzhushou第二套「楷体五号」规范(render_kaiti.py,二者同构)。 - 核心常量:
- 全文楷体;正文五号 10.5pt;行距 1.15;正文首行缩进 2 字符。
- 标题层级:主标题小二 18pt 居中 → 章小三 15pt 居中 → 节四号 14pt 左 → 条目小四 12pt 左。
- 标题居中、其余左对齐;文档名
三字标题_年月日时分.docx。 - 实现:内容 →
render_kaiti.py(规范在其顶部KAITI_SPEC)或公众号助手build_word.py生成。
Rule 3 · 单报告文档 → 一律套四件套(2026-08-24 统一)
- 触发:Craft 模式下,指令说「输出文档」「输出报告」等,凡 .docx/.xlsx 交付物(技术洞察/财报/理财/专利/技术文档等单报告,以及一般文档)一律套 skill/专家迭代升版四件套(见 Rule 4),不再设「仅命名、不套四件套」分流。
Rule 4 · 更新 skill / 专家 → 自动输出「skill/专家迭代升版四件套」
- 触发:Craft 模式下,后续场景或后续指令出现「更新 skill」「更新专家」「升版 skill」「迭代专家」「优化某 skill」等意图时,自动(不另行询问)输出以下四份交付物(即 skill/专家迭代升版四件套,一律套四件套):
1. 技术规范要求 Word:<升版号>_<skill名>_<YYYY-MM-DD_HHMM>_技术规范要求.docx
2. 「当前进展 + 遗留问题」摘要 Word:<升版号>_<skill名>_<YYYY-MM-DD_HHMM>_摘要.docx
3. 变更履历表 Excel:<升版号>_<skill名>_<YYYY-MM-DD_HHMM>_变更履历.xlsx
4. 版本清单 Excel:<升版号>_<skill名>_<YYYY-MM-DD_HHMM>_版本清单.xlsx - 命名与时间戳:遵循「skill/专家迭代 SOP」与「文件夹建立及命名规范 SOP」;版本号升 1 级 = 补丁号 +1(如 V1.8.0 → V1.8.1);时间戳
date +"%Y-%m-%d_%H%M",统一下划线+分钟。 - 同源说明:本 skill/专家迭代升版四件套与「skill/专家迭代 SOP · 必出三份交付物」同源;第 4 份(版本清单 Excel)为强制项,版本号以「版本清单(全域登记)」为唯一权威来源。
说明:本节点与「lihengbian_DIY_jishubiaozhunpaibanzhushou 技能生成/升级 SOP」「skill/专家迭代 SOP」「公众号画图规范 SOP」互为补充,不冲突;若某次 Word 产出已由专门 SOP(如公众号助手三件套、长/短项目收尾 SOP)覆盖,则优先按专门 SOP,skill/专家迭代升版四件套规则作为其兜底路由。
模态词等级表与示例约定(STD-D)
本范式条款所用模态词,按五级体系执行,与 RFC 2119 对齐并补其缺失的 RECOMMENDED 级:
| 中文模态词 | 英文对应 | 语义 | 违反后果 |
|---|---|---|---|
| 必须 | MUST / MUST NOT(否定式) | 绝对要求,无任何例外 | 判 P1 阻断 |
| 禁止 | MUST NOT | 绝对禁止 | 判 P1 阻断 |
| 应 | SHALL | 要求;若确有例外,须在条款内显式声明例外条件 | 判 P2 整改 |
| 宜 | SHOULD(RECOMMENDED) | 推荐做法;可不采用,但须记录理由 | 判 P3 提示 |
| 可 | MAY | 允许,表许可而非能力 | 不构成违规 |
表能力时用「能够」,不用「可」。
示例约定:条款下以「例:」引导数值或场景示例,以「反例:」引导错误用法。
术语与定义
下列术语和定义适用于本范式。禁止循环定义(不得以 A 定义 B 又以 B 定义 A)。
| 术语 | 定义 |
|---|---|
| doc_spec.py | 学位论文排版规范的单一事实来源(页面/字体/字号/标题/段落/参考文献等常量集,改规范只改本文件) |
| render_kaiti.py | 楷体五号版式渲染器,顶部 KAITI_SPEC 为单一事实来源(全文楷体、正文五号、行距 1.15、首行缩进 2 字符) |
| KAITI_SPEC | 楷体五号规范常量集:全文楷体、正文 10.5pt、行距 1.15、首行缩进 21pt、标题居中·其余左对齐 |
| Rule 1/2 路由 | Word 输出先判类:非公众号文章按「报告类/论文类」分流选版式;公众号文章走公众号助手楷体五号 |
| 楷体五号 | 公众号/规范文档通用排版版式(全文楷体、正文五号 10.5pt、行距 1.15、首行缩进 2 字符) |
| 学位论文规范 | 华南理工大学硕士学位论文格式:正文宋体小四 12pt 两端对齐 1.5 倍行距,章标题黑体小二 18pt 居中 |
| 四件套 | skill/专家迭代升版必出的四份交付物:技术规范要求 Word / 摘要 Word / 变更履历 Excel / 版本清单 Excel |
| 时间戳命名 | <文档名>_ |
| 单一事实来源 | 格式规范以 doc_spec.py / render_kaiti.py 顶部常量为唯一权威,改规范只改源文件,引擎与模板自动跟随 |
| Craft 模式 | Agent 主动生成/输出 .docx 交付物时自动套版式的执行模式(Ask/Plan 不自动套版) |
第二篇 流程与实施
本篇承接本范式既有工作流条款,汇总实施要点(原有条款原文一字未改,本篇仅作结构承接):
- 启动顺序五步闭环:读 MEMORY → 跑 _tools → 查 README → 查技术规范与 SOP → 建任务夹
- 升级五步闭环:只按本技术规范修改,不重写整个 SKILL.md,不碰全域规则与工具链
- Word 输出先判类:非公众号→报告/论文分流;公众号→公众号助手楷体五号规范
- 改格式只改源头:doc_spec.py / render_kaiti.py 顶部常量,引擎与模板自动跟随
- 单报告/升版一律套四件套:技术规范要求 Word / 摘要 Word / 变更履历 Excel / 版本清单 Excel
- 交付物命名:<文档名>_
.docx(下划线+分钟,全域统一)
第三篇 风险与失效模式
图3-1 Word 版式路由与规范来源(认知入口)
┌─────────────┐
│ Word 输出请求 │
└──────┬──────┘
▼
┌─────────────────────┐
│ Rule 1/2 路由判别 │
│ 公众号? 报告? 论文? │
└──────┬──────────────┘
┌───┴─────┐
▼ ▼
┌────────┐ ┌────────┐
│ 报告类 │ │ 论文类 │
│楷体五号│ │学位论文│
│render_ │ │doc_spec│
│kaiti.py│ │render.py│
└────────┘ └────────┘
│ │
└────┬────┘
▼
┌─────────────────────┐
│ 四件套强制(单报告/ │
│ 升版一律套齐) │
└─────────────────────┘
失效模式对照表(三列:失效模式 / 后果 / 防护条款,必须 100% 可追溯到本范式条款):
| 失效模式 | 后果 | 防护条款 |
|---|---|---|
| FM-1 版式误套 | 公众号文章误走学位论文规范(或反之),版式张冠李戴 | Rule 1/2 路由判别(适用前提/判别要点) |
| FM-2 规范漂移 | doc_spec.py / KAITI_SPEC 常量被多处硬编码复制,改一处不同步 | 单一事实来源(改规范只改源文件) |
| FM-3 命名失范 | 文档名缺时间戳或时间戳格式错(非下划线+分钟) | 时间戳命名规则(<文档名>_ |
| FM-4 四件套缺漏 | 单报告/升版未出齐四件套(缺版本清单等) | Rule 3/4 四件套强制(一律套四件套) |
| FM-5 字号越界 | 正文/标题字号偏离规范(如正文非 10.5pt) | 核心常量(楷体五号/学位论文字号体系) |
| FM-6 行距失控 | 行距非 1.15(楷体)或 1.5(论文) | 核心常量(行距体系) |
第四篇 保障、记录与附录
评审机制
- 触发:本范式所规范对象升版、或相关工具链脚本变更时必须触发评审。
- 评审人:利衡辨全域治理工作组;对象维护人复核。
- 评审内容:①条款与本范式是否一致;②失效模式表是否覆盖新增风险(见第三篇);③成文规范符合性(
doc_style_check.py判定结果)。 - 周期:宜每个季度至少一次例行评审;重大变更即时评审。
修订记录
修订记录必须含完整连续版本链,并与正文、头部版本号三处一致(STD-A)。
| 版本 | 日期 | 变更 | 编制 | 审核 | 批准 |
|---|---|---|---|---|---|
| V1.0.0 | 2026-08-25 | 首版(原稿基线,条款未动) | 利衡辨工作组 | 全域治理工作组 | 衡明合 |
| V1.0.1 | 2026-08-31 | 成文规范整改(升次版本):按《MASTER RULE 技术标准成文规范》补齐——模态词五级等级表、四篇式结构、术语和定义(10 条)、失效模式对照表(6 项)、认知入口图、必备附录 A–D、评审机制、修订记录、审批记录、定稿校核结论、待确认事项闭环记录。原有条款一字未改,仅增补结构与记录。 | 利衡辨工作组 | 全域治理工作组 | 衡明合 |
审批记录
| 项 | 内容 |
|---|---|
| 定稿版本 | V1.0.1 |
| 编制 | 利衡辨工作组(2026-08-31) |
| 审核 | 全域治理工作组(2026-08-31) |
| 批准 | 衡明合(2026-08-31) |
| 生效条件 | 本范式自批准之日起生效;旧版 V1.0.0 归档 .bak 保留可回退 |
定稿校核结论
- 校核工具:
~/.workbuddy/_tools/doc_style_check.py(母规则 AUTO 条款自动判定器)。 - 校核对象:本文件(
~/.workbuddy/spec\3.行政法规\范式\)。 - V1.0.0 基线:P1 不通过 10 项、P2 不通过 5 项。
- V1.0.1 结果:P1 不通过 0 项、P2 不通过 0 项(退出码 0)。
- P3 说明(STD-C-010 示例覆盖率):该判据按「含示例标记段落占比 ≥30%」计,本范式以自有编号体系为主,示例标记段落占比未达阈值,属判据适用边界问题(非文档缺陷),如实记录。
- 结论:本范式在保持原有条款不变的前提下,完成母规则结构与记录类条款整改;P1/P2 全部清零,可作为 楷体Word输出规范 的升级依据。
待确认事项
| 编号 | 事项 | 提出版本 | 责任人 | 状态 |
|---|---|---|---|---|
| Q1 | 认知入口图现以 ASCII 框图呈现,待具备图形生成条件后替换为正式插图 | V1.0.1 | 利衡辨工作组 | 待替换 |
| Q2 | Rule 3/4 四件套与专门 SOP(公众号三件套/长短期收尾)的覆盖优先级需周期性复核,避免规则重叠 | V1.0.1 | 利衡辨工作组 | 待复核 |
附录 A 速查表
本范式核心要求速查(详见正文对应章节):
| 场景 | 要求 | 位置 |
|---|---|---|
| 启动顺序五步闭环:读 MEMORY → 跑 _tools → 查 README → 查技术规范与 SOP → 建任务夹 | 强制闭环 | 正文工作流章节 |
| 升级五步闭环:只按本技术规范修改,不重写整个 SKILL.md,不碰全域规则与工具链 | 强制闭环 | 正文工作流章节 |
| Word 输出先判类:非公众号→报告/论文分流;公众号→公众号助手楷体五号规范 | 强制闭环 | 正文工作流章节 |
| 改格式只改源头:doc_spec.py / render_kaiti.py 顶部常量,引擎与模板自动跟随 | 强制闭环 | 正文工作流章节 |
| 单报告/升版一律套四件套:技术规范要求 Word / 摘要 Word / 变更履历 Excel / 版本清单 Excel | 强制闭环 | 正文工作流章节 |
| 交付物命名:<文档名>_ |
强制闭环 | 正文工作流章节 |
附录 B 术语表
同正文「术语和定义」,共 10 条:doc_spec.py、render_kaiti.py、KAITI_SPEC、Rule 1/2 路由、楷体五号、学位论文规范、四件套、时间戳命名、单一事实来源、Craft 模式。
附录 C 工具链清单
| 工具 | 用途 | 位置 |
|---|---|---|
| 成文规范判定器 | 母规则 AUTO 条款机器判定 | ~/.workbuddy/_tools/doc_style_check.py |
| 交付物命名与校验库 | 交付物路径派生、命名闸 | ~/.workbuddy/_tools/deliverable.py |
| 规范闸门 | 无技术规范拒绝升级 | ~/.workbuddy/_tools/expert_spec_gate.py |
附录 D 记录字段明细
| 字段 | 含义 | 引入版本 |
|---|---|---|
| 版本号 | 本范式当前版本(正文与头部三处一致) | V1.0.0 |
| 模态词等级 | 五级体系(必须/禁止/应/宜/可) | V1.0.1 |
| 失效模式编号 | FM-N 与防护条款一一对应 | V1.0.1 |
宪法 > 基本法 > 行政法规 > 地方法规 > 地方规章