用途 gm-publish 负责一个 PRD 行(row)的发布阶段。输入为 row=<id> 与 session=<SESSION_ID>,输出写入 .gm/receipts/<row>/06-publish.md。
主要能力
- 同步与合并:在提交前和推送前各拉取一次 main,远端已前进时先合并;若出现 conflicted: true,则按 gm collision 规则在当轮解决。
- 提交前校验:检查提交信息,subject 最多 50 字符,正文每行最多 72 字符,提交动词会拒绝其他格式的信息;同时 git_status 不得出现 04-edit.md 所列路径之外已暂存的路径,外来暂存路径(其他通道的改动或索引项)会阻止提交,须取消暂存并用 prd-add 登记,绝不提交。
- 提交与推送:使用 git_finalize {message, paths} 只提交 04-edit.md 列出的路径,再用 git_push 推送到完整 sha。
- 交接:执行器到此停止,向编排器返回 STATUS: handoff <sha>。
- CI 读取:CI 读取由编排器针对该 sha 另起一条通道(<parent>-c<k>)完成,做一次 gm_codemode 调度:git_show {rev:sha}、ci-status {sha} 获取各 job 结论、ci-log {sha, max_lines:40} 获取日志文本;日志在去掉每次调用都会变化的 dispatch_id: 行后,用 crypto.subtle.digest('SHA-256') 计算 log_sha256,并把 log_sha256 与 sha 一同记入 06-publish.md。pending 或失败都不算成功:全部 job 为绿色时返回 STATUS: ci-green <sha>,否则返回 STATUS: ci-red <sha> <job> 并带上失败 job 名称与日志行。
- 失败处理:出现 ci-red 时,编排器为该 row 新起一个执行器,以该 sha 和 job 为输入,不会在此内联加载 gm-eliminate。只有编排器调用 prd-resolve,且仅当验证者与 CI 通道对同一 sha 都报告绿色时才调用。
使用方式 按上述输入输出约定运行:先合并、再按显式路径提交与推送,随后等待独立 CI 通道回读结论并写回执。技能强调“完成工作”:遇到阻碍(检查失败、工具或服务故障、缺少输入、网络或环境故障)时应在同一次运行内修复,采用有界或可续跑的路线重试、换用等效替代路线,或从源头修复故障,然后继续剩余工作。只有工作完成,或在尝试所有路线后仍被阻塞时才停止,并报告被阻塞的步骤、尝试过的路线及各自证据。
适用场景 适用于由编排器驱动的 PRD 行发布流程,尤其是需要严格限定提交路径、规范提交信息、并在推送后以独立通道核验 CI 全绿的自动化发布场景。
限制 提交只允许 04-edit.md 中列出的路径;提交信息格式有硬性长度限制;CI 结果为 pending 或失败均不能视为成功;日志哈希需排除 dispatch_id 行以保证可比性。具体冲突解决规则细节、prd-add 与 prd-resolve 的完整行为在资料中未展开说明,暂未提供。