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 fd382b2  feat(setup): add method:local self-adoption; drop 
setup-steward shim (#443)
fd382b2 is described below

commit fd382b2a035ce8e10e75bbaa813fe42590bb7b44
Author: Jarek Potiuk <[email protected]>
AuthorDate: Wed Jun 3 17:59:38 2026 +0200

    feat(setup): add method:local self-adoption; drop setup-steward shim (#443)
    
    The Apache Magpie framework checkout is the one repo that cannot use
    the snapshot adoption mechanism — a remote snapshot of the framework
    into itself is circular. Add a `method:local` self-adoption path: the
    adopt flow detects the framework checkout structurally (skills/setup
    SKILL.md with name: magpie-setup + skills/list-skills present) and,
    instead of fetching a snapshot, links the in-repo skills/ source
    directly. Each magpie-<skill> is a COMMITTED symlink into
    ../../skills/<skill>/ (targets are in-repo, always resolve on a fresh
    clone), written under BOTH .claude/skills/ (Claude Code) and
    .github/skills/ (GitHub's skill loader) so the skills are discoverable
    from either harness. No remote URL, no snapshot, no copy; a
    `method: local` marker lock records the mode and verify gets a reduced
    check set.
    
    Self-adopt this repo: 76 committed magpie-* symlinks (38 skills × the
    two loader dirs), .gitignore un-ignores them in both, and
    .apache-magpie.lock records method: local.
    
    Drop the setup-steward migration shim (and its references in
    AGENTS.md, install-recipes.md, upgrade.md): pre-Magpie migration is
    no longer automated — the docs now describe the manual path.
    
    Generated-by: Claude Code (Opus 4.8)
---
 .apache-magpie.lock                                |   6 +
 .claude/skills/magpie-audit-finding-fix            |   1 +
 .claude/skills/magpie-committer-onboarding         |   1 +
 .claude/skills/magpie-contributor-activity-sweep   |   1 +
 .claude/skills/magpie-contributor-nomination       |   1 +
 .claude/skills/magpie-good-first-issue-author      |   1 +
 .claude/skills/magpie-issue-fix-workflow           |   1 +
 .claude/skills/magpie-issue-reassess               |   1 +
 .claude/skills/magpie-issue-reassess-stats         |   1 +
 .claude/skills/magpie-issue-reproducer             |   1 +
 .claude/skills/magpie-issue-triage                 |   1 +
 .claude/skills/magpie-list-skills                  |   1 +
 .claude/skills/magpie-optimize-skill               |   1 +
 .claude/skills/magpie-pairing-multi-agent-review   |   1 +
 .claude/skills/magpie-pairing-self-review          |   1 +
 .claude/skills/magpie-pr-management-code-review    |   1 +
 .claude/skills/magpie-pr-management-mentor         |   1 +
 .claude/skills/magpie-pr-management-quick-merge    |   1 +
 .claude/skills/magpie-pr-management-stats          |   1 +
 .claude/skills/magpie-pr-management-triage         |   1 +
 .claude/skills/magpie-security-cve-allocate        |   1 +
 .claude/skills/magpie-security-issue-deduplicate   |   1 +
 .claude/skills/magpie-security-issue-fix           |   1 +
 .claude/skills/magpie-security-issue-import        |   1 +
 .../skills/magpie-security-issue-import-from-md    |   1 +
 .../skills/magpie-security-issue-import-from-pr    |   1 +
 .../magpie-security-issue-import-via-forwarder     |   1 +
 .claude/skills/magpie-security-issue-invalidate    |   1 +
 .claude/skills/magpie-security-issue-sync          |   1 +
 .claude/skills/magpie-security-issue-triage        |   1 +
 .../skills/magpie-security-tracker-stats-dashboard |   1 +
 .claude/skills/magpie-setup                        |   1 +
 .claude/skills/magpie-setup-isolated-setup-doctor  |   1 +
 .claude/skills/magpie-setup-isolated-setup-install |   1 +
 .claude/skills/magpie-setup-isolated-setup-update  |   1 +
 .claude/skills/magpie-setup-isolated-setup-verify  |   1 +
 .claude/skills/magpie-setup-override-upstream      |   1 +
 .claude/skills/magpie-setup-shared-config-sync     |   1 +
 .claude/skills/magpie-write-skill                  |   1 +
 .claude/skills/setup-steward/SKILL.md              |  87 -------
 .claude/skills/setup-steward/upgrade.md            | 270 ---------------------
 .github/skills/magpie-audit-finding-fix            |   1 +
 .github/skills/magpie-committer-onboarding         |   1 +
 .github/skills/magpie-contributor-activity-sweep   |   1 +
 .github/skills/magpie-contributor-nomination       |   1 +
 .github/skills/magpie-good-first-issue-author      |   1 +
 .github/skills/magpie-issue-fix-workflow           |   1 +
 .github/skills/magpie-issue-reassess               |   1 +
 .github/skills/magpie-issue-reassess-stats         |   1 +
 .github/skills/magpie-issue-reproducer             |   1 +
 .github/skills/magpie-issue-triage                 |   1 +
 .github/skills/magpie-list-skills                  |   1 +
 .github/skills/magpie-optimize-skill               |   1 +
 .github/skills/magpie-pairing-multi-agent-review   |   1 +
 .github/skills/magpie-pairing-self-review          |   1 +
 .github/skills/magpie-pr-management-code-review    |   1 +
 .github/skills/magpie-pr-management-mentor         |   1 +
 .github/skills/magpie-pr-management-quick-merge    |   1 +
 .github/skills/magpie-pr-management-stats          |   1 +
 .github/skills/magpie-pr-management-triage         |   1 +
 .github/skills/magpie-security-cve-allocate        |   1 +
 .github/skills/magpie-security-issue-deduplicate   |   1 +
 .github/skills/magpie-security-issue-fix           |   1 +
 .github/skills/magpie-security-issue-import        |   1 +
 .../skills/magpie-security-issue-import-from-md    |   1 +
 .../skills/magpie-security-issue-import-from-pr    |   1 +
 .../magpie-security-issue-import-via-forwarder     |   1 +
 .github/skills/magpie-security-issue-invalidate    |   1 +
 .github/skills/magpie-security-issue-sync          |   1 +
 .github/skills/magpie-security-issue-triage        |   1 +
 .../skills/magpie-security-tracker-stats-dashboard |   1 +
 .github/skills/magpie-setup                        |   1 +
 .github/skills/magpie-setup-isolated-setup-doctor  |   1 +
 .github/skills/magpie-setup-isolated-setup-install |   1 +
 .github/skills/magpie-setup-isolated-setup-update  |   1 +
 .github/skills/magpie-setup-isolated-setup-verify  |   1 +
 .github/skills/magpie-setup-override-upstream      |   1 +
 .github/skills/magpie-setup-shared-config-sync     |   1 +
 .github/skills/magpie-write-skill                  |   1 +
 .gitignore                                         |  17 +-
 AGENTS.md                                          |   2 +-
 docs/setup/install-recipes.md                      |  49 ++--
 skills/setup/SKILL.md                              |  17 +-
 skills/setup/adopt.md                              | 122 +++++++++-
 skills/setup/upgrade.md                            |  39 +--
 skills/setup/verify.md                             |  44 +++-
 86 files changed, 309 insertions(+), 420 deletions(-)

diff --git a/.apache-magpie.lock b/.apache-magpie.lock
new file mode 100644
index 0000000..8582221
--- /dev/null
+++ b/.apache-magpie.lock
@@ -0,0 +1,6 @@
+# .apache-magpie.lock — committed. Local self-adoption marker.
+# The framework checkout links its own skills/ source; there is
+# no remote snapshot. Edited only by /magpie-setup.
+
+method: local
+source: skills/
diff --git a/.claude/skills/magpie-audit-finding-fix 
b/.claude/skills/magpie-audit-finding-fix
new file mode 120000
index 0000000..c32be1b
--- /dev/null
+++ b/.claude/skills/magpie-audit-finding-fix
@@ -0,0 +1 @@
+../../skills/audit-finding-fix
\ No newline at end of file
diff --git a/.claude/skills/magpie-committer-onboarding 
b/.claude/skills/magpie-committer-onboarding
new file mode 120000
index 0000000..9f421b7
--- /dev/null
+++ b/.claude/skills/magpie-committer-onboarding
@@ -0,0 +1 @@
+../../skills/committer-onboarding
\ No newline at end of file
diff --git a/.claude/skills/magpie-contributor-activity-sweep 
b/.claude/skills/magpie-contributor-activity-sweep
new file mode 120000
index 0000000..4c4ad61
--- /dev/null
+++ b/.claude/skills/magpie-contributor-activity-sweep
@@ -0,0 +1 @@
+../../skills/contributor-activity-sweep
\ No newline at end of file
diff --git a/.claude/skills/magpie-contributor-nomination 
b/.claude/skills/magpie-contributor-nomination
new file mode 120000
index 0000000..84b98fd
--- /dev/null
+++ b/.claude/skills/magpie-contributor-nomination
@@ -0,0 +1 @@
+../../skills/contributor-nomination
\ No newline at end of file
diff --git a/.claude/skills/magpie-good-first-issue-author 
b/.claude/skills/magpie-good-first-issue-author
new file mode 120000
index 0000000..360135b
--- /dev/null
+++ b/.claude/skills/magpie-good-first-issue-author
@@ -0,0 +1 @@
+../../skills/good-first-issue-author
\ No newline at end of file
diff --git a/.claude/skills/magpie-issue-fix-workflow 
b/.claude/skills/magpie-issue-fix-workflow
new file mode 120000
index 0000000..7bb0e8d
--- /dev/null
+++ b/.claude/skills/magpie-issue-fix-workflow
@@ -0,0 +1 @@
+../../skills/issue-fix-workflow
\ No newline at end of file
diff --git a/.claude/skills/magpie-issue-reassess 
b/.claude/skills/magpie-issue-reassess
new file mode 120000
index 0000000..8e91821
--- /dev/null
+++ b/.claude/skills/magpie-issue-reassess
@@ -0,0 +1 @@
+../../skills/issue-reassess
\ No newline at end of file
diff --git a/.claude/skills/magpie-issue-reassess-stats 
b/.claude/skills/magpie-issue-reassess-stats
new file mode 120000
index 0000000..a5b2632
--- /dev/null
+++ b/.claude/skills/magpie-issue-reassess-stats
@@ -0,0 +1 @@
+../../skills/issue-reassess-stats
\ No newline at end of file
diff --git a/.claude/skills/magpie-issue-reproducer 
b/.claude/skills/magpie-issue-reproducer
new file mode 120000
index 0000000..c8cdab9
--- /dev/null
+++ b/.claude/skills/magpie-issue-reproducer
@@ -0,0 +1 @@
+../../skills/issue-reproducer
\ No newline at end of file
diff --git a/.claude/skills/magpie-issue-triage 
b/.claude/skills/magpie-issue-triage
new file mode 120000
index 0000000..a32c627
--- /dev/null
+++ b/.claude/skills/magpie-issue-triage
@@ -0,0 +1 @@
+../../skills/issue-triage
\ No newline at end of file
diff --git a/.claude/skills/magpie-list-skills 
b/.claude/skills/magpie-list-skills
new file mode 120000
index 0000000..a6c207d
--- /dev/null
+++ b/.claude/skills/magpie-list-skills
@@ -0,0 +1 @@
+../../skills/list-skills
\ No newline at end of file
diff --git a/.claude/skills/magpie-optimize-skill 
b/.claude/skills/magpie-optimize-skill
new file mode 120000
index 0000000..8cddd77
--- /dev/null
+++ b/.claude/skills/magpie-optimize-skill
@@ -0,0 +1 @@
+../../skills/optimize-skill
\ No newline at end of file
diff --git a/.claude/skills/magpie-pairing-multi-agent-review 
b/.claude/skills/magpie-pairing-multi-agent-review
new file mode 120000
index 0000000..ddb431c
--- /dev/null
+++ b/.claude/skills/magpie-pairing-multi-agent-review
@@ -0,0 +1 @@
+../../skills/pairing-multi-agent-review
\ No newline at end of file
diff --git a/.claude/skills/magpie-pairing-self-review 
b/.claude/skills/magpie-pairing-self-review
new file mode 120000
index 0000000..b2fccf7
--- /dev/null
+++ b/.claude/skills/magpie-pairing-self-review
@@ -0,0 +1 @@
+../../skills/pairing-self-review
\ No newline at end of file
diff --git a/.claude/skills/magpie-pr-management-code-review 
b/.claude/skills/magpie-pr-management-code-review
new file mode 120000
index 0000000..4b543a0
--- /dev/null
+++ b/.claude/skills/magpie-pr-management-code-review
@@ -0,0 +1 @@
+../../skills/pr-management-code-review
\ No newline at end of file
diff --git a/.claude/skills/magpie-pr-management-mentor 
b/.claude/skills/magpie-pr-management-mentor
new file mode 120000
index 0000000..02c3493
--- /dev/null
+++ b/.claude/skills/magpie-pr-management-mentor
@@ -0,0 +1 @@
+../../skills/pr-management-mentor
\ No newline at end of file
diff --git a/.claude/skills/magpie-pr-management-quick-merge 
b/.claude/skills/magpie-pr-management-quick-merge
new file mode 120000
index 0000000..a504c5a
--- /dev/null
+++ b/.claude/skills/magpie-pr-management-quick-merge
@@ -0,0 +1 @@
+../../skills/pr-management-quick-merge
\ No newline at end of file
diff --git a/.claude/skills/magpie-pr-management-stats 
b/.claude/skills/magpie-pr-management-stats
new file mode 120000
index 0000000..b1a1338
--- /dev/null
+++ b/.claude/skills/magpie-pr-management-stats
@@ -0,0 +1 @@
+../../skills/pr-management-stats
\ No newline at end of file
diff --git a/.claude/skills/magpie-pr-management-triage 
b/.claude/skills/magpie-pr-management-triage
new file mode 120000
index 0000000..4ae07e2
--- /dev/null
+++ b/.claude/skills/magpie-pr-management-triage
@@ -0,0 +1 @@
+../../skills/pr-management-triage
\ No newline at end of file
diff --git a/.claude/skills/magpie-security-cve-allocate 
b/.claude/skills/magpie-security-cve-allocate
new file mode 120000
index 0000000..6cc475b
--- /dev/null
+++ b/.claude/skills/magpie-security-cve-allocate
@@ -0,0 +1 @@
+../../skills/security-cve-allocate
\ No newline at end of file
diff --git a/.claude/skills/magpie-security-issue-deduplicate 
b/.claude/skills/magpie-security-issue-deduplicate
new file mode 120000
index 0000000..63f6e88
--- /dev/null
+++ b/.claude/skills/magpie-security-issue-deduplicate
@@ -0,0 +1 @@
+../../skills/security-issue-deduplicate
\ No newline at end of file
diff --git a/.claude/skills/magpie-security-issue-fix 
b/.claude/skills/magpie-security-issue-fix
new file mode 120000
index 0000000..40c0839
--- /dev/null
+++ b/.claude/skills/magpie-security-issue-fix
@@ -0,0 +1 @@
+../../skills/security-issue-fix
\ No newline at end of file
diff --git a/.claude/skills/magpie-security-issue-import 
b/.claude/skills/magpie-security-issue-import
new file mode 120000
index 0000000..d80190b
--- /dev/null
+++ b/.claude/skills/magpie-security-issue-import
@@ -0,0 +1 @@
+../../skills/security-issue-import
\ No newline at end of file
diff --git a/.claude/skills/magpie-security-issue-import-from-md 
b/.claude/skills/magpie-security-issue-import-from-md
new file mode 120000
index 0000000..3c96cda
--- /dev/null
+++ b/.claude/skills/magpie-security-issue-import-from-md
@@ -0,0 +1 @@
+../../skills/security-issue-import-from-md
\ No newline at end of file
diff --git a/.claude/skills/magpie-security-issue-import-from-pr 
b/.claude/skills/magpie-security-issue-import-from-pr
new file mode 120000
index 0000000..41c4085
--- /dev/null
+++ b/.claude/skills/magpie-security-issue-import-from-pr
@@ -0,0 +1 @@
+../../skills/security-issue-import-from-pr
\ No newline at end of file
diff --git a/.claude/skills/magpie-security-issue-import-via-forwarder 
b/.claude/skills/magpie-security-issue-import-via-forwarder
new file mode 120000
index 0000000..213f546
--- /dev/null
+++ b/.claude/skills/magpie-security-issue-import-via-forwarder
@@ -0,0 +1 @@
+../../skills/security-issue-import-via-forwarder
\ No newline at end of file
diff --git a/.claude/skills/magpie-security-issue-invalidate 
b/.claude/skills/magpie-security-issue-invalidate
new file mode 120000
index 0000000..7b07030
--- /dev/null
+++ b/.claude/skills/magpie-security-issue-invalidate
@@ -0,0 +1 @@
+../../skills/security-issue-invalidate
\ No newline at end of file
diff --git a/.claude/skills/magpie-security-issue-sync 
b/.claude/skills/magpie-security-issue-sync
new file mode 120000
index 0000000..b4f409e
--- /dev/null
+++ b/.claude/skills/magpie-security-issue-sync
@@ -0,0 +1 @@
+../../skills/security-issue-sync
\ No newline at end of file
diff --git a/.claude/skills/magpie-security-issue-triage 
b/.claude/skills/magpie-security-issue-triage
new file mode 120000
index 0000000..162016a
--- /dev/null
+++ b/.claude/skills/magpie-security-issue-triage
@@ -0,0 +1 @@
+../../skills/security-issue-triage
\ No newline at end of file
diff --git a/.claude/skills/magpie-security-tracker-stats-dashboard 
b/.claude/skills/magpie-security-tracker-stats-dashboard
new file mode 120000
index 0000000..ea7df87
--- /dev/null
+++ b/.claude/skills/magpie-security-tracker-stats-dashboard
@@ -0,0 +1 @@
+../../skills/security-tracker-stats-dashboard
\ No newline at end of file
diff --git a/.claude/skills/magpie-setup b/.claude/skills/magpie-setup
new file mode 120000
index 0000000..8f69d9c
--- /dev/null
+++ b/.claude/skills/magpie-setup
@@ -0,0 +1 @@
+../../skills/setup
\ No newline at end of file
diff --git a/.claude/skills/magpie-setup-isolated-setup-doctor 
b/.claude/skills/magpie-setup-isolated-setup-doctor
new file mode 120000
index 0000000..44f2819
--- /dev/null
+++ b/.claude/skills/magpie-setup-isolated-setup-doctor
@@ -0,0 +1 @@
+../../skills/setup-isolated-setup-doctor
\ No newline at end of file
diff --git a/.claude/skills/magpie-setup-isolated-setup-install 
b/.claude/skills/magpie-setup-isolated-setup-install
new file mode 120000
index 0000000..794d890
--- /dev/null
+++ b/.claude/skills/magpie-setup-isolated-setup-install
@@ -0,0 +1 @@
+../../skills/setup-isolated-setup-install
\ No newline at end of file
diff --git a/.claude/skills/magpie-setup-isolated-setup-update 
b/.claude/skills/magpie-setup-isolated-setup-update
new file mode 120000
index 0000000..fabb0d7
--- /dev/null
+++ b/.claude/skills/magpie-setup-isolated-setup-update
@@ -0,0 +1 @@
+../../skills/setup-isolated-setup-update
\ No newline at end of file
diff --git a/.claude/skills/magpie-setup-isolated-setup-verify 
b/.claude/skills/magpie-setup-isolated-setup-verify
new file mode 120000
index 0000000..d76e89a
--- /dev/null
+++ b/.claude/skills/magpie-setup-isolated-setup-verify
@@ -0,0 +1 @@
+../../skills/setup-isolated-setup-verify
\ No newline at end of file
diff --git a/.claude/skills/magpie-setup-override-upstream 
b/.claude/skills/magpie-setup-override-upstream
new file mode 120000
index 0000000..a9cee55
--- /dev/null
+++ b/.claude/skills/magpie-setup-override-upstream
@@ -0,0 +1 @@
+../../skills/setup-override-upstream
\ No newline at end of file
diff --git a/.claude/skills/magpie-setup-shared-config-sync 
b/.claude/skills/magpie-setup-shared-config-sync
new file mode 120000
index 0000000..f850cf0
--- /dev/null
+++ b/.claude/skills/magpie-setup-shared-config-sync
@@ -0,0 +1 @@
+../../skills/setup-shared-config-sync
\ No newline at end of file
diff --git a/.claude/skills/magpie-write-skill 
b/.claude/skills/magpie-write-skill
new file mode 120000
index 0000000..f512e9d
--- /dev/null
+++ b/.claude/skills/magpie-write-skill
@@ -0,0 +1 @@
+../../skills/write-skill
\ No newline at end of file
diff --git a/.claude/skills/setup-steward/SKILL.md 
b/.claude/skills/setup-steward/SKILL.md
deleted file mode 100644
index d1f4005..0000000
--- a/.claude/skills/setup-steward/SKILL.md
+++ /dev/null
@@ -1,87 +0,0 @@
----
-name: setup-steward
-description: |
-  Transition migration shim for pre-Magpie (apache-steward) adopters.
-  This is the ONLY framework artefact that still carries the legacy
-  `steward` name, and it exists for exactly one purpose: to migrate a
-  repo that adopted the framework before it was renamed to Apache
-  Magpie over to the new `magpie-` layout, then delete itself.
-  Sub-actions:
-    `/setup-steward upgrade` — run the one-time pre-Magpie migration
-                               (the only supported sub-action)
-when_to_use: |
-  Invoke ONLY as the bridge for a pre-Magpie adopter: a repo whose
-  committed framework skill is still `.claude/skills/setup-steward/`
-  and whose runtime state still uses `.apache-steward*` / un-prefixed
-  framework symlinks. A frozen pre-Magpie `/setup-steward upgrade`
-  lands here automatically after it refreshes the snapshot and reloads
-  the committed skill in-flight. After the migration completes the
-  adopter uses `/magpie-setup` for everything; this shim is gone.
-argument-hint: "[upgrade]"
-capability: capability:setup
-license: Apache-2.0
----
-
-<!-- SPDX-License-Identifier: Apache-2.0
-     https://www.apache.org/legal/release-policy.html -->
-
-<!-- Placeholder convention (see 
../../../AGENTS.md#placeholder-convention-used-in-skill-files):
-     <adopter-skills-dir>  → the dir holding the adopter's skills
-                             (`.claude/skills/` or `.github/skills/`,
-                             per the project's convention)
-     <snapshot-dir>        → the gitignored framework snapshot. Pre-Magpie
-                             it is `.apache-steward/`; the migration moves
-                             it to `.apache-magpie/`. -->
-
-# setup-steward — pre-Magpie migration shim
-
-> **This skill is a one-shot transition artefact.** The framework was
-> renamed from **apache-steward** to **Apache Magpie**, which moved the
-> skill source (`​.claude/skills/` → `skills/`), renamed the dotfiles
-> (`​.apache-steward*` → `.apache-magpie*`), renamed the bootstrap skill
-> (`setup-steward` → committed as `magpie-setup`), and namespaced every
-> framework skill under a `magpie-` prefix. A repo that adopted the
-> framework **before** that rename has a committed `setup-steward` skill
-> frozen on the old layout, and cannot self-upgrade across the change.
-> This shim is the bridge.
-
-## How a pre-Magpie adopter reaches this shim
-
-The pre-Magpie `setup-steward/upgrade.md` an adopter committed does, on
-every `/setup-steward upgrade`:
-
-1. delete `.apache-steward/` and re-fetch the framework per the
-   committed lock (which lands the **new** Magpie framework on disk),
-2. overwrite its committed `.claude/skills/setup-steward/` from the
-   snapshot's `.apache-steward/.claude/skills/setup-steward/`, and
-3. **reload that skill in-flight** (its Golden rule 9).
-
-Because the Magpie framework still ships this shim at the legacy path
-`.claude/skills/setup-steward/`, step (2) finds it, step (3) reloads
-**this** `upgrade.md`, and the migration below runs in place of the old
-upgrade logic — no manual bootstrap required.
-
-> A `/magpie-setup upgrade` on an already-migrated repo never lands
-> here (it has no `setup-steward` skill). If a repo is only *partly*
-> migrated, `magpie-setup`'s own `upgrade.md` Step 0 detects the
-> leftover `.apache-steward*` artefacts and routes back here.
-
-## Sub-actions
-
-| Invocation | Loads | Purpose |
-|---|---|---|
-| `/setup-steward upgrade` | [`upgrade.md`](upgrade.md) | Run the one-time 
pre-Magpie → Magpie migration, then hand off to the migrated `magpie-setup`. |
-| `/setup-steward` (no args) | [`upgrade.md`](upgrade.md) | Same — the 
migration is the only thing this shim does. |
-
-Any other sub-action (`adopt`, `verify`, `worktree-init`, `override`,
-`unadopt`) is **not** served here: those belong to the migrated
-`magpie-setup` skill. If asked for one before migrating, run the
-migration first, then invoke it as `/magpie-setup <sub-action>`.
-
-## After the migration
-
-The migration's final step **removes this shim** — it replaces the
-committed `.claude/skills/setup-steward/` with `magpie-setup` and drops
-the `setup-steward` entry. From then on the adopter uses `/magpie-setup`
-for adopt / upgrade / verify / worktree-init / override / unadopt, and
-the `steward` name is gone from their repo entirely.
diff --git a/.claude/skills/setup-steward/upgrade.md 
b/.claude/skills/setup-steward/upgrade.md
deleted file mode 100644
index 05db459..0000000
--- a/.claude/skills/setup-steward/upgrade.md
+++ /dev/null
@@ -1,270 +0,0 @@
-<!-- SPDX-License-Identifier: Apache-2.0
-     https://www.apache.org/legal/release-policy.html -->
-
-# upgrade — one-time pre-Magpie → Magpie migration
-
-You reached this file because a pre-Magpie `/setup-steward upgrade`
-refreshed the framework snapshot and reloaded the committed skill
-in-flight (its Golden rule 9), and the refreshed framework ships this
-migration shim at the legacy `.claude/skills/setup-steward/` path. Run
-the migration below **once**. It is idempotent and every mutating step
-is surfaced before it runs.
-
-The snapshot has already been re-fetched by the pre-Magpie upgrade and
-is the **new Magpie framework**, but it still sits at the old path
-`.apache-steward/` and the rest of the repo still uses the old names.
-The migration renames everything to the Magpie layout and then removes
-this shim.
-
-## Step 0 — Confirm this is a pre-Magpie repo and show the plan
-
-Detect the legacy state. Treat the repo as pre-Magpie if **any** of
-these exist:
-
-- `.apache-steward.lock` (committed legacy pin)
-- `.apache-steward/` (legacy snapshot dir)
-- `.apache-steward-overrides/` (legacy overrides dir)
-- `<adopter-skills-dir>/setup-steward/` (committed legacy bootstrap skill)
-- a framework symlink in `<adopter-skills-dir>` **without** the
-  `magpie-` prefix (e.g. `security-issue-import`, `pr-management-triage`)
-- `~/.config/apache-steward/` (legacy per-user config dir)
-
-If **none** exist, the repo is already on Magpie — stop and tell the
-user to run `/magpie-setup upgrade` instead; there is nothing to
-migrate.
-
-Resolve `<adopter-skills-dir>` exactly as the framework's
-[`magpie-setup` conventions](../../../skills/setup/conventions.md) does —
-detect Pattern A (flat `.claude/skills/`), B (per-skill double-symlink
-to `.github/skills/`), or D (one of `.claude/skills` / `.github/skills`
-is a directory symlink to the other). Pin it for the rest of the run.
-
-**Surface the full migration plan** (every rename below, as a single
-list) and get the user's confirmation before writing anything. This is
-a one-time, repo-reshaping change; the user sees it before it runs.
-
-## Step 1 — Rename the snapshot dir
-
-```bash
-# Gitignored build artefact — a plain mv, no history impact.
-[ -d .apache-steward ] && mv .apache-steward .apache-magpie
-```
-
-If `.apache-magpie/` already exists (a partial prior run), keep it and
-`rm -rf .apache-steward`. After this the snapshot is at
-`.apache-magpie/`, and the new framework's skills are at
-`.apache-magpie/skills/<skill>/` (no longer `.../.claude/skills/...`).
-
-Confirm `.apache-magpie/skills/setup/SKILL.md` exists — that is the new
-bootstrap skill source. If it is missing, the re-fetch landed an
-unexpected layout; stop and surface it.
-
-## Step 2 — Rename the lock files
-
-```bash
-# Committed pin — use git mv so history follows.
-[ -f .apache-steward.lock ] && git mv .apache-steward.lock .apache-magpie.lock
-# Gitignored per-machine record — plain mv.
-[ -f .apache-steward.local.lock ] && mv .apache-steward.local.lock 
.apache-magpie.local.lock
-```
-
-## Step 3 — Rename the overrides dir
-
-```bash
-# Committed; preserve every override file and its history.
-[ -d .apache-steward-overrides ] && git mv .apache-steward-overrides 
.apache-magpie-overrides
-```
-
-The override **filenames** are keyed to framework skill names. Only one
-framework skill was renamed in the Magpie rename: `setup-steward` →
-`setup`. So if an override `setup-steward.md` exists, rename it too:
-
-```bash
-[ -f .apache-magpie-overrides/setup-steward.md ] && \
-  git mv .apache-magpie-overrides/setup-steward.md 
.apache-magpie-overrides/setup.md
-```
-
-All other override filenames (`security-issue-sync.md`,
-`pr-management-triage.md`, …) are unchanged — the `magpie-` prefix is an
-install-time symlink-name concern, not an override-file concern (an
-override targets the skill by its clean source name).
-
-## Step 4 — Replace the committed bootstrap skill (`setup-steward` → 
`magpie-setup`)
-
-The committed skill currently on disk at `<adopter-skills-dir>/setup-steward/`
-is **this shim** (the pre-Magpie upgrade just overwrote it from the
-snapshot). Replace it with the real Magpie bootstrap skill, named
-`magpie-setup`, per the adopter's layout pattern:
-
-```bash
-# Pattern A (flat):
-rm -rf <adopter-skills-dir>/setup-steward
-cp -r .apache-magpie/skills/setup <adopter-skills-dir>/magpie-setup
-
-# Pattern B (double-symlinked) — copy into .github/skills/, then the
-# outer .claude/skills/magpie-setup symlink is created in Step 5:
-rm -rf .github/skills/setup-steward .claude/skills/setup-steward
-cp -r .apache-magpie/skills/setup .github/skills/magpie-setup
-
-# Pattern D — write to the canonical side only (D.1 → .github/skills/,
-# D.2 → .claude/skills/); the symlinked side resolves automatically:
-rm -rf <canonical-side>/setup-steward
-cp -r .apache-magpie/skills/setup <canonical-side>/magpie-setup
-```
-
-`magpie-setup` is the one **committed** framework skill (Golden rule 6);
-it lands as new files in `git status` for the migration PR.
-
-## Step 5 — Re-prefix every framework symlink to `magpie-`
-
-Pre-Magpie, framework skills were symlinked under their bare names
-(`<adopter-skills-dir>/security-issue-import` → snapshot). Magpie
-namespaces every framework skill under a `magpie-` prefix. For **each**
-existing framework symlink in `<adopter-skills-dir>` (every entry that
-is a symlink resolving into the snapshot, i.e. not the committed
-`magpie-setup` and not an adopter-owned skill):
-
-1. Determine its clean source name `<n>` (the snapshot skill it points
-   at). **Note the one renamed skill:** a legacy `list-steward-skills`
-   symlink maps to the new source name `list-skills`.
-2. Create `<adopter-skills-dir>/magpie-<n>` → relative path into
-   `.apache-magpie/skills/<n>/` (per pattern — both layers for B; the
-   canonical side only for D).
-3. Remove the old bare symlink (`security-issue-import`,
-   `pr-management-triage`, `list-steward-skills`, …).
-
-Compute the symlink set fresh from `.apache-magpie/skills/` filtered to
-the families the project had (read from the renamed
-`.apache-magpie.lock` plus the always-on `setup-*` / `list-*` families)
-— do not hard-code names. The post-migration state: every framework
-skill the project uses is reachable as `magpie-<n>`, and no bare-named
-framework symlink remains.
-
-## Step 6 — Rewrite the `.gitignore` block
-
-Replace the legacy framework gitignore entries. The Magpie layout
-collapses the per-family symlink lines into a single `magpie-*` glob,
-because **every** framework symlink now carries the prefix:
-
-```text
-# --- remove these legacy lines if present ---
-/.apache-steward/
-/.apache-steward.local.lock
-/.claude/skills/security-*
-/.claude/skills/pr-management-*
-/.claude/skills/issue-*
-/.claude/skills/setup-isolated-setup-*
-/.claude/skills/setup-override-upstream
-/.claude/skills/setup-shared-config-sync
-/.claude/skills/list-steward-*
-/.github/skills/security-*            # (Pattern B/D only)
-/.github/skills/pr-management-*
-/.github/skills/issue-*
-/.github/skills/setup-isolated-setup-*
-/.github/skills/setup-override-upstream
-/.github/skills/setup-shared-config-sync
-/.github/skills/list-steward-*
-
-# --- write these Magpie lines ---
-/.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-*` 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
-
-The per-user credential / config dir moved from `~/.config/apache-steward/`
-to `~/.config/apache-magpie/`:
-
-```bash
-[ -d ~/.config/apache-steward ] && [ ! -e ~/.config/apache-magpie ] && \
-  mv ~/.config/apache-steward ~/.config/apache-magpie
-```
-
-This dir is **outside** the repo and per-machine — migrate it once per
-machine. **Then tell the operator to update their sandbox allowlist**:
-any `~/.config/apache-steward/` entry in their Claude Code settings
-(project `.claude/settings.local.json`, project `.claude/settings.json`,
-or user-scope `~/.claude/settings.json`) must become
-`~/.config/apache-magpie/`, or sandboxed framework tools will not be
-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, lint config + doc sections
-
-- **Git hook.** If `.git/hooks/post-checkout` contains the legacy
-  `setup-steward verify --auto-fix-symlinks` recipe, update it to
-  `magpie-setup verify --auto-fix-symlinks` (same auto-fix behaviour,
-  new skill name). Leave any non-framework hook lines untouched.
-- **Project docs.** In `README.md` / `AGENTS.md` / `CONTRIBUTING.md`,
-  update any adoption section that still names `setup-steward`,
-  `/setup-steward`, `.apache-steward*`, or the bare-named framework
-  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
-
-The repo is now on the Magpie layout and **this shim is gone** (Step 4
-replaced the committed `setup-steward` with `magpie-setup`). Reload and
-hand off, per Golden rule 9:
-
-1. Re-read `<adopter-skills-dir>/magpie-setup/SKILL.md` and
-   `<adopter-skills-dir>/magpie-setup/upgrade.md`.
-2. The snapshot is already fresh at `.apache-magpie/`, so **skip** the
-   delete/re-fetch steps and resume the migrated upgrade from its
-   **Step 5 (reconcile overrides)** onward — reconcile overrides
-   against the new framework structure, then the Step 6 symlink-refresh
-   pass (idempotent — it confirms the `magpie-*` links Step 5 created),
-   the worktree propagation pass, and the upgrade summary.
-
-## Step 10 — Summary
-
-Report the migration as a single block:
-
-```text
-Migrated pre-Magpie (apache-steward) → Apache Magpie:
-  snapshot     .apache-steward/            → .apache-magpie/
-  committed pin .apache-steward.lock        → .apache-magpie.lock
-  local pin     .apache-steward.local.lock  → .apache-magpie.local.lock
-  overrides     .apache-steward-overrides/  → .apache-magpie-overrides/
-  bootstrap     setup-steward               → magpie-setup   (committed)
-  symlinks      <bare>-*                    → magpie-*       (N re-prefixed)
-  gitignore     per-family lines            → magpie-* glob
-  user config   ~/.config/apache-steward/   → ~/.config/apache-magpie/
-  hook          setup-steward verify        → magpie-setup verify
-
-Action required (operator): update the ~/.config/apache-steward/ entry
-in your Claude Code sandbox allowlist to ~/.config/apache-magpie/.
-
-From now on use /magpie-setup for everything. The setup-steward shim is
-removed; commit this migration diff as the upgrade PR.
-```
diff --git a/.github/skills/magpie-audit-finding-fix 
b/.github/skills/magpie-audit-finding-fix
new file mode 120000
index 0000000..c32be1b
--- /dev/null
+++ b/.github/skills/magpie-audit-finding-fix
@@ -0,0 +1 @@
+../../skills/audit-finding-fix
\ No newline at end of file
diff --git a/.github/skills/magpie-committer-onboarding 
b/.github/skills/magpie-committer-onboarding
new file mode 120000
index 0000000..9f421b7
--- /dev/null
+++ b/.github/skills/magpie-committer-onboarding
@@ -0,0 +1 @@
+../../skills/committer-onboarding
\ No newline at end of file
diff --git a/.github/skills/magpie-contributor-activity-sweep 
b/.github/skills/magpie-contributor-activity-sweep
new file mode 120000
index 0000000..4c4ad61
--- /dev/null
+++ b/.github/skills/magpie-contributor-activity-sweep
@@ -0,0 +1 @@
+../../skills/contributor-activity-sweep
\ No newline at end of file
diff --git a/.github/skills/magpie-contributor-nomination 
b/.github/skills/magpie-contributor-nomination
new file mode 120000
index 0000000..84b98fd
--- /dev/null
+++ b/.github/skills/magpie-contributor-nomination
@@ -0,0 +1 @@
+../../skills/contributor-nomination
\ No newline at end of file
diff --git a/.github/skills/magpie-good-first-issue-author 
b/.github/skills/magpie-good-first-issue-author
new file mode 120000
index 0000000..360135b
--- /dev/null
+++ b/.github/skills/magpie-good-first-issue-author
@@ -0,0 +1 @@
+../../skills/good-first-issue-author
\ No newline at end of file
diff --git a/.github/skills/magpie-issue-fix-workflow 
b/.github/skills/magpie-issue-fix-workflow
new file mode 120000
index 0000000..7bb0e8d
--- /dev/null
+++ b/.github/skills/magpie-issue-fix-workflow
@@ -0,0 +1 @@
+../../skills/issue-fix-workflow
\ No newline at end of file
diff --git a/.github/skills/magpie-issue-reassess 
b/.github/skills/magpie-issue-reassess
new file mode 120000
index 0000000..8e91821
--- /dev/null
+++ b/.github/skills/magpie-issue-reassess
@@ -0,0 +1 @@
+../../skills/issue-reassess
\ No newline at end of file
diff --git a/.github/skills/magpie-issue-reassess-stats 
b/.github/skills/magpie-issue-reassess-stats
new file mode 120000
index 0000000..a5b2632
--- /dev/null
+++ b/.github/skills/magpie-issue-reassess-stats
@@ -0,0 +1 @@
+../../skills/issue-reassess-stats
\ No newline at end of file
diff --git a/.github/skills/magpie-issue-reproducer 
b/.github/skills/magpie-issue-reproducer
new file mode 120000
index 0000000..c8cdab9
--- /dev/null
+++ b/.github/skills/magpie-issue-reproducer
@@ -0,0 +1 @@
+../../skills/issue-reproducer
\ No newline at end of file
diff --git a/.github/skills/magpie-issue-triage 
b/.github/skills/magpie-issue-triage
new file mode 120000
index 0000000..a32c627
--- /dev/null
+++ b/.github/skills/magpie-issue-triage
@@ -0,0 +1 @@
+../../skills/issue-triage
\ No newline at end of file
diff --git a/.github/skills/magpie-list-skills 
b/.github/skills/magpie-list-skills
new file mode 120000
index 0000000..a6c207d
--- /dev/null
+++ b/.github/skills/magpie-list-skills
@@ -0,0 +1 @@
+../../skills/list-skills
\ No newline at end of file
diff --git a/.github/skills/magpie-optimize-skill 
b/.github/skills/magpie-optimize-skill
new file mode 120000
index 0000000..8cddd77
--- /dev/null
+++ b/.github/skills/magpie-optimize-skill
@@ -0,0 +1 @@
+../../skills/optimize-skill
\ No newline at end of file
diff --git a/.github/skills/magpie-pairing-multi-agent-review 
b/.github/skills/magpie-pairing-multi-agent-review
new file mode 120000
index 0000000..ddb431c
--- /dev/null
+++ b/.github/skills/magpie-pairing-multi-agent-review
@@ -0,0 +1 @@
+../../skills/pairing-multi-agent-review
\ No newline at end of file
diff --git a/.github/skills/magpie-pairing-self-review 
b/.github/skills/magpie-pairing-self-review
new file mode 120000
index 0000000..b2fccf7
--- /dev/null
+++ b/.github/skills/magpie-pairing-self-review
@@ -0,0 +1 @@
+../../skills/pairing-self-review
\ No newline at end of file
diff --git a/.github/skills/magpie-pr-management-code-review 
b/.github/skills/magpie-pr-management-code-review
new file mode 120000
index 0000000..4b543a0
--- /dev/null
+++ b/.github/skills/magpie-pr-management-code-review
@@ -0,0 +1 @@
+../../skills/pr-management-code-review
\ No newline at end of file
diff --git a/.github/skills/magpie-pr-management-mentor 
b/.github/skills/magpie-pr-management-mentor
new file mode 120000
index 0000000..02c3493
--- /dev/null
+++ b/.github/skills/magpie-pr-management-mentor
@@ -0,0 +1 @@
+../../skills/pr-management-mentor
\ No newline at end of file
diff --git a/.github/skills/magpie-pr-management-quick-merge 
b/.github/skills/magpie-pr-management-quick-merge
new file mode 120000
index 0000000..a504c5a
--- /dev/null
+++ b/.github/skills/magpie-pr-management-quick-merge
@@ -0,0 +1 @@
+../../skills/pr-management-quick-merge
\ No newline at end of file
diff --git a/.github/skills/magpie-pr-management-stats 
b/.github/skills/magpie-pr-management-stats
new file mode 120000
index 0000000..b1a1338
--- /dev/null
+++ b/.github/skills/magpie-pr-management-stats
@@ -0,0 +1 @@
+../../skills/pr-management-stats
\ No newline at end of file
diff --git a/.github/skills/magpie-pr-management-triage 
b/.github/skills/magpie-pr-management-triage
new file mode 120000
index 0000000..4ae07e2
--- /dev/null
+++ b/.github/skills/magpie-pr-management-triage
@@ -0,0 +1 @@
+../../skills/pr-management-triage
\ No newline at end of file
diff --git a/.github/skills/magpie-security-cve-allocate 
b/.github/skills/magpie-security-cve-allocate
new file mode 120000
index 0000000..6cc475b
--- /dev/null
+++ b/.github/skills/magpie-security-cve-allocate
@@ -0,0 +1 @@
+../../skills/security-cve-allocate
\ No newline at end of file
diff --git a/.github/skills/magpie-security-issue-deduplicate 
b/.github/skills/magpie-security-issue-deduplicate
new file mode 120000
index 0000000..63f6e88
--- /dev/null
+++ b/.github/skills/magpie-security-issue-deduplicate
@@ -0,0 +1 @@
+../../skills/security-issue-deduplicate
\ No newline at end of file
diff --git a/.github/skills/magpie-security-issue-fix 
b/.github/skills/magpie-security-issue-fix
new file mode 120000
index 0000000..40c0839
--- /dev/null
+++ b/.github/skills/magpie-security-issue-fix
@@ -0,0 +1 @@
+../../skills/security-issue-fix
\ No newline at end of file
diff --git a/.github/skills/magpie-security-issue-import 
b/.github/skills/magpie-security-issue-import
new file mode 120000
index 0000000..d80190b
--- /dev/null
+++ b/.github/skills/magpie-security-issue-import
@@ -0,0 +1 @@
+../../skills/security-issue-import
\ No newline at end of file
diff --git a/.github/skills/magpie-security-issue-import-from-md 
b/.github/skills/magpie-security-issue-import-from-md
new file mode 120000
index 0000000..3c96cda
--- /dev/null
+++ b/.github/skills/magpie-security-issue-import-from-md
@@ -0,0 +1 @@
+../../skills/security-issue-import-from-md
\ No newline at end of file
diff --git a/.github/skills/magpie-security-issue-import-from-pr 
b/.github/skills/magpie-security-issue-import-from-pr
new file mode 120000
index 0000000..41c4085
--- /dev/null
+++ b/.github/skills/magpie-security-issue-import-from-pr
@@ -0,0 +1 @@
+../../skills/security-issue-import-from-pr
\ No newline at end of file
diff --git a/.github/skills/magpie-security-issue-import-via-forwarder 
b/.github/skills/magpie-security-issue-import-via-forwarder
new file mode 120000
index 0000000..213f546
--- /dev/null
+++ b/.github/skills/magpie-security-issue-import-via-forwarder
@@ -0,0 +1 @@
+../../skills/security-issue-import-via-forwarder
\ No newline at end of file
diff --git a/.github/skills/magpie-security-issue-invalidate 
b/.github/skills/magpie-security-issue-invalidate
new file mode 120000
index 0000000..7b07030
--- /dev/null
+++ b/.github/skills/magpie-security-issue-invalidate
@@ -0,0 +1 @@
+../../skills/security-issue-invalidate
\ No newline at end of file
diff --git a/.github/skills/magpie-security-issue-sync 
b/.github/skills/magpie-security-issue-sync
new file mode 120000
index 0000000..b4f409e
--- /dev/null
+++ b/.github/skills/magpie-security-issue-sync
@@ -0,0 +1 @@
+../../skills/security-issue-sync
\ No newline at end of file
diff --git a/.github/skills/magpie-security-issue-triage 
b/.github/skills/magpie-security-issue-triage
new file mode 120000
index 0000000..162016a
--- /dev/null
+++ b/.github/skills/magpie-security-issue-triage
@@ -0,0 +1 @@
+../../skills/security-issue-triage
\ No newline at end of file
diff --git a/.github/skills/magpie-security-tracker-stats-dashboard 
b/.github/skills/magpie-security-tracker-stats-dashboard
new file mode 120000
index 0000000..ea7df87
--- /dev/null
+++ b/.github/skills/magpie-security-tracker-stats-dashboard
@@ -0,0 +1 @@
+../../skills/security-tracker-stats-dashboard
\ No newline at end of file
diff --git a/.github/skills/magpie-setup b/.github/skills/magpie-setup
new file mode 120000
index 0000000..8f69d9c
--- /dev/null
+++ b/.github/skills/magpie-setup
@@ -0,0 +1 @@
+../../skills/setup
\ No newline at end of file
diff --git a/.github/skills/magpie-setup-isolated-setup-doctor 
b/.github/skills/magpie-setup-isolated-setup-doctor
new file mode 120000
index 0000000..44f2819
--- /dev/null
+++ b/.github/skills/magpie-setup-isolated-setup-doctor
@@ -0,0 +1 @@
+../../skills/setup-isolated-setup-doctor
\ No newline at end of file
diff --git a/.github/skills/magpie-setup-isolated-setup-install 
b/.github/skills/magpie-setup-isolated-setup-install
new file mode 120000
index 0000000..794d890
--- /dev/null
+++ b/.github/skills/magpie-setup-isolated-setup-install
@@ -0,0 +1 @@
+../../skills/setup-isolated-setup-install
\ No newline at end of file
diff --git a/.github/skills/magpie-setup-isolated-setup-update 
b/.github/skills/magpie-setup-isolated-setup-update
new file mode 120000
index 0000000..fabb0d7
--- /dev/null
+++ b/.github/skills/magpie-setup-isolated-setup-update
@@ -0,0 +1 @@
+../../skills/setup-isolated-setup-update
\ No newline at end of file
diff --git a/.github/skills/magpie-setup-isolated-setup-verify 
b/.github/skills/magpie-setup-isolated-setup-verify
new file mode 120000
index 0000000..d76e89a
--- /dev/null
+++ b/.github/skills/magpie-setup-isolated-setup-verify
@@ -0,0 +1 @@
+../../skills/setup-isolated-setup-verify
\ No newline at end of file
diff --git a/.github/skills/magpie-setup-override-upstream 
b/.github/skills/magpie-setup-override-upstream
new file mode 120000
index 0000000..a9cee55
--- /dev/null
+++ b/.github/skills/magpie-setup-override-upstream
@@ -0,0 +1 @@
+../../skills/setup-override-upstream
\ No newline at end of file
diff --git a/.github/skills/magpie-setup-shared-config-sync 
b/.github/skills/magpie-setup-shared-config-sync
new file mode 120000
index 0000000..f850cf0
--- /dev/null
+++ b/.github/skills/magpie-setup-shared-config-sync
@@ -0,0 +1 @@
+../../skills/setup-shared-config-sync
\ No newline at end of file
diff --git a/.github/skills/magpie-write-skill 
b/.github/skills/magpie-write-skill
new file mode 120000
index 0000000..f512e9d
--- /dev/null
+++ b/.github/skills/magpie-write-skill
@@ -0,0 +1 @@
+../../skills/write-skill
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 655d048..1f5f751 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,13 +5,18 @@ logs
 .build
 .claude/worktrees/
 .claude/settings.local.json
-# Skill source lives in skills/; .claude/skills/ holds only
-# gitignored self-adoption symlinks (a maintainer adopts the
-# framework into itself to make the skills active locally).
+# Skill source lives in skills/. The framework self-adopts by
+# committing magpie-<skill> symlinks that point into ../../skills/<skill>/
+# (see skills/setup/adopt.md → "Local self-adoption"). They live under
+# BOTH .claude/skills/ (Claude Code) and .github/skills/ (GitHub's skill
+# loader). Those symlinks ARE committed — their targets are in-repo and
+# always resolve on a fresh clone, so every contributor gets the skills
+# active with no setup step. Everything else dropped into these dirs
+# stays local.
 .claude/skills/*
-# Transition migration shim for pre-Magpie adopters — committed so it
-# ships in the snapshot a frozen `/setup-steward upgrade` fetches.
-!/.claude/skills/setup-steward/
+!/.claude/skills/magpie-*
+.github/skills/*
+!/.github/skills/magpie-*
 
 # macOS
 .DS_Store
diff --git a/AGENTS.md b/AGENTS.md
index fa0aaec..2f61d6f 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -99,7 +99,7 @@ Repo-root files:
 - [`projects/_template/`](projects/_template/) — bootstrap scaffold for a new 
adopter's `<project-config>/`.
 - [`tools/<name>/`](tools/) — tool adapters (GitHub operations, issue-template 
schema, project-board GraphQL, …) for the external tools the skills invoke.
 - [`skills/<name>/SKILL.md`](skills/) — the agentic workflows.
-- [`.claude/skills/setup-steward/`](.claude/skills/setup-steward/) — a 
**transition migration shim**, deliberately committed (un-ignored) at the 
legacy path so it ships in the snapshot. It is the only artefact that still 
carries the `steward` name; its sole job is to migrate a pre-Magpie adopter to 
the `magpie-` layout (see its 
[`SKILL.md`](.claude/skills/setup-steward/SKILL.md)). **Do not delete it** 
until the framework drops pre-Magpie migration support.
+- `.claude/skills/magpie-<name>/` and `.github/skills/magpie-<name>/` — 
committed symlinks into `../../skills/<name>/`. This repo **self-adopts**: 
`/magpie-setup` with `method:local` links every skill source under both 
`.claude/skills/` (Claude Code) and `.github/skills/` (GitHub's skill loader) 
so the framework's own skills are callable from either harness while developing 
the framework (see [`skills/setup/adopt.md`](skills/setup/adopt.md) → "Local 
self-adoption"). The symlinks are comm [...]
 
 There is no source code to build or test in this framework
 repository itself. Adopting projects may include project-specific
diff --git a/docs/setup/install-recipes.md b/docs/setup/install-recipes.md
index aeb2324..847e788 100644
--- a/docs/setup/install-recipes.md
+++ b/docs/setup/install-recipes.md
@@ -290,34 +290,21 @@ A repo that adopted the framework **before** it was 
renamed from
 `apache-steward` to **Apache Magpie** is on the old layout: a committed
 `.claude/skills/setup-steward/` skill, an `.apache-steward/` snapshot,
 `.apache-steward.lock` / `.apache-steward-overrides/`, un-prefixed
-framework symlinks, and `~/.config/apache-steward/`. **No manual recipe
-is needed** — the migration is automatic and one-shot:
-
-```text
-/setup-steward upgrade
-```
-
-The frozen `setup-steward` skill committed in the repo refreshes the
-snapshot per its lock (which lands the current Magpie framework), and —
-because the Magpie framework still ships a transition shim at the legacy
-`.claude/skills/setup-steward/` path — reloads that shim in-flight (its
-Golden rule 9). The shim's
-[`upgrade.md`](../../.claude/skills/setup-steward/upgrade.md) then
-migrates everything in place:
-
-- `.apache-steward*` → `.apache-magpie*` (snapshot, locks, overrides)
-- the committed `setup-steward` skill → `magpie-setup`
-- every un-prefixed framework symlink → `magpie-<name>`
-- the `.gitignore` block → the collapsed `magpie-*` form
-- `~/.config/apache-steward/` → `~/.config/apache-magpie/` (per-machine)
-
-…then **removes itself**. Review and commit the migration diff as the
-upgrade PR. From then on the repo uses `/magpie-setup` for everything,
-and the `steward` name is gone.
-
-> **One manual step the framework cannot do for you:** update any
-> `~/.config/apache-steward/` entry in your Claude Code sandbox
-> allowlist (project `.claude/settings.local.json` / `.claude/settings.json`
-> or user-scope `~/.claude/settings.json`) to `~/.config/apache-magpie/`,
-> or sandboxed framework tools cannot read the moved credentials. The
-> migration surfaces the exact one-line change.
+framework symlinks, and `~/.config/apache-steward/`. The framework
+**no longer ships an automated migration** for this layout — migrate by
+hand:
+
+1. Remove the legacy in-repo artefacts: `.apache-steward*` (snapshot,
+   locks, overrides), any un-prefixed framework symlinks under the
+   skills dir, and the committed `.claude/skills/setup-steward/` skill.
+2. Re-adopt from scratch with `/magpie-setup` (see
+   [`setup/adopt.md`](../../skills/setup/adopt.md)) so the current
+   `.apache-magpie*` layout and `magpie-`-prefixed symlinks are written
+   fresh. Preserve any `.apache-steward-overrides/*.md` you want to keep
+   by moving them into the new `.apache-magpie-overrides/` first.
+3. Move `~/.config/apache-steward/` (per-user) to
+   `~/.config/apache-magpie/`, and update any `~/.config/apache-steward/`
+   entry in your Claude Code sandbox allowlist (project
+   `.claude/settings.local.json` / `.claude/settings.json` or user-scope
+   `~/.claude/settings.json`) to `~/.config/apache-magpie/` — otherwise
+   sandboxed framework tools cannot read the moved credentials.
diff --git a/skills/setup/SKILL.md b/skills/setup/SKILL.md
index 4b2691c..d671d9c 100644
--- a/skills/setup/SKILL.md
+++ b/skills/setup/SKILL.md
@@ -94,6 +94,21 @@ copy):
   [`docs/setup/agentic-overrides.md`](../../docs/setup/agentic-overrides.md)
   for the design rationale.
 
+**Local self-adoption (the framework checkout only).** The one
+repo that cannot be adopted via the snapshot mechanism is the
+Apache Magpie framework checkout itself — a remote snapshot of the
+framework into itself would be circular. Instead it **self-adopts**
+with `method:local`: each `magpie-<skill>` is a **committed**
+symlink into the in-repo `../../skills/<skill>/` source — written
+under both `.claude/skills/` (Claude Code) and `.github/skills/`
+(GitHub's skill loader) — with no snapshot, no remote fetch, and
+no copy. This makes
+the framework's own skills callable while developing the framework,
+and every contributor gets them active on a fresh clone with no
+setup step. `adopt` detects the framework checkout structurally and
+routes there automatically (see
+[`adopt.md` → Local self-adoption](adopt.md#local-self-adoption-methodlocal)).
+
 ## The two lock files
 
 The framework's lock-file model splits **what the project pins
@@ -342,7 +357,7 @@ first, then continue.
 | Flag | Effect |
 |---|---|
 | `from:<git-ref>` / `from:<version>` | Adopt or upgrade from a specific 
framework ref or version. Used during `adopt` (overrides the user prompt) and 
`upgrade` (overrides the committed lock for *this run only* — does NOT update 
the committed lock). |
-| `method:<git-branch\|git-tag\|svn-zip>` | Pick the install method 
explicitly. Default during `adopt`: prompt the user. |
+| `method:<git-branch\|git-tag\|svn-zip\|local>` | Pick the install method 
explicitly. Default during `adopt`: prompt the user. **`local`** is 
**framework-checkout only** — it self-adopts by linking the in-repo `skills/` 
source directly instead of fetching a snapshot (see [`adopt.md` → Local 
self-adoption](adopt.md#local-self-adoption-methodlocal)). |
 | `skill-families:<list>` | Comma-separated **opt-in** families to symlink 
(`security`, `pr-management`, `issue`). Default on `adopt`: prompt. Default on 
`upgrade`: read the families list from `<committed-lock>` / `<local-lock>`, 
**auto-include any opt-in family the framework has introduced since the lock 
was written** (recorded back into the lock), and **ensure every framework skill 
in the effective family set has a valid symlink** — create or repair missing / 
broken symlinks, not just  [...]
 | `--purge-overrides` | *(unadopt only)* Also `git rm -r` 
`.apache-magpie-overrides/`. Default: preserve. |
 | `dry-run` | Show what the skill would do without writing anything. |
diff --git a/skills/setup/adopt.md b/skills/setup/adopt.md
index 9926eaa..b7b508b 100644
--- a/skills/setup/adopt.md
+++ b/skills/setup/adopt.md
@@ -63,9 +63,31 @@ between automatically:
    `$(dirname "$(cd "$(git rev-parse --git-common-dir)" && pwd)")` —
    surface it explicitly in the error message so the operator
    can `cd` there without guessing.
-3. Confirm we are **not** in `apache/airflow-steward` itself
-   (read `git remote get-url origin` and refuse if it
-   resolves to the framework).
+3. Detect whether we are **in the Apache Magpie framework
+   checkout itself** rather than an adopter repo. The framework
+   checkout is the one place self-adoption is possible — it
+   links its own `skills/` source directly instead of fetching a
+   snapshot (see
+   [Local self-adoption](#local-self-adoption-methodlocal)).
+
+   Detect it **structurally** — do *not* rely on the `origin`
+   URL, which on a contributor's fork points at
+   `<user>/airflow-steward`, not `apache/`. The repo is the
+   framework checkout when `skills/setup/SKILL.md` exists at the
+   repo root with `name: magpie-setup` in its frontmatter **and**
+   `skills/list-skills/` is present.
+
+   - **Framework checkout** → self-adoption is available. If the
+     user passed `method:local`, go straight to
+     [Local self-adoption](#local-self-adoption-methodlocal).
+     Otherwise offer it — the only non-circular adoption for the
+     framework repo is the local one (a remote snapshot of the
+     framework into itself would shadow the live `skills/`
+     source with a stale copy). On confirmation, follow that
+     section; a remote `method:` against the framework checkout
+     is refused.
+   - **Adopter repo** (the structural markers are absent) →
+     continue with the normal remote-snapshot flow below.
 4. Detect the adopter's existing skills-dir convention by
    following [`conventions.md`](conventions.md). Pin the
    result as `<adopter-skills-dir>` for the rest of this
@@ -105,6 +127,100 @@ between automatically:
    change; the adopt flow surfaces every step before
    writing.
 
+## Local self-adoption (`method:local`)
+
+**Framework checkout only.** When `/magpie-setup` runs inside the
+Apache Magpie framework checkout (detected in
+[Step 0](#step-0--pre-flight)), it adopts the framework *into
+itself* by linking the live `skills/` source directly — **no
+remote URL, no snapshot fetch, no repo copy**. This is how a
+maintainer makes the framework's own skills callable while
+developing the framework. An adopter repo never reaches this
+section; it runs Steps 1–12 below.
+
+How it differs from a remote adoption:
+
+- **No `<snapshot-dir>`.** Nothing is fetched — the skill sources
+  already live in `skills/` at the repo root.
+- **No remote lock.** A single committed marker file
+  `.apache-magpie.lock` records `method: local` (no
+  `url`/`ref`/`commit`/`sha512`), and there is no
+  `.apache-magpie.local.lock`.
+- **Symlinks are committed, not gitignored.** Each
+  `magpie-<skill>` symlink targets `../../skills/<skill>/` — an
+  in-repo path that always resolves on a fresh clone — so the
+  links are committed. They are written under **both**
+  `.claude/skills/` (Claude Code) and `.github/skills/` (GitHub's
+  skill loader), so the framework's own skills are discoverable
+  by either harness; `.gitignore` un-ignores `magpie-*` in both
+  dirs. Every contributor gets the skills active with no setup
+  step.
+- **All skills, no family prompt.** Self-adoption links *every*
+  skill under `skills/`, so the opt-in family prompt of
+  [Step 5](#step-5--pick-the-skill-families) is skipped.
+  `skill-families:` is still honoured if the maintainer wants to
+  narrow the set.
+- **`magpie-setup` is itself a symlink** (→ `../../skills/setup/`),
+  not a committed copy. The copy-vs-symlink rule of
+  [`SKILL.md` Golden rule 6](SKILL.md#golden-rules) exists only
+  because adopter snapshots disappear on clone; the framework's
+  own source is always present, so the bootstrap is linked like
+  every other skill.
+
+### Steps
+
+1. **Pre-flight** ([Step 0](#step-0--pre-flight)) has confirmed
+   we are in the framework checkout and in the main checkout (not
+   a worktree).
+2. **Refuse a remote method.** If the user passed
+   `method:git-branch|git-tag|svn-zip`, stop: a remote snapshot
+   of the framework into itself is circular and would shadow the
+   live `skills/` source.
+3. **Enumerate skills.** List every directory under
+   `<repo-root>/skills/` that contains a `SKILL.md`. Apply
+   `skill-families:` as a filter if it was passed; otherwise take
+   all of them.
+4. **Write the marker lock** at `<repo-root>/.apache-magpie.lock`:
+
+   ```text
+   # .apache-magpie.lock — committed. Local self-adoption marker.
+   # The framework checkout links its own skills/ source; there is
+   # no remote snapshot. Edited only by /magpie-setup.
+
+   method: local
+   source: skills/
+   ```
+
+5. **`.gitignore`.** Ensure each skills dir glob is ignored with
+   the `magpie-*` set un-ignored, in **both** locations
+   (idempotent — add any missing line):
+
+   ```text
+   .claude/skills/*
+   !/.claude/skills/magpie-*
+   .github/skills/*
+   !/.github/skills/magpie-*
+   ```
+
+6. **Create the symlinks.** For each enumerated skill `<n>`,
+   create the relative symlink `magpie-<n>` → `../../skills/<n>`
+   under **both** `<repo-root>/.claude/skills/` and
+   `<repo-root>/.github/skills/`. Idempotent: re-point a
+   pre-existing `magpie-<n>` symlink only if it targets something
+   else; never overwrite a non-symlink (surface the conflict and
+   stop). Show the full list and confirm before writing.
+7. **Verify + stage.** Confirm every `magpie-<n>` symlink (in
+   both dirs) resolves to a directory containing `SKILL.md`, then
+   suggest the user `git add` the symlinks, `.apache-magpie.lock`,
+   and `.gitignore`.
+
+Self-adoption skips the adopter-only steps entirely: no snapshot
+fetch (Step 3), no committed-`setup` reconcile (Step 3b), no
+fit-signal probe (Step 4b), no family prompt (Step 5), no
+`.apache-magpie-overrides/` scaffold (Step 9), no `user.md`
+(Step 9b), no comdev MCP prereqs (Step 9c), no project-doc
+updates (Step 11) — the framework repo *is* the documentation.
+
 ## Step 1 — Detect adoption shape
 
 ```text
diff --git a/skills/setup/upgrade.md b/skills/setup/upgrade.md
index 0fcf726..bc104e1 100644
--- a/skills/setup/upgrade.md
+++ b/skills/setup/upgrade.md
@@ -59,27 +59,30 @@ Both paths run the same flow.
 
 ## Step 0a — Pre-Magpie leftovers safety check
 
-A repo that adopted the framework before it was renamed from
-**apache-steward** to **Apache Magpie** migrates via the
-one-shot transition shim at `.claude/skills/setup-steward/`
-(a frozen `/setup-steward upgrade` lands there automatically;
-see that skill's 
[`upgrade.md`](../../.claude/skills/setup-steward/upgrade.md)).
-A fully-migrated repo never reaches *this* file with legacy
-artefacts present.
-
-If you nonetheless detect **any** legacy artefact here —
+The framework was once named **apache-steward** before it was
+renamed to **Apache Magpie**. The framework **no longer ships an
+automated pre-Magpie migration** — a repo still on the old layout
+must be migrated by hand.
+
+If you detect **any** legacy artefact here —
 `.apache-steward.lock`, `.apache-steward/`,
 `.apache-steward-overrides/`, a committed
 `<adopter-skills-dir>/setup-steward/`, or a framework symlink
-**without** the `magpie-` prefix — a prior migration did not
-finish. Do **not** continue the normal upgrade against the
-half-migrated state. Run the transition migration to
-completion first (follow
-[`.claude/skills/setup-steward/upgrade.md`](../../.claude/skills/setup-steward/upgrade.md),
-which is idempotent and safe to re-run), then resume this
-upgrade. `~/.config/apache-steward/` alone (per-user, no
-in-repo artefacts) just needs the dir + sandbox-allowlist
-move from that file's Step 7.
+**without** the `magpie-` prefix — do **not** continue the normal
+upgrade against the half-migrated state. Stop and surface the
+manual remediation:
+
+1. Remove the legacy in-repo artefacts (`.apache-steward*`, any
+   un-prefixed framework symlinks, a committed `setup-steward`
+   skill).
+2. Re-adopt from scratch with `/magpie-setup` so the current
+   `.apache-magpie*` layout and `magpie-`-prefixed symlinks are
+   written fresh.
+3. Move `~/.config/apache-steward/` (per-user) to
+   `~/.config/apache-magpie/` and update any sandbox-allowlist
+   entry that referenced the old path.
+
+Then resume this upgrade against the clean Magpie layout.
 
 ## Step 1 — Compute drift
 
diff --git a/skills/setup/verify.md b/skills/setup/verify.md
index e7a346e..8db9c41 100644
--- a/skills/setup/verify.md
+++ b/skills/setup/verify.md
@@ -21,13 +21,51 @@ default — surfaces gaps and remediation commands.
 ## Pre-flight
 
 1. `git rev-parse --show-toplevel` — must succeed.
-2. `git remote get-url origin` — refuse if it resolves to
-   `apache/airflow-steward` itself (this skill is for
-   adopters, not the framework).
+2. **Framework checkout?** Detect structurally (as in
+   [`adopt.md` Step 0](adopt.md#step-0--pre-flight)):
+   `skills/setup/SKILL.md` exists at the repo root with
+   `name: magpie-setup` and `skills/list-skills/` is present. If
+   so **and** `.apache-magpie.lock` records `method: local`, the
+   repo is **self-adopted** — run the
+   [Local self-adoption checks](#local-self-adoption-checks)
+   instead of the snapshot checks below, then stop. A framework
+   checkout with no `method: local` lock is simply not adopted
+   yet — point at `/magpie-setup`.
 3. If `<repo-root>/.apache-magpie.lock` is missing, the
    repo is not adopted. Surface and stop with a pointer at
    `/magpie-setup adopt`.
 
+## Local self-adoption checks
+
+Run these (and only these) when pre-flight detected a framework
+checkout self-adopted with `method: local`. There is no snapshot,
+no remote lock, and no per-machine lock to drift against — the
+committed symlinks into the in-repo `skills/` source *are* the
+adoption state.
+
+1. **Marker lock.** `.apache-magpie.lock` parses and records
+   `method: local`. ✓ when present; ✗ with a pointer at
+   `/magpie-setup` otherwise.
+2. **Symlinks resolve into `skills/`.** In **both**
+   `.claude/skills/` and `.github/skills/`, every `magpie-<n>` is
+   a symlink whose target (`../../skills/<n>/`) resolves to a
+   directory containing `SKILL.md`. ✗ list any dangling or
+   non-symlink entry; remediation: re-run `/magpie-setup`
+   (idempotent).
+3. **Coverage.** Every `skills/<n>/` with a `SKILL.md` has a
+   matching `magpie-<n>` symlink in **both** dirs (unless a
+   `skill-families:` filter was deliberately applied). ⚠ list any
+   source skill with no link; remediation: `/magpie-setup`.
+4. **`.gitignore`.** `.claude/skills/*` and `.github/skills/*` are
+   ignored, with `!/.claude/skills/magpie-*` and
+   `!/.github/skills/magpie-*` un-ignoring the committed symlinks.
+   ✗ if either un-ignore line is missing (those symlinks would not
+   be tracked).
+5. **No remote leftovers.** No `.apache-magpie/` snapshot dir and
+   no `.apache-magpie.local.lock` — local self-adoption uses
+   neither. ⚠ surface either if found (a stale remote adoption was
+   not cleaned up).
+
 ## The checks
 
 Run all checks even on early failure (a missing snapshot at

Reply via email to