mirror of
https://github.com/garrytan/gstack.git
synced 2026-05-07 05:56:41 +02:00
merge: origin/main v1.1.2.0 (mode-posture energy fix) into fix-checkpoints
Main shipped /plan-ceo-review + /office-hours mode-posture fixes as v1.1.2.0 — same version slot this branch used. Bumped ours to v1.1.3.0. Resolved conflicts: - VERSION / package.json: 1.1.2.0 → 1.1.3.0 - CHANGELOG.md: our entry moved up to [1.1.3.0], main's mode-posture entry kept at [1.1.2.0]. Sequence: 1.1.3.0 → 1.1.2.0 → 1.1.1.0 → 1.1.0.0 → 1.0.0.0 - Migration renamed v1.1.2.0.sh → v1.1.3.0.sh (version string inside + test path reference + hardening test describe block all updated) Also expanded our CHANGELOG entry to reflect the testing work that landed over the debugging loop: 8 live-fire E2E tests, 21 free-tier hardening tests, collision sentinel, env: param on runSkillTest, and GSTACK_HOME storage-path fix. No code overlap with main's changes (main edited preamble writing-style rules + plan-ceo-review and office-hours templates; ours edited context-save / context-restore / migration / tests). SKILL.md files regenerated via bun run gen:skill-docs --host all. Golden fixtures updated. bun test: 0 failures after renaming v1.1.2.0 → v1.1.3.0 in the hardening test describe block and MIGRATION constant.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
# Migration: v1.1.2.0 — Remove stale /checkpoint skill installs
|
||||
# Migration: v1.1.3.0 — Remove stale /checkpoint skill installs
|
||||
#
|
||||
# Claude Code ships /checkpoint as a native alias for /rewind, which was
|
||||
# shadowing the gstack checkpoint skill. The skill has been split into
|
||||
@@ -25,7 +25,7 @@ set -euo pipefail
|
||||
# CI runners) survives and produces dangerous absolute paths like
|
||||
# "/.claude/skills/...". Abort cleanly.
|
||||
if [ -z "${HOME:-}" ]; then
|
||||
echo " [v1.1.2.0] HOME is unset or empty — skipping migration." >&2
|
||||
echo " [v1.1.3.0] HOME is unset or empty — skipping migration." >&2
|
||||
exit 0
|
||||
fi
|
||||
|
||||
@@ -75,10 +75,10 @@ if [ -L "$OLD_TOPLEVEL" ]; then
|
||||
target_real=$(resolve_real "$OLD_TOPLEVEL")
|
||||
if [ -n "$GSTACK_ROOT_REAL" ] && path_inside "$target_real" "$GSTACK_ROOT_REAL"; then
|
||||
rm -- "$OLD_TOPLEVEL"
|
||||
echo " [v1.1.2.0] Removed stale /checkpoint symlink (was shadowing Claude Code's /rewind alias)."
|
||||
echo " [v1.1.3.0] Removed stale /checkpoint symlink (was shadowing Claude Code's /rewind alias)."
|
||||
removed_any=1
|
||||
else
|
||||
echo " [v1.1.2.0] Leaving $OLD_TOPLEVEL alone — symlink target is outside gstack (or unresolvable)."
|
||||
echo " [v1.1.3.0] Leaving $OLD_TOPLEVEL alone — symlink target is outside gstack (or unresolvable)."
|
||||
fi
|
||||
elif [ -d "$OLD_TOPLEVEL" ]; then
|
||||
# Regular directory. Only remove if it contains exactly one file named
|
||||
@@ -92,13 +92,13 @@ elif [ -d "$OLD_TOPLEVEL" ]; then
|
||||
# Strip macOS sidecars first (not user content), then remove the dir.
|
||||
find "$OLD_TOPLEVEL" -maxdepth 1 \( -name '.DS_Store' -o -name '._*' \) -type f -delete 2>/dev/null || true
|
||||
rm -r -- "$OLD_TOPLEVEL"
|
||||
echo " [v1.1.2.0] Removed stale /checkpoint install directory (gstack prefix-mode)."
|
||||
echo " [v1.1.3.0] Removed stale /checkpoint install directory (gstack prefix-mode)."
|
||||
removed_any=1
|
||||
else
|
||||
echo " [v1.1.2.0] Leaving $OLD_TOPLEVEL alone — SKILL.md symlink target is outside gstack."
|
||||
echo " [v1.1.3.0] Leaving $OLD_TOPLEVEL alone — SKILL.md symlink target is outside gstack."
|
||||
fi
|
||||
else
|
||||
echo " [v1.1.2.0] Leaving $OLD_TOPLEVEL alone — not a gstack-owned install (has custom content)."
|
||||
echo " [v1.1.3.0] Leaving $OLD_TOPLEVEL alone — not a gstack-owned install (has custom content)."
|
||||
fi
|
||||
fi
|
||||
# Missing → no-op (idempotency).
|
||||
@@ -111,10 +111,10 @@ if [ -L "$OLD_NAMESPACED" ]; then
|
||||
target_real=$(resolve_real "$OLD_NAMESPACED")
|
||||
if [ -n "$GSTACK_ROOT_REAL" ] && path_inside "$target_real" "$GSTACK_ROOT_REAL"; then
|
||||
rm -- "$OLD_NAMESPACED"
|
||||
echo " [v1.1.2.0] Removed stale ~/.claude/skills/gstack/checkpoint symlink."
|
||||
echo " [v1.1.3.0] Removed stale ~/.claude/skills/gstack/checkpoint symlink."
|
||||
removed_any=1
|
||||
else
|
||||
echo " [v1.1.2.0] Leaving $OLD_NAMESPACED alone — symlink target is outside gstack."
|
||||
echo " [v1.1.3.0] Leaving $OLD_NAMESPACED alone — symlink target is outside gstack."
|
||||
fi
|
||||
elif [ -d "$OLD_NAMESPACED" ]; then
|
||||
# Regular directory. This is the gstack-prefix install location. Check that
|
||||
@@ -123,15 +123,15 @@ elif [ -d "$OLD_NAMESPACED" ]; then
|
||||
target_real=$(resolve_real "$OLD_NAMESPACED")
|
||||
if [ -n "$GSTACK_ROOT_REAL" ] && path_inside "$target_real" "$GSTACK_ROOT_REAL"; then
|
||||
rm -rf -- "$OLD_NAMESPACED"
|
||||
echo " [v1.1.2.0] Removed stale ~/.claude/skills/gstack/checkpoint/ (replaced by context-save + context-restore)."
|
||||
echo " [v1.1.3.0] Removed stale ~/.claude/skills/gstack/checkpoint/ (replaced by context-save + context-restore)."
|
||||
removed_any=1
|
||||
else
|
||||
echo " [v1.1.2.0] Leaving $OLD_NAMESPACED alone — resolves outside gstack."
|
||||
echo " [v1.1.3.0] Leaving $OLD_NAMESPACED alone — resolves outside gstack."
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$removed_any" = "1" ]; then
|
||||
echo " [v1.1.2.0] /checkpoint is now Claude Code's native /rewind alias. Use /context-save to save state and /context-restore to resume."
|
||||
echo " [v1.1.3.0] /checkpoint is now Claude Code's native /rewind alias. Use /context-save to save state and /context-restore to resume."
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user