目的
query relevance、active path membership、同一近傍内の競合を使って recurrent propagation を局所化し、relation 品質を改善しながら direct lookup と negative control の退行を防げるか検証する。
Issue #11 / PR #12 の旧 development 結果は、実験 family を選ぶための探索的根拠としてのみ扱う。旧 holdout はすでに開封済みであり、本実験の候補選択、parameter 調整、閾値決定、停止規則変更には使用しない。
default は、新しい未観測 holdout が事前固定した採用条件を通過した場合だけ変更する。
観測済みの探索的根拠
merge commit cb38aa1 の旧 development では次の tradeoff が観測された。
current: direct 1.0000 / relation 0.3833 / negative 0.7083
recurrent-balanced: direct 0.7083 / relation 0.6333 / negative 0.5417
recurrent-conservative: direct 0.6250 / relation 0.6333 / negative 0.5417
recurrent-selective: direct 0.8750 / relation 0.4524 / negative 0.6667
全体 activation に対する有限 budget と global inhibition は relation を改善できた一方、無関係な node や direct signal まで競合させ、direct / negative cohort を退行させた。
recurrent-balanced は最高 relation と、同率候補中の高い direct を持つため、best prior recurrent baseline として事前固定する。この旧結果は新しい候補間の選択やparameter tuningには使用しない。
未解決の前提
実験開始前に、production D1 の search_docs / doc_edges をread-onlyで取得できることを再確認する。
2026-08-02にproduction D1直接接続を再検証し、SELECT 1とwiki corpus countが成功した。metadataはrows_written=0、changes=0、changed_db=falseだった。認証ブロッカーは解消済みであり、fixture freeze前に次を確認する。
- 旧 development / 旧 holdoutと重ならない新しいweakly-connected subgraphを2つ確保できる
- 2つの新subgraphが相互にもdisjointである
- direct lookup / relation / negative controlをそれぞれ含むgoldをpublic sourceで監査できる
- acquisition queryがzero-write invariantを満たす
条件を満たすsubgraphが得られない場合は、結果を観測せず停止する。
データ分離とfreeze
production D1から次の2 setをread-only取得する。
- 新 development subgraph
- 新しい未観測 holdout subgraph
両setについてfixture、gold、provenance、manifest、variant定義、選択規則、停止規則を、variant resultを観測する前の独立commitで固定する。
contamination auditでは次を検証し、機械可読artifactとして保存する。
- 新 developmentと新 holdoutのdoc path、node ID、source URLが相互に重ならない
- 両setが旧 development / 旧 holdoutのdoc pathおよびnode IDと重ならない
- normalized query、期待node、relation endpointの重複を列挙する
- fixture内edgeの両endpointがfixture内に存在する
- 各fixtureがweakly connectedである
- canonical JSON hash、schema fingerprint、取得時刻、selection orderを保存する
- 全D1 queryの
rows_written=0、changes=0、changed_db=falseを保存する
known_gapsとD1がlossy search snapshotである制約を保存する
旧 holdoutの識別子は重複拒否用denylistとしてのみ照合できる。旧 holdoutのgold、rank、metrics、resultをrunnerへ入力してはならない。
固定variant
最大variant数は6とし、parameter gridは作らない。全variantは同じentry score、graph weight、hop decay、seed count、expansion limit、recurrent step数を使う。
current
- 現行の
current_positive_additive
recurrent-balanced
- PR #12の固定parameterを変更せず使うbest prior recurrent baseline
local-neighbor
- global inhibitionを使わず、同じsource nodeから出る sibling neighbor間だけで競合させる
local-neighbor-query
local-neighborに決定論的query relevanceを加え、queryとの関連度でsibling messageを配分する
local-neighbor-path
- nodeへ集約する前のactive path identityを保持し、同じactive path frontier内だけでneighborを競合させる
local-neighbor-query-path
- query relevanceとactive path membershipの両方で局所競合setとmessage配分を決める
path membershipはruntimeで生成されたseed-to-node edge sequenceだけから計算する。gold path、expected node、case ID、特定query文字列、特定node IDをruntime条件に使わない。
各局所競合はglobal node集合へ抑制を波及させず、決定論的tie-breakと固定上限を持つ。
development評価と候補選択
新 developmentで6 variantsを一度だけ実行し、次を保存する。
- 全体およびcohort別MRR / Hit@3 / rank
- relation endpoint / edge type path一致
- credited / uncredited feedback edge変更
- 非対象caseのrank変更
- step数、展開数、active path数、activation総量、収束、停止理由
- 各local competition setのsource、path identity、neighbor数、query relevance、配分前後のmessage量
- baselineとの差分と候補gate判定
local candidateは次をすべて満たす場合だけgateを通過する。
- relation MRRが
currentとrecurrent-balancedの両方を厳密に上回る
- direct lookup MRRが
currentから退行しない
- negative-control MRRが
currentから退行しない
- 全relation caseで固定endpoint / edge type pathが一致する
- credited feedback edgeが1本以上変化する
- uncredited edgeと非対象case rankが変化しない
複数候補が通過した場合のtie-breakは次の順に固定する。
- highest worst-cohort MRR
- highest relation MRR
- fewest mean expansions
- lowest structural complexity
- lexicographic variant ID
候補がなければdefaultを維持し、holdoutを開かず終了する。
一回限りのholdoutと採用条件
development候補が一意に選ばれた場合だけ、新 holdoutで次の3 variantsを一度実行する。
current
recurrent-balanced
- 選択候補
holdout resultがすでに存在する場合、runnerは再実行と上書きを拒否する。
default採用にはdevelopmentと同じgateをすべて要求する。
- relation MRRが両baselineを厳密に上回る
- direct / negative MRRが
currentから退行しない
- 全relation pathが一致する
- feedback isolationが成立する
一つでも失敗した場合はdefaultを変更しない。holdout観測後にvariant、parameter、gold、doc path、閾値、選択規則、停止規則を変更しない。
停止規則
次のいずれかで実験を停止する。
- production D1 read-only accessを確認できない
- 条件を満たす2つの新規disjoint subgraphを確保できない
- freeze前のcontamination auditに失敗する
- development gateを通る候補がない
- holdout resultがすでに存在する
- holdout adoption gateに失敗する
- variant数が6を超える変更を必要とする
失敗、tradeoff、候補なし、holdout不採用もversioned resultとして保持する。
制約
- 旧 developmentは探索的family根拠に限定する
- 旧 holdoutを候補選択やtuningへ再利用しない
- production D1以外から作ったgraph fixtureで本実験を代替しない
- core dynamicsをLi+固有node、gold、D1 schemaへ依存させない
- standard-libraryのみの決定論的実装を維持する
- learned router、embedding学習、query-specific exceptionは別issueとする
- 品質数値をCIの固定合格値にしない
- CIはhash、分離、determinism、再生成一致、one-time holdout、stop ruleを検証する
想定変更箇所
src/neuron_graph_rag/dynamics.py - 局所競合strategyとpath-local state
src/neuron_graph_rag/models.py - 必要なdiagnostics schema
src/neuron_graph_rag/engine.py - strategy wiring
tools/acquire_d1_fixture.py - disjointness / contamination audit
tools/run_dynamics_experiment.py - 固定variant、選択、one-time holdout
tests/fixtures/ - 新development / holdout、gold、provenance、manifest、results
tests/ - local competition invariant、分離、determinism、停止規則
docs/requirements.md - dynamicsとexperiment契約
docs/neural-dynamics-local-competition-experiment.md - protocol、結果、適用限界
README.md - 実行方法と最終判断
完了条件
- production D1由来の新しいdisjoint development / holdoutが観測前に固定される
- 6 variantsを再現可能に比較できる
- query relevance、active path membership、neighbor competitionの寄与をablationで分離できる
- development候補選択とone-time holdout採用判断が機械的に再現できる
- provenanceとcontamination auditが保存される
- 未観測holdoutが全採用条件を通過した場合だけdefaultが変更される
目的
query relevance、active path membership、同一近傍内の競合を使って recurrent propagation を局所化し、relation 品質を改善しながら direct lookup と negative control の退行を防げるか検証する。
Issue #11 / PR #12 の旧 development 結果は、実験 family を選ぶための探索的根拠としてのみ扱う。旧 holdout はすでに開封済みであり、本実験の候補選択、parameter 調整、閾値決定、停止規則変更には使用しない。
default は、新しい未観測 holdout が事前固定した採用条件を通過した場合だけ変更する。
観測済みの探索的根拠
merge commit
cb38aa1の旧 development では次の tradeoff が観測された。current: direct 1.0000 / relation 0.3833 / negative 0.7083recurrent-balanced: direct 0.7083 / relation 0.6333 / negative 0.5417recurrent-conservative: direct 0.6250 / relation 0.6333 / negative 0.5417recurrent-selective: direct 0.8750 / relation 0.4524 / negative 0.6667全体 activation に対する有限 budget と global inhibition は relation を改善できた一方、無関係な node や direct signal まで競合させ、direct / negative cohort を退行させた。
recurrent-balancedは最高 relation と、同率候補中の高い direct を持つため、best prior recurrent baseline として事前固定する。この旧結果は新しい候補間の選択やparameter tuningには使用しない。未解決の前提
実験開始前に、production D1 の
search_docs/doc_edgesをread-onlyで取得できることを再確認する。2026-08-02にproduction D1直接接続を再検証し、
SELECT 1とwiki corpus countが成功した。metadataはrows_written=0、changes=0、changed_db=falseだった。認証ブロッカーは解消済みであり、fixture freeze前に次を確認する。条件を満たすsubgraphが得られない場合は、結果を観測せず停止する。
データ分離とfreeze
production D1から次の2 setをread-only取得する。
両setについてfixture、gold、provenance、manifest、variant定義、選択規則、停止規則を、variant resultを観測する前の独立commitで固定する。
contamination auditでは次を検証し、機械可読artifactとして保存する。
rows_written=0、changes=0、changed_db=falseを保存するknown_gapsとD1がlossy search snapshotである制約を保存する旧 holdoutの識別子は重複拒否用denylistとしてのみ照合できる。旧 holdoutのgold、rank、metrics、resultをrunnerへ入力してはならない。
固定variant
最大variant数は6とし、parameter gridは作らない。全variantは同じentry score、graph weight、hop decay、seed count、expansion limit、recurrent step数を使う。
currentcurrent_positive_additiverecurrent-balancedlocal-neighborlocal-neighbor-querylocal-neighborに決定論的query relevanceを加え、queryとの関連度でsibling messageを配分するlocal-neighbor-pathlocal-neighbor-query-pathpath membershipはruntimeで生成されたseed-to-node edge sequenceだけから計算する。gold path、expected node、case ID、特定query文字列、特定node IDをruntime条件に使わない。
各局所競合はglobal node集合へ抑制を波及させず、決定論的tie-breakと固定上限を持つ。
development評価と候補選択
新 developmentで6 variantsを一度だけ実行し、次を保存する。
local candidateは次をすべて満たす場合だけgateを通過する。
currentとrecurrent-balancedの両方を厳密に上回るcurrentから退行しないcurrentから退行しない複数候補が通過した場合のtie-breakは次の順に固定する。
候補がなければdefaultを維持し、holdoutを開かず終了する。
一回限りのholdoutと採用条件
development候補が一意に選ばれた場合だけ、新 holdoutで次の3 variantsを一度実行する。
currentrecurrent-balancedholdout resultがすでに存在する場合、runnerは再実行と上書きを拒否する。
default採用にはdevelopmentと同じgateをすべて要求する。
currentから退行しない一つでも失敗した場合はdefaultを変更しない。holdout観測後にvariant、parameter、gold、doc path、閾値、選択規則、停止規則を変更しない。
停止規則
次のいずれかで実験を停止する。
失敗、tradeoff、候補なし、holdout不採用もversioned resultとして保持する。
制約
想定変更箇所
src/neuron_graph_rag/dynamics.py- 局所競合strategyとpath-local statesrc/neuron_graph_rag/models.py- 必要なdiagnostics schemasrc/neuron_graph_rag/engine.py- strategy wiringtools/acquire_d1_fixture.py- disjointness / contamination audittools/run_dynamics_experiment.py- 固定variant、選択、one-time holdouttests/fixtures/- 新development / holdout、gold、provenance、manifest、resultstests/- local competition invariant、分離、determinism、停止規則docs/requirements.md- dynamicsとexperiment契約docs/neural-dynamics-local-competition-experiment.md- protocol、結果、適用限界README.md- 実行方法と最終判断完了条件