返回板块

G21 楷体Word输出规范

2026-09-19行政法规 · 技术标准
源文件: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/专家)升级/迭代/训练/知识注入的唯一权威依据。任何涉及该对象的改动,必须严格按以下五步闭环执行,缺一不可、全域强制。

启动顺序(每次会话/任务启动,全域铁律)

  1. 读 MEMORY(拿规则):首步读 ~/.workbuddy/MEMORY.md,未读不得动手。
  2. 跑 _tools 代码(强制):凡 .docx/.xlsx 交付物命名与skill/专家迭代升版四件套验证,强制调用 ~/.workbuddy/_tools/(deliverable.py / check_deliverables.py),禁止手敲文件名。
  3. 查 README(看 API):动手前查 ~/.workbuddy/README/<对象目录名>/README.md;无独立 README 时以 SKILL.md 为 API 权威。
  4. 查技术规范与 SOP(升级/建夹必过闸):①升级/迭代/训练/知识注入前先读本范式(~/.workbuddy/spec\3.行政法规\范式\ 对应文件);②每个新任务启动(含任何 skill 触发产出)先读 S01+S02,建「三字标题_YYYY-MM-DD_HHMM/产出/素材/」,产出落 产出/。
  5. 收尾总结(每次任务结束后,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
时间戳命名 <文档名>_.docx,分钟精度、下划线+分钟,全域统一
单一事实来源 格式规范以 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 命名失范 文档名缺时间戳或时间戳格式错(非下划线+分钟) 时间戳命名规则(<文档名>_.docx)
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 强制闭环 正文工作流章节
交付物命名:<文档名>_.docx(下划线+分钟,全域统一) 强制闭环 正文工作流章节

附录 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
利衡辨 · 全域资料站 | 全域七链元路由 · 一进一出
宪法 > 基本法 > 行政法规 > 地方法规 > 地方规章