migrate
migrate
Initialize or repair the codevoyant shared context store, then apply any store-layout migrations between the version the store was last migrated to and the current codevoyant version. The canonical per-project store is ~/.codevoyant/<project-slug>/, and the in-repo .codevoyant is a gitignored symlink to it, so every git worktree of the same project shares one store. This skill is the ONLY place that knows about .codevoyant residency and migration — every other skill just uses ordinary relative .codevoyant/... paths that resolve transparently through the symlink.
This is an agent-driven skill: you (the agent) run the bash below and apply the selected migration files' instructions in order. There is no bundled program. SKILL.md is a thin dispatcher — the actual per-transition procedures live in flat references/migrate-v<A>-to-v<B>.md files.
Critical rules
- The slug must match
cv_init_store. The slug computation in Step 1 is byte-identical to the inlinecv_init_storeused by the other skills so the symlink target agrees. - Migrations are non-destructive. Each migration file keeps its own "never clobber / never touch worktrees / union the registry" rules; the dispatcher only selects and orders them.
- Version compare is numeric, not string. Versions are compared as integer tuples (
1.10.0 > 1.9.0), never as plain strings. - Apply in ascending numeric order, never string order. Selected migrations are applied in strictly ascending numeric
<to>-tuple order — the exact orderselect_migrations.pyprints them (migrate-v9-to-v10.mdsorts beforemigrate-v10-to-v11.mdby version, not lexicographically). - Confirmation gate before applying. The dispatcher lists every selected migration (filename +
<from>→<to>) and asks the author for confirmation before applying anything.--yes/-y(orMIGRATE_YES=1) skips the prompt for unattended runs. A declined confirmation aborts before any store change and no version is recorded. - Markdown output: soft-wrap prose, never hard-wrap — when writing markdown, write each paragraph as one continuous line; do not insert manual newlines to wrap prose at a fixed column width. Newlines still separate paragraphs, list items, headings, and code fences.
Step 0: Parse invocation flags
The raw invocation args (filled by Claude Code / OpenCode slash commands): $ARGUMENTS. If this line is not filled in, read the args from the user's current message.