markharness

0010: --dir省略時のプロジェクトルート自動検出

ステータス

Accepted

背景

markharnessコマンドを--dirを指定せずに実行すると、markharness initしたプロジェクトルートではなく、コマンドを打ったカレントディレクトリがそのまま対象になっていた(Issue #9)。milestone等の自動生成コマンドをプロジェクトのサブディレクトリ(例: knowledge/配下)から実行すると、意図しない場所にファイルが生成されてしまう。

0006で「--dirを一切指定せずカレントディレクトリから自動的にリポジトリルートを検出する機能の追加は、本決定を運用面で完成させる自然な次の課題」として対象外に残されていた課題でもある。ただし0006はgitリポジトリルートの検出(git rev-parse --show-toplevel相当)を想定していたのに対し、0006自体が「markharnessプロジェクトルート ≠ gitリポジトリルート」というネスト配置を正式サポートしているため、gitルート検出だけでは不十分であることが分かった。

検討した選択肢

ルート検出の仕組み:

  1. gitリポジトリルート(git rev-parse --show-toplevel)を使う。
  2. 既知のディレクトリ構成(knowledge/+axes/+generated/等)が揃っている場所を規約ベースで推測する。
  3. init時に専用のマーカーファイルを作成し、以後のコマンドはgit同様に上位ディレクトリへ遡ってこのマーカーを探す。

決定内容

選択肢3を採用する。

理由:

schema_versionフィールドは現時点では書き込むのみで、読み取り側の互換性チェックは実装しない(将来必要になった時点で追加する、YAGNI)。

対応内容