feat(setup-steward): auto-overwrite committed bootstrap skill on upgrade - #42
Merged
potiuk merged 1 commit intoMay 4, 2026
Conversation
When /setup-steward upgrade refreshes the snapshot to a new
framework version, automatically replace the adopter-side
committed setup-steward skill (the only framework artefact
they commit) with the version from the just-installed
snapshot.
Why this matters
The adopter-side committed setup-steward skill is the only
framework skill that lives as a committed copy rather than a
gitignored symlink (per SKILL.md Golden rule 6 — "copy this
skill, symlink the rest"). When the framework's setup-steward
evolves — new sub-action, lock-format change, drift-
detection refinement, recipe addition — the adopter's copy
must follow, or the bootstrap on a fresh clone will run old
logic against a new snapshot.
Behaviour
upgrade.md adds a new Step 6b (between symlink refresh and
local-lock update):
1. Diff the adopter-side committed setup-steward against the
snapshot's setup-steward.
2. If the adopter has local modifications beyond the
snapshot's content — surface the diff and stop. Do NOT
silently overwrite local work. The user either confirms
discard, upstreams the modifications as a framework PR
first, or defers the bootstrap update.
3. Otherwise, copy the snapshot's setup-steward over the
committed copy. The new content lands as modified files
in `git status` for the user to review and commit as
part of the upgrade PR.
For the flat layout: cp into .claude/skills/setup-steward/.
For the double-symlinked layout: cp into
.github/skills/setup-steward/ — the .claude/skills symlink
keeps pointing at the right (now updated) location.
verify.md updated
Check 7 ("setup-steward up to date") now distinguishes the
two drift directions:
- Snapshot newer than committed (typical post-upgrade case
before the adopter has rerun /setup-steward upgrade) →
point at upgrade's Step 6b auto-overwrite.
- Committed newer than snapshot (anti-pattern: adopter
modified bootstrap directly) → upstream the modifications
as a PR against apache/airflow-steward, or revert to use
.apache-steward-overrides/ instead.
upgrade.md Step 2 ("Surface what changed") updated to reflect
that bootstrap-skill drift is no longer a manual decision —
Step 6b handles it.
Generated-by: Claude Code (Claude Opus 4.7)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
When
/setup-steward upgraderefreshes the snapshot to a new framework version, automatically replace the adopter-side committedsetup-stewardskill (the only framework artefact they commit) with the version from the just-installed snapshot.Why
The committed
setup-stewardis the only framework skill an adopter copies into their repo (Golden rule 6: "copy this skill, symlink the rest"). When the framework'ssetup-stewardevolves — new sub-action, lock-format change, drift-detection refinement, recipe addition — the adopter's copy must follow, or the bootstrap on a fresh clone will run old logic against a new snapshot.Before this PR,
upgradeonly surfaced the drift between the committed copy and the snapshot. After this PR,upgradeactually fixes it.Behaviour change
upgrade.mdadds a newStep 6b — Overwrite the committed setup-steward skill from the new snapshot(between symlink refresh and local-lock update):setup-stewardagainst the snapshot'ssetup-steward.cp -rthe snapshot'ssetup-stewardover the committed copy. The new content lands ingit statusfor the user to commit as part of the upgrade PR.Layout-aware:
cpinto.claude/skills/setup-steward/.cpinto.github/skills/setup-steward/. The.claude/skills/setup-stewardsymlink keeps pointing at the right (now-updated) location.verify.mdCheck 7 ("setup-steward up to date") updated to distinguish the two drift directions:/setup-steward upgrade) → point at upgrade's Step 6b auto-overwrite.apache/airflow-steward, or revert to use.apache-steward-overrides/instead.upgrade.mdStep 2 ("Surface what changed") updated to reflect that bootstrap-skill drift is no longer a manual decision — Step 6b handles it.Test plan
prek run --all-fileshooks pass (markdownlint, typos, doctoc, check-placeholders)#step-6b--overwrite-the-committed-setup-steward-skill-from-the-new-snapshot) is reachable fromverify.md's back-reference🤖 Generated with Claude Code