This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow-steward.git
The following commit(s) were added to refs/heads/main by this push:
new 0990284 Fix two Magpie migration-shim gaps: committed magpie-setup
tracking + adopter lint exclusions (#441)
0990284 is described below
commit 09902844de34455e2355ee453947efa50458133c
Author: Jarek Potiuk <[email protected]>
AuthorDate: Wed Jun 3 03:09:21 2026 +0200
Fix two Magpie migration-shim gaps: committed magpie-setup tracking +
adopter lint exclusions (#441)
* Migration shim Step 8: also re-point adopter lint/pre-commit exclusions
Adopters commonly exclude the committed framework skill and overrides dir
from license / spellcheck / markdown-lint / link-check hooks (e.g. in
.pre-commit-config.yaml). After the apache-steward -> magpie rename, a
stale exclusion pattern lets those hooks run on the renamed files and the
migration commit fails. Step 8 now tells the migration to re-point any
setup-steward / apache-steward exclusion patterns to the magpie paths.
* Fix: keep committed magpie-setup tracked under the magpie-* gitignore glob
The collapsed /.claude/skills/magpie-* (and /.github/skills/magpie-*) glob
in adopt.md Step 7 and the pre-Magpie migration shim's Step 6 also matches
the committed magpie-setup bootstrap, so a plain 'git add' silently skips
it and a fresh clone lands with no committed framework skill (violating
Golden rule 6). conventions.md already documented the negation for the
'.claude/ already gitignored' caveat, but the general blocks omitted it.
Add the required '!/.../magpie-setup' negation (no trailing slash, so it
re-includes the outer symlink in Pattern B as well as the real directory)
to both gitignore blocks, per pattern, and explain why it is required.
---
.claude/skills/setup-steward/upgrade.md | 30 ++++++++++++++++++++++++++----
skills/setup/adopt.md | 17 +++++++++++++----
2 files changed, 39 insertions(+), 8 deletions(-)
diff --git a/.claude/skills/setup-steward/upgrade.md
b/.claude/skills/setup-steward/upgrade.md
index 8edc276..05db459 100644
--- a/.claude/skills/setup-steward/upgrade.md
+++ b/.claude/skills/setup-steward/upgrade.md
@@ -169,13 +169,23 @@ because **every** framework symlink now carries the
prefix:
/.apache-magpie/
/.apache-magpie.local.lock
/.claude/skills/magpie-*
+!/.claude/skills/magpie-setup
/.github/skills/magpie-* # (Pattern B; or the canonical side for
D)
+!/.github/skills/magpie-setup # (Pattern B/D — same side as the glob
above)
```
Keep the orientation right for the adopter's pattern (Pattern A → only
-the `.claude/skills/magpie-*` line; D → only the canonical side). The
-committed `.apache-magpie.lock` and `.apache-magpie-overrides/` are
-**not** gitignored.
+the `.claude/skills/magpie-*` pair; D → only the canonical side). The
+`!/.../magpie-setup` negation is **required**: the `magpie-*` glob would
+otherwise swallow the committed `magpie-setup` bootstrap (the one tracked
+framework skill, per [`SKILL.md` Golden rule 6](SKILL.md#golden-rules)), so
+a plain `git add` would silently skip it and fresh clones would land with
+no bootstrap skill. Keep the negation on the **same side(s)** as the glob
+(Pattern A → the `.claude` pair only; Pattern B → both pairs; Pattern D →
+the canonical side only). Use **no trailing slash** — it must re-include
+the outer symlink in Pattern B as well as the real directory. The committed
+`.apache-magpie.lock` and `.apache-magpie-overrides/` are **not**
+gitignored.
## Step 7 — Migrate the per-user config dir + sandbox allowlist
@@ -196,7 +206,7 @@ or user-scope `~/.claude/settings.json`) must become
able to read the moved credentials. The framework cannot edit those
settings files for the operator — surface the exact one-line change.
-## Step 8 — Migrate the post-checkout hook + doc sections
+## Step 8 — Migrate the post-checkout hook, lint config + doc sections
- **Git hook.** If `.git/hooks/post-checkout` contains the legacy
`setup-steward verify --auto-fix-symlinks` recipe, update it to
@@ -208,6 +218,18 @@ settings files for the operator — surface the exact
one-line change.
symlinks. Best-effort and surfaced as part of the migration diff; the
framework-name prose ("Apache Magpie") is independent and not touched
here.
+- **Lint / pre-commit config.** If the adopter's `.pre-commit-config.yaml`
+ (or any other prek / linter config) *excludes* the committed framework
+ skill or the overrides dir by their old paths — e.g.
+ `^\.github/skills/setup-steward/`, `^\.claude/skills/setup-steward/`,
+ `^\.apache-steward-overrides/` — re-point those exclusion patterns to the
+ magpie paths (`magpie-setup`, `.apache-magpie-overrides/`). Adopters add
+ these so the committed bootstrap skill is skipped by license / spellcheck
+ / markdown-lint / link-check hooks; leaving a pattern stale lets those
+ hooks run on the renamed files and the migration commit **fails**. The
+ exact lines are adopter-specific — grep the config for `setup-steward`
+ and `apache-steward` and re-point every match. Surfaced as part of the
+ migration diff.
## Step 9 — Hand off to `magpie-setup` and finish the upgrade
diff --git a/skills/setup/adopt.md b/skills/setup/adopt.md
index bda4c40..9926eaa 100644
--- a/skills/setup/adopt.md
+++ b/skills/setup/adopt.md
@@ -400,10 +400,11 @@ idempotent — re-add them if they're missing.
so a single `magpie-*` glob covers them all — no per-family
lines.
-- **Pattern A (flat)** — only the `.claude/skills/...` line:
+- **Pattern A (flat)** — only the `.claude/skills/...` lines:
```text
/.claude/skills/magpie-*
+ !/.claude/skills/magpie-setup
```
- **Pattern B (double-symlinked)** — both `.claude/skills/...`
@@ -413,7 +414,9 @@ idempotent — re-add them if they're missing.
```text
/.claude/skills/magpie-*
+ !/.claude/skills/magpie-setup
/.github/skills/magpie-*
+ !/.github/skills/magpie-setup
```
- **Pattern D (single directory symlink)** — only the
@@ -422,10 +425,12 @@ idempotent — re-add them if they're missing.
```text
/.github/skills/magpie-*
+ !/.github/skills/magpie-setup
```
With D.2 (canonical = `.claude/skills/`), use
- `/.claude/skills/magpie-*` instead. Pattern D does not
+ `/.claude/skills/magpie-*` (plus `!/.claude/skills/magpie-setup`)
+ instead. Pattern D does not
need ignore lines on the *symlinked* side because that side
is itself a single tracked symlink — git does not descend
into it, so the symlinked-side paths match no tracked file.
@@ -439,8 +444,12 @@ discovery family) per
[`SKILL.md` Golden rule 8](SKILL.md#golden-rules); every
symlinked framework skill is gitignored on every adopter
regardless of the opt-in family pick. The committed
-`magpie-setup` skill is **not** gitignored — it is the one
-copied framework skill.
+`magpie-setup` skill is kept tracked by the
+`!/.../magpie-setup` negation line in each block above —
+without it the `magpie-*` glob would ignore the bootstrap and
+a plain `git add` would silently skip it, leaving fresh clones
+with no committed framework skill. It is the one copied
+framework skill.
`.claude/settings.local.json` is the project-local
per-machine settings file that