发布 Frozen 快照
这是执行技能,不是诊断或性能分析技能。只发布有效的 Frozen snapshot;原型创建、体验评审和普通原型上传由 speckit-prototype 负责。
发布前读取 command.md、references/release-package-contract.md、references/product-target-contract.md 和 references/ux-release-contract.md,使用 scripts/build_publish_commit.py。不要编写临时发布器,不要修改用户项目的 .git 目录。
安全边界
- 远端访问、fetch 和 push 前确认仓库、分支、项目 ID、快照和静态站点配置。
- 发布路径必须是
<product_id>/<product_version>/<spec_revision>/,并保留外层prototype/。 manifest.json中的产品、版本、修订号和artifact_key必须完整且彼此一致;校验失败时不得访问远端。- 使用 Windows Credential Manager;凭据不得写入 URL、参数、日志、JSON 或临时文件。
- 使用隔离临时 bare repo、
GIT_TERMINAL_PROMPT=0和GCM_INTERACTIVE=Never。 - 不 force push,不覆盖同名不同内容的已发布版本,不使用浏览器提交或递归删除。
ALREADY_PUBLISHED_IDENTICAL是成功结果,不重试;VERSION_CONFLICT必须停止并交给用户决策。
固定执行流程
- 验证 Frozen 快照、源 manifest、产品路径、原型门禁和入口配置。
- 确认
PUB_GIT_REPO、PUB_BRANCH、PUB_PROJECT、仓库网页根地址和静态托管根地址。 - 使用
command.md中的命令,在前台运行一次发布器;不要并行启动第二次发布。 - 等待进程退出,保留 stdout、stderr 和退出码。stdout 是结构化 JSON,stderr 是阶段进度。
- 退出码为 0 时返回结构化结果;非零时返回机器错误并停止,不在同一轮自行改参数重试。
凭据与 Git
使用 --credential-helper wincred 或 SPECKIT_GIT_CREDENTIAL_HELPER=wincred。发布器会在同一进程上下文执行 git credential fill 预检;CREDENTIAL_ACCESS_BLOCKED 表示运行上下文无法访问 Windows Credential Manager,应在具备该权限的上下文重跑完整发布;只有 CREDENTIAL_NOT_FOUND 才表示没有可用凭据。
大仓库或内网链路使用 --partial-fetch。可通过 SPECKIT_GIT_BIN 指定真实 Git 二进制,优先使用非 shim 的 Git 可执行文件。
默认有界时间为:Git 探针/凭据 60 秒、远端读取 60 秒、fetch/push 600 秒、URL 校验 30 秒;总安全上限和无进度看门狗由 SPECKIT_PUBLISH_* 环境变量控制。
结果交付
返回存在的 result、product_version、spec_revision、artifact_key、branch、commit_sha、credential_status、repository_url、primary_prototype_url、prototype_urls 和 url_status。默认使用中文说明结果,但保留这些机器字段的英文原名。
credential_status=Verified 表示同一发布上下文的凭据预检成功;url_status=Pending 只表示静态托管尚未可验证,不代表 Git 发布失败。
技能包只能包含源文件,不得保留 .pyc 或 __pycache__/。