gw-update
Bring a project's copy of Galivelop-workflow up to the workflow repo's current version, showing the template changes before applying what the user confirms. Use after the workflow publishes a new vers
SKILL.mdskills/gw-update/SKILL.md
GitHubgw-update
If .claude/gw/gw-update.md exists in the project, read it first: it holds what is specific to the project.
Updates what the workflow owns (scripts, skills, git hooks, settings entries, CI) and reports changes in what the
project fills in (log, REVIEW.md, GLOSSARY.md, notes). The mechanical part is aplicar.py; this skill adds the
judgement: what changed, what the user wants, what to merge by hand. Reply in the project's language.
1. Compare versions
<workflow> is the clone of Galivelop-workflow (a sibling ../Galivelop-workflow, or attached to the session;
else ask the user). Read it, never edit it. Fetch it first: git -C <workflow> pull --ff-only.
- Project version:
versionin.claude/gw.json. - Copied headers:
# galivelop-workflow vX.Y.Zin.claude/gw/scripts/*and.githooks/*. - Workflow version:
versionin<workflow>/.claude-plugin/plugin.json, and its entries inCHANGELOG.md.
Done when you can say "project at X, workflow at Y". Equal and no .gw-nuevo pending: say so and stop. Project
newer than the workflow: stop and tell the user to update the workflow clone.
2. Dry run
git -C <project> status --short # a clean tree makes the update easy to review and undo
python3 <workflow>/scripts/aplicar.py <project> --dry-run
It lists what it would create, update or propose, files the workflow no longer has, and template updates, plus the
user's personal notes (~/.claude/gw/notas/, see docs/en/config.md) it would create (personal note) or that differ
from the project's copy. Summarise it for the user with the CHANGELOG entries between X and Y (### ES or ### EN per the user's language).
3. Show the template diff for filled files
Log, REVIEW.md, GLOSSARY.md and the .claude/gw/*.md notes are never overwritten, because the project filled
them in. Show what the template changed, not what differs from the project's file:
old="$(mktemp -d)" # a throwaway folder
git -C <workflow> show v<X>:templates/<language>/<file> > "$old/<file>" # the template at the old version
git diff --no-index "$old/<file>" <workflow>/templates/<language>/<file> # old template vs new template
If there is no tag v<X>, take the commit where plugin.json said X: git -C <workflow> log -S'"version": "<X>"' --oneline -- .claude-plugin/plugin.json. Placeholders ({{key}}) stay unrendered on both sides, so the diff
shows only the template's own change. Offer each hunk to the user; apply the ones accepted to the project's file by
hand.
4. Apply what the user confirms
- Workflow-owned files with no local edits update in place:
python3 <workflow>/scripts/aplicar.py <project> --update. Use--updateonly after the user confirms, because it also replaces local edits in workflow-owned files. Auto mode may ask permission to edit.claude/settings.jsonand.githooks/; tell the user first. - A
<file>.gw-nuevois a proposal: merge it by hand with the user, then delete it.AGENTS.mdandCLAUDE.mdmerge block by block, keeping the project's rules and thegalivelop-workflowmarker line. - Files the workflow no longer has are reported, never deleted: ask before
git rm. - Personal notes: the missing ones are created by the run above. For each
personal note … differsline, show the userdiff <source> <target>(the project's copy is never overwritten and gets no.gw-nuevo) and merge by hand only what they accept. Nothing personal ever goes into the workflow repo;--sin-notas-personalesskips them. - Set
versionin.claude/gw.jsonto Y once the proposals are reviewed.
5. Check and commit
python3 <project>/.claude/gw/scripts/doctor.pyuntil noFAIL;python3 <workflow>/scripts/aplicar.py --check <project>exits 0 when nothing is left to merge.- Commit with the message
aplicar.pysuggested and a realNext:line (Siguiente:in Spanish projects), update the log in the same commit, andgit push; the pre-push runs the check.
Done when doctor is green, no *.gw-nuevo is left and version equals Y.