• altair823 released this 2026-05-31 13:58:08 +00:00 | 70 commits to main since this release

    config 마이그레이션 — kebab config migrate (PR #198)

    config.toml 의 스키마가 버전을 거치며 늘어나도(예: v0.21.0 의 [ingest.expansion]), 기존 사용자의 config 파일은 그 새 섹션이 파일에 써지지 않아 파일을 열어봐도 새 노브의 존재를 알 수 없었습니다. 동작은 serde 기본값으로 호환됐지만, 사용자가 설정을 발견·조정할 길이 없던 셈입니다. DB 는 V00X refinery 마이그레이션이 있는데 config 에는 그런 메커니즘이 없었습니다 — 이번 릴리스가 이를 채웁니다.

    새 명령

    kebab config migrate [--dry-run] [--json]
    
    • 기존 config.toml 에서 빠진 섹션·키를 설명 주석과 함께 채워 넣습니다. 사용자가 직접 손본 값·주석·항목 순서는 그대로 보존합니다(없는 것만 추가).
    • 더 이상 쓰지 않는 항목(예: workspace.include)은 정리합니다.
    • 멱등합니다 — 한 번 적용한 뒤 다시 실행하면 config 이미 최신입니다 만 출력하고 파일을 건드리지 않습니다.
    • 변경 시 자동으로 <config>.bak 백업을 만들고(원본과 바이트 동일), 임시 파일에 먼저 쓴 뒤 재파싱 검증에 성공해야 교체하므로 실패해도 원본이 보존됩니다.
    • --dry-run 으로 무엇이 바뀔지 미리 확인할 수 있고(파일 미수정), --jsonconfig_migration.v1 wire 스키마로 출력합니다.

    함께 바뀐 것

    • kebab doctorconfig_migration 점검이 추가됐습니다. config 가 옛 스키마면 ok=false 로 표시하고 kebab config migrate 실행을 안내합니다(정상 동작하더라도 "정리할 게 있다"는 신호).
    • kebab init 이 생성하는 config.toml 이 이제 섹션별 설명 주석을 포함합니다(마이그레이션과 동일한 주석 원천을 공유).
    • config.tomlschema_version 이 그동안 장식이었으나, 이제 마이그레이션의 버전 축이자 동기화 마커로 의미를 갖고 기본값이 1 → 2 로 올라갑니다.

    업그레이드 절차

    기존 사용자는 한 번만 실행하면 됩니다:

    kebab config migrate --dry-run   # 무엇이 추가/정리될지 미리보기
    kebab config migrate             # 적용 (.bak 자동 백업)
    

    schema_version 1→2 변경은 additive 입니다 — 데이터를 무효화하지 않고 읽기 호환도 유지되므로(옛 바이너리로 새 파일을, 새 바이너리로 옛 파일을 읽어도 동작), 재색인(reingest)은 필요 없습니다.

    검증

    크레이트 테스트 + clippy --workspace -D warnings + cargo test --workspace -j1(192 ok / 0 fail) + release 바이너리 도그푸딩(dry-run 미수정 / .bak 바이트 동일 / 값·주석 보존 / deprecated 제거 / 새 섹션 가시화 / 멱등 / doctor / --json) 전부 통과. 상세는 tasks/HOTFIXES.md 2026-05-31 entry.

    Downloads