potiuk opened a new pull request, #247:
URL: https://github.com/apache/airflow-steward/pull/247
## Summary
Adds a fourth skills-dir convention — **Pattern D, single
directory symlink** — to the `setup-steward` adopter taxonomy:
one of `.claude/skills` / `.github/skills` is itself a directory
symlink to the other, so both paths always reflect the same set
of skills without per-skill plumbing. Adding a new skill — project-
native or framework-installed — only needs one entry in the
canonical directory; the mirror is automatic.
Two orientations:
- **D.1** — canonical content under `.github/skills/`,
`.claude/skills` is the symlink. Natural for projects that
use `.github/` as their canonical infra-glue root (e.g.
apache/airflow).
- **D.2** — canonical content under `.claude/skills/`,
`.github/skills` is the symlink. Natural for flat-Pattern-A
projects that want a `.github/skills/` view too without
duplicating content.
Pattern D coexists with project-native skills and framework
symlinks in the same canonical directory — the directory symlink
fans them out across both paths automatically.
## Pre-Pattern-D consolidation
When both `.claude/skills/` and `.github/skills/` already exist
as regular directories with **independent, non-aliased content**,
applying Pattern D would clobber the side that becomes the
symlink. The adopt flow now surfaces the conflict and proposes
a one-time consolidation — move every skill into one side,
replace the other with a directory symlink — before wiring any
framework symlink. The framework **never auto-renames** adopter
content; if the user declines or unresolved name collisions
block consolidation, the flow falls back to Pattern A.
## Files
- `.claude/skills/setup-steward/conventions.md` — Pattern D
section (both orientations), detection-algorithm branches,
table row, consolidation flow, ambiguous-case rules.
- `.claude/skills/setup-steward/adopt.md` — Step 0.4 calls
the consolidation flow on ambiguous detection; Step 7 splits
the `.gitignore` template per pattern; Step 8 wires
framework symlinks at the canonical side only for D.
- `.claude/skills/setup-steward/upgrade.md` — Step 4b adds a
Pattern D branch (overwrite `setup-steward` at the canonical
side); Step 6 refreshes per-skill symlinks at the canonical
side only.
- `.claude/skills/setup-steward/verify.md` — Check 4 splits
the required `.gitignore` entries per pattern.
- `.claude/skills/setup-steward/unadopt.md` — Per-pattern
inventory + execute-removal; the directory symlink itself is
adopter-owned and preserved.
- `.claude/skills/setup-steward/worktree-init.md` —
Per-pattern layer count for worktree framework-skill symlinks.
- `.claude/skills/setup-steward/SKILL.md`,
`docs/setup/install-recipes.md`, `docs/setup/unadopt.md` —
same per-pattern guidance reflected in the contributor-facing
docs.
## Test plan
- [ ] Apply Pattern D to an already-adopted Pattern B repo
(apache/airflow), run \`/setup-steward upgrade\`, confirm
framework symlinks land at \`.github/skills/<n>\` only and
every framework skill is reachable from
\`.claude/skills/<n>\` via the directory symlink.
- [ ] Verify \`.gitignore\` after the consume PR has only the
canonical-side ignore lines and the runtime framework
symlinks remain gitignored.
- [ ] Run \`/setup-steward verify\` from both the main checkout
and a linked worktree; confirm all checks pass.
- [ ] Dry-run \`/setup-steward unadopt\` on the Pattern D repo;
confirm the directory symlink itself is in the
*preserved* section.
---
🤖 Generated with [Claude Code](https://claude.com/claude-code)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]