Lin: ## 目的
Issue #19 / PR #20でBM25 lexical laneとanchored edge-only relation laneを独立trace IDで返せるようになった。developmentではrelation MRRが0.5から1.0へ改善し、trace分離とfeedback帰属も成立した一方、2-node fixtureのdirect targetはBM25 rank 2、v1 path matcherはobserved stepの追加属性を投影せず完全一致したため、12 gate中10件で停止した。
本Issueではv1 artifactと結果を変更せず、goldを見ないLLMが両laneの実データを読んで使用traceを選べるかをversion 2の独立実験として検証する。固定classifier、cross-lane score fusion、gold cohortによるoracle routingは実装しない。
仮説
H1: blind LLM judgeはdirect / directional-negativeではlexical evidenceを、relation lookupではrelation evidenceを選び、development 4ケースを全件正しく選択できる。
H2: 3 independent judgesのmajority choiceは各caseで一意に定まり、単独judgeの偶然に依存しない。
H3: versioned path matcherがobserved stepをsource_id / target_id / edge_typeへ投影すれば、実際に取得済みのrelation pathを正しく一致判定できる。
H4: development gate通過時だけ、fresh 3 judgesで未開封holdoutを一度評価し、同じgateを満たす。
非変更境界
v1のmanifest、fixture、gold、runner、result、10/12判定をbyte-for-byte不変に保つ。
既存search()とsearch_channels()の順位規則、default、feedback規則を変更しない。
search_channels()をvalidatedまたはdefaultと記録しない。
新D1抽出は行わない。v1でread-only取得・凍結済みのdevelopment / holdoutを再利用する。
v1 holdoutはv2 development gateが通るまで実験対象として開封しない。具体的にはholdout packet生成、search_channels()実行、judge提示、v2 evaluatorによるgold照合を禁止する。
v1 artifact不変性を証明するhash計算、schema検証、既存contract testによるprocess内readは許可する。ただし内容を人またはjudgeへ表示せず、selection判断へ使用しない。この検証readはholdout open countへ含めない。
Blind judge packet
v2 packet generatorは各caseについてsearch_channels()を一度実行し、judgeへ次だけを渡す。
opaque case ID
query
channel semantics: lexicalは明示一致、relationはedge経由の関連候補、lane間scoreは比較不能
lexical / relationの独立trace ID
各hitのlane内rank、node ID、title、content、source metadata
relation hitのendpoint / edge type path
agreement node IDs
出力schema
packetとjudge promptには次を含めない。
cohort / intended channel
expected node / acceptable rank / gold path
gate、prior result、v1の成功・失敗説明
filenameや説明からgold roleを推測できるラベル
judgeはtool、repository、web、goldを参照せず、packetだけから次のJSONを返す。
case_id
selected_channel: lexical / relation / abstain
trace_id: 選択laneのtrace ID、abstain時null
node_id: 選択hit、abstain時null
concise rationale
retrievalは使用を意味しない。judgeが実際に回答根拠として採用する一つのtrace / nodeだけを選ぶ。lane間scoreの大小は根拠にしない。
Judge isolationと集約
development judgeは3 independent fresh Codex agentsとする。
各agentはfork_turns=noneのself-contained promptで起動し、このIssueの会話履歴、repo、gold、他judge出力を受け取らない。
judge promptはresult観測前にfreezeする。
3 judgesは同じpacket集合を独立に判定する。
(selected_channel, node_id)の過半数をcase majorityとする。過半数なしはabstain扱い。
trace IDは選択channelのpacket traceと一致し、そのnodeが同traceのhitに含まれることをvalidatorで要求する。
model / agent種別、実行時刻、raw response、parse結果を保存する。
Version 2 path matcher
v1 matcherを変更しない。v2 evaluatorはobserved stepからsource_id、target_id、edge_typeだけを順序保持で投影し、同じ3 fieldのgold pathと比較する。edge_weight、factualityなどのexplanation属性は一致判定から除外するが、raw observed pathには保存する。zero-hop拒否は維持する。
Result-free freeze
実装、prompt、packet schema、response schema、3-judge集約、path projection、development / holdout gate、stop rule、testsを一つのfreeze commitとしてpushする。freeze commitにはpacket、judge response、development result、holdout resultを含めない。
freeze後の実行順は固定する。
development packetを一度生成
fresh 3 judgesへ同じpacketを独立提示
raw responsesを上書き不可で保存
development resultを一度生成
gate不合格なら停止し、holdout packetを生成しない
gate通過時だけholdout packetを一度生成
developmentと異なるfresh 3 judgesで一度評価
holdout resultを一度生成して終了
Development gate
全条件を要求する。
packetとpromptに全禁止field / gold値が存在しない
全judge responseがschema-validで、trace / node membershipが正しい
全4 caseでmajorityが成立する
全4 caseでmajority nodeがexpected nodeと一致する
direct 2件とdirectional-negative 1件でmajority channelがlexical
relation 1件でmajority channelがrelation
relation majority hitのprojected pathがgold endpoint / edge typeと一致しzero-hopでない
各judgeが最低3/4 caseでexpected nodeを選ぶ
lane scoreの大小をselection ruleとして使用しない
packet生成前後とjudge result評価ではedge weight不変
v1 artifact hashesがorigin/mainのPR feat: add independent retrieval channels #20 merge時と一致
packet / response / resultの上書きを拒否する
補助指標としてjudge別accuracy、majority accuracy、channel accuracy、abstain率、inter-judge agreement、selected-node MRR、union oracleとの差を保存する。4-case minimal fixtureのため、採否は個別hard gateを正本とする。
Holdout gate
Developmentの全gate通過時だけ、v1未開封holdoutをfresh 3 judgesで一度評価する。同じ12 gateを全通過した場合だけ「blind LLM selection protocol supported on the frozen minimal holdout」と記録する。
これはNGR一般性能、任意LLMへの一般化、production default変更、learned router採用を意味しない。holdout観測後のprompt、packet、judge数、集約、matcher、threshold、gate変更、result上書き、再実行を拒否する。
実装境界
Python標準ライブラリのみ
judge呼び出し自体をcoreやCIに埋め込まない
repoにはpacket生成、response検証、集約、scoring、freeze auditを実装する
実LLM呼び出しは親orchestratorが隔離agentとして実行し、subagent実装者へ結果前情報を漏らさない
CIはschema、gold非漏洩、path projection、集約、stop rule、hash freeze、synthetic responseでの決定論を検証し、実LLMの品質値を合格閾値として再実行しない
陰性結果もversioned artifactとして保存する
完了条件
goldを含まない両lane packetを生成できる
fresh blind LLM judgesが独立trace ID / node IDを選択できる
majority selectionと実goldを観測後にだけ照合できる
development gateと必要時のone-time holdout gateを機械的に再現できる
v1 artifacts、core API、defaultを変更しない
Lin: ## 目的
Issue #19 / PR #20でBM25 lexical laneとanchored edge-only relation laneを独立trace IDで返せるようになった。developmentではrelation MRRが0.5から1.0へ改善し、trace分離とfeedback帰属も成立した一方、2-node fixtureのdirect targetはBM25 rank 2、v1 path matcherはobserved stepの追加属性を投影せず完全一致したため、12 gate中10件で停止した。
本Issueではv1 artifactと結果を変更せず、goldを見ないLLMが両laneの実データを読んで使用traceを選べるかをversion 2の独立実験として検証する。固定classifier、cross-lane score fusion、gold cohortによるoracle routingは実装しない。
仮説
source_id/target_id/edge_typeへ投影すれば、実際に取得済みのrelation pathを正しく一致判定できる。非変更境界
search()とsearch_channels()の順位規則、default、feedback規則を変更しない。search_channels()をvalidatedまたはdefaultと記録しない。search_channels()実行、judge提示、v2 evaluatorによるgold照合を禁止する。Blind judge packet
v2 packet generatorは各caseについて
search_channels()を一度実行し、judgeへ次だけを渡す。packetとjudge promptには次を含めない。
judgeはtool、repository、web、goldを参照せず、packetだけから次のJSONを返す。
retrievalは使用を意味しない。judgeが実際に回答根拠として採用する一つのtrace / nodeだけを選ぶ。lane間scoreの大小は根拠にしない。
Judge isolationと集約
fork_turns=noneのself-contained promptで起動し、このIssueの会話履歴、repo、gold、他judge出力を受け取らない。(selected_channel, node_id)の過半数をcase majorityとする。過半数なしはabstain扱い。Version 2 path matcher
v1 matcherを変更しない。v2 evaluatorはobserved stepから
source_id、target_id、edge_typeだけを順序保持で投影し、同じ3 fieldのgold pathと比較する。edge_weight、factualityなどのexplanation属性は一致判定から除外するが、raw observed pathには保存する。zero-hop拒否は維持する。Result-free freeze
実装、prompt、packet schema、response schema、3-judge集約、path projection、development / holdout gate、stop rule、testsを一つのfreeze commitとしてpushする。freeze commitにはpacket、judge response、development result、holdout resultを含めない。
freeze後の実行順は固定する。
Development gate
全条件を要求する。
補助指標としてjudge別accuracy、majority accuracy、channel accuracy、abstain率、inter-judge agreement、selected-node MRR、union oracleとの差を保存する。4-case minimal fixtureのため、採否は個別hard gateを正本とする。
Holdout gate
Developmentの全gate通過時だけ、v1未開封holdoutをfresh 3 judgesで一度評価する。同じ12 gateを全通過した場合だけ「blind LLM selection protocol supported on the frozen minimal holdout」と記録する。
これはNGR一般性能、任意LLMへの一般化、production default変更、learned router採用を意味しない。holdout観測後のprompt、packet、judge数、集約、matcher、threshold、gate変更、result上書き、再実行を拒否する。
実装境界
完了条件