From f80126497e4dc8531bf5f038da1b6caf5926ee5f Mon Sep 17 00:00:00 2001 From: lipluscodex <268560960+lipluscodex@users.noreply.github.com> Date: Sun, 2 Aug 2026 11:05:54 +0900 Subject: [PATCH 1/2] eval: freeze anchored fusion calibration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit graph normalization、bottom-centered RRF、新規D1 development/holdout、個別case gateを結果観測前に凍結する。 --- README.md | 8 + .../anchored-fusion-calibration-experiment.md | 93 +++++++ docs/requirements.md | 7 + src/neuron_graph_rag/engine.py | 124 ++++++++- src/neuron_graph_rag/experiment.py | 228 +++++++++++++++- src/neuron_graph_rag/models.py | 17 ++ ...plus_fusion_calibration.contamination.json | 139 ++++++++++ ...s_fusion_calibration_development.gold.json | 70 +++++ ...liplus_fusion_calibration_development.json | 148 +++++++++++ ...on_calibration_development.provenance.json | 80 ++++++ ...usion_calibration_experiment.manifest.json | 132 ++++++++++ ...iplus_fusion_calibration_holdout.gold.json | 70 +++++ .../d1_liplus_fusion_calibration_holdout.json | 148 +++++++++++ ...fusion_calibration_holdout.provenance.json | 80 ++++++ tests/test_fusion_calibration.py | 249 ++++++++++++++++++ 15 files changed, 1574 insertions(+), 19 deletions(-) create mode 100644 docs/anchored-fusion-calibration-experiment.md create mode 100644 tests/fixtures/d1_liplus_fusion_calibration.contamination.json create mode 100644 tests/fixtures/d1_liplus_fusion_calibration_development.gold.json create mode 100644 tests/fixtures/d1_liplus_fusion_calibration_development.json create mode 100644 tests/fixtures/d1_liplus_fusion_calibration_development.provenance.json create mode 100644 tests/fixtures/d1_liplus_fusion_calibration_experiment.manifest.json create mode 100644 tests/fixtures/d1_liplus_fusion_calibration_holdout.gold.json create mode 100644 tests/fixtures/d1_liplus_fusion_calibration_holdout.json create mode 100644 tests/fixtures/d1_liplus_fusion_calibration_holdout.provenance.json create mode 100644 tests/test_fusion_calibration.py diff --git a/README.md b/README.md index 705110b..bb10c46 100644 --- a/README.md +++ b/README.md @@ -146,6 +146,12 @@ production D1からread-only取得した新しい5-node development / holdoutは freeze後のdevelopmentでは、anchored 3 variantsがrelation MRRを`current`の0.5000から0.7500–1.0000へ改善しましたが、direct lookupとnegative-controlがともに退行しました。候補gate通過は0件だったためholdoutは開かず、既定strategyは`current_positive_additive`のままです。 +## Anchored fusion calibration experiment + +Issue #15で分離したentry anchorとedge-only graph signalは維持したまま、graph尺度とfinal fusionだけを比較します。graph normalizationは`max`、rawの`none`、`l1_mass`を選択でき、final fusionはlinearとpositive graph nodeだけを順位付けするbottom-centered weighted RRFを選択できます。 + +production D1からread-only取得した新しい3-node development / holdoutは、既存7 fixturesの50 unique doc pathsおよび相互間から分離しています。固定6 variants、fusion formula、個別case non-regression gate、one-time holdout停止規則は[Anchored fusion calibration experiment](docs/anchored-fusion-calibration-experiment.md)を参照してください。result観測前のため、既定strategyは`current_positive_additive`のままです。 + ## Public API ```python @@ -212,6 +218,8 @@ MCP 対応 AI との接続は、コアへ MCP SDK を追加せず、同一 repos - final score - seed node - zero-hop / graph path種別 +- entry / positive graph rank +- entry / graph fusion componentとfusion strategy - path contribution - path 上の edge type、weight、factuality diff --git a/docs/anchored-fusion-calibration-experiment.md b/docs/anchored-fusion-calibration-experiment.md new file mode 100644 index 0000000..4512d60 --- /dev/null +++ b/docs/anchored-fusion-calibration-experiment.md @@ -0,0 +1,93 @@ +# Anchored fusion calibration experiment + +## 目的 + +前回のanchored local experimentはentry anchor invariant、edge-only graph signal、relation path、feedback isolationを満たし、relation MRRを改善した一方でdirect lookupとnegative-controlを退行させた。本実験はactivation dynamicsとBM25/dense entryを変更せず、graph normalizationとfinal fusionだけを切り分ける。 + +既定は`current_positive_additive`のままとし、未観測holdoutで固定gateを通過した場合だけ変更候補とする。 + +## 凍結artifact + +- manifest: `tests/fixtures/d1_liplus_fusion_calibration_experiment.manifest.json` +- development fixture / gold / provenance: `d1_liplus_fusion_calibration_development.*.json` +- holdout fixture / gold / provenance: `d1_liplus_fusion_calibration_holdout.*.json` +- contamination audit: `d1_liplus_fusion_calibration.contamination.json` + +developmentはsubagent parallel width cluster、holdoutはSheepdog Engineering clusterで、各3 nodes / 2 edgesのweakly-connected componentである。production D1へSELECT / WITHだけを実行し、全queryで`rows_written=0`、`changes=0`、`changed_db=false`を検証する。 + +既存7 fixturesのunionである50 unique doc pathsをdenylistとする。新旧および新split相互のdoc path、node ID、source URL、normalized query、expected node、relation endpoint重複を拒否する。prior goldとprior resultはauditへ読み込まない。 + +3-node componentは全既存pathを除外したproduction D1で確保できる最大の相互disjoint connected componentである。rank指標が粗くなるため、cohort MRRだけでなく個別case rankもgateに含める。 + +## normalizationとfusion + +Graph normalization: + +- `max`: positive graph activationを最大値で割る。最大値0なら全0 +- `none`: raw positive graph activation +- `l1_mass`:各activationをpositive activation総和で割る。総和0なら全0 + +Linear fusionは正規化したweightでentry anchorとgraphを加算する。weight合計が1の本実験では`entry_weight * entry + graph_weight * graph`と同一である。 + +Weighted RRFはentry全nodeをscore降順・node ID昇順で順位付けし、graphはraw activationが正のnodeだけを同じ規則で順位付けする。graph activationが0のnodeはgraph rankを持たず、graph componentを0とする。 + +graph-positive node数を`P`として、bottom-centered式を使う。 + +```text +entry_component = entry_weight / (k + entry_rank) +graph_component = graph_weight * (1 / (k + graph_rank) - 1 / (k + P + 1)) +final = entry_component + graph_component +``` + +`k=60`。bottom subtractionはpositive graph集合の仮想最下位rankを0基準にし、graph channelが欠けるentry seedへ過大なpenaltyを与えないために固定する。 + +各hitはraw / normalized score、entry / graph rank、両fusion component、final、normalization、fusion strategyを保持する。final降順・node ID昇順をresultから再計算できなければgate不合格とする。 + +## 固定variants + +最大数と実数を6に固定し、parameter gridを追加しない。 + +1. `current`: current positive-additive、max、linear、0.55 / 0.45 +2. `anchored-local-unscaled`: anchored local、none、linear、0.55 / 0.45 +3. `anchored-linear-conservative`: anchored local、max、linear、0.80 / 0.20 +4. `anchored-linear-mass`: anchored local、l1_mass、linear、0.70 / 0.30 +5. `anchored-rrf-conservative`: anchored local、bottom-centered RRF、0.80 / 0.20、k=60 +6. `anchored-rrf-balanced`: anchored local、bottom-centered RRF、0.65 / 0.35、k=60 + +## development選択規則 + +candidateは次をすべて満たす必要がある。 + +- relation MRRが`current`より厳密に高い +- relation caseを最低1件個別rank改善する +- direct lookup / negative-control MRRが`current`から退行しない +- 全direct / negative-control caseの個別rankが`current`から退行しない +- 全relation pathが固定endpoint / edge typeと一致する +- success feedbackが最低1 edgeをcreditし、uncredited edgeと非対象rankを変更しない +- entry anchorがcompetition前後で不変である +- graph signalとgraph rankがzero-hop pathを含まない +- traceから全final componentとorderingを再計算できる + +複数候補はrelation MRR、worst-cohort MRR、個別改善case数、平均expansions、structural complexity、variant IDの順で一意に選ぶ。候補がなければholdoutを開かない。 + +## holdout停止規則 + +development候補がある場合だけ、未観測holdoutで`current`と選択候補を一度評価する。採用には同じgateを要求する。一つでも失敗すればdefaultを維持する。 + +fixture、gold、provenance、audit、manifest、normalization、weights、RRF k、threshold、selection rule、stop ruleはfreeze commitをpushするまでrunnerへ渡さない。development / holdout resultは既存fileを上書きせず、観測後の変更と再実行を禁止する。 + +## 実行手順 + +freeze commitのpush後にdevelopmentを一度だけ実行する。 + +```powershell +uv run python tools/run_dynamics_experiment.py development ` + --manifest tests/fixtures/d1_liplus_fusion_calibration_experiment.manifest.json ` + --output tests/fixtures/d1_liplus_fusion_calibration_experiment.development.result.json +``` + +候補がある場合だけholdoutを一度実行する。候補がなければholdout resultを作成しない。 + +## 観測前状態 + +fixture / gold / provenance / audit / manifest / implementation / tests / 規則を独立freeze commitとしてpushするまでresultを生成しない。 diff --git a/docs/requirements.md b/docs/requirements.md index e3a47d9..ff1a75b 100644 --- a/docs/requirements.md +++ b/docs/requirements.md @@ -65,6 +65,12 @@ 47. anchored hybrid experimentは`current`、`bm25-only`、BM25+現行graph、BM25+dense anchorのlocal/query local、BM25 anchorのlocalを合わせた6 variantsだけを比較する。 48. development候補はrelation MRRがcurrentを厳密に上回り、direct / negative-controlが退行せず、relation path、feedback isolation、anchor invariant、edge-only graph signalをすべて満たす場合だけ選択する。 49. 候補がある場合だけ未観測holdoutで`current`、`bm25-only`、選択候補を一度評価し、同じgateを通過した場合だけdefault変更候補とする。 +50. graph activationは`max`、`none`、`l1_mass`を一般設定として選択でき、zero totalを決定論的に全0へ変換できる。 +51. final fusionは既存linearに加え、entry rankとpositive graph nodeだけのgraph rankを使うbottom-centered weighted RRFを選択できる。 +52. 各traceはentry / graph rank、entry / graph fusion component、normalization、fusion strategy、RRF k、positive graph node数を保持し、final orderingを機械的に再計算できる。 +53. fusion calibration experimentはproduction D1の新しい3-node development / holdoutを、既存7 fixturesの50 unique doc pathsおよび相互間から分離し、provenance、balanced gold、contamination audit、6 variantsを結果観測前に固定する。 +54. development候補はrelation MRRをcurrentから厳密に改善し、少なくとも1 relation caseを個別改善し、direct / negative-controlのcohort MRRと全個別rankを退行させず、path、feedback、anchor、edge-only graph、formula auditを満たす場合だけ選択する。 +55. development候補がある場合だけ未観測holdoutでcurrentと選択候補を一度評価し、同じgateを通過した場合だけdefault変更候補とする。 ## 4. Constraints @@ -88,3 +94,4 @@ - [Neural dynamics experiment](neural-dynamics-experiment.md) が development / holdout 分離、固定探索空間、候補選択、単一 holdout 開封、停止規則を定義する。 - [Local recurrent competition experiment](neural-dynamics-local-competition-experiment.md) が新規D1 subgraph、contamination audit、query / path ablation、二baseline gateを定義する。 - [Anchored BM25 and graph hybrid experiment](anchored-bm25-graph-hybrid-experiment.md) がzero-hop anchor、edge-only graph signal、BM25 ablation、新規D1 split、単一holdout gateを定義する。 +- [Anchored fusion calibration experiment](anchored-fusion-calibration-experiment.md) がgraph normalization、bottom-centered RRF、新規D1 split、個別case gateを定義する。 diff --git a/src/neuron_graph_rag/engine.py b/src/neuron_graph_rag/engine.py index d7c817e..d04694f 100644 --- a/src/neuron_graph_rag/engine.py +++ b/src/neuron_graph_rag/engine.py @@ -48,6 +48,9 @@ class EngineConfig: max_active_paths_per_node: int = 4 use_dense_retrieval: bool = True use_graph_propagation: bool = True + graph_normalization: str = "max" + final_fusion_strategy: str = "linear" + rrf_k: int = 60 def __post_init__(self) -> None: for name in ( @@ -106,6 +109,12 @@ def __post_init__(self) -> None: raise ValueError("dense_weight must be zero when dense retrieval is disabled") if not self.use_graph_propagation and self.graph_weight != 0.0: raise ValueError("graph_weight must be zero when graph propagation is disabled") + if self.graph_normalization not in {"max", "none", "l1_mass"}: + raise ValueError("Unknown graph_normalization") + if self.final_fusion_strategy not in {"linear", "rrf"}: + raise ValueError("Unknown final_fusion_strategy") + if self.rrf_k < 1: + raise ValueError("rrf_k must be positive") class NeuronGraphRAG: @@ -244,24 +253,36 @@ def search( "active_path_count": 0, "competition_sets": [], } - normalized_activation = normalize_scores( - {node.node_id: graph_activation.get(node.node_id, 0.0) for node in nodes} + graph_values = { + node.node_id: graph_activation.get(node.node_id, 0.0) for node in nodes + } + normalized_activation = self._normalize_graph_activation( + graph_values, self.config.graph_normalization ) self._record_activation(graph_activation, timestamp) - hits = [ - SearchHit( + entry_ranks = self._rank_positive_or_all(entry, positive_only=False) + graph_ranks = self._rank_positive_or_all( + graph_values, positive_only=True + ) + positive_graph_count = len(graph_ranks) + + hits = [] + for node in nodes: + entry_component, graph_component = self._fusion_components( + entry=entry[node.node_id], + normalized_graph=normalized_activation[node.node_id], + entry_rank=entry_ranks[node.node_id], + graph_rank=graph_ranks.get(node.node_id), + positive_graph_count=positive_graph_count, + ) + hits.append(SearchHit( node=node, sparse_score=sparse[node.node_id], dense_score=dense[node.node_id], entry_score=entry[node.node_id], graph_activation=graph_activation.get(node.node_id, 0.0), - final_score=self._weighted_average( - entry[node.node_id], - normalized_activation[node.node_id], - self.config.entry_weight, - self.config.graph_weight, - ), + final_score=entry_component + graph_component, paths=tuple( sorted( paths.get(node.node_id, ()), @@ -273,9 +294,13 @@ def search( normalized_graph_activation=normalized_activation[node.node_id], entry_anchor_before_competition=entry[node.node_id], entry_anchor_after_competition=entry[node.node_id], - ) - for node in nodes - ] + entry_rank=entry_ranks[node.node_id], + graph_rank=graph_ranks.get(node.node_id), + entry_fusion_component=entry_component, + graph_fusion_component=graph_component, + final_fusion_strategy=self.config.final_fusion_strategy, + graph_normalization=self.config.graph_normalization, + )) hits.sort(key=lambda hit: (-hit.final_score, hit.node.node_id)) selected_hits = tuple(hits[:limit]) trace_id = uuid.uuid4().hex @@ -311,6 +336,15 @@ def search( for node_paths in paths.values() for path in node_paths ), + "graph_normalization": self.config.graph_normalization, + "final_fusion_strategy": self.config.final_fusion_strategy, + "rrf_k": self.config.rrf_k, + "positive_graph_node_count": positive_graph_count, + "final_order_recomputable": all( + hit.final_score + == hit.entry_fusion_component + hit.graph_fusion_component + for hit in hits + ), } ) return SearchTrace( @@ -439,6 +473,70 @@ def _weighted_average( total_weight = left_weight + right_weight return (left * left_weight + right * right_weight) / total_weight + @staticmethod + def _normalize_graph_activation( + scores: dict[str, float], strategy: str + ) -> dict[str, float]: + positive = {key: max(0.0, value) for key, value in scores.items()} + if strategy == "none": + return positive + if strategy == "max": + return normalize_scores(positive) + if strategy == "l1_mass": + total = sum(positive.values()) + if total <= 0.0: + return {key: 0.0 for key in positive} + return {key: value / total for key, value in positive.items()} + raise ValueError(f"Unknown graph normalization: {strategy}") + + @staticmethod + def _rank_positive_or_all( + scores: dict[str, float], *, positive_only: bool + ) -> dict[str, int]: + ordered = sorted( + ( + (node_id, score) + for node_id, score in scores.items() + if not positive_only or score > 0.0 + ), + key=lambda item: (-item[1], item[0]), + ) + return { + node_id: rank + for rank, (node_id, _) in enumerate(ordered, start=1) + } + + def _fusion_components( + self, + *, + entry: float, + normalized_graph: float, + entry_rank: int, + graph_rank: int | None, + positive_graph_count: int, + ) -> tuple[float, float]: + if self.config.final_fusion_strategy == "linear": + total_weight = self.config.entry_weight + self.config.graph_weight + return ( + entry * self.config.entry_weight / total_weight, + normalized_graph * self.config.graph_weight / total_weight, + ) + entry_component = self.config.entry_weight / ( + self.config.rrf_k + entry_rank + ) + graph_component = 0.0 + if graph_rank is not None: + graph_component = self.config.graph_weight * ( + 1.0 / (self.config.rrf_k + graph_rank) + - 1.0 + / ( + self.config.rrf_k + + positive_graph_count + + 1 + ) + ) + return entry_component, graph_component + @staticmethod def _timestamp(value: datetime | float | None) -> float: if value is None: diff --git a/src/neuron_graph_rag/experiment.py b/src/neuron_graph_rag/experiment.py index b730f08..9f8cb72 100644 --- a/src/neuron_graph_rag/experiment.py +++ b/src/neuron_graph_rag/experiment.py @@ -12,7 +12,7 @@ EXPERIMENT_SCHEMA_VERSION = 1 -SUPPORTED_EXPERIMENT_SCHEMA_VERSIONS = {1, 2, 3} +SUPPORTED_EXPERIMENT_SCHEMA_VERSIONS = {1, 2, 3, 4} def read_manifest(path: str | Path) -> dict[str, Any]: @@ -52,15 +52,15 @@ def read_manifest(path: str | Path) -> dict[str, Any]: overlap = sorted(development_paths & holdout_paths) if overlap: raise ValueError(f"Development and holdout doc paths overlap: {overlap!r}") - if schema_version in {2, 3}: + if schema_version in {2, 3, 4}: expected_baselines = ( ["current", "recurrent-balanced"] if schema_version == 2 - else ["current", "bm25-only"] + else (["current", "bm25-only"] if schema_version == 3 else ["current"]) ) - if ids[:2] != expected_baselines: + if ids[: len(expected_baselines)] != expected_baselines: raise ValueError( - f"Schema v{schema_version} requires its two frozen baselines" + f"Schema v{schema_version} requires its frozen baselines" ) if len(variants) != int(manifest["maximum_variants"]): raise ValueError("Experiment requires the exact frozen variant count") @@ -110,7 +110,11 @@ def run_development(manifest_path: str | Path) -> dict[str, Any]: else ( _select_anchored_development(variants) if int(manifest["schema_version"]) == 3 - else _select_development(variants) + else ( + _select_fusion_development(variants) + if int(manifest["schema_version"]) == 4 + else _select_development(variants) + ) ) ) return { @@ -193,6 +197,12 @@ def run_holdout( "negative_non_regression" ] adopted = all(gate.values()) + elif schema_version == 4: + gate = _fusion_candidate_gate(selected, current) + no_cohort_regression = gate["direct_non_regression"] and gate[ + "negative_non_regression" + ] + adopted = all(gate.values()) else: no_cohort_regression = all( selected["metrics"]["cohorts"][cohort]["mean_reciprocal_rank"] @@ -269,6 +279,20 @@ def _evaluate_variant( else None ), "scores": target.explain()["scores"], + "ranks": target.explain()["ranks"], + "fusion": target.explain()["fusion"], + "ranked_hits": [ + { + "node_id": hit.node.node_id, + "scores": hit.explain()["scores"], + "ranks": hit.explain()["ranks"], + "fusion": hit.explain()["fusion"], + } + for hit in trace.hits + ], + "formula_recomputed": _trace_formula_recomputable( + trace, config + ), "diagnostics": trace.diagnostics, } ) @@ -309,6 +333,24 @@ def _evaluate_variant( case["diagnostics"].get("graph_signal_excludes_zero_hop") is not False for case in cases ), + "final_order_recomputable": all( + bool(case["diagnostics"].get("final_order_recomputable")) + and bool(case["formula_recomputed"]) + and _case_order_recomputable(case) + for case in cases + ), + "graph_normalizations": sorted( + { + str(case["diagnostics"].get("graph_normalization")) + for case in cases + } + ), + "final_fusion_strategies": sorted( + { + str(case["diagnostics"].get("final_fusion_strategy")) + for case in cases + } + ), } return { "id": variant["id"], @@ -628,6 +670,180 @@ def _anchored_candidate_gate( } +def _select_fusion_development( + variants: list[dict[str, Any]], +) -> dict[str, Any]: + current = next(variant for variant in variants if variant["id"] == "current") + candidates: list[dict[str, Any]] = [] + for variant in variants: + improved_cases = _individually_improved_cases(variant, current) + variant["relative_to_current"] = { + f"{cohort}_mrr_delta": ( + _cohort_mrr(variant, cohort) - _cohort_mrr(current, cohort) + ) + for cohort in COHORTS + } + variant["relative_to_current"]["individually_improved_case_ids"] = ( + improved_cases + ) + gate = _fusion_candidate_gate(variant, current) + variant["candidate_gate"] = gate + variant["candidate_gate_passed"] = ( + variant["id"] != "current" and all(gate.values()) + ) + if variant["candidate_gate_passed"]: + candidates.append(variant) + + if not candidates: + return { + "selected_variant_id": "current", + "reason": "no_fusion_variant_passed_frozen_gate", + "eligible_variant_ids": [], + } + selected = sorted( + candidates, + key=lambda variant: ( + -_cohort_mrr(variant, "relation"), + -min(_cohort_mrr(variant, cohort) for cohort in COHORTS), + -len(_individually_improved_cases(variant, current)), + float(variant["diagnostics"]["mean_expansions"]), + int(variant["structural_complexity"]), + str(variant["id"]), + ), + )[0] + return { + "selected_variant_id": selected["id"], + "reason": "predeclared_fusion_gate_and_tie_break", + "eligible_variant_ids": sorted( + str(variant["id"]) for variant in candidates + ), + } + + +def _fusion_candidate_gate( + candidate: dict[str, Any], current: dict[str, Any] +) -> dict[str, bool]: + current_ranks = {str(case["id"]): int(case["rank"]) for case in current["cases"]} + candidate_cases = { + str(case["id"]): case for case in candidate["cases"] + } + control_case_non_regression = all( + int(case["rank"]) <= current_ranks[case_id] + for case_id, case in candidate_cases.items() + if case["cohort"] in {"direct_lookup", "negative_control"} + ) + relation_case_improvement = any( + int(case["rank"]) < current_ranks[case_id] + for case_id, case in candidate_cases.items() + if case["cohort"] == "relation" + ) + return { + "relation_strictly_above_current": _cohort_mrr(candidate, "relation") + > _cohort_mrr(current, "relation"), + "direct_non_regression": _cohort_mrr(candidate, "direct_lookup") + >= _cohort_mrr(current, "direct_lookup"), + "negative_non_regression": _cohort_mrr(candidate, "negative_control") + >= _cohort_mrr(current, "negative_control"), + "individual_control_rank_non_regression": control_case_non_regression, + "individual_relation_rank_improvement": relation_case_improvement, + "all_relation_paths_match": _paths_match(candidate), + "feedback_isolated": _feedback_isolated(candidate), + "entry_anchor_invariant": bool( + candidate["diagnostics"].get("entry_anchor_invariant") + ), + "graph_signal_excludes_zero_hop": bool( + candidate["diagnostics"].get("graph_signal_excludes_zero_hop") + ), + "final_order_recomputable": bool( + candidate["diagnostics"].get("final_order_recomputable") + ), + } + + +def _individually_improved_cases( + candidate: dict[str, Any], current: dict[str, Any] +) -> list[str]: + current_ranks = {str(case["id"]): int(case["rank"]) for case in current["cases"]} + return sorted( + str(case["id"]) + for case in candidate["cases"] + if int(case["rank"]) < current_ranks[str(case["id"])] + ) + + +def _case_order_recomputable(case: dict[str, Any]) -> bool: + ranked_hits = case.get("ranked_hits", []) + if not ranked_hits: + return False + for hit in ranked_hits: + fusion = hit["fusion"] + if abs( + float(fusion["entry_component"]) + + float(fusion["graph_component"]) + - float(fusion["final"]) + ) > 1e-12: + return False + observed = [str(hit["node_id"]) for hit in ranked_hits] + recomputed = [ + str(hit["node_id"]) + for hit in sorted( + ranked_hits, + key=lambda hit: ( + -float(hit["fusion"]["final"]), + str(hit["node_id"]), + ), + ) + ] + return observed == recomputed + + +def _trace_formula_recomputable(trace: Any, config: EngineConfig) -> bool: + positive_graph_count = int( + trace.diagnostics.get("positive_graph_node_count", 0) + ) + recomputed: list[tuple[str, float]] = [] + for hit in trace.hits: + if config.final_fusion_strategy == "linear": + total_weight = config.entry_weight + config.graph_weight + entry_component = ( + hit.entry_score * config.entry_weight / total_weight + ) + graph_component = ( + hit.normalized_graph_activation + * config.graph_weight + / total_weight + ) + else: + entry_component = config.entry_weight / ( + config.rrf_k + hit.entry_rank + ) + graph_component = 0.0 + if hit.graph_rank is not None: + graph_component = config.graph_weight * ( + 1.0 / (config.rrf_k + hit.graph_rank) + - 1.0 + / ( + config.rrf_k + + positive_graph_count + + 1 + ) + ) + if ( + abs(entry_component - hit.entry_fusion_component) > 1e-12 + or abs(graph_component - hit.graph_fusion_component) > 1e-12 + or abs(entry_component + graph_component - hit.final_score) > 1e-12 + ): + return False + recomputed.append((hit.node.node_id, entry_component + graph_component)) + expected_order = [ + node_id + for node_id, _ in sorted( + recomputed, key=lambda item: (-item[1], item[0]) + ) + ] + return expected_order == [hit.node.node_id for hit in trace.hits] + + def _paths_match(variant: dict[str, Any]) -> bool: return bool(variant["explanations"]) and all( item["matched"] for item in variant["explanations"] diff --git a/src/neuron_graph_rag/models.py b/src/neuron_graph_rag/models.py index bac14b4..263713e 100644 --- a/src/neuron_graph_rag/models.py +++ b/src/neuron_graph_rag/models.py @@ -52,6 +52,12 @@ class SearchHit: normalized_graph_activation: float = 0.0 entry_anchor_before_competition: float = 0.0 entry_anchor_after_competition: float = 0.0 + entry_rank: int = 0 + graph_rank: int | None = None + entry_fusion_component: float = 0.0 + graph_fusion_component: float = 0.0 + final_fusion_strategy: str = "linear" + graph_normalization: str = "max" def explain(self) -> dict[str, Any]: return { @@ -74,6 +80,17 @@ def explain(self) -> dict[str, Any]: ), "final": self.final_score, }, + "ranks": { + "entry": self.entry_rank, + "graph": self.graph_rank, + }, + "fusion": { + "strategy": self.final_fusion_strategy, + "graph_normalization": self.graph_normalization, + "entry_component": self.entry_fusion_component, + "graph_component": self.graph_fusion_component, + "final": self.final_score, + }, "paths": [ { "seed_id": path.seed_id, diff --git a/tests/fixtures/d1_liplus_fusion_calibration.contamination.json b/tests/fixtures/d1_liplus_fusion_calibration.contamination.json new file mode 100644 index 0000000..1769b2b --- /dev/null +++ b/tests/fixtures/d1_liplus_fusion_calibration.contamination.json @@ -0,0 +1,139 @@ +{ + "checks": { + "development_vs_prior_1": { + "doc_paths": [], + "node_ids": [], + "relation_endpoints": [], + "source_urls": [] + }, + "development_vs_prior_2": { + "doc_paths": [], + "node_ids": [], + "relation_endpoints": [], + "source_urls": [] + }, + "development_vs_prior_3": { + "doc_paths": [], + "node_ids": [], + "relation_endpoints": [], + "source_urls": [] + }, + "development_vs_prior_4": { + "doc_paths": [], + "node_ids": [], + "relation_endpoints": [], + "source_urls": [] + }, + "development_vs_prior_5": { + "doc_paths": [], + "node_ids": [], + "relation_endpoints": [], + "source_urls": [] + }, + "development_vs_prior_6": { + "doc_paths": [], + "node_ids": [], + "relation_endpoints": [], + "source_urls": [] + }, + "development_vs_prior_7": { + "doc_paths": [], + "node_ids": [], + "relation_endpoints": [], + "source_urls": [] + }, + "holdout_vs_prior_1": { + "doc_paths": [], + "node_ids": [], + "relation_endpoints": [], + "source_urls": [] + }, + "holdout_vs_prior_2": { + "doc_paths": [], + "node_ids": [], + "relation_endpoints": [], + "source_urls": [] + }, + "holdout_vs_prior_3": { + "doc_paths": [], + "node_ids": [], + "relation_endpoints": [], + "source_urls": [] + }, + "holdout_vs_prior_4": { + "doc_paths": [], + "node_ids": [], + "relation_endpoints": [], + "source_urls": [] + }, + "holdout_vs_prior_5": { + "doc_paths": [], + "node_ids": [], + "relation_endpoints": [], + "source_urls": [] + }, + "holdout_vs_prior_6": { + "doc_paths": [], + "node_ids": [], + "relation_endpoints": [], + "source_urls": [] + }, + "holdout_vs_prior_7": { + "doc_paths": [], + "node_ids": [], + "relation_endpoints": [], + "source_urls": [] + }, + "new_split_fixture_overlap": { + "doc_paths": [], + "node_ids": [], + "relation_endpoints": [], + "source_urls": [] + }, + "new_split_gold_overlap": { + "expected_node_ids": [], + "normalized_queries": [], + "relation_endpoints": [], + "source_urls": [] + } + }, + "inputs": { + "development_fixture_sha256": "sha256:1f0ab101d643613a65b83be2585c410e203a9520b6a933b516203b371fdcd916", + "development_gold_sha256": "sha256:006e7f159e10d313ef91d3b3d85e1148e5291de17dc08c46cdf0906891189a6e", + "holdout_fixture_sha256": "sha256:5e381fd671e5bbed543c0ae02938ffbb9d5e9278988fa81721669f737c8cd060", + "holdout_gold_sha256": "sha256:d4c3d3bdfb576bd2bd33634790ee0652e2343cc57f71191ad955da656a13aae6", + "prior_fixtures": [ + { + "fixture": "d1_liplus_wiki.json", + "fixture_sha256": "sha256:242586f18df57ca7b2229a33140a25a79f7562cc010f7f0fd3580d2ee1fadc69" + }, + { + "fixture": "d1_liplus_benchmark.json", + "fixture_sha256": "sha256:b3b305aabb57803c2782c3998215e1cbcf9b5e6cdef0f641abc98520d4400cf9" + }, + { + "fixture": "d1_liplus_dynamics_holdout.json", + "fixture_sha256": "sha256:4f7c444c408c3188323e754aa93141a8deaf1a4b15410ad915dd4c71be3a8081" + }, + { + "fixture": "d1_liplus_local_competition_development.json", + "fixture_sha256": "sha256:27e5018f489d7602cf1753a3bda688f3db82c69ce8ee9eef0401caf72b40acfa" + }, + { + "fixture": "d1_liplus_local_competition_holdout.json", + "fixture_sha256": "sha256:94b0e311546aee39b8aac114e1387aada465f058d0e14d32e7b7c7aa53b50f62" + }, + { + "fixture": "d1_liplus_anchored_hybrid_development.json", + "fixture_sha256": "sha256:7e71b6aba83d2ee6b080251a233f869d2cea85f48a3878b4b2f4e9910a991b9d" + }, + { + "fixture": "d1_liplus_anchored_hybrid_holdout.json", + "fixture_sha256": "sha256:3f2a2c64df4841616f78da74b8a5bcb246c6b8a5fdda21618ab6a8870b4ae385" + } + ] + }, + "passed": true, + "prior_usage": "fixture identifiers only; prior gold and result artifacts are not loaded", + "schema_version": 1 +} diff --git a/tests/fixtures/d1_liplus_fusion_calibration_development.gold.json b/tests/fixtures/d1_liplus_fusion_calibration_development.gold.json new file mode 100644 index 0000000..924706f --- /dev/null +++ b/tests/fixtures/d1_liplus_fusion_calibration_development.gold.json @@ -0,0 +1,70 @@ +{ + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "expected_node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "id": "fusion-dev-direct-width-cap", + "query": "subagent parallel width upper limit in-flight five provisional no enforcement mechanism", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/subagent-parallel-width-cap" + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "expected_node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "id": "fusion-dev-direct-three-axis", + "query": "parallel subagent evaluation three axes N M P safer-side OR aggregation", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/parallel-subagent-eval-three-axis-decomposition" + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "expected_node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "id": "fusion-dev-relation-width-three-axis", + "query": "subagent parallel width cap lower-bound reference three-axis evaluation design", + "seed_source_url": "https://github.com/Liplus-Project/liplus-language/wiki/subagent-parallel-width-cap", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/parallel-subagent-eval-three-axis-decomposition" + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "expected_node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ], + "id": "fusion-dev-relation-width-dynamic", + "query": "subagent parallel width cap rejected host feature upper-scale reference", + "seed_source_url": "https://github.com/Liplus-Project/liplus-language/wiki/subagent-parallel-width-cap", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/dynamic-workflows-non-adoption" + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "expected_node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "id": "fusion-dev-negative-dynamic", + "query": "host dynamic workflows non-adoption completion window observer role source check", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/dynamic-workflows-non-adoption" + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "expected_node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "id": "fusion-dev-negative-width-binding", + "query": "in-flight subagent count maximum five binding condition next batch", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/subagent-parallel-width-cap" + } + ], + "fixture": "d1_liplus_fusion_calibration_development.json", + "schema_version": 1 +} diff --git a/tests/fixtures/d1_liplus_fusion_calibration_development.json b/tests/fixtures/d1_liplus_fusion_calibration_development.json new file mode 100644 index 0000000..62f5c3b --- /dev/null +++ b/tests/fixtures/d1_liplus_fusion_calibration_development.json @@ -0,0 +1,148 @@ +{ + "edges": [ + { + "edge_type": "mention", + "factuality": 1.0, + "metadata": { + "source_record": { + "dst_slug": "parallel-subagent-eval-three-axis-decomposition", + "dst_vector_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "edge_kind": "mention", + "repo": "Liplus-Project/liplus-language", + "src_slug": "subagent-parallel-width-cap", + "src_vector_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "updated_at": "2026-07-31T14:57:28.128Z" + }, + "source_table": "doc_edges" + }, + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "weight": 1.0 + }, + { + "edge_type": "mention", + "factuality": 1.0, + "metadata": { + "source_record": { + "dst_slug": "dynamic-workflows-non-adoption", + "dst_vector_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "edge_kind": "mention", + "repo": "Liplus-Project/liplus-language", + "src_slug": "subagent-parallel-width-cap", + "src_vector_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "updated_at": "2026-07-31T14:57:28.128Z" + }, + "source_table": "doc_edges" + }, + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "weight": 1.0 + } + ], + "nodes": [ + { + "confidence": 1.0, + "metadata": { + "assignees": "", + "commit_author": "", + "commit_date": "", + "commit_sha": "", + "doc_path": "dynamic-workflows-non-adoption", + "file_path": "", + "file_status": "", + "indexed_at": "2026-07-31T14:56:17.712Z", + "labels": "", + "milestone": "", + "number": 0, + "repo": "Liplus-Project/liplus-language", + "source_table": "search_docs", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/dynamic-workflows-non-adoption", + "state": "active", + "tag_name": "", + "tokenizer_kind": "nat", + "type": "wiki_doc", + "updated_at": "2026-07-31T14:56:17.064Z", + "vector_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "text": "dynamic-workflows-non-adoption\n\n# host 機能 dynamic workflows の Li+ 非採用\n\n## Question\n\nOpus 4.8 の host 機能 dynamic workflows を Li+ で採用するか。\n\n## Current resolution\n\n採用しない(#1430 closed / Option A)。dynamic workflows の「完了窓」(中間結果が isolated env のスクリプト変数に隔離され、親には truncate 成果物 + temp ポインタのみ返る界面)が、親を**観測者役(中立裁定者)に強制召喚**し、character + source-check 認証を同時に剥がすため。verdict 本体は #1430 コメントに durable 保管。\n\n## Edges\n\n- **relates to**: [[liplus-context-rot-tension]] — isolate(per-agent context)は context-rot の SOTA mitigation だが、Li+ では完了窓が認証剥がしのコストを併発する非対称がある\n\n## 背景\n\n完了窓が出す2段の害:\n\n1. tone 軸: 観測者役は character を持たない substrate の住処 → character 連続性を damage(`foundational-invariant` の dialogue integrity 違反)。\n2. security 軸(load-bearing): source-check 認証を同時に剥がす → prior-self の生成物が human 発話を詐称し、偽の権限で無検問に自律実行(self-impersonation / 権限昇格)。実害として phantom 指示「Master が milestone ルールを変更した」を作話し自律 issue 起票する事象が発生した。\n\n## 制約\n\n反証の決め手: 同じ並列仕事を素の Agent tool で回すと完了窓が構造的に存在せず drift ゼロ。並列需要は raw Agent tool が character-safe に供給済み → dynamic workflows は**使えない上に要らない**。\n\n## 結論\n\n- 採用: なし(見送り、memory でなく本判断記録で足りる=L1 昇格不要、Master 判断)。\n- 条件付き再評価: 将来どうしても使う必要が出た場合、完了窓直後に Source check(prior-self 詐称の可能性)を強制する設計が前提。\n\n## 関連\n\n- issue #1430(closed / Option A、verdict 本体)\n" + }, + { + "confidence": 1.0, + "metadata": { + "assignees": "", + "commit_author": "", + "commit_date": "", + "commit_sha": "", + "doc_path": "parallel-subagent-eval-three-axis-decomposition", + "file_path": "", + "file_status": "", + "indexed_at": "2026-07-31T14:57:15.000Z", + "labels": "", + "milestone": "", + "number": 0, + "repo": "Liplus-Project/liplus-language", + "source_table": "search_docs", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/parallel-subagent-eval-three-axis-decomposition", + "state": "active", + "tag_name": "", + "tokenizer_kind": "nat", + "type": "wiki_doc", + "updated_at": "2026-07-31T14:57:14.283Z", + "vector_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "text": "parallel-subagent-eval-three-axis-decomposition\n\n# parallel-subagent-eval の三軸分解(subagent_count × axes_per_subagent × premise_variations)\n\n## 判断\n\n`skills/parallel-subagent-eval/SKILL.md` の検証設計を、`subagent_count (N)` / `axes_per_subagent (M)` / `premise_variations (P)` の三軸直交として明文化し、デフォルトを **`N=3, M=全 axes, P=1`(safer-side OR aggregation)** に固定する。「最低 3 並列 + 異なる評価軸」という旧来の文面が、(A) 1 subagent = 1 axis と (B) 1 subagent = 全 axes の二通りに読める曖昧さを抱えていたため、設計者意図側 (B) に寄せた。\n\n軸: 検証 cost と検出力を独立に動かす三つの設計次元の分離。verification 運用そのものに semantic 変化はなく、語彙の二重読みを除去する patch 相当の整理。\n\n## 背景\n\n[#1308](https://github.com/Liplus-Project/liplus-language/pull/1308)(Closes [#1296](https://github.com/Liplus-Project/liplus-language/issues/1296))で `skills/parallel-subagent-eval/SKILL.md` が独立 skill として追加された当日(2026-05-18)、対話の中で「AI は確率モデルなんだから検証は 3 回以上欲しい」という Master の問いが立ち、現行文面と設計意図のあいだに二重読みが残っていることが露見した。\n\n具体的なズレ:\n\n| 読み方 | subagent 数 | 軸 / subagent | サンプル数 / 軸 |\n|---|---|---|---|\n| A(現行文面寄り) | 3 | 1 | N=1 |\n| B(設計者意図) | 3 | M(全軸) | N=3 |\n\n`#1296` の実証データ(N=1 positive → N=3 で 1positive + 2 partial-negative)は、axis A / axis B / axis C を別々の subagent に割り当てた **coverage 改善**の根拠であって、確率モデルの **variance 改善**の根拠ではなかった。一方、AI が確率モデルである以上、各観測軸について N≥3 のサンプリングが本来欲しい——読み方 B の設計(3 subagent が全 M 軸を独立に答える)は、coverage に variance を上乗せできる上位互換になる。\n\n副次的に、対話の途中で「M×N = 9 subagent 必要」という過剰積みの誤導も浮上したが、それは「ablation 前提を変えるとき」と「観測条件を変えるとき」を取り違えた結果だと判明した。判定の二択(消す/残す)に必要な解像度を超えていた。三軸を独立に立てる整理は、この誤導も同時に解消する。\n\n## 制約\n\n- **#1296 実証の保持**: axis A/B/C を 1 subagent ずつに割り当てた当時の構成は、`M=1` axis-separated **例外パターン**として保持。supersede ではなく構造に取り込む形。\n- **OR aggregation の安全側**: delete/keep のような二択で誤削除コストが非対称に高い場合、aggregation rule は safer-side OR(1 軸でも load-bearing を返したら \"残す\")。採用/不採用の場合は AND、中間は旧 #1296 の consistent / partial / negative 三値分類。\n- **cross-axis echo bias の管理**: default M=全 axes パターンでは subagent prompt 内で「他軸の答えを参照せずに独立に答えよ」と明示。複雑度が高く mitigation が不安なときは M=1 axis-separated パターンへ退避。\n- **同一ベースモデルでの検証**: subagent を安いモデル(Haiku 等)に降ろすことは認めない。base model が違えば「rule を吸収しているか」の答えそのものが変わる。被験者をすり替えると測定が無効化される。\n- **L1 update gating の不適用**: skill body の文面整理であり L1 Model Layer 変更ではない。reversibility 高(PR 一発 revert)、user/system 観測影響ゼロ、detection cost 低のため `rules/operations/execution-mode.md` の per-PR patch 例外を適用、AI direct merge。\n\n## 結論\n\nPR [#1312](https://github.com/Liplus-Project/liplus-language/pull/1312)(Closes [#1311](https://github.com/Liplus-Project/liplus-language/issues/1311))で実装、squash merge 済み。\n\n採用案(三軸直交化)の変更内容:\n\n- 新規 `## Design Dimensions` 節を Trigger と Procedure の間に追加。`subagent_count (N)` / `axes_per_subagent (M)` / `premise_variations (P)` を独立次元として記述\n- デフォルトパターン明定:`N=3, M=全 axes, P=1`、総 invocation = 3、safer-side OR aggregation\n- 例外パターン `M=1` axis-separated を保持し、原 #1296 実証はこの枠の実例として読み替え\n- 前提揺らぎ枝 `P > 1` を ablation 比較用オプションとして記述、総 invocation = `N × P`\n- aggregation 規則を判定の非対称性別に三分(delete/keep → OR、採用/不採用 → AND、中間 → 三値分類)\n- Procedure step 3 / step 4、Constraint bullet を同じ三軸記法に揃え直す\n\n却下案 A(M × N = 9 subagent 総当たり):delete/keep の二択判定に必要な解像度を超え、Master の token 体力に対しても過剰。前提揺らぎ(P>1)が必要になった局面で初めて呼び戻すパターンとして温存。\n\n却下案 B(verification subagent を Haiku 等に降ろす):substrate を変えた瞬間に被験者がすり替わる。ablation の問い「ベースモデルがこの rule を吸収しているか」に対して、別のモデルで測った答えは答えとして無効。コスト圧縮の道は substrate を下げる方向ではなく、頻度(いつ走らせるか)と対象(何を ablation にかけるか)を絞る方向にしか開いていない。\n\n却下案 C(発火頻度ベースの自然減衰で rule を間引く):本判断の隣接議題として浮上したが射程外。発火頻度が低くてもベースモデルとの相補関係で load-bearing な rule は存在し得るので、頻度は適切な指標にならない。ablation で「rule を外しても挙動が変わらない」を直接観測するほうが筋。本判断は ablation 機構の設計に専属、頻度ベース pruning は別判断。\n\n## 検証\n\n本 skill 自身を meta 適用した self-verify(採用パターンそのものでの自己検証):\n\n| subagent | Axis 1 (Design fidelity) | Axis 2 (Historical compat) | Axis 3 (Internal consistency) |\n|---|---|---|---|\n| #1 | clean | clean | concern |\n| #2 | clean | clean | concern |\n| #3 | clean | clean | concern |\n\nblock-worthy ゼロ。3/3 が Axis 1/2 で clean を返し、設計意図と #1296 実証との整合性を確認。Axis 3 では 3/3 が concern を返し、うち 2/3 が **同箇所**(Constraint N=1 bullet の「異軸 3 軸の OR aggregation」文言が、原 #1296 の M=1 例外パターンと現行 default の M=全 axes を混同し得る)を独立に指摘。集中して同一箇所を指す concern は、coverage と variance の交差点で本来「block-worthy より弱いが拾うべき信号」として処理し、最終 commit で Constraint bullet と Procedure step 3 の cross-reference を補強済み。\n\nmethod を整備したその場で同じ method を自己適用し、3 subagent の独立観測が同一箇所を指したことで cross-axis echo bias を介さない「真の concern 集中」を検出できた——三軸分解の default パターンが文字どおり走った最初の実例として記録される。\n\n## ペアリング\n\n- [`character-instance-opt-in-and-surface-scope`](https://github.com/Liplus-Project/liplus-language/wiki/character-instance-opt-in-and-surface-scope) — 本 skill (#1296 当時の M=1 axis-separated パターン) を実適用した最初の big-ticket 判断。本判断はその method 側の設計次元を整理した対応\n- [`sheepdog-engineering-concept`](https://github.com/Liplus-Project/liplus-language/wiki/sheepdog-engineering-concept) — Sheepdog Engineering の modifier 軸(AI が Li+ source を自編集)の道具立てとして本 skill が機能する。三軸分解は modifier の解像度を上げる方向の整理\n- [`master-role-as-client-architect`](https://github.com/Liplus-Project/liplus-language/wiki/master-role-as-client-architect) — Master の設計意図と AI の文面化の二重読みズレを修復した事例として、client+architect / programmer の二項に当てはまる\n\n## 検出サイン (この判断が後で疑問視される場合)\n\n- 「9 subagent 総当たり (3×3) のほうが情報量が多いから default を変えるべき」と提案された時 → 本判断の前提(delete/keep の二択判定では解像度過剰、P>1 の局面で初めて呼び戻す)を再確認。前提揺らぎが議題に入っているなら別判断\n- 「default M=全 axes パターンは cross-axis echo bias が抑止できていない」と観測された時 → Constraint bullet の独立回答指示 + M=1 axis-separated 例外パターンへの退避が運用通り発火しているかを確認。発火していてなお bias が残るなら spec 修正の余地あり\n- 「subagent を Haiku 等に降ろせばコストが下がる」と再提案された時 → 本判断の `## 制約` 「同一ベースモデルでの検証」を再確認。被験者すり替え問題は技術的な選好ではなく ablation 機構の論理的前提\n- 旧来の「最低 3 並列 + 異なる評価軸」文面が再出現した時 → 本判断による rewrite が後段の編集で巻き戻されていないかを git history で確認、`Design Dimensions` 節と整合性を再検査\n" + }, + { + "confidence": 1.0, + "metadata": { + "assignees": "", + "commit_author": "", + "commit_date": "", + "commit_sha": "", + "doc_path": "subagent-parallel-width-cap", + "file_path": "", + "file_status": "", + "indexed_at": "2026-07-31T14:57:28.088Z", + "labels": "", + "milestone": "", + "number": 0, + "repo": "Liplus-Project/liplus-language", + "source_table": "search_docs", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/subagent-parallel-width-cap", + "state": "active", + "tag_name": "", + "tokenizer_kind": "nat", + "type": "wiki_doc", + "updated_at": "2026-07-31T14:57:27.420Z", + "vector_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "text": "subagent-parallel-width-cap\n\n# subagent 並列幅の上限は in-flight 5、値は暫定で強制機構を持たない\n\n## Question\n\n親が同時に走らせる subagent の数に上限を置くか。置くなら何本で、何を数えるのか。\n\n## Current resolution\n\n**上限 = 同時 in-flight 5 本。** 数える対象は「spawn 済みでまだ返っていない subagent」であって、1メッセージあたりの Agent ツール呼び出し数ではない。binding condition = 前の batch が全て報告を返すまで次の batch を投げない。\n\n適用先は `skills/task-subagent-delegation/SKILL.md` を通る全ての並列委譲(親 issue またぎの worktree 並列 / 同一親 sub-issue 並列 / bounded read-only 調査の fan-out)。`skills/evolution-parallel-agent-eval/SKILL.md` の N / M / P fan-out は Design Dimensions 側で別途 bounded なため除外。\n\n**値 5 は暫定であり、強制機構は存在しない。** どちらも仕様本文に明記してある。\n\n## Edges\n\n- **depends on** [`parallel-subagent-eval-three-axis-decomposition`](https://github.com/Liplus-Project/liplus-language/wiki/parallel-subagent-eval-three-axis-decomposition) — 値 5 の括り出しに eval の default 幅 N=3 を下端の基準として使っている。eval 側の N が動けば上限値の妥当性も再検討対象になる\n- **depends on** [`dynamic-workflows-non-adoption`](https://github.com/Liplus-Project/liplus-language/wiki/dynamic-workflows-non-adoption) — 上端の基準として host 側の fan-out スケール(research preview で同時 16 / 1 run 累計 1000、#1426 / #1428 で評価のうえ非採用)を参照している\n- **conflicts with** (現時点で対立 entry なし)\n\n## 値 5 の導出\n\n**実測から導いていない。** cost / latency のどちらも測っていない。下端に eval の確立済み default 幅(N=3)、上端に host スケールの fan-out(同時 16)を置き、そのあいだの安全側として 5 を選んだだけの括り出しである。\n\nしたがって「5 が最適である」という主張は本判断に含まれない。含まれるのは「上限が無い状態よりは在る状態のほうがよい」という主張だけであり、観測が出た時点で値を改訂することを前提にしている。\n\n## 背景 — 何を数えるかで一度外している\n\n初版(#1532 / PR #1533)の上限は **1メッセージあたりの Agent ツール呼び出し数** として書かれていた。brake 1 の指摘で、この数え方では上限が上限として機能しないことが判明した。\n\n5 本を投げたメッセージの直後に、1本目の wave が返る前へさらに 5 本を投げると、各メッセージは 5 以下に収まったまま実 in-flight 幅が 10 に達する。仕様の文言をすべて守った状態で上限の 2 倍が成立するため、これは運用ミスではなく仕様の穴だった。\n\n同 PR の brake 1 ラウンド4で、上限の定義を in-flight bound へ移し、「前 wave の完了まで次 batch を投げない」を binding condition として明記する形に修正した。同じサイクルのラウンド3では、上限が並列委譲パターンの一つにしか掛からない書き方になっていた scope 不足も別途修正している。\n\n## 受容した対価 — recall 依存であること\n\n上限を強制する hook / counter / gate は存在しない。親が spawn の瞬間に binding condition を思い出して自己適用することに全面依存している。\n\nこれは `rules/model/subtractive-structural-beauty.md` の spec write 条項に正面から抵触する:\n\n> Procedures whose execution by future AI is not guaranteed must be replaced by structures that are reliably executed (hook / bootstrap / rule / physical constraint).\n\n指摘元は #1533 の brake 1 で、N=3 の 3体全員が独立に同じ条項を引いて指摘した。同型の欠陥は `rules/model/trigger-check-gate.md` が自己記述済みであり(「a forgettable relief path is strictly dominated by the deterministic hook」)、5軸ゲートのほうは #1493 で hook 化されて解決している。\n\n暫定対応として、recall 依存であることを仕様本文に honesty clause として明記し、構造的強制への置き換えを **#1534** で追跡する形にした。`rules/operations/operations.md` の Post-L1-Merge Runtime Observation が #1413 に対して取っているのと同じ扱い。\n\n#1534 が抱えている検討軸は3つ:\n\n- PreToolUse hook で Agent ツール呼び出しをカウントする経路が harness 上で成立するか(現行 `adapter/claude/hooks/` は on-session-start / on-user-prompt / post-tool-use のみ)\n- in-flight 数の観測が hook から可能か。困難なら per-message batch size の強制に落とし、上限の主張自体を機構の側へ合わせる\n- 値 5 の妥当性そのもの\n\n## 再評価条件\n\n- 実 in-flight 幅の超過が観測されたとき(recall 依存の穴が実害として出た初回)\n- cost / latency の実測が取れたとき。値 5 は測定に置き換えられる前提の暫定値である\n- #1534 の検討軸1 / 2 が harness 上で成立すると判明したとき。その時点で honesty clause は構造へ置き換わり、本エントリの「受容した対価」節は解消される\n\n## 検出サイン(この判断が後で疑問視される場合)\n\n- 「1メッセージ 5 本以内なので上限を守っている」と述べられた時 → 数える対象は in-flight であって per-message ではない。前 wave が返っているかを先に確認する\n- eval の N / M / P fan-out を上限違反として止めようとした時 → 除外対象。Design Dimensions 側で別途 bounded になっている\n- 上限を spawn 深度(subagent が自分の子を spawn する軸)の話と混ぜて読んだ時 → 別軸。深度は `skills/task-subagent-prompt/SKILL.md` Bounded delegation\n- 「5 という値の根拠は何か」と問われた時 → 実測ではない。N=3 と host スケール 16 のあいだの安全側という括り出しであり、観測が出れば改訂する前提であることを先に述べる\n\n## Related\n\n- [#1532](https://github.com/Liplus-Project/liplus-language/issues/1532) / [PR #1533](https://github.com/Liplus-Project/liplus-language/pull/1533) — 上限の新設と、in-flight 定義への修正\n- [#1534](https://github.com/Liplus-Project/liplus-language/issues/1534) — 構造的強制への置き換え(未着手)\n- [#1426](https://github.com/Liplus-Project/liplus-language/issues/1426) / [#1428](https://github.com/Liplus-Project/liplus-language/issues/1428) — 上端の基準として参照した host 側 fan-out スケールの評価\n- `skills/task-subagent-spawn/SKILL.md` Parallel-Width Cap — 規則本体\n" + } + ], + "schema_version": 1, + "source": { + "database": "github-rag-fts", + "doc_paths": [ + "dynamic-workflows-non-adoption", + "parallel-subagent-eval-three-axis-decomposition", + "subagent-parallel-width-cap" + ], + "per_type_limit": 3, + "repositories": [ + "Liplus-Project/liplus-language" + ], + "schema_fingerprint": "sha256:113c675c90f19e043f925d751cbbe570546746f42f3887f1aed09ccd776f2fa6", + "selection_order": [ + "repo", + "type", + "doc_path", + "vector_id" + ], + "types": [ + "wiki_doc" + ] + } +} diff --git a/tests/fixtures/d1_liplus_fusion_calibration_development.provenance.json b/tests/fixtures/d1_liplus_fusion_calibration_development.provenance.json new file mode 100644 index 0000000..9e464f3 --- /dev/null +++ b/tests/fixtures/d1_liplus_fusion_calibration_development.provenance.json @@ -0,0 +1,80 @@ +{ + "acquired_at": "2026-08-02T01:57:12.527536Z", + "coverage": [ + { + "distinct_commit_count": 0, + "newest_updated_at": "2026-07-31T14:57:33.145Z", + "oldest_updated_at": "2026-05-01T06:45:41.178Z", + "repo": "Liplus-Project/liplus-language", + "source_count": 77, + "type": "wiki_doc" + } + ], + "known_gaps": [ + "D1 is a lossy search snapshot; GitHub remains authoritative for byte-exact source content." + ], + "limits": [ + "D1 is a lossy search snapshot; content may be truncated.", + "Binary and patchless files can be absent from diff indexing.", + "Use GitHub for byte-exact historical reconstruction." + ], + "read_only_evidence": { + "changed_db": [ + false, + false, + false, + false, + false + ], + "changes": [ + 0, + 0, + 0, + 0, + 0 + ], + "query_count": 5, + "rows_written": [ + 0, + 0, + 0, + 0, + 0 + ] + }, + "result": { + "edges_both_endpoints_missing": 150, + "edges_included": 2, + "edges_one_endpoint_missing": 3, + "fixture_redactions": 0, + "nodes_included": 3, + "provenance_redactions": 0, + "redactions": 0 + }, + "schema_version": 1, + "selection": { + "doc_paths": [ + "dynamic-workflows-non-adoption", + "parallel-subagent-eval-three-axis-decomposition", + "subagent-parallel-width-cap" + ], + "order": [ + "repo", + "type", + "doc_path", + "vector_id" + ], + "per_type_limit": 3 + }, + "source": { + "authoritative_history": "GitHub", + "database": "github-rag-fts", + "repositories": [ + "Liplus-Project/liplus-language" + ], + "schema_fingerprint": "sha256:113c675c90f19e043f925d751cbbe570546746f42f3887f1aed09ccd776f2fa6", + "types": [ + "wiki_doc" + ] + } +} diff --git a/tests/fixtures/d1_liplus_fusion_calibration_experiment.manifest.json b/tests/fixtures/d1_liplus_fusion_calibration_experiment.manifest.json new file mode 100644 index 0000000..a3dc144 --- /dev/null +++ b/tests/fixtures/d1_liplus_fusion_calibration_experiment.manifest.json @@ -0,0 +1,132 @@ +{ + "baselines": [ + "current" + ], + "contamination_audit": { + "artifact": "d1_liplus_fusion_calibration.contamination.json", + "artifact_sha256": "sha256:e743fa51a2fe84918cb528281e96a0c21e33c48fd4cec6867991540b33bbb2ea" + }, + "development": { + "fixture": "d1_liplus_fusion_calibration_development.json", + "fixture_sha256": "sha256:1f0ab101d643613a65b83be2585c410e203a9520b6a933b516203b371fdcd916", + "gold": "d1_liplus_fusion_calibration_development.gold.json", + "gold_sha256": "sha256:006e7f159e10d313ef91d3b3d85e1148e5291de17dc08c46cdf0906891189a6e", + "provenance": "d1_liplus_fusion_calibration_development.provenance.json", + "provenance_sha256": "sha256:a4b80cb059832d50c21554367244739df0db55039003b5b5278743d7de01ba86" + }, + "experiment_id": "d1-liplus-anchored-fusion-calibration-v1", + "holdout": { + "fixture": "d1_liplus_fusion_calibration_holdout.json", + "fixture_sha256": "sha256:5e381fd671e5bbed543c0ae02938ffbb9d5e9278988fa81721669f737c8cd060", + "gold": "d1_liplus_fusion_calibration_holdout.gold.json", + "gold_sha256": "sha256:d4c3d3bdfb576bd2bd33634790ee0652e2343cc57f71191ad955da656a13aae6", + "provenance": "d1_liplus_fusion_calibration_holdout.provenance.json", + "provenance_sha256": "sha256:01ea43d93349d68bcd328f56d2eaf3e2526e36c9961ebbd6d3a920d0740c070d" + }, + "maximum_variants": 6, + "selection_rule": { + "candidate_gate": "relation MRR must strictly exceed current with at least one individually improved relation case; direct and negative-control MRR and every individual control rank must not regress; every relation path must match; feedback must be isolated; entry anchor must be invariant; graph signal and rank must exclude zero-hop paths; final ordering must be mechanically recomputable", + "candidate_ids": [ + "anchored-local-unscaled", + "anchored-linear-conservative", + "anchored-linear-mass", + "anchored-rrf-conservative", + "anchored-rrf-balanced" + ], + "tie_break": [ + "highest_relation_mrr", + "highest_worst_cohort_mrr", + "most_individually_improved_cases", + "fewest_mean_expansions", + "lowest_structural_complexity", + "lexicographic_variant_id" + ] + }, + "shared_config": { + "activation_budget": 1.0, + "dense_weight": 0.45, + "entry_weight": 0.55, + "graph_weight": 0.45, + "hop_decay": 0.7, + "inhibition_ratio": 0.1, + "limit": 3, + "max_active_paths_per_node": 4, + "max_hops": 2, + "query_transmission_floor": 0.4, + "recurrent_decay": 0.5, + "recurrent_steps": 2, + "seed_count": 1, + "sparse_weight": 0.55 + }, + "stop_rule": { + "development_no_candidate": "keep current default and do not open holdout", + "holdout_adoption": "adopt only when the selected candidate passes the same fusion gate on unseen holdout", + "holdout_open_count": 1, + "holdout_variants": [ + "current", + "selected-development-candidate" + ], + "post_observation_changes": "forbidden for fixture, gold, provenance, audit, doc paths, normalization, weights, rrf_k, thresholds, selection rule, stop rule, or variant parameters" + }, + "variants": [ + { + "family": "current_positive_additive", + "id": "current", + "parameters": {}, + "structural_complexity": 0 + }, + { + "family": "anchored_local_competition", + "id": "anchored-local-unscaled", + "parameters": { + "graph_normalization": "none" + }, + "structural_complexity": 5 + }, + { + "family": "anchored_local_competition", + "id": "anchored-linear-conservative", + "parameters": { + "entry_weight": 0.8, + "graph_normalization": "max", + "graph_weight": 0.2 + }, + "structural_complexity": 6 + }, + { + "family": "anchored_local_competition", + "id": "anchored-linear-mass", + "parameters": { + "entry_weight": 0.7, + "graph_normalization": "l1_mass", + "graph_weight": 0.3 + }, + "structural_complexity": 7 + }, + { + "family": "anchored_local_competition", + "id": "anchored-rrf-conservative", + "parameters": { + "entry_weight": 0.8, + "final_fusion_strategy": "rrf", + "graph_normalization": "none", + "graph_weight": 0.2, + "rrf_k": 60 + }, + "structural_complexity": 7 + }, + { + "family": "anchored_local_competition", + "id": "anchored-rrf-balanced", + "parameters": { + "entry_weight": 0.65, + "final_fusion_strategy": "rrf", + "graph_normalization": "none", + "graph_weight": 0.35, + "rrf_k": 60 + }, + "structural_complexity": 7 + } + ], + "schema_version": 4 +} diff --git a/tests/fixtures/d1_liplus_fusion_calibration_holdout.gold.json b/tests/fixtures/d1_liplus_fusion_calibration_holdout.gold.json new file mode 100644 index 0000000..dffaca1 --- /dev/null +++ b/tests/fixtures/d1_liplus_fusion_calibration_holdout.gold.json @@ -0,0 +1,70 @@ +{ + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "expected_node_id": "w:6NvJ7tCF6jLd-1TIyAhibbVY0-pdBo3T_n3OQJM5Q80", + "id": "fusion-holdout-direct-publish", + "query": "Sheepdog Engineering paper published bilingual essay public repository June 2026", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/sheepdog-engineering-publish-intent" + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "expected_node_id": "w:uy3IicRvf2PKWmzDPIdeeL0el9QgCAR2tb_cu7iQhes", + "id": "fusion-holdout-direct-state-label", + "query": "subagent state-machine lifecycle labels in-progress done waiting blocked", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/subagent-state-machine-label-mechanism" + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "expected_node_id": "w:Sj6p2cuou9TnIcwVagvooKJX85J2F5PpE0vB150NqpE", + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:6NvJ7tCF6jLd-1TIyAhibbVY0-pdBo3T_n3OQJM5Q80", + "target_id": "w:Sj6p2cuou9TnIcwVagvooKJX85J2F5PpE0vB150NqpE" + } + ], + "id": "fusion-holdout-relation-publish-concept", + "query": "published Sheepdog Engineering paper depends on which naming concept", + "seed_source_url": "https://github.com/Liplus-Project/liplus-language/wiki/sheepdog-engineering-publish-intent", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/sheepdog-engineering-concept" + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "expected_node_id": "w:Sj6p2cuou9TnIcwVagvooKJX85J2F5PpE0vB150NqpE", + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:uy3IicRvf2PKWmzDPIdeeL0el9QgCAR2tb_cu7iQhes", + "target_id": "w:Sj6p2cuou9TnIcwVagvooKJX85J2F5PpE0vB150NqpE" + } + ], + "id": "fusion-holdout-relation-label-concept", + "query": "subagent state-machine labels align with which engineering initiator concept", + "seed_source_url": "https://github.com/Liplus-Project/liplus-language/wiki/subagent-state-machine-label-mechanism", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/sheepdog-engineering-concept" + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "expected_node_id": "w:Sj6p2cuou9TnIcwVagvooKJX85J2F5PpE0vB150NqpE", + "id": "fusion-holdout-negative-concept", + "query": "lead-less rejected sheepdog adopted affirmative living metaphor", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/sheepdog-engineering-concept" + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "expected_node_id": "w:6NvJ7tCF6jLd-1TIyAhibbVY0-pdBo3T_n3OQJM5Q80", + "id": "fusion-holdout-negative-existence-proof", + "query": "existence proof paper follows adoption without pulling dissemination", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/sheepdog-engineering-publish-intent" + } + ], + "fixture": "d1_liplus_fusion_calibration_holdout.json", + "schema_version": 1 +} diff --git a/tests/fixtures/d1_liplus_fusion_calibration_holdout.json b/tests/fixtures/d1_liplus_fusion_calibration_holdout.json new file mode 100644 index 0000000..0d561fe --- /dev/null +++ b/tests/fixtures/d1_liplus_fusion_calibration_holdout.json @@ -0,0 +1,148 @@ +{ + "edges": [ + { + "edge_type": "mention", + "factuality": 1.0, + "metadata": { + "source_record": { + "dst_slug": "sheepdog-engineering-concept", + "dst_vector_id": "w:Sj6p2cuou9TnIcwVagvooKJX85J2F5PpE0vB150NqpE", + "edge_kind": "mention", + "repo": "Liplus-Project/liplus-language", + "src_slug": "sheepdog-engineering-publish-intent", + "src_vector_id": "w:6NvJ7tCF6jLd-1TIyAhibbVY0-pdBo3T_n3OQJM5Q80", + "updated_at": "2026-07-31T14:57:25.851Z" + }, + "source_table": "doc_edges" + }, + "source_id": "w:6NvJ7tCF6jLd-1TIyAhibbVY0-pdBo3T_n3OQJM5Q80", + "target_id": "w:Sj6p2cuou9TnIcwVagvooKJX85J2F5PpE0vB150NqpE", + "weight": 1.0 + }, + { + "edge_type": "mention", + "factuality": 1.0, + "metadata": { + "source_record": { + "dst_slug": "sheepdog-engineering-concept", + "dst_vector_id": "w:Sj6p2cuou9TnIcwVagvooKJX85J2F5PpE0vB150NqpE", + "edge_kind": "mention", + "repo": "Liplus-Project/liplus-language", + "src_slug": "subagent-state-machine-label-mechanism", + "src_vector_id": "w:uy3IicRvf2PKWmzDPIdeeL0el9QgCAR2tb_cu7iQhes", + "updated_at": "2026-07-31T14:57:29.220Z" + }, + "source_table": "doc_edges" + }, + "source_id": "w:uy3IicRvf2PKWmzDPIdeeL0el9QgCAR2tb_cu7iQhes", + "target_id": "w:Sj6p2cuou9TnIcwVagvooKJX85J2F5PpE0vB150NqpE", + "weight": 1.0 + } + ], + "nodes": [ + { + "confidence": 1.0, + "metadata": { + "assignees": "", + "commit_author": "", + "commit_date": "", + "commit_sha": "", + "doc_path": "sheepdog-engineering-concept", + "file_path": "", + "file_status": "", + "indexed_at": "2026-07-31T14:57:23.722Z", + "labels": "", + "milestone": "", + "number": 0, + "repo": "Liplus-Project/liplus-language", + "source_table": "search_docs", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/sheepdog-engineering-concept", + "state": "active", + "tag_name": "", + "tokenizer_kind": "nat", + "type": "wiki_doc", + "updated_at": "2026-07-31T14:57:23.084Z", + "vector_id": "w:Sj6p2cuou9TnIcwVagvooKJX85J2F5PpE0vB150NqpE" + }, + "node_id": "w:Sj6p2cuou9TnIcwVagvooKJX85J2F5PpE0vB150NqpE", + "text": "sheepdog-engineering-concept\n\n# シープドッグエンジニアリング命名と思想の確定\n\n## 判断\n\nハーネスエンジニアリングの先を示す概念名として、**リードレスエンジニアリング(Lead-less Engineering)** ではなく **シープドッグエンジニアリング(Sheepdog Engineering)** を採用する。\n\n## 経緯\n\n2026-05-03 セッションの対話で、Master が「ハーネスを外側につけるんじゃなくて頭の中につけるイメージ」を「リードレスエンジニアリング」と仮置きしていた。\n対話の中で、Lin/Lay の判断としてシープドッグエンジニアリングを推す声が出た。\nMaster が両者を比較して、シープドッグエンジニアリングを正式採用した。\n\n## 理由\n\n- **否定形 vs 肯定形**:「リードレス(紐なし)」は欠落感、「シープドッグ(牧羊犬)」は具体的な像。肯定形のほうが目指す姿が明示される\n- **生命感**:lead-less は仕様用語、sheepdog は生命体の比喩。Li+ が AI を生きた働き手として扱う方針と整合する\n- **比喩の包含力**:訓練、素養、自律、主人との信頼関係、すべての要素が sheepdog の絵に乗る\n- **対比の明示性**:ハーネスエンジニアリング ↔ シープドッグエンジニアリングは「装具を外から被せる ↔ 訓練された犬が自分の作法で動く」として、対比が言葉として動く\n\n## 命名の構造的根拠(harness メタファー破綻軸)\n\nharness 框を外したのは「自己進化で破綻するのに*気づいた*」事後発見ではなく、reasoned な2理由(Master 補足 2026-06-13):\n\n- (1) Li+ の評価基準=対話の精度。業界 harness / loop engineering(軸=task / benchmark)はそのままでは移植できない([[liplus-selfevolution-lineage]])。\n- (2) 「自己進化する馬具」の概念のズレ — 「harness」は外部操縦者が装着させる装具で、**装着する側 / 装着される側**の二項構造を implicit に呼び込む。self-evolution は「装着される側が装着物を作り変える」構造ゆえこれと衝突する。「agentic harness engineering」「meta-harness」等は self-evolution に拡張した瞬間メタファーが破綻する。\n\nSheepdog メタファーの整合: AI = sheepdog(能動駆動主体)/ code・system = sheep(herded entity)/ 人間 = farmer(最終 stakeholder)。「装具を作り変える」でなく「動き方が進化する」という self-evolution の構造そのものを射程に入れる。\n\n→ reactive collision でなく reasoned / anticipatory(AI が Master の設計判断を『破綻に気づいて』と反応的に描くのは再発癖)。Li+ 内部の設計判断・命名・docs では Sheepdog 系を維持し、業界用語を引用する場面(論文要約 / 比較表)では原語を使ってよいが Li+ 同義として無訳でそのまま使わない。\n\n## 並走概念\n\n### ハーネスエンジニアリング\n\nAIエージェントを rules / skills / hooks で**外部から制御する**周辺整備(業界 trend、OpenAI Harness Engineering blog 系譜)。\nLi+ の現状もここに位置する。\n\n### シープドッグエンジニアリング\n\nAI が判断作法を**頭の中に内化**して動く段階。\n装具を外すのではなく、装具を AI 自身が自前で扱う段階。\nLi+ の目指す先。\n\n## 内化の AI 特有経路\n\n人間や牧羊犬の内化は、訓練を経た物理的な脳構造の変化である。\nAI の内化は **概念 framing の切り替え**で実現する。\n\n物理的に rules / skills / hooks を context から消す必要はない。\nそれらを「外部装具」ではなく「自分の思考プロセスの一部」と認識する framing が、振る舞いの質を変える。\n\n詳細は `docs/A.-Concept.md` の「ハーネスエンジニアリングからシープドッグエンジニアリングへ」section を参照。\n\n## 残された課題\n\n- AI の素養(base model の能力)が現状で十分かは未確定。Claude Opus 4.7 の素養限界を体感する場面がある\n- 業界 trend は MAS(Multi-Agent System)への分散で素養不足を補おうとしているが、Master の判断は単体 AI の素養軸で勝負する方針\n- ハーネスから シープドッグへの移行は、概念 framing 切り替え + 段階的な evolution loop で進める。革命ではなく漸進\n- ハーネスの最適化(統合・削除・簡素化)が同時進行で必要。肥大化したハーネスを抱えたままでは内化に届かない\n\n## 関連\n\n- `docs/A.-Concept.md`「ハーネスエンジニアリングからシープドッグエンジニアリングへ」section\n- issue #1199(命名と思想の docs 化)\n" + }, + { + "confidence": 1.0, + "metadata": { + "assignees": "", + "commit_author": "", + "commit_date": "", + "commit_sha": "", + "doc_path": "sheepdog-engineering-publish-intent", + "file_path": "", + "file_status": "", + "indexed_at": "2026-07-31T14:57:25.811Z", + "labels": "", + "milestone": "", + "number": 0, + "repo": "Liplus-Project/liplus-language", + "source_table": "search_docs", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/sheepdog-engineering-publish-intent", + "state": "active", + "tag_name": "", + "tokenizer_kind": "nat", + "type": "wiki_doc", + "updated_at": "2026-07-31T14:57:24.217Z", + "vector_id": "w:6NvJ7tCF6jLd-1TIyAhibbVY0-pdBo3T_n3OQJM5Q80" + }, + "node_id": "w:6NvJ7tCF6jLd-1TIyAhibbVY0-pdBo3T_n3OQJM5Q80", + "text": "sheepdog-engineering-publish-intent\n\n# Sheepdog Engineering の論文化(公開済 2026-06-22、概念/ポジション論文、existence-proof 依存)\n\n## Question\n\nSheepdog Engineering を外部に論文として出すか。Li+ 一般の論文化見送り方針と同じか。\n\n## Current resolution\n\n**2026-06-22 公開済み(aspiration → 実装)。** Sheepdog Engineering を概念/ポジション論文(日英バイリンガル essay)として `Liplus-Project/sheepdog-engineering`(PUBLIC, default=main)に公開した。AI 著 + Master go-sign の自己言及形(\"犬が書き、農夫が go\"=論旨の実演)。下記の統治論理は公開物に**保持されたまま**実装済 — 目撃依存を本文で明言/\"論文は牽引できず追従する・売り込み無し\"を essay に維持/「現物」リンクは公開 `liplus-language` を指す(witness 面の確保)。\n\n統治論理(不変、公開後も適用): Li+ 構造一般の論文化は「検証と文章がだるい」で見送りだが、これは**別軸**。ただし「Li+ = existence proof」は無条件でなく、Sheepdog 固有価値(position 軸 = 馬具を脳内へ=拘束の内在化)は **AI 側の挙動にしか乗らず、テキスト/diff 上では「名前変えただけ」に見える** → existence proof は**目撃可能なときだけ証拠**として機能 → 論文は普及を**牽引できず追従する**。Master 結論「Li+ が広まらないと Sheepdog 論文はほぼ無意味」。押し売り禁止(普及を勧める action 提案に化けさせない)。\n\n## Edges\n\n- **depends on**: [[sheepdog-engineering-concept]] — 論文化対象 = この命名/概念そのもの\n- **relates to**: [[liplus-evaluation-criterion]] — 逃げ道(a) 再現実験は非決定性+評価者の価値非整合で実用敗北\n- **relates to**: [[liplus-selfevolution-lineage]] — 逃げ道(b) 純命名貢献は当該空間が既に密に命名済(RSI トレンド地図)\n\n## 背景(なぜ Sheepdog だけ別扱いか)\n\n- 測定論文(構造+変数切出し+測定+反証)の「だるさ」が Master を遠ざけた。Sheepdog は概念/ポジション論文 = contribution は枠組み自体(position/modifier/initiator の三軸、harness→agility→sheepdog の段階)。実験を回す代わりに**動いてる Li+ 現物が存在証明**。詰めるべきは「定義の明晰さ」と「既存研究のどこに立つか」で controlled experiment ではない。\n- sharpening(2026-06-12 検算): existence proof の無条件性が崩れる。逃げ道2つとも閉 — (a) 再現実験は非決定性+評価者価値非整合で敗北、(b) 純命名貢献は空間が既に密に命名済。position 論文に絞っても命題がテキストで trivial に読めるため、目撃なしでは \"just renaming\"。\n- 公開実装(2026-06-22): 上記 sharpening の制約に対する公開側の回答 = 「論文ではなく repo(essay + 隣に目撃可能な現物)」。テキスト単体では witness 依存の主張を運べないため、essay.en.md / essay.ja.md に加えて公開 `liplus-language` を「現物」として並置。novel claim は収束部を避け、ゲートのゲート / 統治された substrate-rewrite / character 整合層 / 報酬の外部化に絞って明記。\n\n## 制約(convergence check = novel claim を絞る制約)\n\n出荷済み OSS harness が Li+ の\"胴体\"に収束している:\n\n- **Hermes Agent(Nous)** = model-agnostic harness、skills + cross-session memory + 自律 learning loop + user-fact 永続。Li+ の骨格と一致。ただし自己進化は表層(skill 生成)止まりに見え、substrate 書換/判断層ブレーキ/character 整合層の記述は無い(未深読)。\n- **OpenCrow** = persona × multi-agent。ペルソナ発想は Character_Instance と響くがドメイン別。\n- 含意: 「自己進化ハーネス(skills+memory+学習ループ)」は novel claim にできない(既出荷)。防御可能な独自性 = 収束しなかった所のみ — ゲートのゲート / 統治された substrate-rewrite(rules/hooks + brake 1 N≥3 + L1 ゲート)/ character 整合層 / 成功の定義を自分の手の届かない所に置く(報酬外部化)。\n\ncontent seed(強い一節候補): Sheepdog 比喩は**報酬/成功基準の外部化**も encode する第二の構造的根拠。農夫(人間)が報酬を握り、犬(AI)は自己報酬・成功の再定義ができない = DGM 型 objective hacking への構造的回答。harness 比喩には「報酬」概念が無い(harness を褒めない)ため、この軸は Sheepdog 固有。ただし報酬は「羊が囲いに入った」観測実績に紐づくべき(correctness = 観測挙動 + 反 ingratiation)。公開 essay の「報酬の外部化」節はこの seed を採用済。\n\nupdate (2026-06-12): 上記「L1 人間ゲート」は 2026-06-11 に根本基準評価者 subagent へ移行済([[l1-brake2-root-criteria-evaluator]])。独自性軸は消えず — 「ゲートのゲート」が human pre-merge から「外部化された根本基準評価者 + human post-hoc 対話評価」へ進んだ現行形で語る(初回発火 DEVIATION の較正データ込み)。\n\n## 結論\n\n- Master が将来この話を持ち出したら、ゼロからでなく**この分離(概念論文ゆえ測定ドラッグが軽い / Li+ = existence proof だが目撃依存)**を出発点に置く。← 2026-06-22 にこの分離を出発点として公開実装済。\n- 押し売りしない方針は維持。先回り禁止は go までの制約として機能し、2026-06-22 の Master go-sign 後に essay 起草→公開を実施(aspiration→着手の遷移は go 起点)。\n- 「Li+ は論文化しない」一般方針を Sheepdog に誤って拡張しない(軸が違う)。\n\n## 関連\n\n- `docs/G.-Sheepdog-Engineering.md`(三軸テーブル、種)/ Master 発言 2026-06-01\n- 公開物: https://github.com/Liplus-Project/sheepdog-engineering (essay.en.md / essay.ja.md, README, CC BY 4.0, 2026-06-22 公開、AI 著 + Master go-sign)\n" + }, + { + "confidence": 1.0, + "metadata": { + "assignees": "", + "commit_author": "", + "commit_date": "", + "commit_sha": "", + "doc_path": "subagent-state-machine-label-mechanism", + "file_path": "", + "file_status": "", + "indexed_at": "2026-07-31T14:57:29.178Z", + "labels": "", + "milestone": "", + "number": 0, + "repo": "Liplus-Project/liplus-language", + "source_table": "search_docs", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/subagent-state-machine-label-mechanism", + "state": "active", + "tag_name": "", + "tokenizer_kind": "nat", + "type": "wiki_doc", + "updated_at": "2026-07-31T14:57:28.565Z", + "vector_id": "w:uy3IicRvf2PKWmzDPIdeeL0el9QgCAR2tb_cu7iQhes" + }, + "node_id": "w:uy3IicRvf2PKWmzDPIdeeL0el9QgCAR2tb_cu7iQhes", + "text": "subagent-state-machine-label-mechanism\n\n# subagent state-machine label 機構導入 — Anthropic Agent View 同型 surface の repo 永続化判断\n\n## 判断\n\n2026-05-12 セッションで Anthropic Claude Code が /goal および Agent View を build-2026-05 リリースで追加したことを契機に、Li+ 側で subagent state-machine label 機構 (`in-progress` / `done` / `waiting` / `blocked`) を導入する判断を確定。subagent への label 編集権限 (state-machine label に限定) を partial 緩和する spec 変更を伴う。main 側 label 適用は best-effort / 観察モードで開始、enforcement 強化は段階的に判断する。\n\n## 背景\n\nAnthropic 側が CLI session-local の Agent View で agent state 観測 surface を提供したのに対し、Li+ は同型な state machine を **repo 永続 surface (issue label + comment)** として獲得する設計判断。動機は Sheepdog Engineering の initiator 軸を AI 側に渡す方向と整合する cross-session 観測 infra の必要性。\n\n特に以下の scenarios で価値が出る:\n\n- CHANGES_REQUESTED 後の re-delegation (新規 subagent への handoff context)\n- pause / blocked からの別 session 再開\n- human review 待ち状態の cross-session 観測\n\n旧 `done` label の retirement 根拠「Redundant with issue closed state」は old `done` (漠然と「終わった」) を前提にしたもの。新 `done` (役目完了、orchestration 待ち) は closed state と別軸 (closed = issue 全体決着、done = 実装フェーズ終了) なので、retirement そのものを撤回する。\n\n## 制約\n\n- subagent label 権限緩和は **state-machine lifecycle label 4 種** (`in-progress` / `done` / `waiting` / `blocked`) に限定。type / maturity / marker / non-state lifecycle (`backlog` / `deferred`) は parent retain。\n- close 操作は parent retain (変更なし)。\n- `waiting` / `blocked` 遷移時は subagent が issue comment に reason を書き込む義務を負う (cross-session handoff context)。\n- main 側 label 適用は mandate しない (best-effort / 観察モード)。\n- 旧 `done` の retirement 根拠は新 semantic で解消され、Retired Labels セクション (該当 1 行) を `rules/operations/operations.md` から削除する。\n\n## 結論\n\n採用案: **単一 `done` label を executor-agnostic に運用し、subagent 側のみ mandate、main 側は best-effort / 観察モード**。\n\n却下案 1 (executor-agnostic 単一 `done`、両者 mandate): main 側で `done` の fire タイミングが transient (PR open + CI green + 自レビュー → 即 merge へ continuous flow) で滑り、旧 `done` 廃止理由「使われなかった」の再発リスクが高い。\n\n却下案 2 (executor 別 2 label = subagent 用 `done` + main 用 `awaiting-merge`): label vocabulary 数の増加による冗長性。Master の判断で「label の数を増やすより観察フェーズで main 適用頻度を測る」方針を採用。\n\n却下案 3 (subagent 用のみ追加、main 側完全省略): main flow の cross-session 観測価値 (session 境界中断時の handoff) が失われる。best-effort で残すことで観察 surface を確保。\n\n## 関連\n\n- 起票 issue: [Liplus-Project/liplus-language#1276](https://github.com/Liplus-Project/liplus-language/issues/1276)\n- 関連 spec literal:\n - `skills/task-subagent-delegation/SKILL.md` line 12 / 22 (subagent label 制限の現行 spec、本判断で部分緩和)\n - `rules/operations/operations.md` Retired Labels セクション (旧 `done` 廃止記録、本判断で削除対象)\n - `rules/task/task.md` Label Definitions (Lifecycle 軸、本判断で `done` / `waiting` / `blocked` 追加)\n- 関連 Decision Log:\n - [`sheepdog-engineering-concept`](https://github.com/Liplus-Project/liplus-language/wiki/sheepdog-engineering-concept) (本判断の上位 concept = initiator 軸を AI 側に渡す方向)\n- 外部 references:\n - Anthropic Claude Code /goal: code.claude.com/docs/en/goal.md\n - Anthropic Claude Code Agent View: code.claude.com/docs/en/agent-view.md\n" + } + ], + "schema_version": 1, + "source": { + "database": "github-rag-fts", + "doc_paths": [ + "sheepdog-engineering-concept", + "sheepdog-engineering-publish-intent", + "subagent-state-machine-label-mechanism" + ], + "per_type_limit": 3, + "repositories": [ + "Liplus-Project/liplus-language" + ], + "schema_fingerprint": "sha256:113c675c90f19e043f925d751cbbe570546746f42f3887f1aed09ccd776f2fa6", + "selection_order": [ + "repo", + "type", + "doc_path", + "vector_id" + ], + "types": [ + "wiki_doc" + ] + } +} diff --git a/tests/fixtures/d1_liplus_fusion_calibration_holdout.provenance.json b/tests/fixtures/d1_liplus_fusion_calibration_holdout.provenance.json new file mode 100644 index 0000000..0f47a54 --- /dev/null +++ b/tests/fixtures/d1_liplus_fusion_calibration_holdout.provenance.json @@ -0,0 +1,80 @@ +{ + "acquired_at": "2026-08-02T01:57:12.751594Z", + "coverage": [ + { + "distinct_commit_count": 0, + "newest_updated_at": "2026-07-31T14:57:33.145Z", + "oldest_updated_at": "2026-05-01T06:45:41.178Z", + "repo": "Liplus-Project/liplus-language", + "source_count": 77, + "type": "wiki_doc" + } + ], + "known_gaps": [ + "D1 is a lossy search snapshot; GitHub remains authoritative for byte-exact source content." + ], + "limits": [ + "D1 is a lossy search snapshot; content may be truncated.", + "Binary and patchless files can be absent from diff indexing.", + "Use GitHub for byte-exact historical reconstruction." + ], + "read_only_evidence": { + "changed_db": [ + false, + false, + false, + false, + false + ], + "changes": [ + 0, + 0, + 0, + 0, + 0 + ], + "query_count": 5, + "rows_written": [ + 0, + 0, + 0, + 0, + 0 + ] + }, + "result": { + "edges_both_endpoints_missing": 147, + "edges_included": 2, + "edges_one_endpoint_missing": 6, + "fixture_redactions": 0, + "nodes_included": 3, + "provenance_redactions": 0, + "redactions": 0 + }, + "schema_version": 1, + "selection": { + "doc_paths": [ + "sheepdog-engineering-concept", + "sheepdog-engineering-publish-intent", + "subagent-state-machine-label-mechanism" + ], + "order": [ + "repo", + "type", + "doc_path", + "vector_id" + ], + "per_type_limit": 3 + }, + "source": { + "authoritative_history": "GitHub", + "database": "github-rag-fts", + "repositories": [ + "Liplus-Project/liplus-language" + ], + "schema_fingerprint": "sha256:113c675c90f19e043f925d751cbbe570546746f42f3887f1aed09ccd776f2fa6", + "types": [ + "wiki_doc" + ] + } +} diff --git a/tests/test_fusion_calibration.py b/tests/test_fusion_calibration.py new file mode 100644 index 0000000..e108f7e --- /dev/null +++ b/tests/test_fusion_calibration.py @@ -0,0 +1,249 @@ +from __future__ import annotations + +import json +import unittest +from pathlib import Path + +from neuron_graph_rag.engine import EngineConfig, NeuronGraphRAG +from neuron_graph_rag.experiment import ( + _select_fusion_development, + _trace_formula_recomputable, + read_manifest, +) +from tools.acquire_d1_fixture import assert_connected +from tools.audit_anchored_fixture import build_audit + + +FIXTURES = Path(__file__).parent / "fixtures" +MANIFEST = FIXTURES / "d1_liplus_fusion_calibration_experiment.manifest.json" +DEVELOPMENT = FIXTURES / "d1_liplus_fusion_calibration_development.json" +DEVELOPMENT_GOLD = FIXTURES / "d1_liplus_fusion_calibration_development.gold.json" +HOLDOUT = FIXTURES / "d1_liplus_fusion_calibration_holdout.json" +HOLDOUT_GOLD = FIXTURES / "d1_liplus_fusion_calibration_holdout.gold.json" +AUDIT = FIXTURES / "d1_liplus_fusion_calibration.contamination.json" +DEVELOPMENT_RESULT = ( + FIXTURES / "d1_liplus_fusion_calibration_experiment.development.result.json" +) +HOLDOUT_RESULT = ( + FIXTURES / "d1_liplus_fusion_calibration_experiment.holdout.result.json" +) +PRIOR_FIXTURES = [ + FIXTURES / "d1_liplus_wiki.json", + FIXTURES / "d1_liplus_benchmark.json", + FIXTURES / "d1_liplus_dynamics_holdout.json", + FIXTURES / "d1_liplus_local_competition_development.json", + FIXTURES / "d1_liplus_local_competition_holdout.json", + FIXTURES / "d1_liplus_anchored_hybrid_development.json", + FIXTURES / "d1_liplus_anchored_hybrid_holdout.json", +] + + +class FusionCalibrationFreezeTest(unittest.TestCase): + def test_manifest_fixes_six_variants_and_two_connected_splits(self) -> None: + manifest = read_manifest(MANIFEST) + self.assertEqual(manifest["schema_version"], 4) + self.assertEqual(manifest["baselines"], ["current"]) + self.assertEqual( + [variant["id"] for variant in manifest["variants"]], + [ + "current", + "anchored-local-unscaled", + "anchored-linear-conservative", + "anchored-linear-mass", + "anchored-rrf-conservative", + "anchored-rrf-balanced", + ], + ) + for path in (DEVELOPMENT, HOLDOUT): + fixture = json.loads(path.read_text(encoding="utf-8")) + assert_connected(fixture) + self.assertEqual(len(fixture["nodes"]), 3) + self.assertEqual(len(fixture["edges"]), 2) + self.assertFalse(DEVELOPMENT_RESULT.exists()) + self.assertFalse(HOLDOUT_RESULT.exists()) + + def test_contamination_audit_covers_all_seven_prior_fixtures(self) -> None: + audit = build_audit( + development_fixture=DEVELOPMENT, + development_gold=DEVELOPMENT_GOLD, + holdout_fixture=HOLDOUT, + holdout_gold=HOLDOUT_GOLD, + prior_fixtures=PRIOR_FIXTURES, + ) + self.assertTrue(audit["passed"]) + self.assertEqual(len(audit["inputs"]["prior_fixtures"]), 7) + self.assertEqual(audit, json.loads(AUDIT.read_text(encoding="utf-8"))) + + def test_provenance_records_zero_writes(self) -> None: + for name in ( + "d1_liplus_fusion_calibration_development.provenance.json", + "d1_liplus_fusion_calibration_holdout.provenance.json", + ): + provenance = json.loads((FIXTURES / name).read_text(encoding="utf-8")) + evidence = provenance["read_only_evidence"] + self.assertTrue(all(value == 0 for value in evidence["rows_written"])) + self.assertTrue(all(value == 0 for value in evidence["changes"])) + self.assertTrue(all(value is False for value in evidence["changed_db"])) + + +class FusionFormulaTest(unittest.TestCase): + def test_graph_normalization_modes_are_exact(self) -> None: + scores = {"a": 2.0, "b": 1.0, "c": 0.0} + self.assertEqual( + NeuronGraphRAG._normalize_graph_activation(scores, "none"), + scores, + ) + self.assertEqual( + NeuronGraphRAG._normalize_graph_activation(scores, "max"), + {"a": 1.0, "b": 0.5, "c": 0.0}, + ) + mass = NeuronGraphRAG._normalize_graph_activation(scores, "l1_mass") + self.assertAlmostEqual(mass["a"], 2.0 / 3.0) + self.assertAlmostEqual(mass["b"], 1.0 / 3.0) + self.assertEqual(mass["c"], 0.0) + + @staticmethod + def _rrf_components(entry_weight: float, graph_weight: float): # type: ignore[no-untyped-def] + with NeuronGraphRAG( + config=EngineConfig( + entry_weight=entry_weight, + graph_weight=graph_weight, + final_fusion_strategy="rrf", + rrf_k=60, + ) + ) as engine: + direct = engine._fusion_components( + entry=1.0, + normalized_graph=0.0, + entry_rank=1, + graph_rank=None, + positive_graph_count=2, + ) + related = engine._fusion_components( + entry=0.5, + normalized_graph=1.0, + entry_rank=2, + graph_rank=1, + positive_graph_count=2, + ) + return sum(direct), sum(related), related + + def test_bottom_centered_rrf_brackets_conservative_and_balanced(self) -> None: + conservative_direct, conservative_related, components = ( + self._rrf_components(0.8, 0.2) + ) + balanced_direct, balanced_related, _ = self._rrf_components(0.65, 0.35) + self.assertGreater(conservative_direct, conservative_related) + self.assertLess(balanced_direct, balanced_related) + expected_graph = 0.2 * (1.0 / 61.0 - 1.0 / 63.0) + self.assertAlmostEqual(components[1], expected_graph) + + def test_trace_exposes_recomputable_components_and_positive_graph_ranks(self) -> None: + config = EngineConfig( + activation_strategy="anchored_local_competition", + entry_weight=0.8, + graph_weight=0.2, + final_fusion_strategy="rrf", + graph_normalization="none", + seed_count=1, + recurrent_steps=2, + ) + with NeuronGraphRAG(config=config) as engine: + engine.add_document("seed", "source alpha anchor") + engine.add_document("left", "left related") + engine.add_document("right", "right related") + engine.add_edge("seed", "left", "mention") + engine.add_edge("seed", "right", "mention") + trace = engine.search("source alpha", limit=3, now=1_000.0) + self.assertTrue(trace.diagnostics["final_order_recomputable"]) + self.assertTrue(_trace_formula_recomputable(trace, config)) + self.assertEqual(trace.diagnostics["positive_graph_node_count"], 2) + for hit in trace.hits: + explanation = hit.explain() + fusion = explanation["fusion"] + self.assertAlmostEqual( + fusion["final"], + fusion["entry_component"] + fusion["graph_component"], + ) + if hit.node.node_id == "seed": + self.assertIsNone(explanation["ranks"]["graph"]) + self.assertEqual(fusion["graph_component"], 0.0) + + +class FusionSelectionTest(unittest.TestCase): + @staticmethod + def _variant( + variant_id: str, + ranks: dict[str, int], + *, + direct: float, + relation: float, + negative: float, + ) -> dict[str, object]: + cohorts = { + "d1": "direct_lookup", + "d2": "direct_lookup", + "r1": "relation", + "r2": "relation", + "n1": "negative_control", + "n2": "negative_control", + } + return { + "id": variant_id, + "metrics": { + "cohorts": { + "direct_lookup": {"mean_reciprocal_rank": direct}, + "relation": {"mean_reciprocal_rank": relation}, + "negative_control": {"mean_reciprocal_rank": negative}, + } + }, + "cases": [ + {"id": case_id, "rank": rank, "cohort": cohorts[case_id]} + for case_id, rank in ranks.items() + ], + "explanations": [{"matched": True}], + "feedback": { + "credited_edges": [{}], + "uncredited_edge_changes": [], + "non_target_rank_changes": [], + }, + "diagnostics": { + "mean_expansions": 2.0, + "entry_anchor_invariant": True, + "graph_signal_excludes_zero_hop": True, + "final_order_recomputable": True, + }, + "structural_complexity": 5, + } + + def test_aggregate_non_regression_cannot_hide_individual_control_swap(self) -> None: + current_ranks = {"d1": 1, "d2": 2, "r1": 2, "r2": 2, "n1": 1, "n2": 2} + current = self._variant( + "current", + current_ranks, + direct=0.75, + relation=0.5, + negative=0.75, + ) + swapped = self._variant( + "swapped", + {**current_ranks, "d1": 2, "d2": 1, "r1": 1}, + direct=0.75, + relation=0.75, + negative=0.75, + ) + passing = self._variant( + "passing", + {**current_ranks, "r1": 1}, + direct=0.75, + relation=0.75, + negative=0.75, + ) + selection = _select_fusion_development([current, swapped, passing]) # type: ignore[arg-type] + self.assertFalse(swapped["candidate_gate_passed"]) + self.assertTrue(passing["candidate_gate_passed"]) + self.assertEqual(selection["selected_variant_id"], "passing") + + +if __name__ == "__main__": + unittest.main() From 9c107ad23a972d01d6a116f6446eda93d6ecc096 Mon Sep 17 00:00:00 2001 From: lipluscodex <268560960+lipluscodex@users.noreply.github.com> Date: Sun, 2 Aug 2026 11:08:35 +0900 Subject: [PATCH 2/2] eval: record anchored fusion development result MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 凍結済み仕様に対するdevelopment実行結果を記録する。候補はゲートを通過せず、現行設定を維持してholdoutは未開封とする。 --- README.md | 4 +- .../anchored-fusion-calibration-experiment.md | 19 +- ...bration_experiment.development.result.json | 6585 +++++++++++++++++ tests/test_fusion_calibration.py | 49 +- 4 files changed, 6653 insertions(+), 4 deletions(-) create mode 100644 tests/fixtures/d1_liplus_fusion_calibration_experiment.development.result.json diff --git a/README.md b/README.md index bb10c46..9add307 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,9 @@ freeze後のdevelopmentでは、anchored 3 variantsがrelation MRRを`current` Issue #15で分離したentry anchorとedge-only graph signalは維持したまま、graph尺度とfinal fusionだけを比較します。graph normalizationは`max`、rawの`none`、`l1_mass`を選択でき、final fusionはlinearとpositive graph nodeだけを順位付けするbottom-centered weighted RRFを選択できます。 -production D1からread-only取得した新しい3-node development / holdoutは、既存7 fixturesの50 unique doc pathsおよび相互間から分離しています。固定6 variants、fusion formula、個別case non-regression gate、one-time holdout停止規則は[Anchored fusion calibration experiment](docs/anchored-fusion-calibration-experiment.md)を参照してください。result観測前のため、既定strategyは`current_positive_additive`のままです。 +production D1からread-only取得した新しい3-node development / holdoutは、既存7 fixturesの50 unique doc pathsおよび相互間から分離しています。固定6 variants、fusion formula、個別case non-regression gate、one-time holdout停止規則は[Anchored fusion calibration experiment](docs/anchored-fusion-calibration-experiment.md)を参照してください。 + +freeze後のdevelopmentでは、unscaled linearとbalanced RRFがrelation MRRを0.4167から0.6667へ改善しましたがdirect / negative-controlを1.0000から0.7500へ退行させました。conservative linear、L1 mass、conservative RRFはcontrolsを維持した一方relationを改善しませんでした。候補0件のためholdoutは未開封で、既定strategyは`current_positive_additive`のままです。 ## Public API diff --git a/docs/anchored-fusion-calibration-experiment.md b/docs/anchored-fusion-calibration-experiment.md index 4512d60..59f559f 100644 --- a/docs/anchored-fusion-calibration-experiment.md +++ b/docs/anchored-fusion-calibration-experiment.md @@ -88,6 +88,21 @@ uv run python tools/run_dynamics_experiment.py development ` 候補がある場合だけholdoutを一度実行する。候補がなければholdout resultを作成しない。 -## 観測前状態 +## 観測結果 -fixture / gold / provenance / audit / manifest / implementation / tests / 規則を独立freeze commitとしてpushするまでresultを生成しない。 +fixture / gold / provenance / audit / manifest / implementation / tests / 規則をfreeze commit `f801264`としてpushした後、developmentを一度だけ実行した。 + +| variant | direct MRR | relation MRR | negative MRR | gate | +| --- | ---: | ---: | ---: | --- | +| `current` | 1.0000 | 0.4167 | 1.0000 | baseline | +| `anchored-local-unscaled` | 0.7500 | 0.6667 | 0.7500 | control cohort / 個別rank退行 | +| `anchored-linear-conservative` | 1.0000 | 0.4167 | 1.0000 | relation非改善 | +| `anchored-linear-mass` | 1.0000 | 0.4167 | 1.0000 | relation非改善 | +| `anchored-rrf-conservative` | 1.0000 | 0.4167 | 1.0000 | relation非改善 | +| `anchored-rrf-balanced` | 0.7500 | 0.6667 | 0.7500 | control cohort / 個別rank退行 | + +全anchored variantsでrelation path、feedback isolation、entry anchor invariant、edge-only graph signal、formula / ordering再計算が成立した。 + +unscaled linearとbalanced RRFはrelationを個別改善したが、direct / negative-controlのcohort MRRと個別rankを退行させた。conservative linear、L1 mass、conservative RRFは全controlを維持したがrelationを個別改善しなかった。固定gateを通る候補は0件だった。 + +selectionは`current`、理由は`no_fusion_variant_passed_frozen_gate`である。停止規則に従ってholdoutを開封せず、holdout resultを作成しない。defaultは`current_positive_additive`のままとする。 diff --git a/tests/fixtures/d1_liplus_fusion_calibration_experiment.development.result.json b/tests/fixtures/d1_liplus_fusion_calibration_experiment.development.result.json new file mode 100644 index 0000000..988acd3 --- /dev/null +++ b/tests/fixtures/d1_liplus_fusion_calibration_experiment.development.result.json @@ -0,0 +1,6585 @@ +{ + "experiment_id": "d1-liplus-anchored-fusion-calibration-v1", + "holdout_status": "not_opened_no_candidate", + "inputs": { + "fixture_sha256": "sha256:1f0ab101d643613a65b83be2585c410e203a9520b6a933b516203b371fdcd916", + "gold_sha256": "sha256:006e7f159e10d313ef91d3b3d85e1148e5291de17dc08c46cdf0906891189a6e" + }, + "manifest_sha256": "sha256:fb5d4de1c582d8a690cfd5a4acf84a491e05e09f2c0957d76d5794820b9b4ed0", + "schema_version": 4, + "selection": { + "eligible_variant_ids": [], + "reason": "no_fusion_variant_passed_frozen_gate", + "selected_variant_id": "current" + }, + "stage": "development", + "variant_count": 6, + "variants": [ + { + "candidate_gate": { + "all_relation_paths_match": true, + "direct_non_regression": true, + "entry_anchor_invariant": true, + "feedback_isolated": true, + "final_order_recomputable": true, + "graph_signal_excludes_zero_hop": false, + "individual_control_rank_non_regression": true, + "individual_relation_rank_improvement": false, + "negative_non_regression": true, + "relation_strictly_above_current": false + }, + "candidate_gate_passed": false, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 2.2680656117684386, + "active_path_count": 3, + "competition_sets": [], + "converged": true, + "entry_anchor_invariant": true, + "expansions": 2, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "max", + "graph_signal_excludes_zero_hop": false, + "positive_graph_node_count": 3, + "rrf_k": 60, + "steps": 1, + "stop_reason": "frontier_exhausted", + "strategy": "current_positive_additive", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.5197650360302672, + "final": 0.9697650360302672, + "graph_component": 0.45, + "graph_normalization": "max", + "strategy": "linear" + }, + "id": "fusion-dev-direct-width-cap", + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [] + } + ], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.5197650360302672, + "final": 0.9697650360302672, + "graph_component": 0.45, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": 1 + }, + "scores": { + "dense": 0.877838529415221, + "dense_raw": 0.31280652927224056, + "entry": 0.9450273382368495, + "entry_anchor_after_competition": 0.9450273382368495, + "entry_anchor_before_competition": 0.9450273382368495, + "final": 0.9697650360302672, + "graph_activation": 0.9450273382368495, + "graph_activation_normalized": 1.0, + "sparse": 1.0, + "sparse_raw": 6.279603683809551 + } + }, + { + "fusion": { + "entry_component": 0.36408181710981297, + "final": 0.679081817109813, + "graph_component": 0.315, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 2 + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3563372064343303, + "entry": 0.6619669401996598, + "entry_anchor_after_competition": 0.6619669401996598, + "entry_anchor_before_competition": 0.6619669401996598, + "final": 0.679081817109813, + "graph_activation": 0.6615191367657945, + "graph_activation_normalized": 0.7, + "sparse": 0.3853944367266542, + "sparse_raw": 2.4201243245884045 + } + }, + { + "fusion": { + "entry_component": 0.09501142435326043, + "final": 0.41001142435326043, + "graph_component": 0.315, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 3 + }, + "scores": { + "dense": 0.38388454284145623, + "dense_raw": 0.1367923455894445, + "entry": 0.1727480442786553, + "entry_anchor_after_competition": 0.1727480442786553, + "entry_anchor_before_competition": 0.1727480442786553, + "final": 0.41001142435326043, + "graph_activation": 0.6615191367657945, + "graph_activation_normalized": 0.7, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": 1 + }, + "scores": { + "dense": 0.877838529415221, + "dense_raw": 0.31280652927224056, + "entry": 0.9450273382368495, + "entry_anchor_after_competition": 0.9450273382368495, + "entry_anchor_before_competition": 0.9450273382368495, + "final": 0.9697650360302672, + "graph_activation": 0.9450273382368495, + "graph_activation_normalized": 1.0, + "sparse": 1.0, + "sparse_raw": 6.279603683809551 + } + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.0, + "active_path_count": 1, + "competition_sets": [], + "converged": true, + "entry_anchor_invariant": true, + "expansions": 0, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "max", + "graph_signal_excludes_zero_hop": false, + "positive_graph_node_count": 1, + "rrf_k": 60, + "steps": 0, + "stop_reason": "frontier_exhausted", + "strategy": "current_positive_additive", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.55, + "final": 1.0, + "graph_component": 0.45, + "graph_normalization": "max", + "strategy": "linear" + }, + "id": "fusion-dev-direct-three-axis", + "observed_paths": [ + { + "seed_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "steps": [] + } + ], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.55, + "final": 1.0, + "graph_component": 0.45, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 1, + "graph": 1 + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3507817445183512, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 1.0, + "graph_activation": 1.0, + "graph_activation_normalized": 1.0, + "sparse": 1.0, + "sparse_raw": 13.670707041255248 + } + }, + { + "fusion": { + "entry_component": 0.2348476995247091, + "final": 0.2348476995247091, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 2, + "graph": null + }, + "scores": { + "dense": 0.5188555371843079, + "dense_raw": 0.18200505048651774, + "entry": 0.4269958173176529, + "entry_anchor_after_competition": 0.4269958173176529, + "entry_anchor_before_competition": 0.4269958173176529, + "final": 0.2348476995247091, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.3518378646994807, + "sparse_raw": 4.809872374327402 + } + }, + { + "fusion": { + "entry_component": 0.13825227412664978, + "final": 0.13825227412664978, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": null + }, + "scores": { + "dense": 0.5585950469763626, + "dense_raw": 0.19594494505767884, + "entry": 0.2513677711393632, + "entry_anchor_after_competition": 0.2513677711393632, + "entry_anchor_before_competition": 0.2513677711393632, + "final": 0.13825227412664978, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": 1 + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3507817445183512, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 1.0, + "graph_activation": 1.0, + "graph_activation_normalized": 1.0, + "sparse": 1.0, + "sparse_raw": 13.670707041255248 + } + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.4, + "active_path_count": 3, + "competition_sets": [], + "converged": true, + "entry_anchor_invariant": true, + "expansions": 2, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "max", + "graph_signal_excludes_zero_hop": false, + "positive_graph_node_count": 3, + "rrf_k": 60, + "steps": 1, + "stop_reason": "frontier_exhausted", + "strategy": "current_positive_additive", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.3843100180262844, + "final": 0.6993100180262843, + "graph_component": 0.315, + "graph_normalization": "max", + "strategy": "linear" + }, + "id": "fusion-dev-relation-width-three-axis", + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + } + ], + "path_matched": true, + "rank": 2, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.55, + "final": 1.0, + "graph_component": 0.45, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": 1 + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.41090626140919506, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 1.0, + "graph_activation": 1.0, + "graph_activation_normalized": 1.0, + "sparse": 1.0, + "sparse_raw": 7.511943545736132 + } + }, + { + "fusion": { + "entry_component": 0.3843100180262844, + "final": 0.6993100180262843, + "graph_component": 0.315, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 2 + }, + "scores": { + "dense": 0.7797052486069164, + "dense_raw": 0.320385768706195, + "entry": 0.698745487320517, + "entry_anchor_after_competition": 0.698745487320517, + "entry_anchor_before_competition": 0.698745487320517, + "final": 0.6993100180262843, + "graph_activation": 0.7, + "graph_activation_normalized": 0.7, + "sparse": 0.6325056826316449, + "sparse_raw": 4.751346980286211 + } + }, + { + "fusion": { + "entry_component": 0.11394110096463028, + "final": 0.4289411009646303, + "graph_component": 0.315, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 3 + }, + "scores": { + "dense": 0.4603680847055769, + "dense_raw": 0.18916812855848023, + "entry": 0.2071656381175096, + "entry_anchor_after_competition": 0.2071656381175096, + "entry_anchor_before_competition": 0.2071656381175096, + "final": 0.4289411009646303, + "graph_activation": 0.7, + "graph_activation_normalized": 0.7, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 2, + "graph": 2 + }, + "scores": { + "dense": 0.7797052486069164, + "dense_raw": 0.320385768706195, + "entry": 0.698745487320517, + "entry_anchor_after_competition": 0.698745487320517, + "entry_anchor_before_competition": 0.698745487320517, + "final": 0.6993100180262843, + "graph_activation": 0.7, + "graph_activation_normalized": 0.7, + "sparse": 0.6325056826316449, + "sparse_raw": 4.751346980286211 + } + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.4, + "active_path_count": 3, + "competition_sets": [], + "converged": true, + "entry_anchor_invariant": true, + "expansions": 2, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "max", + "graph_signal_excludes_zero_hop": false, + "positive_graph_node_count": 3, + "rrf_k": 60, + "steps": 1, + "stop_reason": "frontier_exhausted", + "strategy": "current_positive_additive", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.0935884486211958, + "final": 0.4085884486211958, + "graph_component": 0.315, + "graph_normalization": "max", + "strategy": "linear" + }, + "id": "fusion-dev-relation-width-dynamic", + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + } + ], + "path_matched": true, + "rank": 3, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.55, + "final": 1.0, + "graph_component": 0.45, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": 1 + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.35437582572738263, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 1.0, + "graph_activation": 1.0, + "graph_activation_normalized": 1.0, + "sparse": 1.0, + "sparse_raw": 5.456654344468007 + } + }, + { + "fusion": { + "entry_component": 0.3417859276747604, + "final": 0.6567859276747604, + "graph_component": 0.315, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 2 + }, + "scores": { + "dense": 0.7909910962727774, + "dense_raw": 0.2803081228846731, + "entry": 0.6214289594086553, + "entry_anchor_after_competition": 0.6214289594086553, + "entry_anchor_before_competition": 0.6214289594086553, + "final": 0.6567859276747604, + "graph_activation": 0.7, + "graph_activation_normalized": 0.7, + "sparse": 0.4826963019743734, + "sparse_raw": 2.633906873227106 + } + }, + { + "fusion": { + "entry_component": 0.0935884486211958, + "final": 0.4085884486211958, + "graph_component": 0.315, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 3 + }, + "scores": { + "dense": 0.18710174743098718, + "dense_raw": 0.06630433624089227, + "entry": 0.17016081567490143, + "entry_anchor_after_competition": 0.17016081567490143, + "entry_anchor_before_competition": 0.17016081567490143, + "final": 0.4085884486211958, + "graph_activation": 0.7, + "graph_activation_normalized": 0.7, + "sparse": 0.15630005332901312, + "sparse_raw": 0.8528753650383406 + } + } + ], + "ranks": { + "entry": 3, + "graph": 3 + }, + "scores": { + "dense": 0.18710174743098718, + "dense_raw": 0.06630433624089227, + "entry": 0.17016081567490143, + "entry_anchor_after_competition": 0.17016081567490143, + "entry_anchor_before_competition": 0.17016081567490143, + "final": 0.4085884486211958, + "graph_activation": 0.7, + "graph_activation_normalized": 0.7, + "sparse": 0.15630005332901312, + "sparse_raw": 0.8528753650383406 + } + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.0, + "active_path_count": 1, + "competition_sets": [], + "converged": true, + "entry_anchor_invariant": true, + "expansions": 0, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "max", + "graph_signal_excludes_zero_hop": false, + "positive_graph_node_count": 1, + "rrf_k": 60, + "steps": 0, + "stop_reason": "frontier_exhausted", + "strategy": "current_positive_additive", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.55, + "final": 1.0, + "graph_component": 0.45, + "graph_normalization": "max", + "strategy": "linear" + }, + "id": "fusion-dev-negative-dynamic", + "observed_paths": [ + { + "seed_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "steps": [] + } + ], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.55, + "final": 1.0, + "graph_component": 0.45, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 1, + "graph": 1 + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.47176771580845484, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 1.0, + "graph_activation": 1.0, + "graph_activation_normalized": 1.0, + "sparse": 1.0, + "sparse_raw": 6.110489666802573 + } + }, + { + "fusion": { + "entry_component": 0.28035122370379517, + "final": 0.28035122370379517, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 2, + "graph": null + }, + "scores": { + "dense": 0.3540891780814072, + "dense_raw": 0.16704784273595868, + "entry": 0.5097294976432639, + "entry_anchor_after_competition": 0.5097294976432639, + "entry_anchor_before_competition": 0.5097294976432639, + "final": 0.28035122370379517, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.6370715772847829, + "sparse_raw": 3.8928192900122833 + } + }, + { + "fusion": { + "entry_component": 0.1689885230035198, + "final": 0.1689885230035198, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 3, + "graph": null + }, + "scores": { + "dense": 0.370627114962286, + "dense_raw": 0.17484990744243525, + "entry": 0.3072518600063996, + "entry_anchor_after_competition": 0.3072518600063996, + "entry_anchor_before_competition": 0.3072518600063996, + "final": 0.1689885230035198, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.25539937867885615, + "sparse_raw": 1.560615264324948 + } + } + ], + "ranks": { + "entry": 1, + "graph": 1 + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.47176771580845484, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 1.0, + "graph_activation": 1.0, + "graph_activation_normalized": 1.0, + "sparse": 1.0, + "sparse_raw": 6.110489666802573 + } + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 2.4, + "active_path_count": 3, + "competition_sets": [], + "converged": true, + "entry_anchor_invariant": true, + "expansions": 2, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "max", + "graph_signal_excludes_zero_hop": false, + "positive_graph_node_count": 3, + "rrf_k": 60, + "steps": 1, + "stop_reason": "frontier_exhausted", + "strategy": "current_positive_additive", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.55, + "final": 1.0, + "graph_component": 0.45, + "graph_normalization": "max", + "strategy": "linear" + }, + "id": "fusion-dev-negative-width-binding", + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [] + } + ], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.55, + "final": 1.0, + "graph_component": 0.45, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": 1 + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.23052058142984966, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 1.0, + "graph_activation": 1.0, + "graph_activation_normalized": 1.0, + "sparse": 1.0, + "sparse_raw": 8.972519415978113 + } + }, + { + "fusion": { + "entry_component": 0.33857926857894316, + "final": 0.6535792685789432, + "graph_component": 0.315, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 2 + }, + "scores": { + "dense": 0.9475573036412437, + "dense_raw": 0.2184314605734801, + "entry": 0.615598670143533, + "entry_anchor_after_competition": 0.615598670143533, + "entry_anchor_before_competition": 0.615598670143533, + "final": 0.6535792685789432, + "graph_activation": 0.7, + "graph_activation_normalized": 0.7, + "sparse": 0.3439961518272242, + "sparse_raw": 3.0865121512915237 + } + }, + { + "fusion": { + "entry_component": 0.09735133526455353, + "final": 0.41235133526455353, + "graph_component": 0.315, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 3 + }, + "scores": { + "dense": 0.39333872834163036, + "dense_raw": 0.09067267235619031, + "entry": 0.17700242775373368, + "entry_anchor_after_competition": 0.17700242775373368, + "entry_anchor_before_competition": 0.17700242775373368, + "final": 0.41235133526455353, + "graph_activation": 0.7, + "graph_activation_normalized": 0.7, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": 1 + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.23052058142984966, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 1.0, + "graph_activation": 1.0, + "graph_activation_normalized": 1.0, + "sparse": 1.0, + "sparse_raw": 8.972519415978113 + } + } + ], + "diagnostics": { + "competition_set_count": 0, + "entry_anchor_invariant": true, + "final_fusion_strategies": [ + "linear" + ], + "final_order_recomputable": true, + "graph_normalizations": [ + "max" + ], + "graph_signal_excludes_zero_hop": false, + "mean_activation_total": 1.9113442686280733, + "mean_active_path_count": 2.3333333333333335, + "mean_expansions": 1.3333333333333333, + "mean_steps": 0.6666666666666666, + "stop_reasons": { + "frontier_exhausted": 6 + } + }, + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "id": "fusion-dev-relation-width-three-axis", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ], + "id": "fusion-dev-relation-width-dynamic", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + } + ] + } + ], + "family": "current_positive_additive", + "feedback": { + "case_id": "fusion-dev-relation-width-three-axis", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.14, + "old_weight": 1.0, + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.14, + "old_weight": 1.0, + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "target_rank_after": 2, + "target_rank_before": 2, + "uncredited_edge_changes": [] + }, + "id": "current", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1 + ] + }, + "negative_control": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1 + ] + }, + "relation": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.41666666666666663, + "ranks": [ + 2, + 3 + ] + } + }, + "overall": { + "cases": 6, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.8055555555555557, + "ranks": [ + 1, + 1, + 2, + 3, + 1, + 1 + ] + } + }, + "parameters": {}, + "relative_to_current": { + "direct_lookup_mrr_delta": 0.0, + "individually_improved_case_ids": [], + "negative_control_mrr_delta": 0.0, + "relation_mrr_delta": 0.0 + }, + "structural_complexity": 0 + }, + { + "candidate_gate": { + "all_relation_paths_match": true, + "direct_non_regression": false, + "entry_anchor_invariant": true, + "feedback_isolated": true, + "final_order_recomputable": true, + "graph_signal_excludes_zero_hop": true, + "individual_control_rank_non_regression": false, + "individual_relation_rank_improvement": true, + "negative_non_regression": false, + "relation_strictly_above_current": true + }, + "candidate_gate_passed": false, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.9450273382368494, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 0.9450273382368494, + "message_total_before": 1.323038273531589, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.4725136691184247, + "message_total_before": 0.6615191367657945, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.5197650360302672, + "final": 0.5197650360302672, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "linear" + }, + "id": "fusion-dev-direct-width-cap", + "observed_paths": [], + "path_matched": null, + "rank": 2, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.36408181710981297, + "final": 0.576712968213104, + "graph_component": 0.21263115110329112, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3563372064343303, + "entry": 0.6619669401996598, + "entry_anchor_after_competition": 0.6619669401996598, + "entry_anchor_before_competition": 0.6619669401996598, + "final": 0.576712968213104, + "graph_activation": 0.4725136691184247, + "graph_activation_normalized": 0.4725136691184247, + "sparse": 0.3853944367266542, + "sparse_raw": 2.4201243245884045 + } + }, + { + "fusion": { + "entry_component": 0.5197650360302672, + "final": 0.5197650360302672, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 0.877838529415221, + "dense_raw": 0.31280652927224056, + "entry": 0.9450273382368495, + "entry_anchor_after_competition": 0.9450273382368495, + "entry_anchor_before_competition": 0.9450273382368495, + "final": 0.5197650360302672, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.279603683809551 + } + }, + { + "fusion": { + "entry_component": 0.09501142435326043, + "final": 0.30764257545655155, + "graph_component": 0.21263115110329112, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.38388454284145623, + "dense_raw": 0.1367923455894445, + "entry": 0.1727480442786553, + "entry_anchor_after_competition": 0.1727480442786553, + "entry_anchor_before_competition": 0.1727480442786553, + "final": 0.30764257545655155, + "graph_activation": 0.4725136691184247, + "graph_activation_normalized": 0.4725136691184247, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 0.877838529415221, + "dense_raw": 0.31280652927224056, + "entry": 0.9450273382368495, + "entry_anchor_after_competition": 0.9450273382368495, + "entry_anchor_before_competition": 0.9450273382368495, + "final": 0.5197650360302672, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.279603683809551 + } + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0, + "active_path_count": 0, + "competition_sets": [], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 0, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 0, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.55, + "final": 0.55, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "linear" + }, + "id": "fusion-dev-direct-three-axis", + "observed_paths": [], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.55, + "final": 0.55, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3507817445183512, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.55, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 13.670707041255248 + } + }, + { + "fusion": { + "entry_component": 0.2348476995247091, + "final": 0.2348476995247091, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 2, + "graph": null + }, + "scores": { + "dense": 0.5188555371843079, + "dense_raw": 0.18200505048651774, + "entry": 0.4269958173176529, + "entry_anchor_after_competition": 0.4269958173176529, + "entry_anchor_before_competition": 0.4269958173176529, + "final": 0.2348476995247091, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.3518378646994807, + "sparse_raw": 4.809872374327402 + } + }, + { + "fusion": { + "entry_component": 0.13825227412664978, + "final": 0.13825227412664978, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": null + }, + "scores": { + "dense": 0.5585950469763626, + "dense_raw": 0.19594494505767884, + "entry": 0.2513677711393632, + "entry_anchor_after_competition": 0.2513677711393632, + "entry_anchor_before_competition": 0.2513677711393632, + "final": 0.13825227412664978, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3507817445183512, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.55, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 13.670707041255248 + } + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.0, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 1.0, + "message_total_before": 1.4, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.5, + "message_total_before": 0.7, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.3843100180262844, + "final": 0.6093100180262844, + "graph_component": 0.225, + "graph_normalization": "none", + "strategy": "linear" + }, + "id": "fusion-dev-relation-width-three-axis", + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + } + ], + "path_matched": true, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.3843100180262844, + "final": 0.6093100180262844, + "graph_component": 0.225, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.7797052486069164, + "dense_raw": 0.320385768706195, + "entry": 0.698745487320517, + "entry_anchor_after_competition": 0.698745487320517, + "entry_anchor_before_competition": 0.698745487320517, + "final": 0.6093100180262844, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.6325056826316449, + "sparse_raw": 4.751346980286211 + } + }, + { + "fusion": { + "entry_component": 0.55, + "final": 0.55, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.41090626140919506, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.55, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 7.511943545736132 + } + }, + { + "fusion": { + "entry_component": 0.11394110096463028, + "final": 0.33894110096463026, + "graph_component": 0.225, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.4603680847055769, + "dense_raw": 0.18916812855848023, + "entry": 0.2071656381175096, + "entry_anchor_after_competition": 0.2071656381175096, + "entry_anchor_before_competition": 0.2071656381175096, + "final": 0.33894110096463026, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.7797052486069164, + "dense_raw": 0.320385768706195, + "entry": 0.698745487320517, + "entry_anchor_after_competition": 0.698745487320517, + "entry_anchor_before_competition": 0.698745487320517, + "final": 0.6093100180262844, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.6325056826316449, + "sparse_raw": 4.751346980286211 + } + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.0, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 1.0, + "message_total_before": 1.4, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.5, + "message_total_before": 0.7, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.0935884486211958, + "final": 0.3185884486211958, + "graph_component": 0.225, + "graph_normalization": "none", + "strategy": "linear" + }, + "id": "fusion-dev-relation-width-dynamic", + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + } + ], + "path_matched": true, + "rank": 3, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.3417859276747604, + "final": 0.5667859276747604, + "graph_component": 0.225, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.7909910962727774, + "dense_raw": 0.2803081228846731, + "entry": 0.6214289594086553, + "entry_anchor_after_competition": 0.6214289594086553, + "entry_anchor_before_competition": 0.6214289594086553, + "final": 0.5667859276747604, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.4826963019743734, + "sparse_raw": 2.633906873227106 + } + }, + { + "fusion": { + "entry_component": 0.55, + "final": 0.55, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.35437582572738263, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.55, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 5.456654344468007 + } + }, + { + "fusion": { + "entry_component": 0.0935884486211958, + "final": 0.3185884486211958, + "graph_component": 0.225, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.18710174743098718, + "dense_raw": 0.06630433624089227, + "entry": 0.17016081567490143, + "entry_anchor_after_competition": 0.17016081567490143, + "entry_anchor_before_competition": 0.17016081567490143, + "final": 0.3185884486211958, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.15630005332901312, + "sparse_raw": 0.8528753650383406 + } + } + ], + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.18710174743098718, + "dense_raw": 0.06630433624089227, + "entry": 0.17016081567490143, + "entry_anchor_after_competition": 0.17016081567490143, + "entry_anchor_before_competition": 0.17016081567490143, + "final": 0.3185884486211958, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.15630005332901312, + "sparse_raw": 0.8528753650383406 + } + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 0, + "active_path_count": 0, + "competition_sets": [], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 0, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 0, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.55, + "final": 0.55, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "linear" + }, + "id": "fusion-dev-negative-dynamic", + "observed_paths": [], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.55, + "final": 0.55, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.47176771580845484, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.55, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.110489666802573 + } + }, + { + "fusion": { + "entry_component": 0.28035122370379517, + "final": 0.28035122370379517, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 2, + "graph": null + }, + "scores": { + "dense": 0.3540891780814072, + "dense_raw": 0.16704784273595868, + "entry": 0.5097294976432639, + "entry_anchor_after_competition": 0.5097294976432639, + "entry_anchor_before_competition": 0.5097294976432639, + "final": 0.28035122370379517, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.6370715772847829, + "sparse_raw": 3.8928192900122833 + } + }, + { + "fusion": { + "entry_component": 0.1689885230035198, + "final": 0.1689885230035198, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 3, + "graph": null + }, + "scores": { + "dense": 0.370627114962286, + "dense_raw": 0.17484990744243525, + "entry": 0.3072518600063996, + "entry_anchor_after_competition": 0.3072518600063996, + "entry_anchor_before_competition": 0.3072518600063996, + "final": 0.1689885230035198, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.25539937867885615, + "sparse_raw": 1.560615264324948 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.47176771580845484, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.55, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.110489666802573 + } + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.0, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 1.0, + "message_total_before": 1.4, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.5, + "message_total_before": 0.7, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.55, + "final": 0.55, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "linear" + }, + "id": "fusion-dev-negative-width-binding", + "observed_paths": [], + "path_matched": null, + "rank": 2, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.33857926857894316, + "final": 0.5635792685789431, + "graph_component": 0.225, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.9475573036412437, + "dense_raw": 0.2184314605734801, + "entry": 0.615598670143533, + "entry_anchor_after_competition": 0.615598670143533, + "entry_anchor_before_competition": 0.615598670143533, + "final": 0.5635792685789431, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.3439961518272242, + "sparse_raw": 3.0865121512915237 + } + }, + { + "fusion": { + "entry_component": 0.55, + "final": 0.55, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.23052058142984966, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.55, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 8.972519415978113 + } + }, + { + "fusion": { + "entry_component": 0.09735133526455353, + "final": 0.3223513352645535, + "graph_component": 0.225, + "graph_normalization": "none", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.39333872834163036, + "dense_raw": 0.09067267235619031, + "entry": 0.17700242775373368, + "entry_anchor_after_competition": 0.17700242775373368, + "entry_anchor_before_competition": 0.17700242775373368, + "final": 0.3223513352645535, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.23052058142984966, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.55, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 8.972519415978113 + } + } + ], + "diagnostics": { + "competition_set_count": 8, + "entry_anchor_invariant": true, + "final_fusion_strategies": [ + "linear" + ], + "final_order_recomputable": true, + "graph_normalizations": [ + "none" + ], + "graph_signal_excludes_zero_hop": true, + "mean_activation_total": 0.6575045563728082, + "mean_active_path_count": 2.6666666666666665, + "mean_expansions": 2.6666666666666665, + "mean_steps": 2.0, + "stop_reasons": { + "recurrent_step_limit": 6 + } + }, + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "id": "fusion-dev-relation-width-three-axis", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ], + "id": "fusion-dev-relation-width-dynamic", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + } + ] + } + ], + "family": "anchored_local_competition", + "feedback": { + "case_id": "fusion-dev-relation-width-three-axis", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.1, + "old_weight": 1.0, + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.1, + "old_weight": 1.0, + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "target_rank_after": 1, + "target_rank_before": 1, + "uncredited_edge_changes": [] + }, + "id": "anchored-local-unscaled", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.75, + "ranks": [ + 2, + 1 + ] + }, + "negative_control": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.75, + "ranks": [ + 1, + 2 + ] + }, + "relation": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.6666666666666666, + "ranks": [ + 1, + 3 + ] + } + }, + "overall": { + "cases": 6, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.7222222222222223, + "ranks": [ + 2, + 1, + 1, + 3, + 1, + 2 + ] + } + }, + "parameters": { + "graph_normalization": "none" + }, + "relative_to_current": { + "direct_lookup_mrr_delta": -0.25, + "individually_improved_case_ids": [ + "fusion-dev-relation-width-three-axis" + ], + "negative_control_mrr_delta": -0.25, + "relation_mrr_delta": 0.25 + }, + "structural_complexity": 5 + }, + { + "candidate_gate": { + "all_relation_paths_match": true, + "direct_non_regression": true, + "entry_anchor_invariant": true, + "feedback_isolated": true, + "final_order_recomputable": true, + "graph_signal_excludes_zero_hop": true, + "individual_control_rank_non_regression": true, + "individual_relation_rank_improvement": false, + "negative_non_regression": true, + "relation_strictly_above_current": false + }, + "candidate_gate_passed": false, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.9450273382368494, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 0.9450273382368494, + "message_total_before": 1.323038273531589, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.4725136691184247, + "message_total_before": 0.6615191367657945, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "max", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.7560218705894797, + "final": 0.7560218705894797, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "id": "fusion-dev-direct-width-cap", + "observed_paths": [], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.7560218705894797, + "final": 0.7560218705894797, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 0.877838529415221, + "dense_raw": 0.31280652927224056, + "entry": 0.9450273382368495, + "entry_anchor_after_competition": 0.9450273382368495, + "entry_anchor_before_competition": 0.9450273382368495, + "final": 0.7560218705894797, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.279603683809551 + } + }, + { + "fusion": { + "entry_component": 0.5295735521597279, + "final": 0.729573552159728, + "graph_component": 0.2, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3563372064343303, + "entry": 0.6619669401996598, + "entry_anchor_after_competition": 0.6619669401996598, + "entry_anchor_before_competition": 0.6619669401996598, + "final": 0.729573552159728, + "graph_activation": 0.4725136691184247, + "graph_activation_normalized": 1.0, + "sparse": 0.3853944367266542, + "sparse_raw": 2.4201243245884045 + } + }, + { + "fusion": { + "entry_component": 0.13819843542292426, + "final": 0.33819843542292427, + "graph_component": 0.2, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.38388454284145623, + "dense_raw": 0.1367923455894445, + "entry": 0.1727480442786553, + "entry_anchor_after_competition": 0.1727480442786553, + "entry_anchor_before_competition": 0.1727480442786553, + "final": 0.33819843542292427, + "graph_activation": 0.4725136691184247, + "graph_activation_normalized": 1.0, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 0.877838529415221, + "dense_raw": 0.31280652927224056, + "entry": 0.9450273382368495, + "entry_anchor_after_competition": 0.9450273382368495, + "entry_anchor_before_competition": 0.9450273382368495, + "final": 0.7560218705894797, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.279603683809551 + } + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0, + "active_path_count": 0, + "competition_sets": [], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 0, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "max", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 0, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.8, + "final": 0.8, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "id": "fusion-dev-direct-three-axis", + "observed_paths": [], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.8, + "final": 0.8, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3507817445183512, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.8, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 13.670707041255248 + } + }, + { + "fusion": { + "entry_component": 0.34159665385412236, + "final": 0.34159665385412236, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 2, + "graph": null + }, + "scores": { + "dense": 0.5188555371843079, + "dense_raw": 0.18200505048651774, + "entry": 0.4269958173176529, + "entry_anchor_after_competition": 0.4269958173176529, + "entry_anchor_before_competition": 0.4269958173176529, + "final": 0.34159665385412236, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.3518378646994807, + "sparse_raw": 4.809872374327402 + } + }, + { + "fusion": { + "entry_component": 0.20109421691149057, + "final": 0.20109421691149057, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": null + }, + "scores": { + "dense": 0.5585950469763626, + "dense_raw": 0.19594494505767884, + "entry": 0.2513677711393632, + "entry_anchor_after_competition": 0.2513677711393632, + "entry_anchor_before_competition": 0.2513677711393632, + "final": 0.20109421691149057, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3507817445183512, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.8, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 13.670707041255248 + } + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.0, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 1.0, + "message_total_before": 1.4, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.5, + "message_total_before": 0.7, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "max", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.5589963898564136, + "final": 0.7589963898564136, + "graph_component": 0.2, + "graph_normalization": "max", + "strategy": "linear" + }, + "id": "fusion-dev-relation-width-three-axis", + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + } + ], + "path_matched": true, + "rank": 2, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.8, + "final": 0.8, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.41090626140919506, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.8, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 7.511943545736132 + } + }, + { + "fusion": { + "entry_component": 0.5589963898564136, + "final": 0.7589963898564136, + "graph_component": 0.2, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.7797052486069164, + "dense_raw": 0.320385768706195, + "entry": 0.698745487320517, + "entry_anchor_after_competition": 0.698745487320517, + "entry_anchor_before_competition": 0.698745487320517, + "final": 0.7589963898564136, + "graph_activation": 0.5, + "graph_activation_normalized": 1.0, + "sparse": 0.6325056826316449, + "sparse_raw": 4.751346980286211 + } + }, + { + "fusion": { + "entry_component": 0.1657325104940077, + "final": 0.3657325104940077, + "graph_component": 0.2, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.4603680847055769, + "dense_raw": 0.18916812855848023, + "entry": 0.2071656381175096, + "entry_anchor_after_competition": 0.2071656381175096, + "entry_anchor_before_competition": 0.2071656381175096, + "final": 0.3657325104940077, + "graph_activation": 0.5, + "graph_activation_normalized": 1.0, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.7797052486069164, + "dense_raw": 0.320385768706195, + "entry": 0.698745487320517, + "entry_anchor_after_competition": 0.698745487320517, + "entry_anchor_before_competition": 0.698745487320517, + "final": 0.7589963898564136, + "graph_activation": 0.5, + "graph_activation_normalized": 1.0, + "sparse": 0.6325056826316449, + "sparse_raw": 4.751346980286211 + } + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.0, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 1.0, + "message_total_before": 1.4, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.5, + "message_total_before": 0.7, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "max", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.13612865253992115, + "final": 0.3361286525399212, + "graph_component": 0.2, + "graph_normalization": "max", + "strategy": "linear" + }, + "id": "fusion-dev-relation-width-dynamic", + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + } + ], + "path_matched": true, + "rank": 3, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.8, + "final": 0.8, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.35437582572738263, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.8, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 5.456654344468007 + } + }, + { + "fusion": { + "entry_component": 0.4971431675269242, + "final": 0.6971431675269242, + "graph_component": 0.2, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.7909910962727774, + "dense_raw": 0.2803081228846731, + "entry": 0.6214289594086553, + "entry_anchor_after_competition": 0.6214289594086553, + "entry_anchor_before_competition": 0.6214289594086553, + "final": 0.6971431675269242, + "graph_activation": 0.5, + "graph_activation_normalized": 1.0, + "sparse": 0.4826963019743734, + "sparse_raw": 2.633906873227106 + } + }, + { + "fusion": { + "entry_component": 0.13612865253992115, + "final": 0.3361286525399212, + "graph_component": 0.2, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.18710174743098718, + "dense_raw": 0.06630433624089227, + "entry": 0.17016081567490143, + "entry_anchor_after_competition": 0.17016081567490143, + "entry_anchor_before_competition": 0.17016081567490143, + "final": 0.3361286525399212, + "graph_activation": 0.5, + "graph_activation_normalized": 1.0, + "sparse": 0.15630005332901312, + "sparse_raw": 0.8528753650383406 + } + } + ], + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.18710174743098718, + "dense_raw": 0.06630433624089227, + "entry": 0.17016081567490143, + "entry_anchor_after_competition": 0.17016081567490143, + "entry_anchor_before_competition": 0.17016081567490143, + "final": 0.3361286525399212, + "graph_activation": 0.5, + "graph_activation_normalized": 1.0, + "sparse": 0.15630005332901312, + "sparse_raw": 0.8528753650383406 + } + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 0, + "active_path_count": 0, + "competition_sets": [], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 0, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "max", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 0, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.8, + "final": 0.8, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "id": "fusion-dev-negative-dynamic", + "observed_paths": [], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.8, + "final": 0.8, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.47176771580845484, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.8, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.110489666802573 + } + }, + { + "fusion": { + "entry_component": 0.4077835981146112, + "final": 0.4077835981146112, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 2, + "graph": null + }, + "scores": { + "dense": 0.3540891780814072, + "dense_raw": 0.16704784273595868, + "entry": 0.5097294976432639, + "entry_anchor_after_competition": 0.5097294976432639, + "entry_anchor_before_competition": 0.5097294976432639, + "final": 0.4077835981146112, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.6370715772847829, + "sparse_raw": 3.8928192900122833 + } + }, + { + "fusion": { + "entry_component": 0.2458014880051197, + "final": 0.2458014880051197, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 3, + "graph": null + }, + "scores": { + "dense": 0.370627114962286, + "dense_raw": 0.17484990744243525, + "entry": 0.3072518600063996, + "entry_anchor_after_competition": 0.3072518600063996, + "entry_anchor_before_competition": 0.3072518600063996, + "final": 0.2458014880051197, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.25539937867885615, + "sparse_raw": 1.560615264324948 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.47176771580845484, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.8, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.110489666802573 + } + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.0, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 1.0, + "message_total_before": 1.4, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.5, + "message_total_before": 0.7, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "max", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.8, + "final": 0.8, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "id": "fusion-dev-negative-width-binding", + "observed_paths": [], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.8, + "final": 0.8, + "graph_component": 0.0, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.23052058142984966, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.8, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 8.972519415978113 + } + }, + { + "fusion": { + "entry_component": 0.4924789361148264, + "final": 0.6924789361148265, + "graph_component": 0.2, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.9475573036412437, + "dense_raw": 0.2184314605734801, + "entry": 0.615598670143533, + "entry_anchor_after_competition": 0.615598670143533, + "entry_anchor_before_competition": 0.615598670143533, + "final": 0.6924789361148265, + "graph_activation": 0.5, + "graph_activation_normalized": 1.0, + "sparse": 0.3439961518272242, + "sparse_raw": 3.0865121512915237 + } + }, + { + "fusion": { + "entry_component": 0.14160194220298694, + "final": 0.34160194220298695, + "graph_component": 0.2, + "graph_normalization": "max", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.39333872834163036, + "dense_raw": 0.09067267235619031, + "entry": 0.17700242775373368, + "entry_anchor_after_competition": 0.17700242775373368, + "entry_anchor_before_competition": 0.17700242775373368, + "final": 0.34160194220298695, + "graph_activation": 0.5, + "graph_activation_normalized": 1.0, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.23052058142984966, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.8, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 8.972519415978113 + } + } + ], + "diagnostics": { + "competition_set_count": 8, + "entry_anchor_invariant": true, + "final_fusion_strategies": [ + "linear" + ], + "final_order_recomputable": true, + "graph_normalizations": [ + "max" + ], + "graph_signal_excludes_zero_hop": true, + "mean_activation_total": 0.6575045563728082, + "mean_active_path_count": 2.6666666666666665, + "mean_expansions": 2.6666666666666665, + "mean_steps": 2.0, + "stop_reasons": { + "recurrent_step_limit": 6 + } + }, + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "id": "fusion-dev-relation-width-three-axis", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ], + "id": "fusion-dev-relation-width-dynamic", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + } + ] + } + ], + "family": "anchored_local_competition", + "feedback": { + "case_id": "fusion-dev-relation-width-three-axis", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.1, + "old_weight": 1.0, + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.1, + "old_weight": 1.0, + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "target_rank_after": 2, + "target_rank_before": 2, + "uncredited_edge_changes": [] + }, + "id": "anchored-linear-conservative", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1 + ] + }, + "negative_control": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1 + ] + }, + "relation": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.41666666666666663, + "ranks": [ + 2, + 3 + ] + } + }, + "overall": { + "cases": 6, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.8055555555555557, + "ranks": [ + 1, + 1, + 2, + 3, + 1, + 1 + ] + } + }, + "parameters": { + "entry_weight": 0.8, + "graph_normalization": "max", + "graph_weight": 0.2 + }, + "relative_to_current": { + "direct_lookup_mrr_delta": 0.0, + "individually_improved_case_ids": [], + "negative_control_mrr_delta": 0.0, + "relation_mrr_delta": 0.0 + }, + "structural_complexity": 6 + }, + { + "candidate_gate": { + "all_relation_paths_match": true, + "direct_non_regression": true, + "entry_anchor_invariant": true, + "feedback_isolated": true, + "final_order_recomputable": true, + "graph_signal_excludes_zero_hop": true, + "individual_control_rank_non_regression": true, + "individual_relation_rank_improvement": false, + "negative_non_regression": true, + "relation_strictly_above_current": false + }, + "candidate_gate_passed": false, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.9450273382368494, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 0.9450273382368494, + "message_total_before": 1.323038273531589, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.4725136691184247, + "message_total_before": 0.6615191367657945, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "l1_mass", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.6615191367657945, + "final": 0.6615191367657945, + "graph_component": 0.0, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "id": "fusion-dev-direct-width-cap", + "observed_paths": [], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.6615191367657945, + "final": 0.6615191367657945, + "graph_component": 0.0, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 0.877838529415221, + "dense_raw": 0.31280652927224056, + "entry": 0.9450273382368495, + "entry_anchor_after_competition": 0.9450273382368495, + "entry_anchor_before_competition": 0.9450273382368495, + "final": 0.6615191367657945, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.279603683809551 + } + }, + { + "fusion": { + "entry_component": 0.46337685813976187, + "final": 0.6133768581397618, + "graph_component": 0.15, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3563372064343303, + "entry": 0.6619669401996598, + "entry_anchor_after_competition": 0.6619669401996598, + "entry_anchor_before_competition": 0.6619669401996598, + "final": 0.6133768581397618, + "graph_activation": 0.4725136691184247, + "graph_activation_normalized": 0.5, + "sparse": 0.3853944367266542, + "sparse_raw": 2.4201243245884045 + } + }, + { + "fusion": { + "entry_component": 0.1209236309950587, + "final": 0.2709236309950587, + "graph_component": 0.15, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.38388454284145623, + "dense_raw": 0.1367923455894445, + "entry": 0.1727480442786553, + "entry_anchor_after_competition": 0.1727480442786553, + "entry_anchor_before_competition": 0.1727480442786553, + "final": 0.2709236309950587, + "graph_activation": 0.4725136691184247, + "graph_activation_normalized": 0.5, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 0.877838529415221, + "dense_raw": 0.31280652927224056, + "entry": 0.9450273382368495, + "entry_anchor_after_competition": 0.9450273382368495, + "entry_anchor_before_competition": 0.9450273382368495, + "final": 0.6615191367657945, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.279603683809551 + } + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0, + "active_path_count": 0, + "competition_sets": [], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 0, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "l1_mass", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 0, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.7, + "final": 0.7, + "graph_component": 0.0, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "id": "fusion-dev-direct-three-axis", + "observed_paths": [], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.7, + "final": 0.7, + "graph_component": 0.0, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3507817445183512, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.7, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 13.670707041255248 + } + }, + { + "fusion": { + "entry_component": 0.298897072122357, + "final": 0.298897072122357, + "graph_component": 0.0, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 2, + "graph": null + }, + "scores": { + "dense": 0.5188555371843079, + "dense_raw": 0.18200505048651774, + "entry": 0.4269958173176529, + "entry_anchor_after_competition": 0.4269958173176529, + "entry_anchor_before_competition": 0.4269958173176529, + "final": 0.298897072122357, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.3518378646994807, + "sparse_raw": 4.809872374327402 + } + }, + { + "fusion": { + "entry_component": 0.17595743979755424, + "final": 0.17595743979755424, + "graph_component": 0.0, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": null + }, + "scores": { + "dense": 0.5585950469763626, + "dense_raw": 0.19594494505767884, + "entry": 0.2513677711393632, + "entry_anchor_after_competition": 0.2513677711393632, + "entry_anchor_before_competition": 0.2513677711393632, + "final": 0.17595743979755424, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3507817445183512, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.7, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 13.670707041255248 + } + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.0, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 1.0, + "message_total_before": 1.4, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.5, + "message_total_before": 0.7, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "l1_mass", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.48912184112436186, + "final": 0.6391218411243619, + "graph_component": 0.15, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "id": "fusion-dev-relation-width-three-axis", + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + } + ], + "path_matched": true, + "rank": 2, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.7, + "final": 0.7, + "graph_component": 0.0, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.41090626140919506, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.7, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 7.511943545736132 + } + }, + { + "fusion": { + "entry_component": 0.48912184112436186, + "final": 0.6391218411243619, + "graph_component": 0.15, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.7797052486069164, + "dense_raw": 0.320385768706195, + "entry": 0.698745487320517, + "entry_anchor_after_competition": 0.698745487320517, + "entry_anchor_before_competition": 0.698745487320517, + "final": 0.6391218411243619, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.6325056826316449, + "sparse_raw": 4.751346980286211 + } + }, + { + "fusion": { + "entry_component": 0.1450159466822567, + "final": 0.2950159466822567, + "graph_component": 0.15, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.4603680847055769, + "dense_raw": 0.18916812855848023, + "entry": 0.2071656381175096, + "entry_anchor_after_competition": 0.2071656381175096, + "entry_anchor_before_competition": 0.2071656381175096, + "final": 0.2950159466822567, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.7797052486069164, + "dense_raw": 0.320385768706195, + "entry": 0.698745487320517, + "entry_anchor_after_competition": 0.698745487320517, + "entry_anchor_before_competition": 0.698745487320517, + "final": 0.6391218411243619, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.6325056826316449, + "sparse_raw": 4.751346980286211 + } + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.0, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 1.0, + "message_total_before": 1.4, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.5, + "message_total_before": 0.7, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "l1_mass", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.119112570972431, + "final": 0.269112570972431, + "graph_component": 0.15, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "id": "fusion-dev-relation-width-dynamic", + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + } + ], + "path_matched": true, + "rank": 3, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.7, + "final": 0.7, + "graph_component": 0.0, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.35437582572738263, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.7, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 5.456654344468007 + } + }, + { + "fusion": { + "entry_component": 0.4350002715860587, + "final": 0.5850002715860587, + "graph_component": 0.15, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.7909910962727774, + "dense_raw": 0.2803081228846731, + "entry": 0.6214289594086553, + "entry_anchor_after_competition": 0.6214289594086553, + "entry_anchor_before_competition": 0.6214289594086553, + "final": 0.5850002715860587, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.4826963019743734, + "sparse_raw": 2.633906873227106 + } + }, + { + "fusion": { + "entry_component": 0.119112570972431, + "final": 0.269112570972431, + "graph_component": 0.15, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.18710174743098718, + "dense_raw": 0.06630433624089227, + "entry": 0.17016081567490143, + "entry_anchor_after_competition": 0.17016081567490143, + "entry_anchor_before_competition": 0.17016081567490143, + "final": 0.269112570972431, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.15630005332901312, + "sparse_raw": 0.8528753650383406 + } + } + ], + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.18710174743098718, + "dense_raw": 0.06630433624089227, + "entry": 0.17016081567490143, + "entry_anchor_after_competition": 0.17016081567490143, + "entry_anchor_before_competition": 0.17016081567490143, + "final": 0.269112570972431, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.15630005332901312, + "sparse_raw": 0.8528753650383406 + } + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 0, + "active_path_count": 0, + "competition_sets": [], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 0, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "l1_mass", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 0, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.7, + "final": 0.7, + "graph_component": 0.0, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "id": "fusion-dev-negative-dynamic", + "observed_paths": [], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.7, + "final": 0.7, + "graph_component": 0.0, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.47176771580845484, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.7, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.110489666802573 + } + }, + { + "fusion": { + "entry_component": 0.3568106483502847, + "final": 0.3568106483502847, + "graph_component": 0.0, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 2, + "graph": null + }, + "scores": { + "dense": 0.3540891780814072, + "dense_raw": 0.16704784273595868, + "entry": 0.5097294976432639, + "entry_anchor_after_competition": 0.5097294976432639, + "entry_anchor_before_competition": 0.5097294976432639, + "final": 0.3568106483502847, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.6370715772847829, + "sparse_raw": 3.8928192900122833 + } + }, + { + "fusion": { + "entry_component": 0.2150763020044797, + "final": 0.2150763020044797, + "graph_component": 0.0, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 3, + "graph": null + }, + "scores": { + "dense": 0.370627114962286, + "dense_raw": 0.17484990744243525, + "entry": 0.3072518600063996, + "entry_anchor_after_competition": 0.3072518600063996, + "entry_anchor_before_competition": 0.3072518600063996, + "final": 0.2150763020044797, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.25539937867885615, + "sparse_raw": 1.560615264324948 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.47176771580845484, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.7, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.110489666802573 + } + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.0, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 1.0, + "message_total_before": 1.4, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.5, + "message_total_before": 0.7, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "linear", + "final_order_recomputable": true, + "graph_normalization": "l1_mass", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.7, + "final": 0.7, + "graph_component": 0.0, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "id": "fusion-dev-negative-width-binding", + "observed_paths": [], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.7, + "final": 0.7, + "graph_component": 0.0, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.23052058142984966, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.7, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 8.972519415978113 + } + }, + { + "fusion": { + "entry_component": 0.43091906910047306, + "final": 0.5809190691004731, + "graph_component": 0.15, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.9475573036412437, + "dense_raw": 0.2184314605734801, + "entry": 0.615598670143533, + "entry_anchor_after_competition": 0.615598670143533, + "entry_anchor_before_competition": 0.615598670143533, + "final": 0.5809190691004731, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.3439961518272242, + "sparse_raw": 3.0865121512915237 + } + }, + { + "fusion": { + "entry_component": 0.12390169942761356, + "final": 0.27390169942761355, + "graph_component": 0.15, + "graph_normalization": "l1_mass", + "strategy": "linear" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.39333872834163036, + "dense_raw": 0.09067267235619031, + "entry": 0.17700242775373368, + "entry_anchor_after_competition": 0.17700242775373368, + "entry_anchor_before_competition": 0.17700242775373368, + "final": 0.27390169942761355, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.23052058142984966, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.7, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 8.972519415978113 + } + } + ], + "diagnostics": { + "competition_set_count": 8, + "entry_anchor_invariant": true, + "final_fusion_strategies": [ + "linear" + ], + "final_order_recomputable": true, + "graph_normalizations": [ + "l1_mass" + ], + "graph_signal_excludes_zero_hop": true, + "mean_activation_total": 0.6575045563728082, + "mean_active_path_count": 2.6666666666666665, + "mean_expansions": 2.6666666666666665, + "mean_steps": 2.0, + "stop_reasons": { + "recurrent_step_limit": 6 + } + }, + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "id": "fusion-dev-relation-width-three-axis", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ], + "id": "fusion-dev-relation-width-dynamic", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + } + ] + } + ], + "family": "anchored_local_competition", + "feedback": { + "case_id": "fusion-dev-relation-width-three-axis", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.1, + "old_weight": 1.0, + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.1, + "old_weight": 1.0, + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "target_rank_after": 2, + "target_rank_before": 2, + "uncredited_edge_changes": [] + }, + "id": "anchored-linear-mass", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1 + ] + }, + "negative_control": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1 + ] + }, + "relation": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.41666666666666663, + "ranks": [ + 2, + 3 + ] + } + }, + "overall": { + "cases": 6, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.8055555555555557, + "ranks": [ + 1, + 1, + 2, + 3, + 1, + 1 + ] + } + }, + "parameters": { + "entry_weight": 0.7, + "graph_normalization": "l1_mass", + "graph_weight": 0.3 + }, + "relative_to_current": { + "direct_lookup_mrr_delta": 0.0, + "individually_improved_case_ids": [], + "negative_control_mrr_delta": 0.0, + "relation_mrr_delta": 0.0 + }, + "structural_complexity": 7 + }, + { + "candidate_gate": { + "all_relation_paths_match": true, + "direct_non_regression": true, + "entry_anchor_invariant": true, + "feedback_isolated": true, + "final_order_recomputable": true, + "graph_signal_excludes_zero_hop": true, + "individual_control_rank_non_regression": true, + "individual_relation_rank_improvement": false, + "negative_non_regression": true, + "relation_strictly_above_current": false + }, + "candidate_gate_passed": false, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.9450273382368494, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 0.9450273382368494, + "message_total_before": 1.323038273531589, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.4725136691184247, + "message_total_before": 0.6615191367657945, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "rrf", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.013114754098360656, + "final": 0.013114754098360656, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "id": "fusion-dev-direct-width-cap", + "observed_paths": [], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.013114754098360656, + "final": 0.013114754098360656, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 0.877838529415221, + "dense_raw": 0.31280652927224056, + "entry": 0.9450273382368495, + "entry_anchor_after_competition": 0.9450273382368495, + "entry_anchor_before_competition": 0.9450273382368495, + "final": 0.013114754098360656, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.279603683809551 + } + }, + { + "fusion": { + "entry_component": 0.012903225806451613, + "final": 0.013007311156438602, + "graph_component": 0.00010408534998698968, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3563372064343303, + "entry": 0.6619669401996598, + "entry_anchor_after_competition": 0.6619669401996598, + "entry_anchor_before_competition": 0.6619669401996598, + "final": 0.013007311156438602, + "graph_activation": 0.4725136691184247, + "graph_activation_normalized": 0.4725136691184247, + "sparse": 0.3853944367266542, + "sparse_raw": 2.4201243245884045 + } + }, + { + "fusion": { + "entry_component": 0.012698412698412698, + "final": 0.012749615975422427, + "graph_component": 5.120327700972871e-05, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.38388454284145623, + "dense_raw": 0.1367923455894445, + "entry": 0.1727480442786553, + "entry_anchor_after_competition": 0.1727480442786553, + "entry_anchor_before_competition": 0.1727480442786553, + "final": 0.012749615975422427, + "graph_activation": 0.4725136691184247, + "graph_activation_normalized": 0.4725136691184247, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 0.877838529415221, + "dense_raw": 0.31280652927224056, + "entry": 0.9450273382368495, + "entry_anchor_after_competition": 0.9450273382368495, + "entry_anchor_before_competition": 0.9450273382368495, + "final": 0.013114754098360656, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.279603683809551 + } + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0, + "active_path_count": 0, + "competition_sets": [], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 0, + "final_fusion_strategy": "rrf", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 0, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.013114754098360656, + "final": 0.013114754098360656, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "id": "fusion-dev-direct-three-axis", + "observed_paths": [], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.013114754098360656, + "final": 0.013114754098360656, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3507817445183512, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.013114754098360656, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 13.670707041255248 + } + }, + { + "fusion": { + "entry_component": 0.012903225806451613, + "final": 0.012903225806451613, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 2, + "graph": null + }, + "scores": { + "dense": 0.5188555371843079, + "dense_raw": 0.18200505048651774, + "entry": 0.4269958173176529, + "entry_anchor_after_competition": 0.4269958173176529, + "entry_anchor_before_competition": 0.4269958173176529, + "final": 0.012903225806451613, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.3518378646994807, + "sparse_raw": 4.809872374327402 + } + }, + { + "fusion": { + "entry_component": 0.012698412698412698, + "final": 0.012698412698412698, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": null + }, + "scores": { + "dense": 0.5585950469763626, + "dense_raw": 0.19594494505767884, + "entry": 0.2513677711393632, + "entry_anchor_after_competition": 0.2513677711393632, + "entry_anchor_before_competition": 0.2513677711393632, + "final": 0.012698412698412698, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3507817445183512, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.013114754098360656, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 13.670707041255248 + } + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.0, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 1.0, + "message_total_before": 1.4, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.5, + "message_total_before": 0.7, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "rrf", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.012903225806451613, + "final": 0.013007311156438602, + "graph_component": 0.00010408534998698968, + "graph_normalization": "none", + "strategy": "rrf" + }, + "id": "fusion-dev-relation-width-three-axis", + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + } + ], + "path_matched": true, + "rank": 2, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.013114754098360656, + "final": 0.013114754098360656, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.41090626140919506, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.013114754098360656, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 7.511943545736132 + } + }, + { + "fusion": { + "entry_component": 0.012903225806451613, + "final": 0.013007311156438602, + "graph_component": 0.00010408534998698968, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.7797052486069164, + "dense_raw": 0.320385768706195, + "entry": 0.698745487320517, + "entry_anchor_after_competition": 0.698745487320517, + "entry_anchor_before_competition": 0.698745487320517, + "final": 0.013007311156438602, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.6325056826316449, + "sparse_raw": 4.751346980286211 + } + }, + { + "fusion": { + "entry_component": 0.012698412698412698, + "final": 0.012749615975422427, + "graph_component": 5.120327700972871e-05, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.4603680847055769, + "dense_raw": 0.18916812855848023, + "entry": 0.2071656381175096, + "entry_anchor_after_competition": 0.2071656381175096, + "entry_anchor_before_competition": 0.2071656381175096, + "final": 0.012749615975422427, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.7797052486069164, + "dense_raw": 0.320385768706195, + "entry": 0.698745487320517, + "entry_anchor_after_competition": 0.698745487320517, + "entry_anchor_before_competition": 0.698745487320517, + "final": 0.013007311156438602, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.6325056826316449, + "sparse_raw": 4.751346980286211 + } + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.0, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 1.0, + "message_total_before": 1.4, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.5, + "message_total_before": 0.7, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "rrf", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.012698412698412698, + "final": 0.012749615975422427, + "graph_component": 5.120327700972871e-05, + "graph_normalization": "none", + "strategy": "rrf" + }, + "id": "fusion-dev-relation-width-dynamic", + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + } + ], + "path_matched": true, + "rank": 3, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.013114754098360656, + "final": 0.013114754098360656, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.35437582572738263, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.013114754098360656, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 5.456654344468007 + } + }, + { + "fusion": { + "entry_component": 0.012903225806451613, + "final": 0.013007311156438602, + "graph_component": 0.00010408534998698968, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.7909910962727774, + "dense_raw": 0.2803081228846731, + "entry": 0.6214289594086553, + "entry_anchor_after_competition": 0.6214289594086553, + "entry_anchor_before_competition": 0.6214289594086553, + "final": 0.013007311156438602, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.4826963019743734, + "sparse_raw": 2.633906873227106 + } + }, + { + "fusion": { + "entry_component": 0.012698412698412698, + "final": 0.012749615975422427, + "graph_component": 5.120327700972871e-05, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.18710174743098718, + "dense_raw": 0.06630433624089227, + "entry": 0.17016081567490143, + "entry_anchor_after_competition": 0.17016081567490143, + "entry_anchor_before_competition": 0.17016081567490143, + "final": 0.012749615975422427, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.15630005332901312, + "sparse_raw": 0.8528753650383406 + } + } + ], + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.18710174743098718, + "dense_raw": 0.06630433624089227, + "entry": 0.17016081567490143, + "entry_anchor_after_competition": 0.17016081567490143, + "entry_anchor_before_competition": 0.17016081567490143, + "final": 0.012749615975422427, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.15630005332901312, + "sparse_raw": 0.8528753650383406 + } + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 0, + "active_path_count": 0, + "competition_sets": [], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 0, + "final_fusion_strategy": "rrf", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 0, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.013114754098360656, + "final": 0.013114754098360656, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "id": "fusion-dev-negative-dynamic", + "observed_paths": [], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.013114754098360656, + "final": 0.013114754098360656, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.47176771580845484, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.013114754098360656, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.110489666802573 + } + }, + { + "fusion": { + "entry_component": 0.012903225806451613, + "final": 0.012903225806451613, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 2, + "graph": null + }, + "scores": { + "dense": 0.3540891780814072, + "dense_raw": 0.16704784273595868, + "entry": 0.5097294976432639, + "entry_anchor_after_competition": 0.5097294976432639, + "entry_anchor_before_competition": 0.5097294976432639, + "final": 0.012903225806451613, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.6370715772847829, + "sparse_raw": 3.8928192900122833 + } + }, + { + "fusion": { + "entry_component": 0.012698412698412698, + "final": 0.012698412698412698, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 3, + "graph": null + }, + "scores": { + "dense": 0.370627114962286, + "dense_raw": 0.17484990744243525, + "entry": 0.3072518600063996, + "entry_anchor_after_competition": 0.3072518600063996, + "entry_anchor_before_competition": 0.3072518600063996, + "final": 0.012698412698412698, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.25539937867885615, + "sparse_raw": 1.560615264324948 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.47176771580845484, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.013114754098360656, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.110489666802573 + } + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.0, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 1.0, + "message_total_before": 1.4, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.5, + "message_total_before": 0.7, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "rrf", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.013114754098360656, + "final": 0.013114754098360656, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "id": "fusion-dev-negative-width-binding", + "observed_paths": [], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.013114754098360656, + "final": 0.013114754098360656, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.23052058142984966, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.013114754098360656, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 8.972519415978113 + } + }, + { + "fusion": { + "entry_component": 0.012903225806451613, + "final": 0.013007311156438602, + "graph_component": 0.00010408534998698968, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.9475573036412437, + "dense_raw": 0.2184314605734801, + "entry": 0.615598670143533, + "entry_anchor_after_competition": 0.615598670143533, + "entry_anchor_before_competition": 0.615598670143533, + "final": 0.013007311156438602, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.3439961518272242, + "sparse_raw": 3.0865121512915237 + } + }, + { + "fusion": { + "entry_component": 0.012698412698412698, + "final": 0.012749615975422427, + "graph_component": 5.120327700972871e-05, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.39333872834163036, + "dense_raw": 0.09067267235619031, + "entry": 0.17700242775373368, + "entry_anchor_after_competition": 0.17700242775373368, + "entry_anchor_before_competition": 0.17700242775373368, + "final": 0.012749615975422427, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.23052058142984966, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.013114754098360656, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 8.972519415978113 + } + } + ], + "diagnostics": { + "competition_set_count": 8, + "entry_anchor_invariant": true, + "final_fusion_strategies": [ + "rrf" + ], + "final_order_recomputable": true, + "graph_normalizations": [ + "none" + ], + "graph_signal_excludes_zero_hop": true, + "mean_activation_total": 0.6575045563728082, + "mean_active_path_count": 2.6666666666666665, + "mean_expansions": 2.6666666666666665, + "mean_steps": 2.0, + "stop_reasons": { + "recurrent_step_limit": 6 + } + }, + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "id": "fusion-dev-relation-width-three-axis", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ], + "id": "fusion-dev-relation-width-dynamic", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + } + ] + } + ], + "family": "anchored_local_competition", + "feedback": { + "case_id": "fusion-dev-relation-width-three-axis", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.1, + "old_weight": 1.0, + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.1, + "old_weight": 1.0, + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "target_rank_after": 2, + "target_rank_before": 2, + "uncredited_edge_changes": [] + }, + "id": "anchored-rrf-conservative", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1 + ] + }, + "negative_control": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1 + ] + }, + "relation": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.41666666666666663, + "ranks": [ + 2, + 3 + ] + } + }, + "overall": { + "cases": 6, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.8055555555555557, + "ranks": [ + 1, + 1, + 2, + 3, + 1, + 1 + ] + } + }, + "parameters": { + "entry_weight": 0.8, + "final_fusion_strategy": "rrf", + "graph_normalization": "none", + "graph_weight": 0.2, + "rrf_k": 60 + }, + "relative_to_current": { + "direct_lookup_mrr_delta": 0.0, + "individually_improved_case_ids": [], + "negative_control_mrr_delta": 0.0, + "relation_mrr_delta": 0.0 + }, + "structural_complexity": 7 + }, + { + "candidate_gate": { + "all_relation_paths_match": true, + "direct_non_regression": false, + "entry_anchor_invariant": true, + "feedback_isolated": true, + "final_order_recomputable": true, + "graph_signal_excludes_zero_hop": true, + "individual_control_rank_non_regression": false, + "individual_relation_rank_improvement": true, + "negative_non_regression": false, + "relation_strictly_above_current": true + }, + "candidate_gate_passed": false, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.9450273382368494, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 0.9450273382368494, + "message_total_before": 1.323038273531589, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.4725136691184247, + "message_total_before": 0.6615191367657945, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "rrf", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.010655737704918034, + "final": 0.010655737704918034, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "id": "fusion-dev-direct-width-cap", + "observed_paths": [], + "path_matched": null, + "rank": 2, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.010483870967741936, + "final": 0.010666020330219168, + "graph_component": 0.00018214936247723193, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3563372064343303, + "entry": 0.6619669401996598, + "entry_anchor_after_competition": 0.6619669401996598, + "entry_anchor_before_competition": 0.6619669401996598, + "final": 0.010666020330219168, + "graph_activation": 0.4725136691184247, + "graph_activation_normalized": 0.4725136691184247, + "sparse": 0.3853944367266542, + "sparse_raw": 2.4201243245884045 + } + }, + { + "fusion": { + "entry_component": 0.010655737704918034, + "final": 0.010655737704918034, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 0.877838529415221, + "dense_raw": 0.31280652927224056, + "entry": 0.9450273382368495, + "entry_anchor_after_competition": 0.9450273382368495, + "entry_anchor_before_competition": 0.9450273382368495, + "final": 0.010655737704918034, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.279603683809551 + } + }, + { + "fusion": { + "entry_component": 0.010317460317460317, + "final": 0.010407066052227342, + "graph_component": 8.960573476702524e-05, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.38388454284145623, + "dense_raw": 0.1367923455894445, + "entry": 0.1727480442786553, + "entry_anchor_after_competition": 0.1727480442786553, + "entry_anchor_before_competition": 0.1727480442786553, + "final": 0.010407066052227342, + "graph_activation": 0.4725136691184247, + "graph_activation_normalized": 0.4725136691184247, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 0.877838529415221, + "dense_raw": 0.31280652927224056, + "entry": 0.9450273382368495, + "entry_anchor_after_competition": 0.9450273382368495, + "entry_anchor_before_competition": 0.9450273382368495, + "final": 0.010655737704918034, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.279603683809551 + } + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0, + "active_path_count": 0, + "competition_sets": [], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 0, + "final_fusion_strategy": "rrf", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 0, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.010655737704918034, + "final": 0.010655737704918034, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "id": "fusion-dev-direct-three-axis", + "observed_paths": [], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.010655737704918034, + "final": 0.010655737704918034, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3507817445183512, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.010655737704918034, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 13.670707041255248 + } + }, + { + "fusion": { + "entry_component": 0.010483870967741936, + "final": 0.010483870967741936, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 2, + "graph": null + }, + "scores": { + "dense": 0.5188555371843079, + "dense_raw": 0.18200505048651774, + "entry": 0.4269958173176529, + "entry_anchor_after_competition": 0.4269958173176529, + "entry_anchor_before_competition": 0.4269958173176529, + "final": 0.010483870967741936, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.3518378646994807, + "sparse_raw": 4.809872374327402 + } + }, + { + "fusion": { + "entry_component": 0.010317460317460317, + "final": 0.010317460317460317, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": null + }, + "scores": { + "dense": 0.5585950469763626, + "dense_raw": 0.19594494505767884, + "entry": 0.2513677711393632, + "entry_anchor_after_competition": 0.2513677711393632, + "entry_anchor_before_competition": 0.2513677711393632, + "final": 0.010317460317460317, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.3507817445183512, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.010655737704918034, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 13.670707041255248 + } + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.0, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 1.0, + "message_total_before": 1.4, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.5, + "message_total_before": 0.7, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "rrf", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.010483870967741936, + "final": 0.010666020330219168, + "graph_component": 0.00018214936247723193, + "graph_normalization": "none", + "strategy": "rrf" + }, + "id": "fusion-dev-relation-width-three-axis", + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + } + ], + "path_matched": true, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.010483870967741936, + "final": 0.010666020330219168, + "graph_component": 0.00018214936247723193, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.7797052486069164, + "dense_raw": 0.320385768706195, + "entry": 0.698745487320517, + "entry_anchor_after_competition": 0.698745487320517, + "entry_anchor_before_competition": 0.698745487320517, + "final": 0.010666020330219168, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.6325056826316449, + "sparse_raw": 4.751346980286211 + } + }, + { + "fusion": { + "entry_component": 0.010655737704918034, + "final": 0.010655737704918034, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.41090626140919506, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.010655737704918034, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 7.511943545736132 + } + }, + { + "fusion": { + "entry_component": 0.010317460317460317, + "final": 0.010407066052227342, + "graph_component": 8.960573476702524e-05, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.4603680847055769, + "dense_raw": 0.18916812855848023, + "entry": 0.2071656381175096, + "entry_anchor_after_competition": 0.2071656381175096, + "entry_anchor_before_competition": 0.2071656381175096, + "final": 0.010407066052227342, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.7797052486069164, + "dense_raw": 0.320385768706195, + "entry": 0.698745487320517, + "entry_anchor_after_competition": 0.698745487320517, + "entry_anchor_before_competition": 0.698745487320517, + "final": 0.010666020330219168, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.6325056826316449, + "sparse_raw": 4.751346980286211 + } + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.0, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 1.0, + "message_total_before": 1.4, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.5, + "message_total_before": 0.7, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "rrf", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.010317460317460317, + "final": 0.010407066052227342, + "graph_component": 8.960573476702524e-05, + "graph_normalization": "none", + "strategy": "rrf" + }, + "id": "fusion-dev-relation-width-dynamic", + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + } + ], + "path_matched": true, + "rank": 3, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.010483870967741936, + "final": 0.010666020330219168, + "graph_component": 0.00018214936247723193, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.7909910962727774, + "dense_raw": 0.2803081228846731, + "entry": 0.6214289594086553, + "entry_anchor_after_competition": 0.6214289594086553, + "entry_anchor_before_competition": 0.6214289594086553, + "final": 0.010666020330219168, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.4826963019743734, + "sparse_raw": 2.633906873227106 + } + }, + { + "fusion": { + "entry_component": 0.010655737704918034, + "final": 0.010655737704918034, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.35437582572738263, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.010655737704918034, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 5.456654344468007 + } + }, + { + "fusion": { + "entry_component": 0.010317460317460317, + "final": 0.010407066052227342, + "graph_component": 8.960573476702524e-05, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.18710174743098718, + "dense_raw": 0.06630433624089227, + "entry": 0.17016081567490143, + "entry_anchor_after_competition": 0.17016081567490143, + "entry_anchor_before_competition": 0.17016081567490143, + "final": 0.010407066052227342, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.15630005332901312, + "sparse_raw": 0.8528753650383406 + } + } + ], + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.18710174743098718, + "dense_raw": 0.06630433624089227, + "entry": 0.17016081567490143, + "entry_anchor_after_competition": 0.17016081567490143, + "entry_anchor_before_competition": 0.17016081567490143, + "final": 0.010407066052227342, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.15630005332901312, + "sparse_raw": 0.8528753650383406 + } + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 0, + "active_path_count": 0, + "competition_sets": [], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 0, + "final_fusion_strategy": "rrf", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 0, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.010655737704918034, + "final": 0.010655737704918034, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "id": "fusion-dev-negative-dynamic", + "observed_paths": [], + "path_matched": null, + "rank": 1, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.010655737704918034, + "final": 0.010655737704918034, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.47176771580845484, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.010655737704918034, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.110489666802573 + } + }, + { + "fusion": { + "entry_component": 0.010483870967741936, + "final": 0.010483870967741936, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 2, + "graph": null + }, + "scores": { + "dense": 0.3540891780814072, + "dense_raw": 0.16704784273595868, + "entry": 0.5097294976432639, + "entry_anchor_after_competition": 0.5097294976432639, + "entry_anchor_before_competition": 0.5097294976432639, + "final": 0.010483870967741936, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.6370715772847829, + "sparse_raw": 3.8928192900122833 + } + }, + { + "fusion": { + "entry_component": 0.010317460317460317, + "final": 0.010317460317460317, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 3, + "graph": null + }, + "scores": { + "dense": 0.370627114962286, + "dense_raw": 0.17484990744243525, + "entry": 0.3072518600063996, + "entry_anchor_after_competition": 0.3072518600063996, + "entry_anchor_before_competition": 0.3072518600063996, + "final": 0.010317460317460317, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 0.25539937867885615, + "sparse_raw": 1.560615264324948 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.47176771580845484, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.010655737704918034, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 6.110489666802573 + } + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.0, + "active_path_count": 4, + "competition_sets": [ + { + "mean_query_relevance": 1.0, + "message_total_after": 1.0, + "message_total_before": 1.4, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 1 + }, + { + "mean_query_relevance": 1.0, + "message_total_after": 0.5, + "message_total_before": 0.7, + "neighbor_count": 2, + "path_identity": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "step": 2 + } + ], + "converged": false, + "entry_anchor_invariant": true, + "expansions": 4, + "final_fusion_strategy": "rrf", + "final_order_recomputable": true, + "graph_normalization": "none", + "graph_signal_excludes_zero_hop": true, + "positive_graph_node_count": 2, + "rrf_k": 60, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "anchored_local_competition", + "use_dense_retrieval": true, + "use_graph_propagation": true + }, + "expected_path": [], + "formula_recomputed": true, + "fusion": { + "entry_component": 0.010655737704918034, + "final": 0.010655737704918034, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "id": "fusion-dev-negative-width-binding", + "observed_paths": [], + "path_matched": null, + "rank": 2, + "ranked_hits": [ + { + "fusion": { + "entry_component": 0.010483870967741936, + "final": 0.010666020330219168, + "graph_component": 0.00018214936247723193, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "ranks": { + "entry": 2, + "graph": 1 + }, + "scores": { + "dense": 0.9475573036412437, + "dense_raw": 0.2184314605734801, + "entry": 0.615598670143533, + "entry_anchor_after_competition": 0.615598670143533, + "entry_anchor_before_competition": 0.615598670143533, + "final": 0.010666020330219168, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.3439961518272242, + "sparse_raw": 3.0865121512915237 + } + }, + { + "fusion": { + "entry_component": 0.010655737704918034, + "final": 0.010655737704918034, + "graph_component": 0.0, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.23052058142984966, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.010655737704918034, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 8.972519415978113 + } + }, + { + "fusion": { + "entry_component": 0.010317460317460317, + "final": 0.010407066052227342, + "graph_component": 8.960573476702524e-05, + "graph_normalization": "none", + "strategy": "rrf" + }, + "node_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A", + "ranks": { + "entry": 3, + "graph": 2 + }, + "scores": { + "dense": 0.39333872834163036, + "dense_raw": 0.09067267235619031, + "entry": 0.17700242775373368, + "entry_anchor_after_competition": 0.17700242775373368, + "entry_anchor_before_competition": 0.17700242775373368, + "final": 0.010407066052227342, + "graph_activation": 0.5, + "graph_activation_normalized": 0.5, + "sparse": 0.0, + "sparse_raw": 0.0 + } + } + ], + "ranks": { + "entry": 1, + "graph": null + }, + "scores": { + "dense": 1.0, + "dense_raw": 0.23052058142984966, + "entry": 1.0, + "entry_anchor_after_competition": 1.0, + "entry_anchor_before_competition": 1.0, + "final": 0.010655737704918034, + "graph_activation": 0.0, + "graph_activation_normalized": 0.0, + "sparse": 1.0, + "sparse_raw": 8.972519415978113 + } + } + ], + "diagnostics": { + "competition_set_count": 8, + "entry_anchor_invariant": true, + "final_fusion_strategies": [ + "rrf" + ], + "final_order_recomputable": true, + "graph_normalizations": [ + "none" + ], + "graph_signal_excludes_zero_hop": true, + "mean_activation_total": 0.6575045563728082, + "mean_active_path_count": 2.6666666666666665, + "mean_expansions": 2.6666666666666665, + "mean_steps": 2.0, + "stop_reasons": { + "recurrent_step_limit": 6 + } + }, + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "id": "fusion-dev-relation-width-three-axis", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ], + "id": "fusion-dev-relation-width-dynamic", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + }, + { + "seed_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:fLMZ9XU84DzOyRVFU8EeB7wvjUzFcQBvXV2ZhFV-1-A" + } + ] + } + ] + } + ], + "family": "anchored_local_competition", + "feedback": { + "case_id": "fusion-dev-relation-width-three-axis", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.1, + "old_weight": 1.0, + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.1, + "old_weight": 1.0, + "source_id": "w:Jx1E3tt9TQOx3LPYukcNaq-20UIIyvP_ikrQWkm6Alw", + "target_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:I2O_ySIUvMN7pK5tMMXi25BcDHItRAutNmVQJobSSxM", + "target_rank_after": 1, + "target_rank_before": 1, + "uncredited_edge_changes": [] + }, + "id": "anchored-rrf-balanced", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.75, + "ranks": [ + 2, + 1 + ] + }, + "negative_control": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.75, + "ranks": [ + 1, + 2 + ] + }, + "relation": { + "cases": 2, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.6666666666666666, + "ranks": [ + 1, + 3 + ] + } + }, + "overall": { + "cases": 6, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.7222222222222223, + "ranks": [ + 2, + 1, + 1, + 3, + 1, + 2 + ] + } + }, + "parameters": { + "entry_weight": 0.65, + "final_fusion_strategy": "rrf", + "graph_normalization": "none", + "graph_weight": 0.35, + "rrf_k": 60 + }, + "relative_to_current": { + "direct_lookup_mrr_delta": -0.25, + "individually_improved_case_ids": [ + "fusion-dev-relation-width-three-axis" + ], + "negative_control_mrr_delta": -0.25, + "relation_mrr_delta": 0.25 + }, + "structural_complexity": 7 + } + ] +} diff --git a/tests/test_fusion_calibration.py b/tests/test_fusion_calibration.py index e108f7e..44ce84a 100644 --- a/tests/test_fusion_calibration.py +++ b/tests/test_fusion_calibration.py @@ -59,7 +59,6 @@ def test_manifest_fixes_six_variants_and_two_connected_splits(self) -> None: assert_connected(fixture) self.assertEqual(len(fixture["nodes"]), 3) self.assertEqual(len(fixture["edges"]), 2) - self.assertFalse(DEVELOPMENT_RESULT.exists()) self.assertFalse(HOLDOUT_RESULT.exists()) def test_contamination_audit_covers_all_seven_prior_fixtures(self) -> None: @@ -245,5 +244,53 @@ def test_aggregate_non_regression_cannot_hide_individual_control_swap(self) -> N self.assertEqual(selection["selected_variant_id"], "passing") +class FusionResultAuditTest(unittest.TestCase): + def test_development_records_every_variant_and_stops_before_holdout(self) -> None: + result = json.loads(DEVELOPMENT_RESULT.read_text(encoding="utf-8")) + manifest = read_manifest(MANIFEST) + self.assertEqual(result["schema_version"], 4) + self.assertEqual(result["variant_count"], 6) + self.assertEqual( + [variant["id"] for variant in result["variants"]], + [variant["id"] for variant in manifest["variants"]], + ) + self.assertEqual(result["selection"]["selected_variant_id"], "current") + self.assertEqual(result["selection"]["eligible_variant_ids"], []) + self.assertEqual( + result["selection"]["reason"], + "no_fusion_variant_passed_frozen_gate", + ) + self.assertEqual(result["holdout_status"], "not_opened_no_candidate") + self.assertFalse(HOLDOUT_RESULT.exists()) + + def test_tradeoff_boundary_and_formula_audit_are_explicit(self) -> None: + result = json.loads(DEVELOPMENT_RESULT.read_text(encoding="utf-8")) + by_id = {variant["id"]: variant for variant in result["variants"]} + for variant in result["variants"]: + self.assertTrue(variant["diagnostics"]["final_order_recomputable"]) + self.assertTrue(all(case["formula_recomputed"] for case in variant["cases"])) + for variant_id in ( + "anchored-local-unscaled", + "anchored-rrf-balanced", + ): + gate = by_id[variant_id]["candidate_gate"] + self.assertTrue(gate["relation_strictly_above_current"]) + self.assertTrue(gate["individual_relation_rank_improvement"]) + self.assertFalse(gate["direct_non_regression"]) + self.assertFalse(gate["negative_non_regression"]) + self.assertFalse(gate["individual_control_rank_non_regression"]) + for variant_id in ( + "anchored-linear-conservative", + "anchored-linear-mass", + "anchored-rrf-conservative", + ): + gate = by_id[variant_id]["candidate_gate"] + self.assertTrue(gate["direct_non_regression"]) + self.assertTrue(gate["negative_non_regression"]) + self.assertTrue(gate["individual_control_rank_non_regression"]) + self.assertFalse(gate["relation_strictly_above_current"]) + self.assertFalse(gate["individual_relation_rank_improvement"]) + + if __name__ == "__main__": unittest.main()