From 7fc392819e1124b2511406a327396c2d45e6e7c6 Mon Sep 17 00:00:00 2001 From: Garry Tan Date: Sat, 18 Apr 2026 23:20:37 +0800 Subject: [PATCH] chore(ship): regenerate SKILL.md + refresh goldens after hardening Mechanical follow-on from the whitespace + REPAIR_VERSION validation edits to ship/SKILL.md.tmpl. bun run gen:skill-docs --host all regenerates ship/SKILL.md; host-config golden-file regression tests need fresh baselines copied from the regenerated claude/codex/factory host variants. Co-Authored-By: Claude Opus 4.7 (1M context) --- ship/SKILL.md | 12 +++++++++--- test/fixtures/golden/claude-ship-SKILL.md | 12 +++++++++--- test/fixtures/golden/codex-ship-SKILL.md | 12 +++++++++--- test/fixtures/golden/factory-ship-SKILL.md | 12 +++++++++--- 4 files changed, 36 insertions(+), 12 deletions(-) diff --git a/ship/SKILL.md b/ship/SKILL.md index 07c14769..3c7cb7d2 100644 --- a/ship/SKILL.md +++ b/ship/SKILL.md @@ -2407,8 +2407,10 @@ already knows. A good test: would this insight save time in a future session? If **Idempotency check:** Before bumping, classify the state by comparing `VERSION` against the base branch AND against `package.json`'s `version` field. Four states: FRESH (do bump), ALREADY_BUMPED (skip bump), DRIFT_STALE_PKG (sync pkg only, no re-bump), DRIFT_UNEXPECTED (stop and ask). ```bash -BASE_VERSION=$(git show origin/:VERSION 2>/dev/null || echo "0.0.0.0") -CURRENT_VERSION=$(cat VERSION 2>/dev/null || echo "0.0.0.0") +BASE_VERSION=$(git show origin/:VERSION 2>/dev/null | tr -d '\r\n[:space:]' || echo "0.0.0.0") +CURRENT_VERSION=$(cat VERSION 2>/dev/null | tr -d '\r\n[:space:]' || echo "0.0.0.0") +[ -z "$BASE_VERSION" ] && BASE_VERSION="0.0.0.0" +[ -z "$CURRENT_VERSION" ] && CURRENT_VERSION="0.0.0.0" PKG_VERSION="" PKG_EXISTS=0 if [ -f package.json ]; then @@ -2497,7 +2499,11 @@ fi **DRIFT_STALE_PKG repair path** — runs when idempotency reports `STATE: DRIFT_STALE_PKG`. No re-bump; sync `package.json.version` to the current `VERSION` and continue. Reuse `CURRENT_VERSION` for CHANGELOG and PR body. ```bash -REPAIR_VERSION=$(cat VERSION) +REPAIR_VERSION=$(cat VERSION | tr -d '\r\n[:space:]') +if ! printf '%s' "$REPAIR_VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'; then + echo "ERROR: VERSION file contents ($REPAIR_VERSION) do not match MAJOR.MINOR.PATCH.MICRO pattern. Refusing to propagate invalid semver into package.json. Fix VERSION manually, then re-run /ship." + exit 1 +fi if command -v node >/dev/null 2>&1; then node -e 'const fs=require("fs"),p=require("./package.json");p.version=process.argv[1];fs.writeFileSync("package.json",JSON.stringify(p,null,2)+"\n")' "$REPAIR_VERSION" || { echo "ERROR: drift repair failed — could not update package.json." diff --git a/test/fixtures/golden/claude-ship-SKILL.md b/test/fixtures/golden/claude-ship-SKILL.md index 07c14769..3c7cb7d2 100644 --- a/test/fixtures/golden/claude-ship-SKILL.md +++ b/test/fixtures/golden/claude-ship-SKILL.md @@ -2407,8 +2407,10 @@ already knows. A good test: would this insight save time in a future session? If **Idempotency check:** Before bumping, classify the state by comparing `VERSION` against the base branch AND against `package.json`'s `version` field. Four states: FRESH (do bump), ALREADY_BUMPED (skip bump), DRIFT_STALE_PKG (sync pkg only, no re-bump), DRIFT_UNEXPECTED (stop and ask). ```bash -BASE_VERSION=$(git show origin/:VERSION 2>/dev/null || echo "0.0.0.0") -CURRENT_VERSION=$(cat VERSION 2>/dev/null || echo "0.0.0.0") +BASE_VERSION=$(git show origin/:VERSION 2>/dev/null | tr -d '\r\n[:space:]' || echo "0.0.0.0") +CURRENT_VERSION=$(cat VERSION 2>/dev/null | tr -d '\r\n[:space:]' || echo "0.0.0.0") +[ -z "$BASE_VERSION" ] && BASE_VERSION="0.0.0.0" +[ -z "$CURRENT_VERSION" ] && CURRENT_VERSION="0.0.0.0" PKG_VERSION="" PKG_EXISTS=0 if [ -f package.json ]; then @@ -2497,7 +2499,11 @@ fi **DRIFT_STALE_PKG repair path** — runs when idempotency reports `STATE: DRIFT_STALE_PKG`. No re-bump; sync `package.json.version` to the current `VERSION` and continue. Reuse `CURRENT_VERSION` for CHANGELOG and PR body. ```bash -REPAIR_VERSION=$(cat VERSION) +REPAIR_VERSION=$(cat VERSION | tr -d '\r\n[:space:]') +if ! printf '%s' "$REPAIR_VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'; then + echo "ERROR: VERSION file contents ($REPAIR_VERSION) do not match MAJOR.MINOR.PATCH.MICRO pattern. Refusing to propagate invalid semver into package.json. Fix VERSION manually, then re-run /ship." + exit 1 +fi if command -v node >/dev/null 2>&1; then node -e 'const fs=require("fs"),p=require("./package.json");p.version=process.argv[1];fs.writeFileSync("package.json",JSON.stringify(p,null,2)+"\n")' "$REPAIR_VERSION" || { echo "ERROR: drift repair failed — could not update package.json." diff --git a/test/fixtures/golden/codex-ship-SKILL.md b/test/fixtures/golden/codex-ship-SKILL.md index 2ad7a47b..562f0b3c 100644 --- a/test/fixtures/golden/codex-ship-SKILL.md +++ b/test/fixtures/golden/codex-ship-SKILL.md @@ -2022,8 +2022,10 @@ already knows. A good test: would this insight save time in a future session? If **Idempotency check:** Before bumping, classify the state by comparing `VERSION` against the base branch AND against `package.json`'s `version` field. Four states: FRESH (do bump), ALREADY_BUMPED (skip bump), DRIFT_STALE_PKG (sync pkg only, no re-bump), DRIFT_UNEXPECTED (stop and ask). ```bash -BASE_VERSION=$(git show origin/:VERSION 2>/dev/null || echo "0.0.0.0") -CURRENT_VERSION=$(cat VERSION 2>/dev/null || echo "0.0.0.0") +BASE_VERSION=$(git show origin/:VERSION 2>/dev/null | tr -d '\r\n[:space:]' || echo "0.0.0.0") +CURRENT_VERSION=$(cat VERSION 2>/dev/null | tr -d '\r\n[:space:]' || echo "0.0.0.0") +[ -z "$BASE_VERSION" ] && BASE_VERSION="0.0.0.0" +[ -z "$CURRENT_VERSION" ] && CURRENT_VERSION="0.0.0.0" PKG_VERSION="" PKG_EXISTS=0 if [ -f package.json ]; then @@ -2112,7 +2114,11 @@ fi **DRIFT_STALE_PKG repair path** — runs when idempotency reports `STATE: DRIFT_STALE_PKG`. No re-bump; sync `package.json.version` to the current `VERSION` and continue. Reuse `CURRENT_VERSION` for CHANGELOG and PR body. ```bash -REPAIR_VERSION=$(cat VERSION) +REPAIR_VERSION=$(cat VERSION | tr -d '\r\n[:space:]') +if ! printf '%s' "$REPAIR_VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'; then + echo "ERROR: VERSION file contents ($REPAIR_VERSION) do not match MAJOR.MINOR.PATCH.MICRO pattern. Refusing to propagate invalid semver into package.json. Fix VERSION manually, then re-run /ship." + exit 1 +fi if command -v node >/dev/null 2>&1; then node -e 'const fs=require("fs"),p=require("./package.json");p.version=process.argv[1];fs.writeFileSync("package.json",JSON.stringify(p,null,2)+"\n")' "$REPAIR_VERSION" || { echo "ERROR: drift repair failed — could not update package.json." diff --git a/test/fixtures/golden/factory-ship-SKILL.md b/test/fixtures/golden/factory-ship-SKILL.md index 54ccd4b9..ee8b11fd 100644 --- a/test/fixtures/golden/factory-ship-SKILL.md +++ b/test/fixtures/golden/factory-ship-SKILL.md @@ -2398,8 +2398,10 @@ already knows. A good test: would this insight save time in a future session? If **Idempotency check:** Before bumping, classify the state by comparing `VERSION` against the base branch AND against `package.json`'s `version` field. Four states: FRESH (do bump), ALREADY_BUMPED (skip bump), DRIFT_STALE_PKG (sync pkg only, no re-bump), DRIFT_UNEXPECTED (stop and ask). ```bash -BASE_VERSION=$(git show origin/:VERSION 2>/dev/null || echo "0.0.0.0") -CURRENT_VERSION=$(cat VERSION 2>/dev/null || echo "0.0.0.0") +BASE_VERSION=$(git show origin/:VERSION 2>/dev/null | tr -d '\r\n[:space:]' || echo "0.0.0.0") +CURRENT_VERSION=$(cat VERSION 2>/dev/null | tr -d '\r\n[:space:]' || echo "0.0.0.0") +[ -z "$BASE_VERSION" ] && BASE_VERSION="0.0.0.0" +[ -z "$CURRENT_VERSION" ] && CURRENT_VERSION="0.0.0.0" PKG_VERSION="" PKG_EXISTS=0 if [ -f package.json ]; then @@ -2488,7 +2490,11 @@ fi **DRIFT_STALE_PKG repair path** — runs when idempotency reports `STATE: DRIFT_STALE_PKG`. No re-bump; sync `package.json.version` to the current `VERSION` and continue. Reuse `CURRENT_VERSION` for CHANGELOG and PR body. ```bash -REPAIR_VERSION=$(cat VERSION) +REPAIR_VERSION=$(cat VERSION | tr -d '\r\n[:space:]') +if ! printf '%s' "$REPAIR_VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'; then + echo "ERROR: VERSION file contents ($REPAIR_VERSION) do not match MAJOR.MINOR.PATCH.MICRO pattern. Refusing to propagate invalid semver into package.json. Fix VERSION manually, then re-run /ship." + exit 1 +fi if command -v node >/dev/null 2>&1; then node -e 'const fs=require("fs"),p=require("./package.json");p.version=process.argv[1];fs.writeFileSync("package.json",JSON.stringify(p,null,2)+"\n")' "$REPAIR_VERSION" || { echo "ERROR: drift repair failed — could not update package.json."