Skip to content

[#541] fix-config-dir-collision#549

Draft
nrslib wants to merge 2 commits intomainfrom
takt/541/fix-config-dir-collision
Draft

[#541] fix-config-dir-collision#549
nrslib wants to merge 2 commits intomainfrom
takt/541/fix-config-dir-collision

Conversation

@nrslib
Copy link
Copy Markdown
Owner

@nrslib nrslib commented Mar 26, 2026

Summary

背景

cd ~ && takt のように HOME 直下で起動したとき、初回セットアップ後に ~/.takt/config.yaml を global config として作成した直後、それを project config としても読んで strict validation に失敗するケースがある。

典型的には次のようなエラーになる。

[ERROR] Configuration error: invalid (root) in /Users/<user>/.takt/config.yaml: Unrecognized key: "language"

原因

現状の設定パス解決では、

  • global config: ~/.takt/config.yaml
  • project config: <cwd>/.takt/config.yaml

となっている。

このため cwd === ~ のとき、global config dir と project config dir がどちらも ~/.takt を指し、同じ config.yaml を両用途で扱ってしまう。

その結果、global-only key を含む global config を project config schema が弾いて失敗する。

仕様提案

project config dirglobal config dir が同一になる場合は、project config を無効化する。

具体的には:

  • getProjectConfigDir(cwd) === getGlobalConfigDir() の場合
    • project config の初期化をしない
    • project config の読み込みをしない
    • ~/.takt/config.yaml は global config としてのみ扱う

この方針にしたい理由

  • HOME を特別扱いするのではなく、原因そのものである「パス衝突」を防げる
  • 将来、同種の衝突条件が別経路で発生しても同じガードで吸収できる
  • 既存の project config 仕様への影響が最小

期待挙動

  • cd ~ && takt でも初回セットアップが正常終了する
  • ~/.takt/config.yaml は global config としてのみ扱われる
  • global/project config dir が衝突する場合、project-local .takt 設定は無効化される

再現手順

cd ~
rm -rf ~/.takt
takt

言語とプロバイダーを選択したあと、global config 作成直後に project config validation へ入らず、そのまま続行できること。

Execution Report

Piece takt-default completed successfully.

Closes #541

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Global config dir と project config dir が衝突する場合は project config を無効化する

1 participant