公众号排版发布
把可读取的资料或文章制作成一份公众号正文母版,再由同一母版进入修改、草稿箱和正式归档。收口后只保留本 Skill 的最终可复制 HTML,以及本 Skill 在直接改写入口亲自写出的 Markdown 终稿。
进入边界
支持会话直接入口和任意上游 Skill 续接。进入前必须同时满足:
destination已确认是wechat_official_account。- 当前任务已进入公众号定稿、配图、排版、正式可复制版或草稿箱制作阶段。
- 源资料或文章可以读取。
用户只要正文、只要初稿、平台待定或目标为其他平台时,继续原工作流。Skill 续接时读取 references/upstream-handoff.md;不要向用户展示内部交接模板,也不要让上游替用户猜选择。
开局确认
开始制作前只确认内容处理模式:
开始前请确认内容处理模式:
A. 杂乱资料:梳理并产出公众号定稿文案,再配图排版
B. 初稿文案:检查优化内容细节并产出定稿,再配图排版
C. 发布定稿:保持文案内容不变,只做配图、排版和格式规范
用户请求或可追溯交接已经明确内容模式时不重复询问。内容模式确定前不得改写、规划配图、生成图片、制作预览或调用微信接口。首次正式可复制版完成前不要求用户决定草稿箱或归档。
把选择原样写入 image-plan.json:
- 内容 A:
input_stage: messy_materials、content_mode: rewrite。 - 内容 B:
input_stage: draft_copy、content_mode: rewrite。 - 内容 C:
input_stage: final_copy、content_mode: preserve。 - 首次交付前固定记录
interaction_contract_version: 3、review_choice: pending、delivery_mode: copy_ready、draft_authorization: none、archive_authorization: none、approved_body_sha256: ""和body_image_upload_authorization: copy_ready_request。 - 同时记录
content_choice、choice_source: direct_user | upstream_user_confirmation、destination: wechat_official_account和entry_mode: direct | skill_handoff;续接入口另记handoff_version: 1与source_skill。 - 从创建第一个文件或目录起维护
artifact_ownership.skill_created_files、skill_created_directories与protected_external_files。前两者只列本 Skill 本次真实创建的文件和目录;后者列用户文件、上游文档和外部素材,清单不得重叠。
默认交付循环
首次正式可复制版完成并通过质量闸门后,提供 HTML 并主动询问:
当前可复制版已经完成。是否通过,可以加入公众号草稿箱?需要修改请直接告诉我。
- 用户提出修改:按
references/publishing.md完整退回修改状态并清空旧批准;修改、重验后重新交付完整 HTML。 - 用户确认加入草稿箱:把最新视觉 QA 回执中的正文哈希写入
approved_body_sha256,更新为review_choice: draft、delivery_mode: draft和post_preview_confirmation授权。草稿入口必须核对当前正文与该哈希完全一致;正文有任何变化都停止并重新确认。 - 草稿成功:返回
media_id,提醒“进入草稿箱不等于公开发布”,记录archive_authorization: post_draft_success,然后按references/archive.md自动把同一最终 HTML 写入调用项目提供的正式目标位置;不再询问是否收口。
只有用户明确说“只要手动复制版”时才跳过草稿 API;用户明确要求“直接加入草稿箱”时可以跳过用户预览,但仍完成全部内部质量检查。不要主动向用户展示这些内部路线或状态名。
五条硬合同
- 内容边界
messy_materials保存可追溯源资料,分开事实、观点、经历、数据、重复、冲突和待核项,再按读者理解顺序成文。draft_copy以初稿为母版,保护事实、立场、证据边界和真实声音;按结构与动力、证据连接、段落呼吸、词句准确的顺序修订。final_copy只改变 HTML 结构和视觉节奏。正文字符、标点与顺序不得变化;缺少标题时先请用户补充或取得单独新增授权。副标题按文章需要选用,用户明确不需要时记录subtitle_policy: omitted_by_user,不为通过校验强行新增。
- 编辑与图片计划
- 搜索、生成或绘图前创建
image-plan.json。新建或重做的rewrite任务必须使用editorial_contract_version: 1和可验证的editorial_plan;draft_copy另含voice_fingerprint与revision_priorities。 - 旧文章包只有显式使用验证器的
--allow-legacy-editorial才能走兼容路径;新任务禁止使用该开关。
- 搜索、生成或绘图前创建
- 真实视觉来源
- 每个视觉只走
user_asset、evidence_screenshot、generated_image、coded_visual中的一条路线。证据必须来自真实来源,代码图只解释结构。 - 标题与副标题之后的首图必须由真实生图工具生成,准确 H1 自然融入
2.35:1构图,最终文件至少900×383。纯图、用户图、截图、代码图或脚本贴字不能代替。 - 当前 Agent 无生图能力时,告知用户并停在本地工作预览;保留完整提示词,首图返回前不得正式交付。
- 每个视觉只走
- 单一正文母版
- 正文使用
ARTICLE HTML START与ARTICLE HTML END标记,只含微信安全的内联 HTML。预览按钮、状态条和脚本只能在标记外。 - 正文视觉按计划顺序使用唯一
data-wlp-visual-id;所有强视觉统一计入密度。相邻强视觉之间必须有承担新信息的正文。
- 正文使用
- 授权与安全
copy_ready可以准备正文图片,但绝不创建草稿。普通路线只有用户确认当前 HTML 后才记录正文哈希并更新草稿授权;直接草稿路线只接受用户当前明确指令。- 只有
delivery_mode: draft、草稿授权与正文哈希合同同时有效时才能调用draft/add。普通路线发送的 ARTICLE HTML 正文必须与用户最新确认版本逐字节一致。凭据只从环境变量、本地.env或本 Skill 的标准系统凭据位置读取,不搜索旧聊天、随机文件、shell 历史或无关钥匙串。 - IP 白名单以微信接口
40164返回的invalid ip为准。普通公网 IP 探测只作参考;代理、TUN 或分流存在时,不得用与微信实测不同的探测结果指导用户。 - 收口只删除
artifact_ownership.skill_created_files中逐条登记的文件,只移除skill_created_directories中已经变空的目录;禁止通配符、目录扫描和整目录递归删除。用户文件、用户目录、上游文档、外部素材及来源不明路径永不移动、覆盖或删除。 - 不创建名为
WeChat或wechat的文件夹。临时素材使用当前文章工作目录内的普通子目录,收口后只删除已登记且属于本 Skill 的文件。
按需读取
只在进入对应阶段时加载,避免把低频发布细节提前塞进上下文:
| 阶段 | 读取 |
|---|---|
| Skill 续接 | references/upstream-handoff.md |
| 内容规划 | references/content-planning.md;rewrite 再读 references/editorial-writing.md |
| 图片计划 | references/image-placement.md,从 assets/image-plan.template.json 起步 |
| 视觉制作 | references/visual-quality.md、references/cover-system.md |
| HTML 排版 | references/style-guide.md、references/components.md |
| 最终检查 | references/qa-checklist.md |
| 上传正文图或草稿箱 | references/publishing.md |
| 草稿成功或用户明确只收口手动复制版 | references/archive.md |
final_copy 不加载改写规则。只需要本地预览时不加载发布凭据和草稿 API 细节。
执行顺序
- 收集与核查:确认源文章、标题、可选副标题、作者或栏目名,以及全部用户图片和视频。先盘点用户素材;相关视频提取带时间戳的代表帧。依赖时效事实时联网核查一手来源。
- 完成内容规划:记录内容类型、置信度、依据、核心主张、读者承诺和章节地图。
rewrite完成编辑规划与定稿;entry_mode: direct的rewrite同时写出本 Skill 自有的公众号文案终稿.md,登记后在收口时保留。preserve与skill_handoff默认不另建 Markdown,原文只登记为受保护外部文件。 - 完成图片计划:填写交互合同、编辑合同、素材决策、首节视觉锚点和每个视觉的来源、位置、语义、状态与可追溯信息。先运行计划阶段验证。
- 制作视觉:优先使用相关用户素材和真实证据;生成图负责隐喻或氛围;代码图负责流程、关系、时间线、比较、数据或机制。首图生成并人工检查后再继续。
- 制作 HTML 与本地预览:使用一致的组件、移动端节奏和内联样式。本地路径只用于内部预览,不能宣称可直接复制到微信。
- 完成交付前闸门:依次验证最终图片计划、正文安全、文案和统一布局;内部本地预览只服务制作,不交给用户审阅,也不因截图工具限制阻止正式可复制版生成。
- 交付与确认:通过
publish.ts正式准备模式上传或复用正文图,首次交给用户的就是完整可复制 HTML。用户审阅后按意见循环修改;明确确认时生成绑定当前正文与图片计划哈希的视觉回执,锁定正文哈希并按references/publishing.md创建草稿;成功后按references/archive.md写入项目提供的正式目标并安全清理。
验证命令从 scripts/ 目录运行:
npm run verify-image-plan -- --stage plan --article <source-article> <image-plan.json>
npm run verify-image-plan -- --stage final --article <source-article> --check-files <image-plan.json>
npm run verify-article -- --complete-package --content-mode <rewrite|preserve> --source-article <source-article> <article.html>
npm run verify-copy -- <article.html>
npm run verify-layout -- --article <article.html> --image-plan <image-plan.json>
rewrite 的文案警告必须修复;preserve 只报告。正式交付还要按 qa-checklist.md 完成图片来源、移动端截图、verify-copy-ready 和视觉回执检查。
完成回报
只报告与本次分支有关的信息:
- 内容模式、交付方式、正文母版与预览路径;明确是本地预览还是正式可复制版。
rewrite的主要改动,或preserve的原文校验与获准新增节点。- 首图/封面路径、图片计划路径、视觉来源数量及证据 URL 或失败原因。
- 用户素材的使用位置与跳过理由;当前生图能力和真实工具。
- 正式可复制版的用户审阅状态、尚未解决的视觉或来源风险。
- 创建草稿时返回
media_id,并提醒“进入草稿箱不等于公开发布”。 - 首次完成和每轮修改后提供完整可复制 HTML,并主动询问是否通过、可以加入草稿箱。
- 收口时只报告最终 HTML、保留的本 Skill Markdown 终稿(如有)和未触碰的外部文件数量。