Skip to content

codev update: dry-run silently omits skills, and skipExisting freezes stale skill copies forever #1222

Description

@waleedkadous

Two defects in codev update's skill handling (found live, 2026-07-22)

1. Dry-run silently omits the skills category

update.ts wraps the entire skills step in if (!dryRun) (line ~223). Under --dry-run, no skills are copied — correct — but nothing is reported either. Observed: a project missing the arch-init skill ran codev update --dry-run and the preview listed CLAUDE/AGENTS conflicts, tier files, and gitignore entries, but gave no hint that a real update would install a new skill. The preview must enumerate what apply would do: run copySkills in a report-only mode (or compute the copied/skipped sets without writing) and print + (would add) .claude/skills/<name>/.

2. skipExisting: true freezes existing skills forever

Update calls copySkills(targetDir, templatesDir, { skipExisting: true }) — new skills are added, but an existing skill directory is never refreshed, even when the local copy is a byte-for-byte unmodified old shipped default. Observed: a project holding the pre-auto-save arch-init will keep it through every future codev update, silently — no report, no refresh. This is the #1210 drift failure-mode ("stale local copy of an old default shadowing the current version") reproduced inside the updater itself.

Preserving customized skills is the right default. But "unmodified old default" is not a customization. Options, weakest to strongest:

Acceptance sketch

  • --dry-run output includes a line per skill that apply would add, and per existing skill that differs from the shipped version.
  • Real update refreshes (or at minimum reports) stale unmodified skills; genuinely customized skills preserved + reported.
  • scaffold.test.ts copySkills tests extended for whatever report-only/refresh mode is added.

Related: #1210 (drift detector — this is the updater-side leg of the same silent-staleness family).

Area: area/scaffold.

Activity

  1. added
    area/scaffoldArea: Install path — codev init/adopt/update/doctor, codev-skeleton, four-tier resolver
    on Jul 22, 2026
  2. waleedkadous commented on Sep 28, 2026

    @waleedkadous
    ContributorAuthor

    Receipts from a downstream project (2026-09-28), confirming both halves of this defect on a global install built from main at 7dd1e9d (package version string 3.3.4):

    • After two consecutive codev update runs, 8 of the 10 skeleton skills differed from the project's copies and were not touched, with no .codev-new written for any of them: afx, arch-init, arch-save, codev, consult, generate-image, porch, update-arch-docs (project copies dated May–Aug; each was a single framework-install commit, never locally edited). The update did add the one new skill dir (builder-refresh) and refreshed the CLAUDE.md/AGENTS.md managed block.
    • codev update --dry-run --force reports Already up to date! and lists no skill files at all, so the skills step is invisible in dry-run and --force does not reach it.
    • Concrete user-visible effect: /arch-save in the project still lacks the [next task] argument that the installed skeleton's copy has.

    Interim used downstream: diff each stale skill against $(npm root -g)/@cluesmith/codev/skeleton/.claude/skills/<name>/ and copy the dir where the project has no local edits (same for the .codex twin).

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

    area/scaffoldArea: Install path — codev init/adopt/update/doctor, codev-skeleton, four-tier resolver

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions