Main shipped the /ship VERSION/package.json drift-detection fix as
v1.1.1.0 — exact collision with our branch's existing version. Bumped
ours to 1.1.2.0.
Resolved conflicts:
- VERSION: 1.1.1.0 → 1.1.2.0
- package.json: 1.1.1.0 → 1.1.2.0
- CHANGELOG.md: moved our /checkpoint → /context-save entry up one
header level to [1.1.2.0] and kept main's /ship drift-fix entry
at [1.1.1.0]. Sequence now: 1.1.2.0 → 1.1.1.0 → 1.1.0.0 → 1.0.0.0.
- Migration renamed v1.1.1.0.sh → v1.1.2.0.sh (version string inside
and test path reference both updated).
Also bumped the /context-save + /context-restore CHANGELOG entry to
credit the adversarial-review hardening wave (HOME guard, realpath
fallback, title sanitize, collision-safe filenames, context-restore
head cap, autoplan test regex tightening) as contributor-facing notes
— previous entry didn't reflect the security work that landed after
the initial ship.
No overlap between main's /ship Step 12 logic and this branch's work.
SKILL.md files regenerated via bun run gen:skill-docs --host all.
Golden fixtures updated.
bun test: 0 failures across 80+ targeted tests and the full suite.
Migration ownership guard: 7/7 pass (~85ms).
Main shipped browse Puppeteer parity (v1.1.0.0 — goto file://,
load-html, screenshot --selector, viewport --scale). Resolved conflicts:
- VERSION / package.json: bumped 1.0.1.0 → 1.1.1.0 (main is 1.1.0.0,
this branch lands next).
- CHANGELOG: moved the /context-save + /context-restore entry to the
top as v1.1.1.0, above main's v1.1.0.0.
- Migration: renamed gstack-upgrade/migrations/v1.0.1.0.sh →
v1.1.1.0.sh (matches new version). Test path updated. Migration
version string inside the script also updated.
No overlap between browse changes and context-save/context-restore code.
SKILL.md files regenerated via bun run gen:skill-docs --host all per
CLAUDE.md's "never resolve generated files by accepting either side"
rule. Golden fixtures (claude/codex/factory ship) regenerated.
bun test: 0 failures. Migration ownership guard: 7/7 pass (~85ms).
Main shipped the v1 prompts rewrite (simpler writing style + real LOC
receipts + /plan-tune observational substrate). Resolved conflicts:
- VERSION / package.json: bumped 0.18.5.0 → 1.0.1.0 (main is 1.0.0.0,
this branch lands next).
- CHANGELOG: moved the /context-save + /context-restore entry to the
top as v1.0.1.0, above main's v1.0.0.0. Also removed the em-dash
variants in the new entry (ship voice rule).
- TODOS: kept both sections — Context skills (lane feature TODO) first,
main's PACING_UPDATES_V0 + Plan Tune v2 deferrals below.
- Migration: renamed gstack-upgrade/migrations/v0.18.5.0.sh →
v1.0.1.0.sh (matches new version). Test path updated.
preamble.ts auto-merged cleanly: main's question-tuning, explain_level,
and writing-style sections composed with my context-save/context-restore
routing rule.
All SKILL.md files regenerated via `bun run gen:skill-docs --host all`
per CLAUDE.md's "never resolve generated files by accepting either
side" rule. Golden fixtures (claude/codex/factory ship) also regenerated.
bun test: 0 failures.
gstack-upgrade/migrations/v0.18.5.0.sh removes the stale on-disk
/checkpoint install so Claude Code's native /rewind alias is no longer
shadowed. Ownership guard inspects the directory itself (not just
SKILL.md) and handles 3 install shapes:
1. ~/.claude/skills/checkpoint is a directory symlink whose canonical
path resolves inside ~/.claude/skills/gstack/ → remove.
2. ~/.claude/skills/checkpoint is a directory containing exactly one
file SKILL.md that's a symlink into gstack → remove (gstack's
prefix-install shape).
3. Anything else (user's own regular file/dir, or a symlink pointing
elsewhere) → leave alone, print a one-line notice.
Also removes ~/.claude/skills/gstack/checkpoint/ unconditionally (gstack
owns that dir).
Portable realpath: `realpath` with python3 fallback for macOS BSD which
lacks readlink -f. Idempotent: missing paths are no-ops.
test/migration-checkpoint-ownership.test.ts ships 7 scenarios covering
all 3 install shapes + idempotency + no-op-when-gstack-not-installed +
SKILL.md-symlink-outside-gstack. Critical safety net for a migration
that mutates user state. Free tier, ~85ms.