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

Reply via email to