Problem
Existing installations where bundled skills were provisioned before the .bundled marker system was introduced (or when markers were not written) will show a flat /skills list without category groups after upgrading to the version that adds category to SKILL.md files.
Root cause
provision_bundled_skills treats directories without a .bundled marker as user-owned (MarkerState::NoMarker → skip). Skills provisioned before the marker was introduced never received one, so they are never re-provisioned with the updated category frontmatter.
Impact
/skills shows flat list (no [category] headers) on existing installations
- Two-stage matching (when enabled via
two_stage_matching = true) won't filter by category
confusability_report() still works (doesn't depend on category)
- Fresh installations (no prior skills): unaffected ✅
Observed
Test environment (~/.config/zeph/skills/web-search/SKILL.md) lacks category: field because:
- Skill dir exists on disk
- No
.bundled marker present
- Provisioner skips it as user-owned
Suggested fix
Options (in order of preference):
- One-time migration: during
provision_bundled_skills, if a skill dir exists without a marker AND its SKILL.md content is identical to the embedded version, treat it as bundled and re-provision it (adding the marker and new fields).
- Force re-provision flag: add a migration flag that forces re-provision of skills matching known bundled names, skipping the marker check on first run after upgrade.
- Manual workaround: delete
~/.config/zeph/skills/ to trigger fresh re-provision (acceptable for testing, not ideal for users).
Workaround
rm -rf ~/.config/zeph/skills/
Then restart Zeph — all bundled skills are re-provisioned with category field. ⚠️ This overwrites any user customizations in the managed skills directory.
Verification
After PR #2402 merge on a fresh install:
/skills shows grouped output with [web], [data], [dev], [system] headers ✅
- Existing installations without markers: flat list (no grouping) ✅
Problem
Existing installations where bundled skills were provisioned before the
.bundledmarker system was introduced (or when markers were not written) will show a flat/skillslist without category groups after upgrading to the version that addscategoryto SKILL.md files.Root cause
provision_bundled_skillstreats directories without a.bundledmarker as user-owned (MarkerState::NoMarker→ skip). Skills provisioned before the marker was introduced never received one, so they are never re-provisioned with the updatedcategoryfrontmatter.Impact
/skillsshows flat list (no[category]headers) on existing installationstwo_stage_matching = true) won't filter by categoryconfusability_report()still works (doesn't depend on category)Observed
Test environment (
~/.config/zeph/skills/web-search/SKILL.md) lackscategory:field because:.bundledmarker presentSuggested fix
Options (in order of preference):
provision_bundled_skills, if a skill dir exists without a marker AND itsSKILL.mdcontent is identical to the embedded version, treat it as bundled and re-provision it (adding the marker and new fields).~/.config/zeph/skills/to trigger fresh re-provision (acceptable for testing, not ideal for users).Workaround
rm -rf ~/.config/zeph/skills/Then restart Zeph — all bundled skills are re-provisioned with⚠️ This overwrites any user customizations in the managed skills directory.
categoryfield.Verification
After PR #2402 merge on a fresh install:
/skillsshows grouped output with[web],[data],[dev],[system]headers ✅