コンテンツにスキップ

アンカーと指紋

解説が「コードのどこ」を指しているかを、progLens はアンカーで持ちます。行番号だけで指すと、上に 1 行足しただけでずれてしまうので、いくつもの手がかりを重ねて持ち、上から順に解きます。

anchor:
file: src/app/todos/actions.ts # 必須。リポジトリの根からの相対
symbol: "createTodo()." # シンボルのパス(関数・クラスなど)
quote: # シンボルの中の一部を指すときだけ
exact: "await supabase.from('todos').insert"
prefix: "const { error } = "
fingerprint: sha256:… # その範囲の指紋
seen: { lines: [12, 40] } # 最後に確かめた位置(ヒントにだけ使う)
層役目
fileどのファイルか
symbolどの関数・クラス・定数か。行が動いても名前で見つかります
quoteシンボルの中の一部の文字列と、その前後。シンボルの名前が変わっても文字で探せます
fingerprint指した範囲の中身の指紋。中身が変わったかを見分けます
書き方指すもの
名前().関数・メソッド(Button#onClick(). はクラスのメソッド)
名前#クラス・型・構造体・トレイト
名前.定数・変数・フィールド
名前/名前空間・モジュール
名前!マクロ

入れ子は親のパスに足していきます(outer().inner().)。どの言語でも、土台の汎用版と強化の層で同じ文字列になるようにしてあるので、あとからパックを足してもアンカーは切れません。

コード以外も指せます: JSON・YAML のキー(pointer: /scripts/dev)・Markdown の見出し(heading: "セットアップ")・画面の部品(その要素を書いた JSX の位置と route)。

順条件状態画面
1シンボルが見つかり、指紋も同じ最新印なし
2シンボルは見つかったが、指紋が違う変わった「解説が古い可能性」。見直しの対象
3シンボルが無いが、quote のあいまいな照合か git の名前の変更で候補がある移動の可能性候補を出す。付け替えは人か AI が決める(勝手に付け替えない)
4どれも見つからない孤立ファイル単位の解説に格下げして残す

状態はアプリが計算するもので、ファイルには書きません。

指紋は、コードを字句(トークン)の並びにしてから取ったハッシュ(sha256:)です。空白・改行・インデントの違いは入らないので、整形の道具をかけ直しただけでは解説は古くなりません。中身(識別子や値)が変わると指紋が変わります。

ノートの fingerprint は AI が解説を書いたときのファイル全体の指紋、review の指紋は人が確認したときの指紋です。2 つを今のコードの指紋と見比べて、「AI の解説が古い」「人の確認が古い」を別々に出します(網羅率と古さ)。指紋は書き込み層が計算して入れるので、AI が自分で計算して写すことはありません。