Skip to content

claude-plugin/skills drifts from camp's canonical skills (no sync between the two) #69

Description

@lancekrogers

Problem

The campaign/festival skills exist in two separate, hand-maintained places that have already drifted, and nothing keeps them in sync:

  1. camp (canonical): projects/camp/internal/scaffold/campaign/templates/.campaign/skills/<name>/SKILL.md.tmpl, materialized into a workspace's .campaign/skills/ by camp init. Serves an installed campaign workspace.
  2. Plugin bundle: claude-plugin/skills/<name>/SKILL.md in this repo, shipped inside the Claude Code / Codex / Cursor / opencode / Gemini plugin bundles. A plugin must carry its own skills because it loads them from <plugin>/skills/ and installs before camp exists.

FP0006 makes claude-plugin/ the single source of truth for the plugin packaging and enforces drift from claude-plugin/ to the four generated targets. But it does not address the upstream relationship: claude-plugin/skills/ is itself a divergent copy of camp's canonical skills.

Current divergence (as of 2026-06-16)

camp (canonical) claude-plugin (plugin)
only-here skills camp-workitems, cross-campaign, fest-standalone-workflows fest-methodology
format SKILL.md.tmpl (rendered) static SKILL.md
count 10 8

So the sets differ in both directions, the formats differ, and a content edit to a shared skill in camp does not propagate to the plugin bundle (and vice versa).

Options to decide later

  • Generate from camp: render/sync claude-plugin/skills/ from camp's SKILL.md.tmpl and add a drift check, so the plugin bundle cannot silently diverge from the canonical source. Likely its own camp + festival design effort.
  • Intentional curated set: treat claude-plugin/skills/ as a deliberately curated plugin subset, document that explicitly, and scope the "single source of truth" wording to the packaging layer.

Scope note

This is out of scope for FP0006 (PR #68), which correctly packages whatever is in claude-plugin/. Filing to track the deeper camp <-> claude-plugin skills source-of-truth decision.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions