Skip to content

fix(skills): bundled skills without .bundled marker miss category field on upgrade #2403

@bug-ops

Description

@bug-ops

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:

  1. Skill dir exists on disk
  2. No .bundled marker present
  3. Provisioner skips it as user-owned

Suggested fix

Options (in order of preference):

  1. 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).
  2. 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.
  3. 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) ✅

Metadata

Metadata

Assignees

Labels

P3Research — medium-high complexitybugSomething isn't workingskillszeph-skills crate

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions