← ClaudeAtlas

oracle-migratelisted

把老用户的 .oracle-state.json 升级到当前 schema_version。读 migrations/registry.md 算迁移链,按顺序应用每步迁移文件。幂等、可断点续跑。触发词:"迁移"/"升级 state"/"migrate"/"我的 state 是老版本"/"schema 版本不对"。
Huanyu-Hibiki/Huanyu-Skills · ★ 1 · AI & Automation · score 67
Install: claude install-skill Huanyu-Hibiki/Huanyu-Skills
# /oracle-migrate — Schema 版本迁移 把用户 `.oracle-state.json` 从旧 `schema_version` 升级到 LATEST_SCHEMA。 ## Overview ``` [Phase 0: 读 state + registry → 确定迁移链] ↓ [Phase 1: dry-run 展示计划,等确认] ↓ [Phase 2: 备份 → .oracle-state.json.backup-<timestamp>] ↓ [Phase 3: 按序应用每步迁移文件的 HOW 段] ↓ [Phase 4: 验证(能解析 + 版本正确 + 必填字段齐)] ↓ [Phase 5: 报告] ``` ## Constants - **REGISTRY_PATH = `migrations/registry.md`** — 版本链单一来源(LATEST_SCHEMA + 版本链表) - **DRY_RUN_BY_DEFAULT = true** - **BACKUP_BEFORE_WRITE = true**(备份保留至下次成功 init / 用户手动清理) - **STOP_ON_STEP_FAILURE = true** — 失败停在中间版本,不前进不回滚 ## Workflow ### Phase 0: 确定迁移链 1. 读 state → `current_version = state.schema_version` 2. 读 registry → `LATEST_SCHEMA` 3. `— to` 覆盖目标;`— from` 强制起点(schema 字段坏了的罕见场景) 4. 状态判断:相等 → "✅ 已是 target,无需迁移"退出;current > target → 报错"无法降级,请手动 cp git 快照或重新 init";小于 → 从版本链表算 `chain = [(from, to, file), ...]` 5. 某步在链表缺失 → 报错并列出已知版本,让用户检查 ### Phase 1: dry-run 🔴 **CHECKPOINT**:dry-run 计划展示后停在确认门(DRY_RUN_BY_DEFAULT——没过这扇门不碰 state): ``` 📋 迁移计划 当前: 1.0 → 目标: 1.1 [1/1] 1.0 → 1.1(MINOR) <一句话描述> · 详见 migrations/1.0-to-1.1.md ⚠️ 备份位置: .oracle-state.json.backup-<timestamp> 继续?yes 执行 / no 退出 / detail 看每步具体改什么 ``` ### Phase 2: 备份 ```bash cp .oracle-state.json .oracle-state.json.backup-$(date +%s) ``` ### Phase 3: 按序应用 对 chain 每步: 1. 读 `migrations/<file>` 的 `## HOW` 段 2. **按段内自然语言步骤逐项执行**——迁移是 AI 读 markdown 跑的,不是脚本 3. 每步完成:更新内存 schema_version = to + **原子写**(.tmp → rename) 4. 失败 → "❌ {file} 第 N 步失败:{error}。已停在 {last_success_