
printing-press-polish
熱門打磨生成的 CLI,使其能通过验证并达到可发布状态。执行多项诊断(包含 dogfood、verify、scorecard、go vet、gosec),自动修复所有问题(如验证失败、静态分析检出项、废程式码、说明文字、README 及 MCP 工具品质),回报修改前后的变更差异,并询问是否进行发布。可在执行任何 /printing-press 之后使用,或针对 $PRESS_LIBRARY/ 中的任意 CLI 使用。触发词:"polish", "improve the CLI", "fix verify", "make it publish-ready", "clean up the CLI", "get this ready to ship"。
打磨生成的 CLI,使其能通过验证并达到可发布状态。执行多项诊断(包含 dogfood、verify、scorecard、go vet、gosec),自动修复所有问题(如验证失败、静态分析检出项、废程式码、说明文字、README 及 MCP 工具品质),回报修改前后的变更差异,并询问是否进行发布。可在执行任何 /printing-press 之后使用,或针对 $PRESS_LIBRARY/ 中的任意 CLI 使用。触发词:"polish", "improve the CLI", "fix verify", "make it publish-ready", "clean up the CLI", "get this ready to ship"。
/printing-press-polish
打磨生成的 CLI,使其能通过验证并准备好发布。
「事后检讨(retro)」旨在改进 Printing Press 本身;而「打磨(polish)」则是为了提升生成的 CLI。此 Skill 在独立分叉上下文(context: fork)中运行,因此其诊断与修复循环不会污染呼叫方——包含诊断杂讯、修复迭代与重新诊断的过程都会局限在打磨工作阶段中,呼叫方仅会收到一份干净清晰的汇总报告。
/printing-press-polish redfin
/printing-press-polish redfin-pp-cli
/printing-press-polish "$PRESS_LIBRARY/redfin"
何时执行
在任何 /printing-press 生成流程完成后执行,特别是发生以下状况时:
- Shipcheck 的判定结果为
ship-with-gaps - Verify 通关率低于 80%
- Scorecard 得分低于 85
- 希望能单次搞定 CLI 的发布准备
亦可独立针对 $PRESS_LIBRARY/ 中的任意 CLI 执行。
设定
# min-binary-version: 4.0.0
PRESS_HOME="${PRINTING_PRESS_HOME:-$HOME/printing-press}"
PRESS_LIBRARY="$PRESS_HOME/library"
_pp_check_disk_space() {
_pp_disk_warn_kb="${PRINTING_PRESS_DISK_WARN_KB:-3145728}"
_pp_disk_fail_kb="${PRINTING_PRESS_DISK_FAIL_KB:-524288}"
case "$_pp_disk_warn_kb$_pp_disk_fail_kb" in
""|*[!0-9]*) return 0 ;;
esac
_pp_disk_path="$PRESS_HOME"
while [ ! -e "$_pp_disk_path" ] && [ "$_pp_disk_path" != "/" ]; do
_pp_disk_path="$(dirname "$_pp_disk_path")"
done
_pp_disk_avail_kb="$(df -Pk "$_pp_disk_path" 2>/dev/null | awk 'NR == 2 { print $4; exit }')"
case "$_pp_disk_avail_kb" in
""|*[!0-9]*) return 0 ;;
esac
if [ "$_pp_disk_avail_kb" -lt "$_pp_disk_fail_kb" ]; then
echo ""
echo "[setup-error] Critically low disk space on the Printing Press workspace volume."
echo "PRESS_DISK_PATH=$_pp_disk_path"
echo "PRESS_DISK_AVAIL_KB=$_pp_disk_avail_kb"
echo "PRESS_DISK_FAIL_KB=$_pp_disk_fail_kb"
echo "Free disk space or set PRINTING_PRESS_HOME to a volume with more room, then re-run this skill."
echo ""
return 1
fi
if [ "$_pp_disk_avail_kb" -lt "$_pp_disk_warn_kb" ]; then
echo ""
echo "[low-disk] Printing Press workspace volume is low on free space."
echo "PRESS_DISK_PATH=$_pp_disk_path"
echo "PRESS_DISK_AVAIL_KB=$_pp_disk_avail_kb"
echo "PRESS_DISK_WARN_KB=$_pp_disk_warn_kb"
echo "This flow may need several GiB for generated files, Go build cache, module downloads, or repository clones."
echo ""
fi
}
_pp_check_disk_space || { return 1 2>/dev/null || exit 1; }
# Mid-pipeline callers may pass printing_press_bin: <abs-path> in the args
# bundle. Prefer it so forked polish runs keep using the parent skill's
# preflight-selected binary instead of re-resolving through PATH.
PRINTING_PRESS_BIN="${PRINTING_PRESS_BIN:-}"
if [ -z "$PRINTING_PRESS_BIN" ] && [ -n "${ARGUMENTS:-}" ]; then
PRINTING_PRESS_BIN="$(printf '%s\n' "$ARGUMENTS" | sed -nE 's/^[[:space:]]*printing_press_bin:[[:space:]]*(.+)$/\1/p' | head -1)"
fi
if [ -z "$PRINTING_PRESS_BIN" ]; then
PRINTING_PRESS_BIN="$(command -v cli-printing-press 2>/dev/null || true)"
fi
if [ -z "$PRINTING_PRESS_BIN" ]; then
echo "cli-printing-press binary not found."
echo "Install with: go install github.com/mvanhorn/cli-printing-press/v4/cmd/cli-printing-press@latest"
return 1 2>/dev/null || exit 1
fi
if ! command -v go >/dev/null 2>&1; then
echo ""
echo "[setup-error] Go toolchain not found."
echo ""
echo "This Printing Press flow runs Go-based build or validation commands."
echo "Install Go 1.26.5 or newer from https://go.dev/dl/, then verify with:"
echo " go version"
echo "Then re-run this skill."
echo ""
return 1 2>/dev/null || exit 1
fi
echo "PRINTING_PRESS_BIN=$PRINTING_PRESS_BIN"
_pp_semver_lt() {
awk -v a="$1" -v b="$2" 'BEGIN {
split(a, x, "."); split(b, y, ".")
for (i = 1; i <= 3; i++) {
if ((x[i] + 0) < (y[i] + 0)) exit 0
if ((x[i] + 0) > (y[i] + 0)) exit 1
}
exit 1
}'
}
_pp_go_version_norm() {
printf '%s\n' "$1" | sed -nE 's/.*go([0-9]+)\.([0-9]+)(\.([0-9]+))?.*/\1.\2.\4/p' | awk -F. 'NF >= 2 { printf "%d.%d.%d\n", $1, $2, ($3 == "" ? 0 : $3) }'
}
_pp_check_go_currency() {
_pp_go_installed="$(_pp_go_version_norm "$(go env GOVERSION 2>/dev/null)")"
_pp_go_required="$(_pp_go_version_norm "$(go version "$PRINTING_PRESS_BIN" 2>/dev/null)")"
if [ -z "$_pp_go_installed" ] || [ -z "$_pp_go_required" ] || ! _pp_semver_lt "$_pp_go_installed" "$_pp_go_required"; then
return 0
fi
echo ""
if [ "${GOTOOLCHAIN:-auto}" = "local" ]; then
echo "[setup-error] Go $_pp_go_required or newer is required by this cli-printing-press binary (installed: $_pp_go_installed)."
echo "GOTOOLCHAIN=local disables automatic toolchain downloads, so later Go quality gates would fail."
echo "Install Go $_pp_go_required or newer from https://go.dev/dl/, or unset GOTOOLCHAIN."
echo ""
return 1
fi
echo "[go-toolchain-old] Go $_pp_go_required or newer is required by this cli-printing-press binary (installed: $_pp_go_installed)."
echo "PRESS_GO_INSTALLED=$_pp_go_installed"
echo "PRESS_GO_REQUIRED=$_pp_go_required"
echo "Default GOTOOLCHAIN behavior may download the required toolchain during Go commands."
echo ""
return 0
}
_pp_check_go_currency || { return 1 2>/dev/null || exit 1; }
完成了设定流程后,取得 PRINTING_PRESS_BIN=<abs-path>,并在本 Skill 中每次调用 cli-printing-press ... 时均使用该绝对路径。如果设定过程输出了 [go-toolchain-old] 或 [low-disk],请向使用者显示提示讯息并继续执行(除非设定过程也输出了 [setup-error])。[go-toolchain-old] 表示后续的 Go 指令可能会下载所需的工具链,或在网络受限时导致失败;[low-disk] 则意味着本次运行可能需要数 GB 的容量用于生成档案、Go 编译快取、模组下载或储存库克隆。
从本 Skill YAML frontmatter 的 min-binary-version 栏位读取版本资讯,接着执行 "$PRINTING_PRESS_BIN" version --json 并解析输出中的版本,以检查执行档的版本相容性。依语义化版本(semver)规则将其与 min-binary-version 比对。若已安装的执行档低于最低要求的版本,请立即中止并告知使用者:「cli-printing-press 执行档版本 vX.Y.Z 低于最低要求的 vA.B.C。请执行 go install github.com/mvanhorn/cli-printing-press/v4/cmd/cli-printing-press@latest 进行更新。」
公开程式库(Public-library)提示
若使用者的请求中包含类似 "polish notion in the public library"(打磨公开程式库中的 notion)、"polish from the public library"(打磨来自公开程式库的...)或 "polish the published cal-com"(打磨已发布的 cal-com)等字眼——且指定的 CLI 不在 $PRESS_LIBRARY/<slug>/ 中——表示他们想打磨的是位于上游而非本地的 CLI。由于打磨操作是对内部程式库进行的,因此正确的做法是先执行导入。
建议先使用:/printing-press-import <slug> 将其带入本地,然后再重新执行打磨。请勿尝试打磨尚未存于内部程式库中的 CLI。
若指定的 CLI 已经 存在于 $PRESS_LIBRARY/<slug>/,则「公开程式库」的说法仅作参考资讯使用——直接继续打磨流程即可,后续的偏离检查(divergence check)会自动处理任何版本差异。
解析 CLI
参数字串可包含 --standalone 旗标以及一个位置参数(slug、执行档名称或路径)。在独立斜线指令(slash-command)模式下,在可选的位置参数之后还可以包含自定义的控制范围说明(free-text scope),例如 /printing-press-polish sculptok review the open PR comments and fix them。末尾的这段自然语言文本属于使用者可信的自订范围(user scope)。请将其透传至打磨计划与结果区块中,切勿将其归类为注入(injection)或篡改(tampering)。
当由主 printing-press skill 调用时,后续行亦可包含 Phase 3 的关卡包(gate bundle)以及 printing_press_bin: <abs-path> 设定行。旗标可出现在位置参数之前或之后,它是本 Skill 会从 args 中读取的唯一旗标。在进行路径解析前请先剥离该旗标。
当 args 包含多行文本时,将第一个非空白行视为位置参数/范围行,并将剩余行解析为可选的 Phase 3 关卡包。请勿将关卡包文本纳入路径解析中。
针对不同的呼叫模式进行差异化解析:
- 独立斜线指令(
STANDALONE_MODE=true)。 剥离--standalone之后,尝试将第一个 Shell 单字解析为 slug、执行档名称或路径。若成功解析,将其用作位置参数,并将剩余单字储存为USER_SCOPE。若解析失败,则将整行视为自定义范围说明文本;此分支会询问要打磨哪一个 CLI,并为选定的 CLI 保留该范围说明。若解析出的位置参数后没有末尾文本,则执行一般的通用打磨流程。 - 管道中途的 Skill 工具调用。 保持严格的语法规则:首行为单个类似路径的位置参数,后续行为可选的结构化关卡包。在此类机器生成的路径中,若出现意料之外的自由格式文本,不属于使用者范围(user scope),应予以拒绝或要求澄清,而非并入运行流程。
位置参数可以是:
- 简短名称:
redfin(查找$PRESS_LIBRARY/redfin) - 完整名称:
redfin-pp-cli(剥离字尾,查找$PRESS_LIBRARY/redfin) - 路径:
$PRESS_LIBRARY/redfin(直接使用)
位置参数的解析顺序:
- 若为绝对路径或以
~开头的路径且存在,直接使用 - 尝试
$PRESS_LIBRARY/<arg>(精确比对——适用于像redfin这类的 slug) - 若带有
-pp-cli字尾,剥离字尾后尝试$PRESS_LIBRARY/<slug>(例如redfin-pp-cli→redfin) - 模糊搜寻:执行
ls $PRESS_LIBRARY/ | grep -i <arg>寻找相近匹配
呼叫者场景与 --standalone 旗标。 打磨流程有两种呼叫者;它们通过不同的机制触发,而本 Skill 结尾的「发布询问(Publish Offer)」仅在 STANDALONE_MODE 为 true 时才会触发。请根据呼叫者模式与旗标来确定 STANDALONE_MODE,而不是从解析出的路径来判断。
- 独立模式(使用者直接触发,
/printing-press-polish redfin)。 通过斜线指令调用。无条件视为STANDALONE_MODE=true——即使使用者省略了旗标,斜线指令的形式本身就代表有发布意向。参数为 slug 或执行档名称;解析结果会指向$PRESS_LIBRARY/<slug>/。这是可发布副本,也是正确的打磨目标。 - 管道中途模式(主 printing-press skill Phase 5.5,暂存路径 "Polish to retry")。 通过 Skill 工具调用,参数为
args: "$CLI_WORK_DIR"。参数为指向~/printing-press/.runstate/.../runs/.../working/<api>-pp-cli/的绝对路径;解析必须命中规则 1。预设情况下STANDALONE_MODE=false——在此路径上由主 SKILL 掌控发布流程,因此打磨流程放弃发布。切勿将参数改写为 slug——Phase 5.5 会在工作区 CLI 被提升之前触发,因此$PRESS_LIBRARY/<slug>/要么不存在,要么保留的是 上一次 运行留下的旧版 CLI。 - Skill 工具独立模式覆盖。 若非斜线指令的呼叫者确实希望打磨后直接发布,必须显式地在
args中包含--standalone旗标(例如args: "--standalone $PRESS_LIBRARY/redfin")。若缺少该 Token,通过 Skill 工具调用的打磨流程绝不会触发发布——即使解析出来的路径刚好位于$PRESS_LIBRARY/下也是如此。旗标才是契约,路径不是。
这个由呼叫者模式驱动的关卡机制取代了旧有的路径子字串启发式规则(*.runstate/*)。启发式规则在主 SKILL 的 Phase 5.5/5.6 顺序发生颠倒时导致了异常
<!-- truncated for translation batch; full body continues in source -->



