Claude-skill-registry c3-migrate
Use when upgrading .c3/ documentation to current skill version - reads VERSION, applies transforms from migrations/ directory in batches
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/c3-migrate" ~/.claude/skills/majiayu000-claude-skill-registry-c3-migrate && rm -rf "$T"
skills/data/c3-migrate/SKILL.mdC3 Migration Skill
Overview
Migrate project
.c3/ documentation from older versions to current skill version.
Core principle: Explicit migration triggered by user. Show plan, get confirmation, execute in batches.
Announce at start: "I'm using the c3-migrate skill to upgrade your C3 documentation."
Quick Reference
| Phase | Key Activities | Output |
|---|---|---|
| 1. Detect | Read version, compare to current | Version gap identified |
| 2. Plan | List migrations/, scan files | Migration plan |
| 3. Confirm | Present changes to user | User approval |
| 4. Execute | Apply transforms in batches | Updated files |
| 5. Finalize | Update version, suggest TOC rebuild | Migration complete |
Phase 1: Detect Version
Read Project Version
# Check frontmatter first (v3), then VERSION file (v1/v2) if grep -q '^c3-version:' .c3/README.md 2>/dev/null; then PROJECT_VERSION=$(grep '^c3-version:' .c3/README.md | sed 's/c3-version: *//') elif [ -f ".c3/VERSION" ]; then PROJECT_VERSION=$(cat .c3/VERSION) else PROJECT_VERSION=0 fi
Version storage:
| Format | Location |
|---|---|
| v1/v2 | file |
| v3 | in frontmatter |
| v4+ (date-based) | in frontmatter |
Compare Versions
| Condition | Action |
|---|---|
| PROJECT == SKILL | "Already current, no migration needed." Stop. |
| PROJECT > SKILL | "Project newer than skill." Stop. |
| PROJECT < SKILL | Continue to Phase 2 |
Version ordering:
- Numeric versions (1, 2, 3) sort before date-based versions
- Date-based versions sort lexicographically:
<20251124-foo20251125-bar - Example:
<1
<2
<3
<20251124-adr-date-naming20251125-next-change
Phase 2: Build Migration Plan
- List files in
directory from plugin directorymigrations/ - Sort lexicographically (numeric versions first, then YYYYMMDD-slug)
- For each migration newer than
:PROJECT- Extract transforms section
- Parse patterns and file globs
- Scan
for affected files.c3/ - Build plan summary
Plan Format
## Migration Plan: v{FROM} → v{TO} ### Version {N} transforms: - {PATTERN_DESC}: {FILE_COUNT} files ### Batches: - Batch 1: file1.md, file2.md - Batch 2: file3.md, file4.md
Phase 3: Confirm with User
"I'll migrate your
documentation from v{FROM} to v{TO}..c3/Changes:
- {CHANGE_1}
- {CHANGE_2}
Files affected: {N}
Proceed? [y/n]"
If declined, stop.
Phase 4: Execute Migration
Batch Processing
Process 3-5 files per batch for trackability.
For each batch:
- Apply transforms to files
- Report progress:
Batch 1/3 complete: 3 files updated
Error Handling
| Error | Action |
|---|---|
| Pattern doesn't match | Log warning, continue |
| File read error | Stop batch, report |
Phase 5: Finalize
Update Version
# For numeric versions (1, 2, 3) if [[ "$TARGET_VERSION" =~ ^[0-9]+$ ]]; then if [ "$TARGET_VERSION" -ge 3 ]; then sed -i "s/^c3-version: .*/c3-version: $TARGET_VERSION/" .c3/README.md rm -f .c3/VERSION else echo "$TARGET_VERSION" > .c3/VERSION fi else # For date-based versions (YYYYMMDD-slug) sed -i "s/^c3-version: .*/c3-version: $TARGET_VERSION/" .c3/README.md rm -f .c3/VERSION fi
Suggest TOC Rebuild
"Migration complete: v{FROM} → v{TO}
Rebuild the TOC using the plugin's
script to refresh the table of contents."build-toc.sh
ADR Status Check (Post-Migration)
After migration, verify ADR status field consistency:
# Check all ADRs have status field for f in .c3/adr/adr-*.md; do grep -q '^status:' "$f" || echo "Missing status: $f" done # List ADRs by status grep -l '^status: proposed' .c3/adr/*.md 2>/dev/null grep -l '^status: accepted' .c3/adr/*.md 2>/dev/null grep -l '^status: implemented' .c3/adr/*.md 2>/dev/null
Reminder: Only
status: implemented ADRs should appear in TOC. After migration, rebuild TOC to ensure filtering is correct.
V1 → V2 Migration
Transforms
- Flatten components: Move from
tocomponents/{container}/components/ - Rename context:
→CTX-system-overview.mdREADME.md - Update links: Remove container subfolder from paths
Verification
# No nested component directories [ $(find .c3/components -mindepth 1 -type d | wc -l) -eq 0 ] # README.md has correct id grep -q '^id: context$' .c3/README.md
V2 → V3 Migration
Transforms
- Convert containers to folders:
→containers/C3-1-*.mdc3-1-*/README.md - Move components into containers:
→components/C3-101-*.mdc3-1-*/c3-101-*.md - Update context:
→id: context
, addid: c3-0c3-version: 3 - Lowercase ADRs:
→ADR-001-*.mdadr-001-*.md
Verification
# No containers/ or components/ directories [ ! -d ".c3/containers" ] && [ ! -d ".c3/components" ] # Context has c3-0 and c3-version grep -q '^id: c3-0$' .c3/README.md grep -q '^c3-version: 3$' .c3/README.md # All lowercase ! find .c3 -name "C3-*" -o -name "ADR-*" | grep -q .
20251125-layer-settings Migration
Changes
- Layer sections support structured configuration with
,useDefaults
,include
,exclude
,litmusdiagrams - Existing prose-only format still works (backward compatible)
- Skills read defaults from
filesdefaults.md
Transforms
No automatic transforms required.
This migration is backward compatible:
- Existing
prose format continues to workcontext: | - Skills fall back to defaults.md when settings not customized
Optional Upgrade
Users who want layer customization can manually convert:
From:
context: | prose guidance here
To:
context: useDefaults: true guidance: | prose guidance here include: | custom items
Verification
# VERSION shows 20251125-layer-settings or later grep 'c3-version:' .c3/README.md # settings.yaml still valid (basic check) if [ -f ".c3/settings.yaml" ]; then grep -q '^context:' .c3/settings.yaml || grep -q '^context$' .c3/settings.yaml fi
Red Flags
| Rationalization | Counter |
|---|---|
| "I'll migrate without asking" | Always confirm with user first |
| "I'll do all files at once" | Batch for trackability |
| "Pattern didn't match, skip silently" | Log warnings |
| "Version update not critical" | Always update on success |
Related
- v3-structure.md
- migrations/ - Individual migration files