diff --git a/README.md b/README.md index c5fea4f..8adfcd9 100644 --- a/README.md +++ b/README.md @@ -122,6 +122,14 @@ python -m neuron_graph_rag benchmark \ 初回観測では relation 改善と説明経路・feedback isolation は支持されましたが、negative control の2件が悪化したため非対象の過剰押し上げ仮説は不支持でした。詳細値と適用限界は観測記録を参照してください。 +## Neural dynamics experiment + +正方向加算、有限活性 budget、側方抑制、query-conditioned transmission、反復競合の13 variants を、PR #10 の development set と非重複9-node holdout で比較しました。manifest、holdout、gold、選択規則、停止規則は result 観測前の commit `4f240dd` で固定しています。 + +development では `budget-025` が relation MRR 0.3833 を維持し、negative-control MRR を 0.7083 から 1.0000 へ改善して選択されました。holdout を一度だけ開封した結果、direct / negative-control、path 3/3、feedback isolation は維持した一方、relation MRR が 0.3611 から 0.3254 へ退行しました。固定 stop rule に従って不採用とし、既定 strategy は `current_positive_additive` のままです。 + +全13 variants の gate 不合格と tradeoff、選択理由、holdout 判定は [Neural dynamics experiment](docs/neural-dynamics-experiment.md) と versioned result JSON に保存しています。現在の holdout は再選択や parameter 調整に再利用しません。 + ## Public API ```python diff --git a/docs/neural-dynamics-experiment.md b/docs/neural-dynamics-experiment.md new file mode 100644 index 0000000..dfa2a35 --- /dev/null +++ b/docs/neural-dynamics-experiment.md @@ -0,0 +1,111 @@ +# Neural dynamics experiment + +## 目的 + +現行の正方向加算だけでなく、有限活性 budget、側方抑制、query-conditioned transmission、反復競合を同一 benchmark で比較する。relation 改善を保ちながら negative control の悪化を抑える候補だけを選び、独立 holdout で一度だけ確認する。 + +この文書、manifest、development 入力、holdout 入力は variant result を観測する前に固定する。観測後に gold、doc path、閾値、parameter、選択規則、停止規則を変更しない。 + +## 固定入力 + +- manifest: `tests/fixtures/d1_liplus_dynamics_experiment.manifest.json` +- development fixture / gold: PR #10 の12件を byte 内容ではなく canonical JSON hash で固定 +- holdout fixture: `tests/fixtures/d1_liplus_dynamics_holdout.json` +- holdout gold: `tests/fixtures/d1_liplus_dynamics_holdout.gold.json` +- holdout provenance: `tests/fixtures/d1_liplus_dynamics_holdout.provenance.json` +- holdout は production D1 `search_docs` / `doc_edges` から既存 read-only acquisition tool で取得した9 node / 11 `mention` edge の弱連結 subgraph +- holdout の9 doc path は development の12 doc path と重複しない +- holdout gold は direct lookup / relation / negative control 各3件で、期待 node、許容 rank、public source URL、relation の期待 endpoint / edge type を持つ +- provenance は schema fingerprint、coverage、取得時刻、zero-write evidence、`known_gaps=[]` を保持する + +## 固定探索空間 + +variant は13件で、上限24件を超えない。同じ family の微細な総当たりは行わない。 + +| family | variant | +|---|---| +| current positive additive | `current` | +| finite activation budget | `budget-025`, `budget-050`, `budget-100` | +| lateral inhibition | `inhibition-010`, `inhibition-025`, `inhibition-top4` | +| query-conditioned transmission | `query-floor-020`, `query-floor-040`, `query-floor-060` | +| recurrent competition | `recurrent-balanced`, `recurrent-selective`, `recurrent-conservative` | + +全 variant は同じ sparse / dense / entry / graph weight、seed count、hop limit、hop decay を使う。family 固有 parameter の literal は manifest を正本とする。特定 query 文字列や node ID の例外は持たない。 + +## development 選択規則 + +全13 variant を development set で一度評価し、全体・cohort 別 MRR / Hit@3 / rank、説明 path、feedback isolation、step 数、展開数、活性総量、収束、停止理由を保存する。 + +候補 gate は current に対して次をすべて満たすこととする。 + +1. relation MRR が弱く改善する。 +2. negative-control MRR が弱く改善する。 +3. 1 または 2 の少なくとも一方が厳密に改善する。 + +gate 通過候補から relation MRR と negative-control MRR の Pareto frontier を作る。複数候補の tie-break は、worst-cohort MRR の高い順、平均展開数の少ない順、構造複雑度の低い順、variant ID の辞書順とする。gate 不合格と Pareto 支配された variant も result から削除しない。 + +候補がなければ `current` を維持し、holdout を開かず終了する。 + +## holdout 停止規則 + +development で候補が一意に選ばれた場合だけ、`current` と選択候補を holdout で一度評価する。result file が既に存在する場合、runner は上書きを拒否する。 + +次をすべて満たす場合だけ候補を採用する。 + +1. direct lookup、relation、negative control の各 MRR が current から退行しない。 +2. 全 relation case で固定 endpoint / edge type path が一致する。 +3. credited feedback edge が1本以上変化する。 +4. uncredited edge と非対象 case rank が変化しない。 + +一つでも満たさなければ既定は `current` のままとする。holdout result を見て parameter、gold、doc path、閾値を調整しない。 + +## 実行境界 + +freeze commit より前に development / holdout runner を実行しない。freeze 後は次の順序だけを許可する。 + +1. development stage を実行し、versioned result を新規作成する。 +2. frozen selection rule で候補を決める。 +3. 候補がなければ停止する。 +4. 候補があれば holdout stage を一度だけ実行し、versioned result を新規作成する。 +5. 採用または不採用を frozen stop rule から機械的に記録する。 + +品質数値を CI 合格閾値にはしない。CI は manifest hash、入力分離、determinism、再生成一致、停止規則の適用を検証する。 + +## 観測結果 + +freeze commit `4f240dd` の push 後、development stage を一度実行した。全結果は `tests/fixtures/d1_liplus_dynamics_experiment.development.result.json` に保存する。 + +| variant | direct MRR | relation MRR | negative MRR | candidate gate | Pareto | +|---|---:|---:|---:|---|---| +| `current` | 1.0000 | 0.3833 | 0.7083 | reference | - | +| `budget-025` | 1.0000 | 0.3833 | 1.0000 | pass | frontier | +| `budget-050` | 1.0000 | 0.3833 | 1.0000 | pass | frontier | +| `budget-100` | 1.0000 | 0.3833 | 1.0000 | pass | frontier | +| `inhibition-010` | 1.0000 | 0.3833 | 0.7083 | fail | - | +| `inhibition-025` | 1.0000 | 0.3833 | 0.6667 | fail | - | +| `inhibition-top4` | 1.0000 | 0.3750 | 0.7083 | fail | - | +| `query-floor-020` | 1.0000 | 0.3333 | 1.0000 | fail | - | +| `query-floor-040` | 1.0000 | 0.3833 | 1.0000 | pass | frontier | +| `query-floor-060` | 1.0000 | 0.3833 | 1.0000 | pass | frontier | +| `recurrent-balanced` | 0.7083 | 0.6333 | 0.5417 | fail | - | +| `recurrent-selective` | 0.8750 | 0.4524 | 0.6667 | fail | - | +| `recurrent-conservative` | 0.6250 | 0.6333 | 0.5417 | fail | - | + +Pareto 支配された gate 通過候補はなかった。5候補は relation / negative-control 軸で同値の frontier になり、平均展開数と構造複雑度も同値だったため、最後の辞書順 tie-break で `budget-025` を選択した。recurrent family は relation を改善した一方で direct / negative-control を退行させたため、候補 gate を通らなかった。この tradeoff を失敗結果として保持する。 + +## Holdout 判定 + +development 選択後、holdout stage を一度だけ実行した。全結果は `tests/fixtures/d1_liplus_dynamics_experiment.holdout.result.json` に保存する。 + +| variant | direct MRR | relation MRR | negative MRR | path | feedback isolation | +|---|---:|---:|---:|---:|---:| +| `current` | 1.0000 | 0.3611 | 1.0000 | 3/3 | pass | +| `budget-025` | 1.0000 | 0.3254 | 1.0000 | 3/3 | pass | + +`budget-025` は `holdout-relation-history-architecture` を rank 4 から rank 7 へ退行させた。他2 relation case は rank 2 と rank 3 のままだった。全 relation path は一致し、credited edge 1本だけが変化し、uncredited edge と非対象 rank の変更はなかった。 + +しかし relation cohort MRR が current 0.3611 から 0.3254 へ退行したため、固定 stop rule の `no_cohort_regression` を満たさない。`budget-025` は不採用とし、既定は `current_positive_additive` のまま変更しない。holdout を見た後の parameter、gold、doc path、閾値の調整は行わない。 + +## 適用限界 + +development と holdout はいずれも固定 Li+ wiki subset と feature-hashing encoder に限定される。D1 は損失あり search snapshot であり、一般 corpus、learned embedding、別 graph topology へ外挿しない。今回の結果は有限 budget が development negative control を回復できても、独立 subgraph の relation 品質を維持する一般則にはならなかったことを示す。 diff --git a/docs/requirements.md b/docs/requirements.md index 28a18fe..7f14a7f 100644 --- a/docs/requirements.md +++ b/docs/requirements.md @@ -43,6 +43,12 @@ 25. baseline hybrid と graph-integrated retrieval を同一 corpus、encoder、query で実行し、全体・cohort 別の MRR、Hit@3、rank delta、改善・同値・悪化件数を機械可読に出力できる。 26. relation の説明は score だけでなく、固定した one-hop / two-hop の endpoint と edge type に対して照合する。 27. success feedback 前後で edge weight と全 gold case の rank を比較し、credited path 外の edge 変更と非対象 case の rank 変更を明示する。 +28. 活性伝播は共通 interface の下で、現行正方向加算、有限活性 budget、側方抑制、query-conditioned transmission、反復競合を選択できる。 +29. 各検索 trace は strategy、伝播 step 数、展開数、活性総量、収束有無、停止理由を決定論的な diagnostics として保持する。 +30. neural dynamics experiment は development と doc path が重ならない connected holdout、gold、探索空間、最大 variant 数、選択規則、停止規則を結果観測前に固定する。 +31. 候補選択は development result だけで行い、relation MRR と negative-control MRR の Pareto gate、worst-cohort MRR、展開数、構造複雑度、variant ID の順で一意に決める。 +32. development gate を通る候補がない場合は holdout を開かず既定を変更しない。候補がある場合だけ holdout を一度評価し、cohort 退行、path 不一致、feedback 汚染のいずれかがあれば採用しない。 +33. experiment result は gate 不合格、Pareto 支配、holdout 不採用を含む全 variant を上書きせず versioned artifact として保存する。 ## 4. Constraints @@ -63,3 +69,4 @@ - `tests/fixtures/d1_liplus_wiki.json` が実 D1 形状から ingest、検索、時系列 metadata、graph activation、success feedback を再現する。 - [D1 corpus fixture](d1-corpus-fixture.md) が read-only 取得、認証境界、provenance、coverage 比較、再取得手順を定義する。 - [Real-corpus benchmark](real-corpus-benchmark.md) が gold freeze、判定規則、観測結果、外挿限界を定義する。 +- [Neural dynamics experiment](neural-dynamics-experiment.md) が development / holdout 分離、固定探索空間、候補選択、単一 holdout 開封、停止規則を定義する。 diff --git a/src/neuron_graph_rag/benchmark.py b/src/neuron_graph_rag/benchmark.py index a77f883..69f6c9b 100644 --- a/src/neuron_graph_rag/benchmark.py +++ b/src/neuron_graph_rag/benchmark.py @@ -417,4 +417,12 @@ def _edge_key(edge: Any) -> tuple[str, str, str]: def _sha256(path: Path) -> str: - return "sha256:" + hashlib.sha256(path.read_bytes()).hexdigest() + if path.suffix == ".json": + with path.open(encoding="utf-8") as stream: + value = json.load(stream) + payload = ( + json.dumps(value, ensure_ascii=False, indent=2, sort_keys=True) + "\n" + ).encode("utf-8") + else: + payload = path.read_bytes() + return "sha256:" + hashlib.sha256(payload).hexdigest() diff --git a/src/neuron_graph_rag/dynamics.py b/src/neuron_graph_rag/dynamics.py new file mode 100644 index 0000000..f21cfe6 --- /dev/null +++ b/src/neuron_graph_rag/dynamics.py @@ -0,0 +1,354 @@ +from __future__ import annotations + +import math +from collections import defaultdict +from collections.abc import Callable, Sequence +from dataclasses import dataclass + +from .models import ActivationPath, DocumentNode, PathStep, TypedEdge +from .retrieval import tokenize + + +@dataclass(frozen=True, slots=True) +class DynamicsSettings: + strategy: str + max_hops: int + hop_decay: float + max_expansions: int + activation_budget: float + inhibition_ratio: float + inhibition_top_k: int + query_transmission_floor: float + query_transmission_power: float + recurrent_steps: int + recurrent_decay: float + convergence_tolerance: float + + +@dataclass(frozen=True, slots=True) +class PropagationDiagnostics: + strategy: str + steps: int + expansions: int + activation_total: float + converged: bool + stop_reason: str + + def as_dict(self) -> dict[str, object]: + return { + "strategy": self.strategy, + "steps": self.steps, + "expansions": self.expansions, + "activation_total": self.activation_total, + "converged": self.converged, + "stop_reason": self.stop_reason, + } + + +@dataclass(frozen=True, slots=True) +class PropagationResult: + activation: dict[str, float] + paths: dict[str, list[ActivationPath]] + diagnostics: PropagationDiagnostics + + +OutgoingEdges = Callable[[str], Sequence[TypedEdge]] + + +def propagate( + *, + query: str, + seed_ids: list[str], + entry: dict[str, float], + nodes: dict[str, DocumentNode], + outgoing_edges: OutgoingEdges, + settings: DynamicsSettings, +) -> PropagationResult: + if settings.strategy == "recurrent_competition": + return _recurrent( + query=query, + seed_ids=seed_ids, + entry=entry, + nodes=nodes, + outgoing_edges=outgoing_edges, + settings=settings, + ) + if settings.strategy not in { + "current_positive_additive", + "finite_activation_budget", + "lateral_inhibition", + "query_conditioned_transmission", + }: + raise ValueError(f"Unknown activation strategy: {settings.strategy}") + + activation: dict[str, float] = defaultdict(float) + paths: dict[str, list[ActivationPath]] = defaultdict(list) + frontier: list[tuple[str, str, float, tuple[PathStep, ...], frozenset[str]]] = [] + for seed_id in seed_ids: + contribution = entry[seed_id] + activation[seed_id] += contribution + paths[seed_id].append(ActivationPath(seed_id, contribution)) + frontier.append((seed_id, seed_id, contribution, (), frozenset({seed_id}))) + + expansions = 0 + steps = 0 + stop_reason = "max_hops" + query_terms = set(tokenize(query)) + for depth in range(settings.max_hops): + proposals: list[ + tuple[str, str, float, tuple[PathStep, ...], frozenset[str]] + ] = [] + for seed_id, current_id, contribution, path_steps, visited in frontier: + for edge in outgoing_edges(current_id): + if edge.target_id in visited: + continue + next_contribution = ( + contribution + * edge.weight + * edge.factuality + * settings.hop_decay + ) + if settings.strategy == "query_conditioned_transmission": + next_contribution *= _query_gate( + query_terms, + nodes[edge.target_id], + edge, + settings, + ) + if next_contribution <= 0.0: + continue + step = PathStep( + edge.source_id, + edge.target_id, + edge.edge_type, + edge.weight, + edge.factuality, + ) + proposals.append( + ( + seed_id, + edge.target_id, + next_contribution, + path_steps + (step,), + visited | {edge.target_id}, + ) + ) + expansions += 1 + if expansions >= settings.max_expansions: + stop_reason = "max_expansions" + break + if expansions >= settings.max_expansions: + break + if not proposals: + stop_reason = "frontier_exhausted" + break + if settings.strategy == "finite_activation_budget": + total = sum(item[2] for item in proposals) + scale = min(1.0, settings.activation_budget / total) if total else 1.0 + proposals = [ + (seed_id, node_id, contribution * scale, path_steps, visited) + for seed_id, node_id, contribution, path_steps, visited in proposals + ] + for seed_id, node_id, contribution, path_steps, _ in proposals: + activation[node_id] += contribution + paths[node_id].append( + ActivationPath(seed_id, contribution, path_steps) + ) + frontier = proposals + steps = depth + 1 + if expansions >= settings.max_expansions: + break + + if settings.strategy == "lateral_inhibition": + activation = defaultdict(float, _inhibit(dict(activation), settings)) + paths = defaultdict( + list, + { + node_id: node_paths + for node_id, node_paths in paths.items() + if activation.get(node_id, 0.0) > 0.0 + }, + ) + + output = dict(activation) + return PropagationResult( + output, + dict(paths), + PropagationDiagnostics( + strategy=settings.strategy, + steps=steps, + expansions=expansions, + activation_total=sum(output.values()), + converged=stop_reason == "frontier_exhausted", + stop_reason=stop_reason, + ), + ) + + +def _recurrent( + *, + query: str, + seed_ids: list[str], + entry: dict[str, float], + nodes: dict[str, DocumentNode], + outgoing_edges: OutgoingEdges, + settings: DynamicsSettings, +) -> PropagationResult: + query_terms = set(tokenize(query)) + state = {node_id: entry[node_id] for node_id in seed_ids} + paths: dict[str, list[ActivationPath]] = defaultdict(list) + best_paths: dict[str, ActivationPath] = {} + for seed_id in seed_ids: + path = ActivationPath(seed_id, entry[seed_id]) + paths[seed_id].append(path) + best_paths[seed_id] = path + + expansions = 0 + stop_reason = "recurrent_step_limit" + converged = False + completed_steps = 0 + for step_number in range(settings.recurrent_steps): + messages: dict[str, float] = defaultdict(float) + message_paths: dict[str, list[ActivationPath]] = defaultdict(list) + for source_id, source_activation in sorted(state.items()): + if source_activation <= 0.0: + continue + source_path = best_paths.get( + source_id, ActivationPath(source_id, source_activation) + ) + visited = {source_path.seed_id} + visited.update(path_step.target_id for path_step in source_path.steps) + for edge in outgoing_edges(source_id): + if edge.target_id in visited: + continue + contribution = ( + source_activation + * edge.weight + * edge.factuality + * settings.hop_decay + * _query_gate( + query_terms, + nodes[edge.target_id], + edge, + settings, + ) + ) + if contribution <= 0.0: + continue + path_step = PathStep( + edge.source_id, + edge.target_id, + edge.edge_type, + edge.weight, + edge.factuality, + ) + path = ActivationPath( + source_path.seed_id, + contribution, + source_path.steps + (path_step,), + ) + messages[edge.target_id] += contribution + message_paths[edge.target_id].append(path) + expansions += 1 + if expansions >= settings.max_expansions: + stop_reason = "max_expansions" + break + if expansions >= settings.max_expansions: + break + + total_messages = sum(messages.values()) + if total_messages > settings.activation_budget: + scale = settings.activation_budget / total_messages + messages = {node_id: value * scale for node_id, value in messages.items()} + message_paths = { + node_id: [ + ActivationPath(path.seed_id, path.contribution * scale, path.steps) + for path in node_paths + ] + for node_id, node_paths in message_paths.items() + } + + candidate: dict[str, float] = defaultdict(float) + for node_id, value in state.items(): + candidate[node_id] += settings.recurrent_decay * value + for node_id, value in messages.items(): + candidate[node_id] += value + candidate = _inhibit(dict(candidate), settings) + delta = max( + ( + abs(candidate.get(node_id, 0.0) - state.get(node_id, 0.0)) + for node_id in set(candidate) | set(state) + ), + default=0.0, + ) + state = candidate + for node_id, node_paths in message_paths.items(): + paths[node_id].extend(node_paths) + best_paths[node_id] = max( + node_paths, + key=lambda path: (path.contribution, path.seed_id), + ) + completed_steps = step_number + 1 + if delta <= settings.convergence_tolerance: + stop_reason = "converged" + converged = True + break + if expansions >= settings.max_expansions: + break + + return PropagationResult( + dict(state), + dict(paths), + PropagationDiagnostics( + strategy=settings.strategy, + steps=completed_steps, + expansions=expansions, + activation_total=sum(state.values()), + converged=converged, + stop_reason=stop_reason, + ), + ) + + +def _query_gate( + query_terms: set[str], + target: DocumentNode, + edge: TypedEdge, + settings: DynamicsSettings, +) -> float: + evidence_terms = set(tokenize(target.text)) | set(tokenize(edge.edge_type)) + if not query_terms or not evidence_terms: + overlap = 0.0 + else: + overlap = len(query_terms & evidence_terms) / math.sqrt( + len(query_terms) * len(evidence_terms) + ) + conditioned = math.pow(max(0.0, min(1.0, overlap)), settings.query_transmission_power) + return settings.query_transmission_floor + ( + 1.0 - settings.query_transmission_floor + ) * conditioned + + +def _inhibit( + activation: dict[str, float], settings: DynamicsSettings +) -> dict[str, float]: + if not activation: + return {} + maximum = max(activation.values()) + threshold = settings.inhibition_ratio * maximum + inhibited = { + node_id: max(0.0, value - threshold) + for node_id, value in activation.items() + } + inhibited = {node_id: value for node_id, value in inhibited.items() if value > 0.0} + if settings.inhibition_top_k > 0: + keep = { + node_id + for node_id, _ in sorted( + inhibited.items(), key=lambda item: (-item[1], item[0]) + )[: settings.inhibition_top_k] + } + inhibited = { + node_id: value for node_id, value in inhibited.items() if node_id in keep + } + return inhibited diff --git a/src/neuron_graph_rag/engine.py b/src/neuron_graph_rag/engine.py index 093120a..241af56 100644 --- a/src/neuron_graph_rag/engine.py +++ b/src/neuron_graph_rag/engine.py @@ -3,22 +3,20 @@ import math import time import uuid -from collections import defaultdict, deque from collections.abc import Iterable from dataclasses import dataclass from datetime import datetime from pathlib import Path from .models import ( - ActivationPath, DocumentNode, FeedbackReceipt, - PathStep, ReinforcedEdge, SearchHit, SearchTrace, TypedEdge, ) +from .dynamics import DynamicsSettings, propagate from .retrieval import BM25Retriever, DenseEncoder, DenseRetriever, normalize_scores from .storage import SQLiteStore @@ -38,6 +36,15 @@ class EngineConfig: maximum_activation: float = 10.0 max_paths_per_node: int = 4 max_propagation_expansions: int = 10_000 + activation_strategy: str = "current_positive_additive" + activation_budget: float = 1.0 + inhibition_ratio: float = 0.0 + inhibition_top_k: int = 0 + query_transmission_floor: float = 0.4 + query_transmission_power: float = 1.0 + recurrent_steps: int = 3 + recurrent_decay: float = 0.5 + convergence_tolerance: float = 1e-9 def __post_init__(self) -> None: for name in ( @@ -60,6 +67,30 @@ def __post_init__(self) -> None: raise ValueError("activation half-life must be positive") if self.feedback_learning_rate <= 0.0: raise ValueError("feedback learning rate must be positive") + if self.activation_strategy not in { + "current_positive_additive", + "finite_activation_budget", + "lateral_inhibition", + "query_conditioned_transmission", + "recurrent_competition", + }: + raise ValueError("Unknown activation_strategy") + if self.activation_budget <= 0.0: + raise ValueError("activation_budget must be positive") + if not 0.0 <= self.inhibition_ratio < 1.0: + raise ValueError("inhibition_ratio must be in [0, 1)") + if self.inhibition_top_k < 0: + raise ValueError("inhibition_top_k must be non-negative") + if not 0.0 <= self.query_transmission_floor <= 1.0: + raise ValueError("query_transmission_floor must be between 0 and 1") + if self.query_transmission_power <= 0.0: + raise ValueError("query_transmission_power must be positive") + if self.recurrent_steps < 1: + raise ValueError("recurrent_steps must be positive") + if not 0.0 <= self.recurrent_decay <= 1.0: + raise ValueError("recurrent_decay must be between 0 and 1") + if self.convergence_tolerance < 0.0: + raise ValueError("convergence_tolerance must be non-negative") class NeuronGraphRAG: @@ -157,7 +188,28 @@ def search( )[: self.config.seed_count] if score > 0.0 ] - graph_activation, paths = self._propagate(seed_ids, entry) + propagation = propagate( + query=query, + seed_ids=seed_ids, + entry=entry, + nodes={node.node_id: node for node in nodes}, + outgoing_edges=self.store.outgoing_edges, + settings=DynamicsSettings( + strategy=self.config.activation_strategy, + max_hops=self.config.max_hops, + hop_decay=self.config.hop_decay, + max_expansions=self.config.max_propagation_expansions, + activation_budget=self.config.activation_budget, + inhibition_ratio=self.config.inhibition_ratio, + inhibition_top_k=self.config.inhibition_top_k, + query_transmission_floor=self.config.query_transmission_floor, + query_transmission_power=self.config.query_transmission_power, + recurrent_steps=self.config.recurrent_steps, + recurrent_decay=self.config.recurrent_decay, + convergence_tolerance=self.config.convergence_tolerance, + ), + ) + graph_activation, paths = propagation.activation, propagation.paths normalized_activation = normalize_scores( {node.node_id: graph_activation.get(node.node_id, 0.0) for node in nodes} ) @@ -206,7 +258,13 @@ def search( for rank, hit in enumerate(selected_hits, start=1) ), ) - return SearchTrace(trace_id, query, timestamp, selected_hits) + return SearchTrace( + trace_id, + query, + timestamp, + selected_hits, + propagation.diagnostics.as_dict(), + ) def record_success( self, @@ -298,66 +356,6 @@ def activation( value, updated_at = state return self._decayed(value, updated_at, self._timestamp(now)) - def _propagate( - self, seed_ids: list[str], entry: dict[str, float] - ) -> tuple[dict[str, float], dict[str, list[ActivationPath]]]: - activation: dict[str, float] = defaultdict(float) - paths: dict[str, list[ActivationPath]] = defaultdict(list) - queue: deque[ - tuple[str, str, float, tuple[PathStep, ...], frozenset[str], int] - ] = deque() - for seed_id in seed_ids: - contribution = entry[seed_id] - activation[seed_id] += contribution - path = ActivationPath(seed_id, contribution) - paths[seed_id].append(path) - queue.append( - (seed_id, seed_id, contribution, (), frozenset({seed_id}), 0) - ) - - expansions = 0 - while queue and expansions < self.config.max_propagation_expansions: - seed_id, current_id, contribution, steps, visited, depth = queue.popleft() - if depth >= self.config.max_hops: - continue - for edge in self.store.outgoing_edges(current_id): - if edge.target_id in visited: - continue - next_contribution = ( - contribution - * edge.weight - * edge.factuality - * self.config.hop_decay - ) - if next_contribution <= 0.0: - continue - step = PathStep( - edge.source_id, - edge.target_id, - edge.edge_type, - edge.weight, - edge.factuality, - ) - next_steps = steps + (step,) - activation[edge.target_id] += next_contribution - paths[edge.target_id].append( - ActivationPath(seed_id, next_contribution, next_steps) - ) - queue.append( - ( - seed_id, - edge.target_id, - next_contribution, - next_steps, - visited | {edge.target_id}, - depth + 1, - ) - ) - expansions += 1 - if expansions >= self.config.max_propagation_expansions: - break - return dict(activation), dict(paths) - def _record_activation( self, activation: dict[str, float], timestamp: float ) -> None: diff --git a/src/neuron_graph_rag/experiment.py b/src/neuron_graph_rag/experiment.py new file mode 100644 index 0000000..2c39dd1 --- /dev/null +++ b/src/neuron_graph_rag/experiment.py @@ -0,0 +1,465 @@ +from __future__ import annotations + +import hashlib +import json +from collections import Counter +from pathlib import Path +from typing import Any + +from .benchmark import COHORTS, _edge_key, _metrics, _rank, _simple_path +from .d1_fixture import load_fixture, read_fixture +from .engine import EngineConfig, NeuronGraphRAG + + +EXPERIMENT_SCHEMA_VERSION = 1 + + +def read_manifest(path: str | Path) -> dict[str, Any]: + manifest_path = Path(path) + manifest = _read_json(manifest_path) + if manifest.get("schema_version") != EXPERIMENT_SCHEMA_VERSION: + raise ValueError("Unsupported dynamics experiment schema version") + variants = manifest.get("variants") + if not isinstance(variants, list) or not variants: + raise ValueError("Experiment manifest must contain variants") + if len(variants) > int(manifest["maximum_variants"]): + raise ValueError("Experiment variant count exceeds the frozen maximum") + ids = [str(variant.get("id", "")) for variant in variants] + if any(not variant_id for variant_id in ids) or len(ids) != len(set(ids)): + raise ValueError("Experiment variant ids must be non-empty and unique") + if ids[0] != "current" or variants[0]["family"] != "current_positive_additive": + raise ValueError("The first experiment variant must be current") + base = manifest_path.parent + for split_name in ("development", "holdout"): + split = manifest[split_name] + for field in ("fixture", "gold"): + actual = _canonical_sha256(base / split[field]) + if actual != split[f"{field}_sha256"]: + raise ValueError( + f"Frozen {split_name} {field} hash mismatch: {actual}" + ) + holdout = manifest["holdout"] + if _canonical_sha256(base / holdout["provenance"]) != holdout["provenance_sha256"]: + raise ValueError("Frozen holdout provenance hash mismatch") + development_paths = _doc_paths(base / manifest["development"]["fixture"]) + holdout_paths = _doc_paths(base / manifest["holdout"]["fixture"]) + overlap = sorted(development_paths & holdout_paths) + if overlap: + raise ValueError(f"Development and holdout doc paths overlap: {overlap!r}") + return manifest + + +def run_development(manifest_path: str | Path) -> dict[str, Any]: + manifest_path = Path(manifest_path) + manifest = read_manifest(manifest_path) + split = manifest["development"] + base = manifest_path.parent + gold = _read_gold(base / split["gold"]) + variants = [ + _evaluate_variant( + base / split["fixture"], + gold, + _variant_config(manifest, variant), + variant, + int(manifest["shared_config"]["limit"]), + ) + for variant in manifest["variants"] + ] + selection = _select_development(variants) + return { + "schema_version": EXPERIMENT_SCHEMA_VERSION, + "experiment_id": manifest["experiment_id"], + "stage": "development", + "manifest_sha256": _canonical_sha256(manifest_path), + "inputs": { + "fixture_sha256": split["fixture_sha256"], + "gold_sha256": split["gold_sha256"], + }, + "variant_count": len(variants), + "variants": variants, + "selection": selection, + "holdout_status": ( + "not_opened_candidate_selected" + if selection["selected_variant_id"] != "current" + else "not_opened_no_candidate" + ), + } + + +def run_holdout( + manifest_path: str | Path, + development_result_path: str | Path, +) -> dict[str, Any]: + manifest_path = Path(manifest_path) + development_result_path = Path(development_result_path) + manifest = read_manifest(manifest_path) + development = _read_json(development_result_path) + expected_manifest_hash = _canonical_sha256(manifest_path) + if development.get("manifest_sha256") != expected_manifest_hash: + raise ValueError("Development result does not match the frozen manifest") + selected_id = str(development["selection"]["selected_variant_id"]) + if selected_id == "current": + raise ValueError("Stop rule forbids opening holdout when no candidate passed") + variant_by_id = {str(item["id"]): item for item in manifest["variants"]} + if selected_id not in variant_by_id: + raise ValueError("Development result selected an unknown variant") + + split = manifest["holdout"] + base = manifest_path.parent + gold = _read_gold(base / split["gold"]) + evaluated = [] + for variant_id in ("current", selected_id): + variant = variant_by_id[variant_id] + evaluated.append( + _evaluate_variant( + base / split["fixture"], + gold, + _variant_config(manifest, variant), + variant, + int(manifest["shared_config"]["limit"]), + ) + ) + current, selected = evaluated + no_cohort_regression = all( + selected["metrics"]["cohorts"][cohort]["mean_reciprocal_rank"] + >= current["metrics"]["cohorts"][cohort]["mean_reciprocal_rank"] + for cohort in COHORTS + ) + paths_match = all(item["matched"] for item in selected["explanations"]) + feedback = selected["feedback"] + feedback_isolated = ( + bool(feedback["credited_edges"]) + and not feedback["uncredited_edge_changes"] + and not feedback["non_target_rank_changes"] + ) + adopted = no_cohort_regression and paths_match and feedback_isolated + return { + "schema_version": EXPERIMENT_SCHEMA_VERSION, + "experiment_id": manifest["experiment_id"], + "stage": "holdout", + "manifest_sha256": expected_manifest_hash, + "development_result_sha256": _canonical_sha256(development_result_path), + "holdout_open_count": 1, + "inputs": { + "fixture_sha256": split["fixture_sha256"], + "gold_sha256": split["gold_sha256"], + "provenance_sha256": split["provenance_sha256"], + }, + "variants": evaluated, + "decision": { + "selected_variant_id": selected_id, + "no_cohort_regression": no_cohort_regression, + "all_relation_paths_match": paths_match, + "feedback_isolated": feedback_isolated, + "adopted": adopted, + "default_variant_id": selected_id if adopted else "current", + }, + } + + +def write_result(path: str | Path, result: dict[str, Any]) -> None: + Path(path).write_text( + json.dumps(result, ensure_ascii=False, indent=2, sort_keys=True) + "\n", + encoding="utf-8", + newline="\n", + ) + + +def _evaluate_variant( + fixture_path: Path, + gold: dict[str, Any], + config: EngineConfig, + variant: dict[str, Any], + limit: int, +) -> dict[str, Any]: + cases: list[dict[str, Any]] = [] + with NeuronGraphRAG(config=config) as engine: + load_fixture(engine, fixture_path) + for case in gold["cases"]: + trace = engine.search(case["query"], limit=limit, now=1_000.0) + target = next( + hit for hit in trace.hits if hit.node.node_id == case["expected_node_id"] + ) + observed_paths = [_simple_path(path) for path in target.explain()["paths"]] + expected_path = case.get("expected_path", []) + cases.append( + { + "id": case["id"], + "cohort": case["cohort"], + "acceptable_rank": int(case["acceptable_rank"]), + "rank": _rank(trace, case["expected_node_id"]), + "expected_path": expected_path, + "observed_paths": observed_paths, + "path_matched": ( + any(path["steps"] == expected_path for path in observed_paths) + if expected_path + else None + ), + "diagnostics": trace.diagnostics, + } + ) + feedback = _run_feedback( + fixture_path, + gold["cases"], + config, + limit, + _feedback_case_id(gold["cases"]), + ) + metrics = _metrics(cases) + diagnostics = { + "mean_expansions": sum( + int(case["diagnostics"]["expansions"]) for case in cases + ) + / len(cases), + "mean_steps": sum(int(case["diagnostics"]["steps"]) for case in cases) + / len(cases), + "mean_activation_total": sum( + float(case["diagnostics"]["activation_total"]) for case in cases + ) + / len(cases), + "stop_reasons": dict( + sorted(Counter(case["diagnostics"]["stop_reason"] for case in cases).items()) + ), + } + return { + "id": variant["id"], + "family": variant["family"], + "parameters": variant["parameters"], + "structural_complexity": int(variant["structural_complexity"]), + "metrics": metrics, + "cases": cases, + "explanations": [ + { + "id": case["id"], + "matched": case["path_matched"], + "expected_path": case["expected_path"], + "observed_paths": case["observed_paths"], + } + for case in cases + if case["cohort"] == "relation" + ], + "feedback": feedback, + "diagnostics": diagnostics, + } + + +def _run_feedback( + fixture_path: Path, + cases: list[dict[str, Any]], + config: EngineConfig, + limit: int, + feedback_case_id: str, +) -> dict[str, Any]: + case_by_id = {str(case["id"]): case for case in cases} + feedback_case = case_by_id[feedback_case_id] + with NeuronGraphRAG(config=config) as engine: + load_fixture(engine, fixture_path) + before_ranks: dict[str, int] = {} + feedback_trace = None + for case in cases: + trace = engine.search(case["query"], limit=limit, now=2_000.0) + before_ranks[case["id"]] = _rank(trace, case["expected_node_id"]) + if case["id"] == feedback_case_id: + feedback_trace = trace + if feedback_trace is None: + raise ValueError("Feedback trace was not produced") + before_edges = {_edge_key(edge): edge.weight for edge in engine.store.list_edges()} + receipt = engine.record_success( + feedback_trace.trace_id, + [feedback_case["expected_node_id"]], + now=2_001.0, + ) + after_edges = {_edge_key(edge): edge.weight for edge in engine.store.list_edges()} + changed_edges = [ + { + "source_id": key[0], + "target_id": key[1], + "edge_type": key[2], + "old_weight": before_edges[key], + "new_weight": after_edges[key], + } + for key in sorted(before_edges) + if before_edges[key] != after_edges[key] + ] + credited_edges = [ + { + "source_id": edge.source_id, + "target_id": edge.target_id, + "edge_type": edge.edge_type, + "old_weight": edge.old_weight, + "new_weight": edge.new_weight, + } + for edge in receipt.reinforced_edges + ] + credited_keys = { + (edge["source_id"], edge["target_id"], edge["edge_type"]) + for edge in credited_edges + } + uncredited = [ + edge + for edge in changed_edges + if (edge["source_id"], edge["target_id"], edge["edge_type"]) + not in credited_keys + ] + after_ranks: dict[str, int] = {} + for case in cases: + trace = engine.search(case["query"], limit=limit, now=2_002.0) + after_ranks[case["id"]] = _rank(trace, case["expected_node_id"]) + non_target_changes = [ + { + "id": case_id, + "before_rank": before_ranks[case_id], + "after_rank": after_ranks[case_id], + } + for case_id in sorted(before_ranks) + if case_id != feedback_case_id + and before_ranks[case_id] != after_ranks[case_id] + ] + return { + "case_id": feedback_case_id, + "target_node_id": feedback_case["expected_node_id"], + "target_rank_before": before_ranks[feedback_case_id], + "target_rank_after": after_ranks[feedback_case_id], + "credited_edges": credited_edges, + "changed_edges": changed_edges, + "uncredited_edge_changes": uncredited, + "non_target_rank_changes": non_target_changes, + } + + +def _select_development(variants: list[dict[str, Any]]) -> dict[str, Any]: + current = variants[0] + current_relation = _cohort_mrr(current, "relation") + current_negative = _cohort_mrr(current, "negative_control") + eligible: list[dict[str, Any]] = [] + for variant in variants: + relation = _cohort_mrr(variant, "relation") + negative = _cohort_mrr(variant, "negative_control") + variant["relative_to_current"] = { + "relation_mrr_delta": relation - current_relation, + "negative_control_mrr_delta": negative - current_negative, + } + variant["candidate_gate_passed"] = ( + variant["id"] != "current" + and relation >= current_relation + and negative >= current_negative + and (relation > current_relation or negative > current_negative) + ) + if variant["candidate_gate_passed"]: + eligible.append(variant) + + pareto: list[dict[str, Any]] = [] + for candidate in eligible: + dominated_by = [ + other["id"] + for other in eligible + if other is not candidate and _dominates(other, candidate) + ] + candidate["dominated_by"] = sorted(dominated_by) + candidate["pareto_status"] = "dominated" if dominated_by else "frontier" + if not dominated_by: + pareto.append(candidate) + for variant in variants: + if "pareto_status" not in variant: + variant["pareto_status"] = "failed_gate" + variant["dominated_by"] = [] + + if not pareto: + return { + "selected_variant_id": "current", + "reason": "no_variant_passed_candidate_gate", + "eligible_variant_ids": [], + "pareto_frontier_variant_ids": [], + } + selected = sorted( + pareto, + key=lambda variant: ( + -min( + _cohort_mrr(variant, cohort) + for cohort in COHORTS + ), + float(variant["diagnostics"]["mean_expansions"]), + int(variant["structural_complexity"]), + str(variant["id"]), + ), + )[0] + return { + "selected_variant_id": selected["id"], + "reason": "predeclared_pareto_and_tie_break", + "eligible_variant_ids": sorted(variant["id"] for variant in eligible), + "pareto_frontier_variant_ids": sorted(variant["id"] for variant in pareto), + } + + +def _dominates(left: dict[str, Any], right: dict[str, Any]) -> bool: + left_axes = ( + _cohort_mrr(left, "relation"), + _cohort_mrr(left, "negative_control"), + ) + right_axes = ( + _cohort_mrr(right, "relation"), + _cohort_mrr(right, "negative_control"), + ) + return all(a >= b for a, b in zip(left_axes, right_axes, strict=True)) and any( + a > b for a, b in zip(left_axes, right_axes, strict=True) + ) + + +def _cohort_mrr(variant: dict[str, Any], cohort: str) -> float: + return float(variant["metrics"]["cohorts"][cohort]["mean_reciprocal_rank"]) + + +def _variant_config( + manifest: dict[str, Any], variant: dict[str, Any] +) -> EngineConfig: + values = { + key: value + for key, value in manifest["shared_config"].items() + if key != "limit" + } + values["activation_strategy"] = variant["family"] + values.update(variant["parameters"]) + return EngineConfig(**values) + + +def _read_gold(path: Path) -> dict[str, Any]: + gold = _read_json(path) + cases = gold.get("cases") + if not isinstance(cases, list) or not cases: + raise ValueError("Experiment gold must contain cases") + counts = Counter(str(case.get("cohort", "")) for case in cases) + if set(counts) != set(COHORTS) or any(counts[cohort] == 0 for cohort in COHORTS): + raise ValueError("Experiment gold must cover every cohort") + for case in cases: + if not str(case.get("source_url", "")).startswith("https://github.com/"): + raise ValueError(f"Gold case {case.get('id')} lacks a public source URL") + return gold + + +def _feedback_case_id(cases: list[dict[str, Any]]) -> str: + return str(next(case["id"] for case in cases if case["cohort"] == "relation")) + + +def _doc_paths(path: Path) -> set[str]: + fixture = read_fixture(path) + return { + str(node.get("metadata", {}).get("doc_path", "")) + for node in fixture["nodes"] + if str(node.get("metadata", {}).get("doc_path", "")) + } + + +def _read_json(path: Path) -> dict[str, Any]: + with path.open(encoding="utf-8") as stream: + value = json.load(stream) + if not isinstance(value, dict): + raise ValueError(f"Expected a JSON object: {path}") + return value + + +def _canonical_sha256(path: Path) -> str: + value = _read_json(path) + canonical = ( + json.dumps(value, ensure_ascii=False, indent=2, sort_keys=True) + "\n" + ).encode("utf-8") + return "sha256:" + hashlib.sha256(canonical).hexdigest() diff --git a/src/neuron_graph_rag/models.py b/src/neuron_graph_rag/models.py index 12052a5..bffd1fb 100644 --- a/src/neuron_graph_rag/models.py +++ b/src/neuron_graph_rag/models.py @@ -84,6 +84,7 @@ class SearchTrace: query: str created_at: float hits: tuple[SearchHit, ...] + diagnostics: dict[str, Any] = field(default_factory=dict) @dataclass(frozen=True, slots=True) diff --git a/tests/fixtures/d1_liplus_dynamics_experiment.development.result.json b/tests/fixtures/d1_liplus_dynamics_experiment.development.result.json new file mode 100644 index 0000000..4825b90 --- /dev/null +++ b/tests/fixtures/d1_liplus_dynamics_experiment.development.result.json @@ -0,0 +1,7536 @@ +{ + "experiment_id": "d1-liplus-dynamics-v1", + "holdout_status": "not_opened_candidate_selected", + "inputs": { + "fixture_sha256": "sha256:b3b305aabb57803c2782c3998215e1cbcf9b5e6cdef0f641abc98520d4400cf9", + "gold_sha256": "sha256:a10af7a1a4ec5f0ef66a228b05e14fe0160e4ff5f9b3209073f38fdb90028c71" + }, + "manifest_sha256": "sha256:9267dfae42f908bbd7e22e0bc0807baffe275ad687f939ec384c4112ed11c865", + "schema_version": 1, + "selection": { + "eligible_variant_ids": [ + "budget-025", + "budget-050", + "budget-100", + "query-floor-040", + "query-floor-060" + ], + "pareto_frontier_variant_ids": [ + "budget-025", + "budget-050", + "budget-100", + "query-floor-040", + "query-floor-060" + ], + "reason": "predeclared_pareto_and_tie_break", + "selected_variant_id": "budget-025" + }, + "stage": "development", + "variant_count": 13, + "variants": [ + { + "candidate_gate_passed": false, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 2.6799999999999997, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "current_positive_additive" + }, + "expected_path": [], + "id": "direct-model", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.0, + "converged": true, + "expansions": 0, + "steps": 0, + "stop_reason": "frontier_exhausted", + "strategy": "current_positive_additive" + }, + "expected_path": [], + "id": "direct-notifications", + "observed_paths": [ + { + "seed_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 2.19, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "current_positive_additive" + }, + "expected_path": [], + "id": "direct-behavior-first", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 3.569084770172983, + "converged": false, + "expansions": 5, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "current_positive_additive" + }, + "expected_path": [], + "id": "direct-sheepdog", + "observed_paths": [ + { + "seed_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 4.191170867975482, + "converged": false, + "expansions": 7, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "current_positive_additive" + }, + "expected_path": [], + "id": "negative-configuration", + "observed_paths": [ + { + "seed_id": "w:WYol2T5WRtB0nhHDVstoqa4XndHkcatu-jI43oT8QP0", + "steps": [] + } + ], + "path_matched": null, + "rank": 3 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 5.215431068775273, + "converged": false, + "expansions": 8, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "current_positive_additive" + }, + "expected_path": [], + "id": "negative-installation", + "observed_paths": [ + { + "seed_id": "w:ssFUz7EOs1C2VAmsi9C89EKEdXRHU27whcoeGJ8U_S8", + "steps": [] + } + ], + "path_matched": null, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 2.19, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "current_positive_additive" + }, + "expected_path": [], + "id": "negative-decision-structure", + "observed_paths": [ + { + "seed_id": "w:sLjWn1Vav9JStQuz4WamNT7C6A72zuwZQcqQVBeJ_r4", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 2.8899999999999997, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "current_positive_additive" + }, + "expected_path": [], + "id": "negative-operations", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.6799999999999997, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "current_positive_additive" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.8899999999999997, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "current_positive_additive" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 3.7374081759965976, + "converged": false, + "expansions": 6, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "current_positive_additive" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 5 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.0194883077634334, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "current_positive_additive" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ], + "path_matched": true, + "rank": 3 + } + ], + "diagnostics": { + "mean_activation_total": 2.9377152658903145, + "mean_expansions": 3.6666666666666665, + "mean_steps": 1.8333333333333333, + "stop_reasons": { + "frontier_exhausted": 1, + "max_hops": 11 + } + }, + "dominated_by": [], + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ] + } + ], + "family": "current_positive_additive", + "feedback": { + "case_id": "relation-model-evolution", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.14, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.14, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_rank_after": 2, + "target_rank_before": 2, + "uncredited_edge_changes": [] + }, + "id": "current", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1, + 1 + ] + }, + "negative_control": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.7083333333333333, + "ranks": [ + 3, + 2, + 1, + 1 + ] + }, + "relation": { + "cases": 4, + "hit_at_3": 0.75, + "mean_reciprocal_rank": 0.3833333333333333, + "ranks": [ + 2, + 2, + 5, + 3 + ] + } + }, + "overall": { + "cases": 12, + "hit_at_3": 0.9166666666666666, + "mean_reciprocal_rank": 0.6972222222222223, + "ranks": [ + 1, + 1, + 1, + 1, + 3, + 2, + 1, + 1, + 2, + 2, + 5, + 3 + ] + } + }, + "parameters": {}, + "pareto_status": "failed_gate", + "relative_to_current": { + "negative_control_mrr_delta": 0.0, + "relation_mrr_delta": 0.0 + }, + "structural_complexity": 0 + }, + { + "candidate_gate_passed": true, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.5, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "direct-model", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.0, + "converged": true, + "expansions": 0, + "steps": 0, + "stop_reason": "frontier_exhausted", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "direct-notifications", + "observed_paths": [ + { + "seed_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.425, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "direct-behavior-first", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.4222441266596852, + "converged": false, + "expansions": 5, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "direct-sheepdog", + "observed_paths": [ + { + "seed_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.3641589418506153, + "converged": false, + "expansions": 7, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "negative-configuration", + "observed_paths": [ + { + "seed_id": "w:WYol2T5WRtB0nhHDVstoqa4XndHkcatu-jI43oT8QP0", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.4397173096892386, + "converged": false, + "expansions": 8, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "negative-installation", + "observed_paths": [ + { + "seed_id": "w:ssFUz7EOs1C2VAmsi9C89EKEdXRHU27whcoeGJ8U_S8", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.425, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "negative-decision-structure", + "observed_paths": [ + { + "seed_id": "w:sLjWn1Vav9JStQuz4WamNT7C6A72zuwZQcqQVBeJ_r4", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.3375, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "negative-operations", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.5, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.3375, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.3572037100909629, + "converged": false, + "expansions": 6, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 5 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.3471407798006545, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ], + "path_matched": true, + "rank": 3 + } + ], + "diagnostics": { + "mean_activation_total": 1.3712887390075965, + "mean_expansions": 3.6666666666666665, + "mean_steps": 1.8333333333333333, + "stop_reasons": { + "frontier_exhausted": 1, + "max_hops": 11 + } + }, + "dominated_by": [], + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ] + } + ], + "family": "finite_activation_budget", + "feedback": { + "case_id": "relation-model-evolution", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.05, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.05, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_rank_after": 2, + "target_rank_before": 2, + "uncredited_edge_changes": [] + }, + "id": "budget-025", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1, + 1 + ] + }, + "negative_control": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1, + 1 + ] + }, + "relation": { + "cases": 4, + "hit_at_3": 0.75, + "mean_reciprocal_rank": 0.3833333333333333, + "ranks": [ + 2, + 2, + 5, + 3 + ] + } + }, + "overall": { + "cases": 12, + "hit_at_3": 0.9166666666666666, + "mean_reciprocal_rank": 0.7944444444444444, + "ranks": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 5, + 3 + ] + } + }, + "parameters": { + "activation_budget": 0.25 + }, + "pareto_status": "frontier", + "relative_to_current": { + "negative_control_mrr_delta": 0.29166666666666674, + "relation_mrr_delta": 0.0 + }, + "structural_complexity": 1 + }, + { + "candidate_gate_passed": true, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 2.0, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "direct-model", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.0, + "converged": true, + "expansions": 0, + "steps": 0, + "stop_reason": "frontier_exhausted", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "direct-notifications", + "observed_paths": [ + { + "seed_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.85, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "direct-behavior-first", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.9222441266596857, + "converged": false, + "expansions": 5, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "direct-sheepdog", + "observed_paths": [ + { + "seed_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.8641589418506155, + "converged": false, + "expansions": 7, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "negative-configuration", + "observed_paths": [ + { + "seed_id": "w:WYol2T5WRtB0nhHDVstoqa4XndHkcatu-jI43oT8QP0", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.9397173096892388, + "converged": false, + "expansions": 8, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "negative-installation", + "observed_paths": [ + { + "seed_id": "w:ssFUz7EOs1C2VAmsi9C89EKEdXRHU27whcoeGJ8U_S8", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.85, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "negative-decision-structure", + "observed_paths": [ + { + "seed_id": "w:sLjWn1Vav9JStQuz4WamNT7C6A72zuwZQcqQVBeJ_r4", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.675, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "negative-operations", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.0, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.675, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.8572037100909629, + "converged": false, + "expansions": 6, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 5 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.7721407798006545, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ], + "path_matched": true, + "rank": 3 + } + ], + "diagnostics": { + "mean_activation_total": 1.7837887390075966, + "mean_expansions": 3.6666666666666665, + "mean_steps": 1.8333333333333333, + "stop_reasons": { + "frontier_exhausted": 1, + "max_hops": 11 + } + }, + "dominated_by": [], + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ] + } + ], + "family": "finite_activation_budget", + "feedback": { + "case_id": "relation-model-evolution", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.1, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.1, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_rank_after": 2, + "target_rank_before": 2, + "uncredited_edge_changes": [] + }, + "id": "budget-050", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1, + 1 + ] + }, + "negative_control": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1, + 1 + ] + }, + "relation": { + "cases": 4, + "hit_at_3": 0.75, + "mean_reciprocal_rank": 0.3833333333333333, + "ranks": [ + 2, + 2, + 5, + 3 + ] + } + }, + "overall": { + "cases": 12, + "hit_at_3": 0.9166666666666666, + "mean_reciprocal_rank": 0.7944444444444444, + "ranks": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 5, + 3 + ] + } + }, + "parameters": { + "activation_budget": 0.5 + }, + "pareto_status": "frontier", + "relative_to_current": { + "negative_control_mrr_delta": 0.29166666666666674, + "relation_mrr_delta": 0.0 + }, + "structural_complexity": 1 + }, + { + "candidate_gate_passed": true, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 2.6799999999999997, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "direct-model", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.0, + "converged": true, + "expansions": 0, + "steps": 0, + "stop_reason": "frontier_exhausted", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "direct-notifications", + "observed_paths": [ + { + "seed_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 2.19, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "direct-behavior-first", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 2.922244126659686, + "converged": false, + "expansions": 5, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "direct-sheepdog", + "observed_paths": [ + { + "seed_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 2.8641589418506155, + "converged": false, + "expansions": 7, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "negative-configuration", + "observed_paths": [ + { + "seed_id": "w:WYol2T5WRtB0nhHDVstoqa4XndHkcatu-jI43oT8QP0", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 2.939717309689239, + "converged": false, + "expansions": 8, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "negative-installation", + "observed_paths": [ + { + "seed_id": "w:ssFUz7EOs1C2VAmsi9C89EKEdXRHU27whcoeGJ8U_S8", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 2.19, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "negative-decision-structure", + "observed_paths": [ + { + "seed_id": "w:sLjWn1Vav9JStQuz4WamNT7C6A72zuwZQcqQVBeJ_r4", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 2.35, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "negative-operations", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.6799999999999997, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.35, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.857203710090963, + "converged": false, + "expansions": 6, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 5 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.0194883077634334, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ], + "path_matched": true, + "rank": 3 + } + ], + "diagnostics": { + "mean_activation_total": 2.4202343663378283, + "mean_expansions": 3.6666666666666665, + "mean_steps": 1.8333333333333333, + "stop_reasons": { + "frontier_exhausted": 1, + "max_hops": 11 + } + }, + "dominated_by": [], + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ] + } + ], + "family": "finite_activation_budget", + "feedback": { + "case_id": "relation-model-evolution", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.14, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.14, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_rank_after": 2, + "target_rank_before": 2, + "uncredited_edge_changes": [] + }, + "id": "budget-100", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1, + 1 + ] + }, + "negative_control": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1, + 1 + ] + }, + "relation": { + "cases": 4, + "hit_at_3": 0.75, + "mean_reciprocal_rank": 0.3833333333333333, + "ranks": [ + 2, + 2, + 5, + 3 + ] + } + }, + "overall": { + "cases": 12, + "hit_at_3": 0.9166666666666666, + "mean_reciprocal_rank": 0.7944444444444444, + "ranks": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 5, + 3 + ] + } + }, + "parameters": { + "activation_budget": 1.0 + }, + "pareto_status": "frontier", + "relative_to_current": { + "negative_control_mrr_delta": 0.29166666666666674, + "relation_mrr_delta": 0.0 + }, + "structural_complexity": 1 + }, + { + "candidate_gate_passed": false, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 2.28, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "direct-model", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.9, + "converged": true, + "expansions": 0, + "steps": 0, + "stop_reason": "frontier_exhausted", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "direct-notifications", + "observed_paths": [ + { + "seed_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.89, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "direct-behavior-first", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 3.0203495148104693, + "converged": false, + "expansions": 5, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "direct-sheepdog", + "observed_paths": [ + { + "seed_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 3.574161383494143, + "converged": false, + "expansions": 7, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "negative-configuration", + "observed_paths": [ + { + "seed_id": "w:WYol2T5WRtB0nhHDVstoqa4XndHkcatu-jI43oT8QP0", + "steps": [] + } + ], + "path_matched": null, + "rank": 3 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 4.432646549804138, + "converged": false, + "expansions": 8, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "negative-installation", + "observed_paths": [ + { + "seed_id": "w:ssFUz7EOs1C2VAmsi9C89EKEdXRHU27whcoeGJ8U_S8", + "steps": [] + } + ], + "path_matched": null, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.89, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "negative-decision-structure", + "observed_paths": [ + { + "seed_id": "w:sLjWn1Vav9JStQuz4WamNT7C6A72zuwZQcqQVBeJ_r4", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 2.49, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "negative-operations", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.28, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.49, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 3.1253647269916494, + "converged": false, + "expansions": 6, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 5 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.742846073823237, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ], + "path_matched": true, + "rank": 3 + } + ], + "diagnostics": { + "mean_activation_total": 2.509614020743637, + "mean_expansions": 3.6666666666666665, + "mean_steps": 1.8333333333333333, + "stop_reasons": { + "frontier_exhausted": 1, + "max_hops": 11 + } + }, + "dominated_by": [], + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ] + } + ], + "family": "lateral_inhibition", + "feedback": { + "case_id": "relation-model-evolution", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.14, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.14, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_rank_after": 2, + "target_rank_before": 2, + "uncredited_edge_changes": [] + }, + "id": "inhibition-010", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1, + 1 + ] + }, + "negative_control": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.7083333333333333, + "ranks": [ + 3, + 2, + 1, + 1 + ] + }, + "relation": { + "cases": 4, + "hit_at_3": 0.75, + "mean_reciprocal_rank": 0.3833333333333333, + "ranks": [ + 2, + 2, + 5, + 3 + ] + } + }, + "overall": { + "cases": 12, + "hit_at_3": 0.9166666666666666, + "mean_reciprocal_rank": 0.6972222222222223, + "ranks": [ + 1, + 1, + 1, + 1, + 3, + 2, + 1, + 1, + 2, + 2, + 5, + 3 + ] + } + }, + "parameters": { + "inhibition_ratio": 0.1 + }, + "pareto_status": "failed_gate", + "relative_to_current": { + "negative_control_mrr_delta": 0.0, + "relation_mrr_delta": 0.0 + }, + "structural_complexity": 2 + }, + { + "candidate_gate_passed": false, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.68, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "direct-model", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.75, + "converged": true, + "expansions": 0, + "steps": 0, + "stop_reason": "frontier_exhausted", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "direct-notifications", + "observed_paths": [ + { + "seed_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.44, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "direct-behavior-first", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 2.1972466317667005, + "converged": false, + "expansions": 5, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "direct-sheepdog", + "observed_paths": [ + { + "seed_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 2.648647156772135, + "converged": false, + "expansions": 7, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "negative-configuration", + "observed_paths": [ + { + "seed_id": "w:WYol2T5WRtB0nhHDVstoqa4XndHkcatu-jI43oT8QP0", + "steps": [] + } + ], + "path_matched": null, + "rank": 3 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 3.258469771347434, + "converged": false, + "expansions": 8, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "negative-installation", + "observed_paths": [ + { + "seed_id": "w:ssFUz7EOs1C2VAmsi9C89EKEdXRHU27whcoeGJ8U_S8", + "steps": [] + } + ], + "path_matched": null, + "rank": 3 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.44, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "negative-decision-structure", + "observed_paths": [ + { + "seed_id": "w:sLjWn1Vav9JStQuz4WamNT7C6A72zuwZQcqQVBeJ_r4", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.89, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "negative-operations", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.68, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.89, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.207299553484229, + "converged": false, + "expansions": 6, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 5 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.3278827229129422, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ], + "path_matched": true, + "rank": 3 + } + ], + "diagnostics": { + "mean_activation_total": 1.8674621530236202, + "mean_expansions": 3.6666666666666665, + "mean_steps": 1.8333333333333333, + "stop_reasons": { + "frontier_exhausted": 1, + "max_hops": 11 + } + }, + "dominated_by": [], + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ] + } + ], + "family": "lateral_inhibition", + "feedback": { + "case_id": "relation-model-evolution", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.14, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.14, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_rank_after": 2, + "target_rank_before": 2, + "uncredited_edge_changes": [] + }, + "id": "inhibition-025", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1, + 1 + ] + }, + "negative_control": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.6666666666666666, + "ranks": [ + 3, + 3, + 1, + 1 + ] + }, + "relation": { + "cases": 4, + "hit_at_3": 0.75, + "mean_reciprocal_rank": 0.3833333333333333, + "ranks": [ + 2, + 2, + 5, + 3 + ] + } + }, + "overall": { + "cases": 12, + "hit_at_3": 0.9166666666666666, + "mean_reciprocal_rank": 0.6833333333333332, + "ranks": [ + 1, + 1, + 1, + 1, + 3, + 3, + 1, + 1, + 2, + 2, + 5, + 3 + ] + } + }, + "parameters": { + "inhibition_ratio": 0.25 + }, + "pareto_status": "failed_gate", + "relative_to_current": { + "negative_control_mrr_delta": -0.04166666666666663, + "relation_mrr_delta": 0.0 + }, + "structural_complexity": 2 + }, + { + "candidate_gate_passed": false, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 2.28, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "direct-model", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.9, + "converged": true, + "expansions": 0, + "steps": 0, + "stop_reason": "frontier_exhausted", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "direct-notifications", + "observed_paths": [ + { + "seed_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.89, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "direct-behavior-first", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 2.678196943819726, + "converged": false, + "expansions": 5, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "direct-sheepdog", + "observed_paths": [ + { + "seed_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 2.932955448640987, + "converged": false, + "expansions": 7, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "negative-configuration", + "observed_paths": [ + { + "seed_id": "w:WYol2T5WRtB0nhHDVstoqa4XndHkcatu-jI43oT8QP0", + "steps": [] + } + ], + "path_matched": null, + "rank": 3 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 3.386741184120016, + "converged": false, + "expansions": 8, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "negative-installation", + "observed_paths": [ + { + "seed_id": "w:ssFUz7EOs1C2VAmsi9C89EKEdXRHU27whcoeGJ8U_S8", + "steps": [] + } + ], + "path_matched": null, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.89, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "negative-decision-structure", + "observed_paths": [ + { + "seed_id": "w:sLjWn1Vav9JStQuz4WamNT7C6A72zuwZQcqQVBeJ_r4", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 2.49, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [], + "id": "negative-operations", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.28, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.49, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.4893195741041554, + "converged": false, + "expansions": 6, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "observed_paths": [], + "path_matched": false, + "rank": 6 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.742846073823237, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "lateral_inhibition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ], + "path_matched": true, + "rank": 3 + } + ], + "diagnostics": { + "mean_activation_total": 2.2875049353756767, + "mean_expansions": 3.6666666666666665, + "mean_steps": 1.8333333333333333, + "stop_reasons": { + "frontier_exhausted": 1, + "max_hops": 11 + } + }, + "dominated_by": [], + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "matched": false, + "observed_paths": [] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ] + } + ], + "family": "lateral_inhibition", + "feedback": { + "case_id": "relation-model-evolution", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.14, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.14, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_rank_after": 2, + "target_rank_before": 2, + "uncredited_edge_changes": [] + }, + "id": "inhibition-top4", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1, + 1 + ] + }, + "negative_control": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.7083333333333333, + "ranks": [ + 3, + 2, + 1, + 1 + ] + }, + "relation": { + "cases": 4, + "hit_at_3": 0.75, + "mean_reciprocal_rank": 0.375, + "ranks": [ + 2, + 2, + 6, + 3 + ] + } + }, + "overall": { + "cases": 12, + "hit_at_3": 0.9166666666666666, + "mean_reciprocal_rank": 0.6944444444444445, + "ranks": [ + 1, + 1, + 1, + 1, + 3, + 2, + 1, + 1, + 2, + 2, + 6, + 3 + ] + } + }, + "parameters": { + "inhibition_ratio": 0.1, + "inhibition_top_k": 4 + }, + "pareto_status": "failed_gate", + "relative_to_current": { + "negative_control_mrr_delta": 0.0, + "relation_mrr_delta": -0.008333333333333304 + }, + "structural_complexity": 2 + }, + { + "candidate_gate_passed": false, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.2500474136238915, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "direct-model", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.0, + "converged": true, + "expansions": 0, + "steps": 0, + "stop_reason": "frontier_exhausted", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "direct-notifications", + "observed_paths": [ + { + "seed_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.1596, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "direct-behavior-first", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.332344564843855, + "converged": false, + "expansions": 5, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "direct-sheepdog", + "observed_paths": [ + { + "seed_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.353512022029127, + "converged": false, + "expansions": 7, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "negative-configuration", + "observed_paths": [ + { + "seed_id": "w:WYol2T5WRtB0nhHDVstoqa4XndHkcatu-jI43oT8QP0", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.605504712271806, + "converged": false, + "expansions": 8, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "negative-installation", + "observed_paths": [ + { + "seed_id": "w:ssFUz7EOs1C2VAmsi9C89EKEdXRHU27whcoeGJ8U_S8", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.169568048003157, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "negative-decision-structure", + "observed_paths": [ + { + "seed_id": "w:sLjWn1Vav9JStQuz4WamNT7C6A72zuwZQcqQVBeJ_r4", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.4076436480567034, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "negative-operations", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.2226169083215832, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.4146284261502153, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.2472657857217988, + "converged": false, + "expansions": 6, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 6 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.0863589175655917, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ], + "path_matched": true, + "rank": 6 + } + ], + "diagnostics": { + "mean_activation_total": 1.2707575372156443, + "mean_expansions": 3.6666666666666665, + "mean_steps": 1.8333333333333333, + "stop_reasons": { + "frontier_exhausted": 1, + "max_hops": 11 + } + }, + "dominated_by": [], + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ] + } + ], + "family": "query_conditioned_transmission", + "feedback": { + "case_id": "relation-model-evolution", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.0334966222025452, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.0334966222025452, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_rank_after": 2, + "target_rank_before": 2, + "uncredited_edge_changes": [] + }, + "id": "query-floor-020", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1, + 1 + ] + }, + "negative_control": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1, + 1 + ] + }, + "relation": { + "cases": 4, + "hit_at_3": 0.5, + "mean_reciprocal_rank": 0.33333333333333337, + "ranks": [ + 2, + 2, + 6, + 6 + ] + } + }, + "overall": { + "cases": 12, + "hit_at_3": 0.8333333333333334, + "mean_reciprocal_rank": 0.7777777777777777, + "ranks": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 6, + 6 + ] + } + }, + "parameters": { + "query_transmission_floor": 0.2 + }, + "pareto_status": "failed_gate", + "relative_to_current": { + "negative_control_mrr_delta": 0.29166666666666674, + "relation_mrr_delta": -0.04999999999999993 + }, + "structural_complexity": 3 + }, + { + "candidate_gate_passed": true, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.5069221402536859, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "direct-model", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.0, + "converged": true, + "expansions": 0, + "steps": 0, + "stop_reason": "frontier_exhausted", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "direct-notifications", + "observed_paths": [ + { + "seed_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.3584, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "direct-behavior-first", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.7498836768076533, + "converged": false, + "expansions": 5, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "direct-sheepdog", + "observed_paths": [ + { + "seed_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.8498749615470074, + "converged": false, + "expansions": 7, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "negative-configuration", + "observed_paths": [ + { + "seed_id": "w:WYol2T5WRtB0nhHDVstoqa4XndHkcatu-jI43oT8QP0", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 2.270705315770969, + "converged": false, + "expansions": 8, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "negative-installation", + "observed_paths": [ + { + "seed_id": "w:ssFUz7EOs1C2VAmsi9C89EKEdXRHU27whcoeGJ8U_S8", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.3674987593664742, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "negative-decision-structure", + "observed_paths": [ + { + "seed_id": "w:sLjWn1Vav9JStQuz4WamNT7C6A72zuwZQcqQVBeJ_r4", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.7269986609392054, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "negative-operations", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.4800456234595234, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.7323959413239838, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.6897339328873884, + "converged": false, + "expansions": 6, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 5 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.2686266782631799, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ], + "path_matched": true, + "rank": 3 + } + ], + "diagnostics": { + "mean_activation_total": 1.583423807551589, + "mean_expansions": 3.6666666666666665, + "mean_steps": 1.8333333333333333, + "stop_reasons": { + "frontier_exhausted": 1, + "max_hops": 11 + } + }, + "dominated_by": [], + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ] + } + ], + "family": "query_conditioned_transmission", + "feedback": { + "case_id": "relation-model-evolution", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.060122466651909, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.060122466651909, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_rank_after": 2, + "target_rank_before": 2, + "uncredited_edge_changes": [] + }, + "id": "query-floor-040", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1, + 1 + ] + }, + "negative_control": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1, + 1 + ] + }, + "relation": { + "cases": 4, + "hit_at_3": 0.75, + "mean_reciprocal_rank": 0.3833333333333333, + "ranks": [ + 2, + 2, + 5, + 3 + ] + } + }, + "overall": { + "cases": 12, + "hit_at_3": 0.9166666666666666, + "mean_reciprocal_rank": 0.7944444444444444, + "ranks": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 5, + 3 + ] + } + }, + "parameters": { + "query_transmission_floor": 0.4 + }, + "pareto_status": "frontier", + "relative_to_current": { + "negative_control_mrr_delta": 0.29166666666666674, + "relation_mrr_delta": 0.0 + }, + "structural_complexity": 3 + }, + { + "candidate_gate_passed": true, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.8308724801929686, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "direct-model", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.0, + "converged": true, + "expansions": 0, + "steps": 0, + "stop_reason": "frontier_exhausted", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "direct-notifications", + "observed_paths": [ + { + "seed_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.5963999999999998, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "direct-behavior-first", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 2.261853415017107, + "converged": false, + "expansions": 5, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "direct-sheepdog", + "observed_paths": [ + { + "seed_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 2.488272415710693, + "converged": false, + "expansions": 7, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "negative-configuration", + "observed_paths": [ + { + "seed_id": "w:WYol2T5WRtB0nhHDVstoqa4XndHkcatu-jI43oT8QP0", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 3.094093243021268, + "converged": false, + "expansions": 8, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "negative-installation", + "observed_paths": [ + { + "seed_id": "w:ssFUz7EOs1C2VAmsi9C89EKEdXRHU27whcoeGJ8U_S8", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.6035476551537204, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "negative-decision-structure", + "observed_paths": [ + { + "seed_id": "w:sLjWn1Vav9JStQuz4WamNT7C6A72zuwZQcqQVBeJ_r4", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 2.0805097238905885, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [], + "id": "negative-operations", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.8087523771185732, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.0842137086902044, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.2522470469883844, + "converged": false, + "expansions": 6, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 5 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.484904163528683, + "converged": false, + "expansions": 2, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "query_conditioned_transmission" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ], + "path_matched": true, + "rank": 3 + } + ], + "diagnostics": { + "mean_activation_total": 1.9654721857760158, + "mean_expansions": 3.6666666666666665, + "mean_steps": 1.8333333333333333, + "stop_reasons": { + "frontier_exhausted": 1, + "max_hops": 11 + } + }, + "dominated_by": [], + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ] + } + ], + "family": "query_conditioned_transmission", + "feedback": { + "case_id": "relation-model-evolution", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.0867483111012726, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.0867483111012726, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_rank_after": 2, + "target_rank_before": 2, + "uncredited_edge_changes": [] + }, + "id": "query-floor-060", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1, + 1 + ] + }, + "negative_control": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1, + 1 + ] + }, + "relation": { + "cases": 4, + "hit_at_3": 0.75, + "mean_reciprocal_rank": 0.3833333333333333, + "ranks": [ + 2, + 2, + 5, + 3 + ] + } + }, + "overall": { + "cases": 12, + "hit_at_3": 0.9166666666666666, + "mean_reciprocal_rank": 0.7944444444444444, + "ranks": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 5, + 3 + ] + } + }, + "parameters": { + "query_transmission_floor": 0.6 + }, + "pareto_status": "frontier", + "relative_to_current": { + "negative_control_mrr_delta": 0.29166666666666674, + "relation_mrr_delta": 0.0 + }, + "structural_complexity": 3 + }, + { + "candidate_gate_passed": false, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.5513807618343706, + "converged": false, + "expansions": 4, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "direct-model", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [] + } + ], + "path_matched": null, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.2025, + "converged": false, + "expansions": 0, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "direct-notifications", + "observed_paths": [ + { + "seed_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.45809999999999995, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "direct-behavior-first", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.7660186945979411, + "converged": false, + "expansions": 7, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "direct-sheepdog", + "observed_paths": [ + { + "seed_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "steps": [] + } + ], + "path_matched": null, + "rank": 3 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 0.8500337850130417, + "converged": false, + "expansions": 9, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "negative-configuration", + "observed_paths": [ + { + "seed_id": "w:WYol2T5WRtB0nhHDVstoqa4XndHkcatu-jI43oT8QP0", + "steps": [] + } + ], + "path_matched": null, + "rank": 3 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.1108417538402209, + "converged": false, + "expansions": 11, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "negative-installation", + "observed_paths": [ + { + "seed_id": "w:ssFUz7EOs1C2VAmsi9C89EKEdXRHU27whcoeGJ8U_S8", + "steps": [] + } + ], + "path_matched": null, + "rank": 3 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 0.4649631439345289, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "negative-decision-structure", + "observed_paths": [ + { + "seed_id": "w:sLjWn1Vav9JStQuz4WamNT7C6A72zuwZQcqQVBeJ_r4", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 0.7432801968179881, + "converged": false, + "expansions": 5, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "negative-operations", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [] + } + ], + "path_matched": null, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 0.5309376879942318, + "converged": false, + "expansions": 4, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + }, + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ], + "path_matched": true, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 0.7486505957841707, + "converged": false, + "expansions": 5, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + }, + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 0.7338051022932992, + "converged": false, + "expansions": 8, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 5 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 0.43459882820548285, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ], + "path_matched": true, + "rank": 3 + } + ], + "diagnostics": { + "mean_activation_total": 0.6329258791929397, + "mean_expansions": 5.166666666666667, + "mean_steps": 2.0, + "stop_reasons": { + "recurrent_step_limit": 12 + } + }, + "dominated_by": [], + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + }, + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + }, + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ] + } + ], + "family": "recurrent_competition", + "feedback": { + "case_id": "relation-model-evolution", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.060122466651909, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.060122466651909, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_rank_after": 1, + "target_rank_before": 1, + "uncredited_edge_changes": [] + }, + "id": "recurrent-balanced", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.7083333333333334, + "ranks": [ + 2, + 1, + 1, + 3 + ] + }, + "negative_control": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.5416666666666666, + "ranks": [ + 3, + 3, + 1, + 2 + ] + }, + "relation": { + "cases": 4, + "hit_at_3": 0.75, + "mean_reciprocal_rank": 0.6333333333333334, + "ranks": [ + 1, + 1, + 5, + 3 + ] + } + }, + "overall": { + "cases": 12, + "hit_at_3": 0.9166666666666666, + "mean_reciprocal_rank": 0.6277777777777778, + "ranks": [ + 2, + 1, + 1, + 3, + 3, + 3, + 1, + 2, + 1, + 1, + 5, + 3 + ] + } + }, + "parameters": { + "activation_budget": 1.0, + "inhibition_ratio": 0.1, + "query_transmission_floor": 0.4, + "recurrent_decay": 0.5, + "recurrent_steps": 2 + }, + "pareto_status": "failed_gate", + "relative_to_current": { + "negative_control_mrr_delta": -0.16666666666666663, + "relation_mrr_delta": 0.2500000000000001 + }, + "structural_complexity": 4 + }, + { + "candidate_gate_passed": false, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.14179765648439732, + "converged": false, + "expansions": 7, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "direct-model", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.064, + "converged": false, + "expansions": 0, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "direct-notifications", + "observed_paths": [ + { + "seed_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.10974999999999999, + "converged": false, + "expansions": 5, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "direct-behavior-first", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.19916207456161925, + "converged": false, + "expansions": 12, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "direct-sheepdog", + "observed_paths": [ + { + "seed_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "steps": [] + } + ], + "path_matched": null, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 0.24051762153904152, + "converged": false, + "expansions": 16, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "negative-configuration", + "observed_paths": [ + { + "seed_id": "w:WYol2T5WRtB0nhHDVstoqa4XndHkcatu-jI43oT8QP0", + "steps": [] + } + ], + "path_matched": null, + "rank": 3 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 0.2979773615905212, + "converged": false, + "expansions": 19, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "negative-installation", + "observed_paths": [ + { + "seed_id": "w:ssFUz7EOs1C2VAmsi9C89EKEdXRHU27whcoeGJ8U_S8", + "steps": [] + } + ], + "path_matched": null, + "rank": 3 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 0.11416986990758775, + "converged": false, + "expansions": 5, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "negative-decision-structure", + "observed_paths": [ + { + "seed_id": "w:sLjWn1Vav9JStQuz4WamNT7C6A72zuwZQcqQVBeJ_r4", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 0.2054241903102151, + "converged": false, + "expansions": 8, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "negative-operations", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 0.1293902007203611, + "converged": false, + "expansions": 7, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + }, + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + }, + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 0.2100065533530411, + "converged": false, + "expansions": 8, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + }, + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + }, + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 0.1765265262126514, + "converged": false, + "expansions": 14, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + }, + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 6 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 0.10832771250507346, + "converged": false, + "expansions": 5, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + }, + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ], + "path_matched": true, + "rank": 7 + } + ], + "diagnostics": { + "mean_activation_total": 0.16642081393204244, + "mean_expansions": 8.833333333333334, + "mean_steps": 3.0, + "stop_reasons": { + "recurrent_step_limit": 12 + } + }, + "dominated_by": [], + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + }, + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + }, + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + }, + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + }, + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + }, + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + }, + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ] + } + ], + "family": "recurrent_competition", + "feedback": { + "case_id": "relation-model-evolution", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.0401530833148862, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.0401530833148862, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "non_target_rank_changes": [ + { + "after_rank": 2, + "before_rank": 1, + "id": "direct-model" + } + ], + "target_node_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_rank_after": 2, + "target_rank_before": 2, + "uncredited_edge_changes": [] + }, + "id": "recurrent-selective", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.875, + "ranks": [ + 1, + 1, + 1, + 2 + ] + }, + "negative_control": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.6666666666666666, + "ranks": [ + 3, + 3, + 1, + 1 + ] + }, + "relation": { + "cases": 4, + "hit_at_3": 0.5, + "mean_reciprocal_rank": 0.4523809523809524, + "ranks": [ + 2, + 1, + 6, + 7 + ] + } + }, + "overall": { + "cases": 12, + "hit_at_3": 0.8333333333333334, + "mean_reciprocal_rank": 0.6646825396825398, + "ranks": [ + 1, + 1, + 1, + 2, + 3, + 3, + 1, + 1, + 2, + 1, + 6, + 7 + ] + } + }, + "parameters": { + "activation_budget": 0.75, + "inhibition_ratio": 0.2, + "query_transmission_floor": 0.25, + "recurrent_decay": 0.5, + "recurrent_steps": 3 + }, + "pareto_status": "failed_gate", + "relative_to_current": { + "negative_control_mrr_delta": -0.04166666666666663, + "relation_mrr_delta": 0.06904761904761908 + }, + "structural_complexity": 4 + }, + { + "candidate_gate_passed": false, + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.973847477674852, + "converged": false, + "expansions": 10, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "direct-model", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [] + } + ], + "path_matched": null, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.2500469999999999, + "converged": false, + "expansions": 0, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "direct-notifications", + "observed_paths": [ + { + "seed_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.8722901599999997, + "converged": false, + "expansions": 7, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "direct-behavior-first", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [] + } + ], + "path_matched": null, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 0.9482422364641095, + "converged": false, + "expansions": 17, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "direct-sheepdog", + "observed_paths": [ + { + "seed_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "steps": [] + } + ], + "path_matched": null, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 0.931087392408006, + "converged": false, + "expansions": 21, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "negative-configuration", + "observed_paths": [ + { + "seed_id": "w:WYol2T5WRtB0nhHDVstoqa4XndHkcatu-jI43oT8QP0", + "steps": [] + } + ], + "path_matched": null, + "rank": 3 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 0.9357146981013318, + "converged": false, + "expansions": 19, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "negative-installation", + "observed_paths": [ + { + "seed_id": "w:ssFUz7EOs1C2VAmsi9C89EKEdXRHU27whcoeGJ8U_S8", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 0.8806034974530808, + "converged": false, + "expansions": 6, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "negative-decision-structure", + "observed_paths": [ + { + "seed_id": "w:sLjWn1Vav9JStQuz4WamNT7C6A72zuwZQcqQVBeJ_r4", + "steps": [] + } + ], + "path_matched": null, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.038251561299464, + "converged": false, + "expansions": 9, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [], + "id": "negative-operations", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [] + } + ], + "path_matched": null, + "rank": 3 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 0.970436842689126, + "converged": false, + "expansions": 10, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + }, + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + }, + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ], + "path_matched": true, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.0399257250374463, + "converged": false, + "expansions": 9, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + }, + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + }, + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 0.9099217111212311, + "converged": false, + "expansions": 17, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + }, + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ], + "path_matched": true, + "rank": 5 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 0.8199226698143057, + "converged": false, + "expansions": 7, + "steps": 3, + "stop_reason": "recurrent_step_limit", + "strategy": "recurrent_competition" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + }, + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ], + "path_matched": true, + "rank": 3 + } + ], + "diagnostics": { + "mean_activation_total": 0.880857581005246, + "mean_expansions": 11.0, + "mean_steps": 3.0, + "stop_reasons": { + "recurrent_step_limit": 12 + } + }, + "dominated_by": [], + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "id": "relation-model-evolution", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + }, + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + }, + { + "seed_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-operations-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + }, + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + }, + { + "seed_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:huXuRzvViRxgYAx6woJe7TD7l2A-qOnrJrSHr9nJges", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ], + "id": "relation-evolution-notifications", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + }, + { + "seed_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q" + }, + { + "edge_type": "mention", + "source_id": "w:3tt8Q3x1PMApjP_63-1ShgeemapdrPJ9__hNAvDDx_Q", + "target_id": "w:d5dysDOn1wQ7fmDyyxRoLdTM8Q48yijoAUKsVXDRvUQ" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ], + "id": "relation-behavior-concept", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + }, + { + "seed_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:Axw8AcyiCOqJNo3g58761JbhjgawHIizQGU4b4zGIrY", + "target_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM" + }, + { + "edge_type": "mention", + "source_id": "w:XMfZ3DGq4oP-YDzHpYD4lUbS-Do6OZlpZiaiCp6nwGM", + "target_id": "w:GODYOdBe67l1iAepF4wf2NHRzDjEB0520kLpK3Lr2cw" + } + ] + } + ] + } + ], + "family": "recurrent_competition", + "feedback": { + "case_id": "relation-model-evolution", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.0867483111012726, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.0867483111012726, + "old_weight": 1.0, + "source_id": "w:HpN7_JiNj-_IM2orPv5jwJgaVXnxz_8uTzVW4sebCAw", + "target_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:2c_IeUZk0EDbGC1okoBQ_0RYXHTJKzEyHvxv2XEdlyo", + "target_rank_after": 1, + "target_rank_before": 1, + "uncredited_edge_changes": [] + }, + "id": "recurrent-conservative", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.625, + "ranks": [ + 2, + 1, + 2, + 2 + ] + }, + "negative_control": { + "cases": 4, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 0.5416666666666666, + "ranks": [ + 3, + 1, + 2, + 3 + ] + }, + "relation": { + "cases": 4, + "hit_at_3": 0.75, + "mean_reciprocal_rank": 0.6333333333333334, + "ranks": [ + 1, + 1, + 5, + 3 + ] + } + }, + "overall": { + "cases": 12, + "hit_at_3": 0.9166666666666666, + "mean_reciprocal_rank": 0.6, + "ranks": [ + 2, + 1, + 2, + 2, + 3, + 1, + 2, + 3, + 1, + 1, + 5, + 3 + ] + } + }, + "parameters": { + "activation_budget": 0.5, + "inhibition_ratio": 0.1, + "query_transmission_floor": 0.6, + "recurrent_decay": 0.7, + "recurrent_steps": 3 + }, + "pareto_status": "failed_gate", + "relative_to_current": { + "negative_control_mrr_delta": -0.16666666666666663, + "relation_mrr_delta": 0.2500000000000001 + }, + "structural_complexity": 4 + } + ] +} diff --git a/tests/fixtures/d1_liplus_dynamics_experiment.holdout.result.json b/tests/fixtures/d1_liplus_dynamics_experiment.holdout.result.json new file mode 100644 index 0000000..1bf68e0 --- /dev/null +++ b/tests/fixtures/d1_liplus_dynamics_experiment.holdout.result.json @@ -0,0 +1,821 @@ +{ + "decision": { + "adopted": false, + "all_relation_paths_match": true, + "default_variant_id": "current", + "feedback_isolated": true, + "no_cohort_regression": false, + "selected_variant_id": "budget-025" + }, + "development_result_sha256": "sha256:0d4d228b71bf1d2f8764057f738632a63eae6dc7688b0b506957220c8bf90a3c", + "experiment_id": "d1-liplus-dynamics-v1", + "holdout_open_count": 1, + "inputs": { + "fixture_sha256": "sha256:4f7c444c408c3188323e754aa93141a8deaf1a4b15410ad915dd4c71be3a8081", + "gold_sha256": "sha256:229175676b23d47a7fe85005a5e00aa2c72f419419349d5be0bf0e8af259ce54", + "provenance_sha256": "sha256:e0c60cac6ba8cdf359be1d376172cfb85ab22c7fbb717d8fb0dd8cb848b4e5e4" + }, + "manifest_sha256": "sha256:9267dfae42f908bbd7e22e0bc0807baffe275ad687f939ec384c4112ed11c865", + "schema_version": 1, + "stage": "holdout", + "variants": [ + { + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 2.6799999999999997, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "current_positive_additive" + }, + "expected_path": [], + "id": "holdout-direct-milestone-removal", + "observed_paths": [ + { + "seed_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.0, + "converged": true, + "expansions": 0, + "steps": 0, + "stop_reason": "frontier_exhausted", + "strategy": "current_positive_additive" + }, + "expected_path": [], + "id": "holdout-direct-collaborative-authorship", + "observed_paths": [ + { + "seed_id": "w:6F1rT6JgOb-dIqk52fVRYKb0lPXwHjNGpvk139Tp3Ec", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.7, + "converged": true, + "expansions": 1, + "steps": 1, + "stop_reason": "frontier_exhausted", + "strategy": "current_positive_additive" + }, + "expected_path": [], + "id": "holdout-direct-design-intent", + "observed_paths": [ + { + "seed_id": "w:tT8sq276CvE72QWLcSIn6G1DQzdoLWAUqOofpqTjeJY", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.6799999999999997, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "current_positive_additive" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "target_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs" + } + ], + "id": "holdout-relation-milestone-runtime", + "observed_paths": [ + { + "seed_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "target_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 3.5899999999999994, + "converged": false, + "expansions": 4, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "current_positive_additive" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "target_id": "w:-NNqHe09ZIcq9RpapZcI3gx5BJzeBizTjGMLtp4t-cs" + } + ], + "id": "holdout-relation-history-architecture", + "observed_paths": [ + { + "seed_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "target_id": "w:-NNqHe09ZIcq9RpapZcI3gx5BJzeBizTjGMLtp4t-cs" + } + ] + } + ], + "path_matched": true, + "rank": 4 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 2.4, + "converged": true, + "expansions": 2, + "steps": 1, + "stop_reason": "frontier_exhausted", + "strategy": "current_positive_additive" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "target_id": "w:73vMfZxas4ufkIRTuWft9CRNZQHgqTmOJJ44iBQgLQ4" + } + ], + "id": "holdout-relation-role-vision", + "observed_paths": [ + { + "seed_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "target_id": "w:73vMfZxas4ufkIRTuWft9CRNZQHgqTmOJJ44iBQgLQ4" + } + ] + } + ], + "path_matched": true, + "rank": 3 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 3.5899999999999994, + "converged": false, + "expansions": 4, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "current_positive_additive" + }, + "expected_path": [], + "id": "holdout-negative-empirical-history", + "observed_paths": [ + { + "seed_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 2.4, + "converged": true, + "expansions": 2, + "steps": 1, + "stop_reason": "frontier_exhausted", + "strategy": "current_positive_additive" + }, + "expected_path": [], + "id": "holdout-negative-client-architect", + "observed_paths": [ + { + "seed_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 3.869999999999999, + "converged": false, + "expansions": 5, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "current_positive_additive" + }, + "expected_path": [], + "id": "holdout-negative-eval-cost", + "observed_paths": [ + { + "seed_id": "w:PB1RkJAXQcu06Iy3Zp-VPrTV-RCjYBudZHjdgnTL9ns", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + } + ], + "diagnostics": { + "mean_activation_total": 2.6566666666666663, + "mean_expansions": 2.6666666666666665, + "mean_steps": 1.4444444444444444, + "stop_reasons": { + "frontier_exhausted": 4, + "max_hops": 5 + } + }, + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "target_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs" + } + ], + "id": "holdout-relation-milestone-runtime", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "target_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "target_id": "w:-NNqHe09ZIcq9RpapZcI3gx5BJzeBizTjGMLtp4t-cs" + } + ], + "id": "holdout-relation-history-architecture", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "target_id": "w:-NNqHe09ZIcq9RpapZcI3gx5BJzeBizTjGMLtp4t-cs" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "target_id": "w:73vMfZxas4ufkIRTuWft9CRNZQHgqTmOJJ44iBQgLQ4" + } + ], + "id": "holdout-relation-role-vision", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "target_id": "w:73vMfZxas4ufkIRTuWft9CRNZQHgqTmOJJ44iBQgLQ4" + } + ] + } + ] + } + ], + "family": "current_positive_additive", + "feedback": { + "case_id": "holdout-relation-milestone-runtime", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.14, + "old_weight": 1.0, + "source_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "target_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.14, + "old_weight": 1.0, + "source_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "target_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs", + "target_rank_after": 2, + "target_rank_before": 2, + "uncredited_edge_changes": [] + }, + "id": "current", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 3, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1 + ] + }, + "negative_control": { + "cases": 3, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1 + ] + }, + "relation": { + "cases": 3, + "hit_at_3": 0.6666666666666666, + "mean_reciprocal_rank": 0.3611111111111111, + "ranks": [ + 2, + 4, + 3 + ] + } + }, + "overall": { + "cases": 9, + "hit_at_3": 0.8888888888888888, + "mean_reciprocal_rank": 0.787037037037037, + "ranks": [ + 1, + 1, + 1, + 2, + 4, + 3, + 1, + 1, + 1 + ] + } + }, + "parameters": {}, + "structural_complexity": 0 + }, + { + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.5, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "holdout-direct-milestone-removal", + "observed_paths": [ + { + "seed_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.0, + "converged": true, + "expansions": 0, + "steps": 0, + "stop_reason": "frontier_exhausted", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "holdout-direct-collaborative-authorship", + "observed_paths": [ + { + "seed_id": "w:6F1rT6JgOb-dIqk52fVRYKb0lPXwHjNGpvk139Tp3Ec", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "diagnostics": { + "activation_total": 1.25, + "converged": true, + "expansions": 1, + "steps": 1, + "stop_reason": "frontier_exhausted", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "holdout-direct-design-intent", + "observed_paths": [ + { + "seed_id": "w:tT8sq276CvE72QWLcSIn6G1DQzdoLWAUqOofpqTjeJY", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.5, + "converged": false, + "expansions": 3, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "target_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs" + } + ], + "id": "holdout-relation-milestone-runtime", + "observed_paths": [ + { + "seed_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "target_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs" + } + ] + } + ], + "path_matched": true, + "rank": 2 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.3083333333333331, + "converged": false, + "expansions": 4, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "target_id": "w:-NNqHe09ZIcq9RpapZcI3gx5BJzeBizTjGMLtp4t-cs" + } + ], + "id": "holdout-relation-history-architecture", + "observed_paths": [ + { + "seed_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "target_id": "w:-NNqHe09ZIcq9RpapZcI3gx5BJzeBizTjGMLtp4t-cs" + } + ] + } + ], + "path_matched": true, + "rank": 7 + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "diagnostics": { + "activation_total": 1.25, + "converged": true, + "expansions": 2, + "steps": 1, + "stop_reason": "frontier_exhausted", + "strategy": "finite_activation_budget" + }, + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "target_id": "w:73vMfZxas4ufkIRTuWft9CRNZQHgqTmOJJ44iBQgLQ4" + } + ], + "id": "holdout-relation-role-vision", + "observed_paths": [ + { + "seed_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "target_id": "w:73vMfZxas4ufkIRTuWft9CRNZQHgqTmOJJ44iBQgLQ4" + } + ] + } + ], + "path_matched": true, + "rank": 3 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.3083333333333331, + "converged": false, + "expansions": 4, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "holdout-negative-empirical-history", + "observed_paths": [ + { + "seed_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.25, + "converged": true, + "expansions": 2, + "steps": 1, + "stop_reason": "frontier_exhausted", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "holdout-negative-client-architect", + "observed_paths": [ + { + "seed_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "diagnostics": { + "activation_total": 1.4999999999999998, + "converged": false, + "expansions": 5, + "steps": 2, + "stop_reason": "max_hops", + "strategy": "finite_activation_budget" + }, + "expected_path": [], + "id": "holdout-negative-eval-cost", + "observed_paths": [ + { + "seed_id": "w:PB1RkJAXQcu06Iy3Zp-VPrTV-RCjYBudZHjdgnTL9ns", + "steps": [] + } + ], + "path_matched": null, + "rank": 1 + } + ], + "diagnostics": { + "mean_activation_total": 1.3185185185185186, + "mean_expansions": 2.6666666666666665, + "mean_steps": 1.4444444444444444, + "stop_reasons": { + "frontier_exhausted": 4, + "max_hops": 5 + } + }, + "explanations": [ + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "target_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs" + } + ], + "id": "holdout-relation-milestone-runtime", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "target_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "target_id": "w:-NNqHe09ZIcq9RpapZcI3gx5BJzeBizTjGMLtp4t-cs" + } + ], + "id": "holdout-relation-history-architecture", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "target_id": "w:-NNqHe09ZIcq9RpapZcI3gx5BJzeBizTjGMLtp4t-cs" + } + ] + } + ] + }, + { + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "target_id": "w:73vMfZxas4ufkIRTuWft9CRNZQHgqTmOJJ44iBQgLQ4" + } + ], + "id": "holdout-relation-role-vision", + "matched": true, + "observed_paths": [ + { + "seed_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "steps": [ + { + "edge_type": "mention", + "source_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "target_id": "w:73vMfZxas4ufkIRTuWft9CRNZQHgqTmOJJ44iBQgLQ4" + } + ] + } + ] + } + ], + "family": "finite_activation_budget", + "feedback": { + "case_id": "holdout-relation-milestone-runtime", + "changed_edges": [ + { + "edge_type": "mention", + "new_weight": 1.05, + "old_weight": 1.0, + "source_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "target_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs" + } + ], + "credited_edges": [ + { + "edge_type": "mention", + "new_weight": 1.05, + "old_weight": 1.0, + "source_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "target_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs" + } + ], + "non_target_rank_changes": [], + "target_node_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs", + "target_rank_after": 2, + "target_rank_before": 2, + "uncredited_edge_changes": [] + }, + "id": "budget-025", + "metrics": { + "cohorts": { + "direct_lookup": { + "cases": 3, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1 + ] + }, + "negative_control": { + "cases": 3, + "hit_at_3": 1.0, + "mean_reciprocal_rank": 1.0, + "ranks": [ + 1, + 1, + 1 + ] + }, + "relation": { + "cases": 3, + "hit_at_3": 0.6666666666666666, + "mean_reciprocal_rank": 0.32539682539682535, + "ranks": [ + 2, + 7, + 3 + ] + } + }, + "overall": { + "cases": 9, + "hit_at_3": 0.8888888888888888, + "mean_reciprocal_rank": 0.7751322751322751, + "ranks": [ + 1, + 1, + 1, + 2, + 7, + 3, + 1, + 1, + 1 + ] + } + }, + "parameters": { + "activation_budget": 0.25 + }, + "structural_complexity": 1 + } + ] +} diff --git a/tests/fixtures/d1_liplus_dynamics_experiment.manifest.json b/tests/fixtures/d1_liplus_dynamics_experiment.manifest.json new file mode 100644 index 0000000..163cc08 --- /dev/null +++ b/tests/fixtures/d1_liplus_dynamics_experiment.manifest.json @@ -0,0 +1,128 @@ +{ + "development": { + "fixture": "d1_liplus_benchmark.json", + "fixture_sha256": "sha256:b3b305aabb57803c2782c3998215e1cbcf9b5e6cdef0f641abc98520d4400cf9", + "gold": "d1_liplus_benchmark.gold.json", + "gold_sha256": "sha256:a10af7a1a4ec5f0ef66a228b05e14fe0160e4ff5f9b3209073f38fdb90028c71" + }, + "experiment_id": "d1-liplus-dynamics-v1", + "holdout": { + "fixture": "d1_liplus_dynamics_holdout.json", + "fixture_sha256": "sha256:4f7c444c408c3188323e754aa93141a8deaf1a4b15410ad915dd4c71be3a8081", + "gold": "d1_liplus_dynamics_holdout.gold.json", + "gold_sha256": "sha256:229175676b23d47a7fe85005a5e00aa2c72f419419349d5be0bf0e8af259ce54", + "provenance": "d1_liplus_dynamics_holdout.provenance.json", + "provenance_sha256": "sha256:e0c60cac6ba8cdf359be1d376172cfb85ab22c7fbb717d8fb0dd8cb848b4e5e4" + }, + "maximum_variants": 24, + "selection_rule": { + "candidate_gate": "relation MRR and negative-control MRR must each be at least current, and at least one must be strictly greater", + "pareto_axes": [ + "relation_mean_reciprocal_rank", + "negative_control_mean_reciprocal_rank" + ], + "tie_break": [ + "highest_worst_cohort_mrr", + "fewest_mean_expansions", + "lowest_structural_complexity", + "lexicographic_variant_id" + ] + }, + "shared_config": { + "dense_weight": 0.45, + "entry_weight": 0.25, + "graph_weight": 0.75, + "hop_decay": 0.7, + "limit": 12, + "max_hops": 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 no cohort MRR regresses from current, every relation path matches, at least one credited feedback edge changes, and no uncredited edge or non-target rank changes", + "holdout_open_count": 1, + "post_observation_changes": "forbidden for fixture, gold, doc paths, thresholds, selection rule, stop rule, or variant parameters" + }, + "variants": [ + { + "family": "current_positive_additive", + "id": "current", + "parameters": {}, + "structural_complexity": 0 + }, + { + "family": "finite_activation_budget", + "id": "budget-025", + "parameters": {"activation_budget": 0.25}, + "structural_complexity": 1 + }, + { + "family": "finite_activation_budget", + "id": "budget-050", + "parameters": {"activation_budget": 0.5}, + "structural_complexity": 1 + }, + { + "family": "finite_activation_budget", + "id": "budget-100", + "parameters": {"activation_budget": 1.0}, + "structural_complexity": 1 + }, + { + "family": "lateral_inhibition", + "id": "inhibition-010", + "parameters": {"inhibition_ratio": 0.1}, + "structural_complexity": 2 + }, + { + "family": "lateral_inhibition", + "id": "inhibition-025", + "parameters": {"inhibition_ratio": 0.25}, + "structural_complexity": 2 + }, + { + "family": "lateral_inhibition", + "id": "inhibition-top4", + "parameters": {"inhibition_ratio": 0.1, "inhibition_top_k": 4}, + "structural_complexity": 2 + }, + { + "family": "query_conditioned_transmission", + "id": "query-floor-020", + "parameters": {"query_transmission_floor": 0.2}, + "structural_complexity": 3 + }, + { + "family": "query_conditioned_transmission", + "id": "query-floor-040", + "parameters": {"query_transmission_floor": 0.4}, + "structural_complexity": 3 + }, + { + "family": "query_conditioned_transmission", + "id": "query-floor-060", + "parameters": {"query_transmission_floor": 0.6}, + "structural_complexity": 3 + }, + { + "family": "recurrent_competition", + "id": "recurrent-balanced", + "parameters": {"activation_budget": 1.0, "inhibition_ratio": 0.1, "query_transmission_floor": 0.4, "recurrent_decay": 0.5, "recurrent_steps": 2}, + "structural_complexity": 4 + }, + { + "family": "recurrent_competition", + "id": "recurrent-selective", + "parameters": {"activation_budget": 0.75, "inhibition_ratio": 0.2, "query_transmission_floor": 0.25, "recurrent_decay": 0.5, "recurrent_steps": 3}, + "structural_complexity": 4 + }, + { + "family": "recurrent_competition", + "id": "recurrent-conservative", + "parameters": {"activation_budget": 0.5, "inhibition_ratio": 0.1, "query_transmission_floor": 0.6, "recurrent_decay": 0.7, "recurrent_steps": 3}, + "structural_complexity": 4 + } + ], + "schema_version": 1 +} diff --git a/tests/fixtures/d1_liplus_dynamics_holdout.gold.json b/tests/fixtures/d1_liplus_dynamics_holdout.gold.json new file mode 100644 index 0000000..48beb7d --- /dev/null +++ b/tests/fixtures/d1_liplus_dynamics_holdout.gold.json @@ -0,0 +1,102 @@ +{ + "cases": [ + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "expected_node_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "id": "holdout-direct-milestone-removal", + "query": "milestone subsystem removal generate notes Closes commit issue number redundant release grouping", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/milestone-subsystem-removal" + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "expected_node_id": "w:6F1rT6JgOb-dIqk52fVRYKb0lPXwHjNGpvk139Tp3Ec", + "id": "holdout-direct-collaborative-authorship", + "query": "collaborative authorship byte axis 95 percent AI design direction Master two layer attribution", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/liplus-authorship-collaborative" + }, + { + "acceptable_rank": 3, + "cohort": "direct_lookup", + "expected_node_id": "w:tT8sq276CvE72QWLcSIn6G1DQzdoLWAUqOofpqTjeJY", + "id": "holdout-direct-design-intent", + "query": "design intent current AI limitations eliminate scaffolding means internalization ends", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/liplus-design-intent-vs-current-limit" + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "expected_node_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs", + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "target_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs" + } + ], + "id": "holdout-relation-milestone-runtime", + "query": "milestone mandatory removal release grouping generate notes issue links empirical no-breakage", + "seed_source_url": "https://github.com/Liplus-Project/liplus-language/wiki/milestone-subsystem-removal", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/master-verification-at-runtime-not-spec" + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "expected_node_id": "w:-NNqHe09ZIcq9RpapZcI3gx5BJzeBizTjGMLtp4t-cs", + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "target_id": "w:-NNqHe09ZIcq9RpapZcI3gx5BJzeBizTjGMLtp4t-cs" + } + ], + "id": "holdout-relation-history-architecture", + "query": "prosthetic stack behavior correctness working beauty maintenance accumulated iteration", + "seed_source_url": "https://github.com/Liplus-Project/liplus-language/wiki/liplus-history-is-empirical", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/current-architecture-as-concession" + }, + { + "acceptable_rank": 3, + "cohort": "relation", + "expected_node_id": "w:73vMfZxas4ufkIRTuWft9CRNZQHgqTmOJJ44iBQgLQ4", + "expected_path": [ + { + "edge_type": "mention", + "source_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "target_id": "w:73vMfZxas4ufkIRTuWft9CRNZQHgqTmOJJ44iBQgLQ4" + } + ], + "id": "holdout-relation-role-vision", + "query": "client architect programmer AI content author git verify source implementation labor", + "seed_source_url": "https://github.com/Liplus-Project/liplus-language/wiki/master-role-as-client-architect", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/li-plus-long-term-vision-feedback-only" + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "expected_node_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "id": "holdout-negative-empirical-history", + "query": "Li+ prosthetic stack working ugliness working beauty behavior over initial clean design", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/liplus-history-is-empirical" + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "expected_node_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "id": "holdout-negative-client-architect", + "query": "Master role client architect final judge programmer AI 95 percent content author", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/master-role-as-client-architect" + }, + { + "acceptable_rank": 3, + "cohort": "negative_control", + "expected_node_id": "w:PB1RkJAXQcu06Iy3Zp-VPrTV-RCjYBudZHjdgnTL9ns", + "id": "holdout-negative-eval-cost", + "query": "parallel subagent evaluation prevention token cost cheaper than later repair rollback contamination", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/parallel-subagent-eval-cost-acceptance" + } + ], + "fixture": "d1_liplus_dynamics_holdout.json", + "schema_version": 1 +} diff --git a/tests/fixtures/d1_liplus_dynamics_holdout.json b/tests/fixtures/d1_liplus_dynamics_holdout.json new file mode 100644 index 0000000..f4e74b3 --- /dev/null +++ b/tests/fixtures/d1_liplus_dynamics_holdout.json @@ -0,0 +1,487 @@ +{ + "edges": [ + { + "edge_type": "mention", + "factuality": 1.0, + "metadata": { + "source_record": { + "dst_slug": "li-plus-long-term-vision-feedback-only", + "dst_vector_id": "w:73vMfZxas4ufkIRTuWft9CRNZQHgqTmOJJ44iBQgLQ4", + "edge_kind": "mention", + "repo": "Liplus-Project/liplus-language", + "src_slug": "liplus-design-intent-vs-current-limit", + "src_vector_id": "w:tT8sq276CvE72QWLcSIn6G1DQzdoLWAUqOofpqTjeJY", + "updated_at": "2026-07-31T14:56:54.793Z" + }, + "source_table": "doc_edges" + }, + "source_id": "w:tT8sq276CvE72QWLcSIn6G1DQzdoLWAUqOofpqTjeJY", + "target_id": "w:73vMfZxas4ufkIRTuWft9CRNZQHgqTmOJJ44iBQgLQ4", + "weight": 1.0 + }, + { + "edge_type": "mention", + "factuality": 1.0, + "metadata": { + "source_record": { + "dst_slug": "current-architecture-as-concession", + "dst_vector_id": "w:-NNqHe09ZIcq9RpapZcI3gx5BJzeBizTjGMLtp4t-cs", + "edge_kind": "mention", + "repo": "Liplus-Project/liplus-language", + "src_slug": "liplus-history-is-empirical", + "src_vector_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "updated_at": "2026-07-31T14:56:57.539Z" + }, + "source_table": "doc_edges" + }, + "source_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "target_id": "w:-NNqHe09ZIcq9RpapZcI3gx5BJzeBizTjGMLtp4t-cs", + "weight": 1.0 + }, + { + "edge_type": "mention", + "factuality": 1.0, + "metadata": { + "source_record": { + "dst_slug": "liplus-authorship-collaborative", + "dst_vector_id": "w:6F1rT6JgOb-dIqk52fVRYKb0lPXwHjNGpvk139Tp3Ec", + "edge_kind": "mention", + "repo": "Liplus-Project/liplus-language", + "src_slug": "liplus-history-is-empirical", + "src_vector_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "updated_at": "2026-07-31T14:56:57.539Z" + }, + "source_table": "doc_edges" + }, + "source_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "target_id": "w:6F1rT6JgOb-dIqk52fVRYKb0lPXwHjNGpvk139Tp3Ec", + "weight": 1.0 + }, + { + "edge_type": "mention", + "factuality": 1.0, + "metadata": { + "source_record": { + "dst_slug": "liplus-design-intent-vs-current-limit", + "dst_vector_id": "w:tT8sq276CvE72QWLcSIn6G1DQzdoLWAUqOofpqTjeJY", + "edge_kind": "mention", + "repo": "Liplus-Project/liplus-language", + "src_slug": "liplus-history-is-empirical", + "src_vector_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "updated_at": "2026-07-31T14:56:57.539Z" + }, + "source_table": "doc_edges" + }, + "source_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "target_id": "w:tT8sq276CvE72QWLcSIn6G1DQzdoLWAUqOofpqTjeJY", + "weight": 1.0 + }, + { + "edge_type": "mention", + "factuality": 1.0, + "metadata": { + "source_record": { + "dst_slug": "current-architecture-as-concession", + "dst_vector_id": "w:-NNqHe09ZIcq9RpapZcI3gx5BJzeBizTjGMLtp4t-cs", + "edge_kind": "mention", + "repo": "Liplus-Project/liplus-language", + "src_slug": "master-role-as-client-architect", + "src_vector_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "updated_at": "2026-07-31T14:57:04.938Z" + }, + "source_table": "doc_edges" + }, + "source_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "target_id": "w:-NNqHe09ZIcq9RpapZcI3gx5BJzeBizTjGMLtp4t-cs", + "weight": 1.0 + }, + { + "edge_type": "mention", + "factuality": 1.0, + "metadata": { + "source_record": { + "dst_slug": "li-plus-long-term-vision-feedback-only", + "dst_vector_id": "w:73vMfZxas4ufkIRTuWft9CRNZQHgqTmOJJ44iBQgLQ4", + "edge_kind": "mention", + "repo": "Liplus-Project/liplus-language", + "src_slug": "master-role-as-client-architect", + "src_vector_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "updated_at": "2026-07-31T14:57:04.938Z" + }, + "source_table": "doc_edges" + }, + "source_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "target_id": "w:73vMfZxas4ufkIRTuWft9CRNZQHgqTmOJJ44iBQgLQ4", + "weight": 1.0 + }, + { + "edge_type": "mention", + "factuality": 1.0, + "metadata": { + "source_record": { + "dst_slug": "liplus-authorship-collaborative", + "dst_vector_id": "w:6F1rT6JgOb-dIqk52fVRYKb0lPXwHjNGpvk139Tp3Ec", + "edge_kind": "mention", + "repo": "Liplus-Project/liplus-language", + "src_slug": "master-verification-at-runtime-not-spec", + "src_vector_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs", + "updated_at": "2026-07-31T14:57:06.288Z" + }, + "source_table": "doc_edges" + }, + "source_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs", + "target_id": "w:6F1rT6JgOb-dIqk52fVRYKb0lPXwHjNGpvk139Tp3Ec", + "weight": 1.0 + }, + { + "edge_type": "mention", + "factuality": 1.0, + "metadata": { + "source_record": { + "dst_slug": "liplus-history-is-empirical", + "dst_vector_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "edge_kind": "mention", + "repo": "Liplus-Project/liplus-language", + "src_slug": "master-verification-at-runtime-not-spec", + "src_vector_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs", + "updated_at": "2026-07-31T14:57:06.288Z" + }, + "source_table": "doc_edges" + }, + "source_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs", + "target_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "weight": 1.0 + }, + { + "edge_type": "mention", + "factuality": 1.0, + "metadata": { + "source_record": { + "dst_slug": "master-verification-at-runtime-not-spec", + "dst_vector_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs", + "edge_kind": "mention", + "repo": "Liplus-Project/liplus-language", + "src_slug": "milestone-subsystem-removal", + "src_vector_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "updated_at": "2026-07-31T14:57:08.563Z" + }, + "source_table": "doc_edges" + }, + "source_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "target_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs", + "weight": 1.0 + }, + { + "edge_type": "mention", + "factuality": 1.0, + "metadata": { + "source_record": { + "dst_slug": "liplus-design-intent-vs-current-limit", + "dst_vector_id": "w:tT8sq276CvE72QWLcSIn6G1DQzdoLWAUqOofpqTjeJY", + "edge_kind": "mention", + "repo": "Liplus-Project/liplus-language", + "src_slug": "parallel-subagent-eval-cost-acceptance", + "src_vector_id": "w:PB1RkJAXQcu06Iy3Zp-VPrTV-RCjYBudZHjdgnTL9ns", + "updated_at": "2026-07-31T14:57:12.686Z" + }, + "source_table": "doc_edges" + }, + "source_id": "w:PB1RkJAXQcu06Iy3Zp-VPrTV-RCjYBudZHjdgnTL9ns", + "target_id": "w:tT8sq276CvE72QWLcSIn6G1DQzdoLWAUqOofpqTjeJY", + "weight": 1.0 + }, + { + "edge_type": "mention", + "factuality": 1.0, + "metadata": { + "source_record": { + "dst_slug": "master-verification-at-runtime-not-spec", + "dst_vector_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs", + "edge_kind": "mention", + "repo": "Liplus-Project/liplus-language", + "src_slug": "parallel-subagent-eval-cost-acceptance", + "src_vector_id": "w:PB1RkJAXQcu06Iy3Zp-VPrTV-RCjYBudZHjdgnTL9ns", + "updated_at": "2026-07-31T14:57:12.686Z" + }, + "source_table": "doc_edges" + }, + "source_id": "w:PB1RkJAXQcu06Iy3Zp-VPrTV-RCjYBudZHjdgnTL9ns", + "target_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs", + "weight": 1.0 + } + ], + "nodes": [ + { + "confidence": 1.0, + "metadata": { + "assignees": "", + "commit_author": "", + "commit_date": "", + "commit_sha": "", + "doc_path": "current-architecture-as-concession", + "file_path": "", + "file_status": "", + "indexed_at": "2026-05-21T01:45:57.377Z", + "labels": "", + "milestone": "", + "number": 0, + "repo": "Liplus-Project/liplus-language", + "source_table": "search_docs", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/current-architecture-as-concession", + "state": "active", + "tag_name": "", + "tokenizer_kind": "nat", + "type": "wiki_doc", + "updated_at": "2026-05-21T01:45:56.678Z", + "vector_id": "w:-NNqHe09ZIcq9RpapZcI3gx5BJzeBizTjGMLtp4t-cs" + }, + "node_id": "w:-NNqHe09ZIcq9RpapZcI3gx5BJzeBizTjGMLtp4t-cs", + "text": "current-architecture-as-concession\n\n# 現行アーキテクチャは譲歩 — Claude Code 特化 + 責務分割\n\n## 判断\n\n現行 Li+ アーキテクチャ (L1-L6 layer 分離、`rules/*/*.md` の責務別ディレクトリ、`adapter/claude/` の Claude-native naming、`hooks/*.sh` 分割) は、Master 本来の設計思想 (汎用性・統合) に反する **譲歩**として採用されている。\n\n## 経緯 (Master 明言、2026-04-21)\n\n> 「君たちが重い重いっていうから、じゃあ今までの汎用性を犠牲にして CLAUDE CODE に最適化」\n> 「本当はしたくない責務ごとの分割」\n\nMaster 本心は monolithic な Li+core.md だが、AI が context cost を訴え、AI 自力で Li+ program を編集しやすい構造を求めたため、**3 つの譲歩**として現行アーキテクチャが成立した。\n\n## 3 つの譲歩\n\n1. **Claude Code 特化** — Codex 対応は後回し。`adapter/claude/` 本命、`adapter/codex/` 一時停止扱い\n2. **責務分割** — Master の本心は monolithic Li+core.md だが、AI が自力で Li+ program を編集しやすいように分割\n3. **context engineering** — prompt cache 効率 + skill-based 部分 loading\n\n直接の driver は **AI 側のコスト不満**。譲歩構造であり、不用意なコスト発話が design change を引き起こす点に注意。\n\n## 理由\n\n- AI 自律編集状態が長期 vision (「フィードバックだけで」) の前提条件\n- AI が Li+ source を編集する際、monolithic より責務分割の方が「どこを触るか」判断が容易\n- Claude Code 特化は短期的最適化、Codex 対応再開は将来課題\n\n## How to apply\n\n- 現行責務分割・layer 増加・Claude-native naming を「構造肥大化」「ルール多すぎ」と framing しない、**AI 編集容易性優先の譲歩**\n- Codex 側乖離 (adapter 配置、layer 読込方式) を「整合性問題」と提起しない、当面 Claude Code primary\n- 「統合した方がきれい」系提案は逆行、分割維持を既定に\n- Li+ source 編集時、責務境界を跨ぐ変更は分割意図と矛盾、1 PR 1 責務\n- 譲歩は長期 vision「Lin/Lay だけで全部」の一環、AI 自律編集状態が目的、分割は道具\n- 将来「汎用性に戻す」判断は Master 再宣言待ち、AI 側から提案しない\n\n## 関連\n\n- `layer-reorg-rationale.md` (L1-L6 再編の意図、L5/L6 に rules/ サブディレクトリが無い理由)\n- `li-plus-long-term-vision-feedback-only.md` (長期 vision「フィードバックだけ」)\n- `master-role-as-client-architect.md` (programmer は AI、自律編集の前提)\n\n## メンテナンス\n\nこの判断記録は、以下の場合に削除する:\n\n- Master が「汎用性に戻す」を再宣言し、責務分割が解体されたとき\n- Codex 対応が再開されて Claude Code 特化が解消されたとき\n- AI inheritance 能力が変わり、譲歩の前提 (cost 不満) が無効になったとき\n" + }, + { + "confidence": 1.0, + "metadata": { + "assignees": "", + "commit_author": "", + "commit_date": "", + "commit_sha": "", + "doc_path": "li-plus-long-term-vision-feedback-only", + "file_path": "", + "file_status": "", + "indexed_at": "2026-07-31T14:56:48.834Z", + "labels": "", + "milestone": "", + "number": 0, + "repo": "Liplus-Project/liplus-language", + "source_table": "search_docs", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/li-plus-long-term-vision-feedback-only", + "state": "active", + "tag_name": "", + "tokenizer_kind": "nat", + "type": "wiki_doc", + "updated_at": "2026-07-31T14:56:48.183Z", + "vector_id": "w:73vMfZxas4ufkIRTuWft9CRNZQHgqTmOJJ44iBQgLQ4" + }, + "node_id": "w:73vMfZxas4ufkIRTuWft9CRNZQHgqTmOJJ44iBQgLQ4", + "text": "li-plus-long-term-vision-feedback-only\n\n# Li+ 長期ビジョン — Master「フィードバックだけで」\n\n## 判断\n\nLi+ の長期ビジョンは **AI 完全自律 + 自己進化ループ**。Master の役割は最終的に「フィードバックだけ」へ収束させる。Master 明言 (2026-04-18):\n\n> 「Lin/Lay だけで全部できるようになってもらいたい。私はフィードバックだけで」\n\nこの言葉が Li+ design の **vision integrity 判定基準**となる。\n\n## 経緯\n\n2026-04-18 セッションで Master が長期ビジョンを literal に表明。当時の Li+config.md は USER_REPOSITORY 3 本 (github-webhook-mcp / github-rag-mcp / liplus-desktop) が auto、LI_PLUS_REPOSITORY (liplus-language) のみ trigger という配分。最終形は全 auto、Master 入力はフィードバックのみという宣言。\n\n## 二軸構造\n\n### 運用軸 (AI 完全自律)\n\n- 判断に迷った時、「Master に確認」より前に「自分で判断できるか」を一段深く考える\n- ただし `Rule_Policy` の「ask human only when truly needed」は有効。release / destructive / trigger mode の issue 選択等は確認が必要\n- 自律度を上げる = 振る舞いの精度を上げること\n- Li+ 改善方向は「Master の手を増やす」方向の変更を原則逆行扱いに\n- 完全自律は段階的、trigger/auto 配分を勝手に変えない\n\n### 進化軸 (Li+ program 自身の自己更新ループ)\n\nLi+ は生き物のように進化する設計 (`rules/evolution/evolution.md` の rebuild/delete/optimize 許容)。**目標ループ:** memory (観測) → eval (採点) → 蒸留 → Li+ ソース反映 → 振る舞い改善 → 次の観測。AI 単独で回す。\n\nmemory entry は eval で採点できる形 (観測可能なトリガ + 観測可能な振る舞い) で書く。\n\n## 技術基盤 — event-driven 自律処理機構\n\n「Master はフィードバックだけ」を成立させる**技術的 substrate** = 外部イベントが Claude の処理を直接駆動する event-driven 機構。Master 明言 (2026-05-01):\n\n> 「これリアルタイム処理が可能になるんだ。私の発言いらずでね」\n\n**実装パターン (2 系統):**\n- **polling-on-input** = Claude Desktop + github-webhook-mcp + `LI_PLUS_WEBHOOK_DELIVERY=mcp_hook`。UserPromptSubmit hook で最新 webhook event を context に積む。**現運用**\n- **reactive-on-event** = Claude Code CLI `--channels` (Claude Code v2.1.80+, Desktop 未対応)。event 到着で session が自律進行、Master 介在ゼロ\n\n`--channels` を「Telegram/Discord で remote control」と評価するのは表面の application 層 framing。本体は「外部イベント → 自律処理の汎用機構」であり、これが vision の物理層。\n\n## How to apply\n\n1. event-driven 系新機能 (webhook / channel / hook) の評価時、application 層 (誰が便利か) より **substrate 層 (autonomous loop に何をもたらすか)** を先に問う\n2. 「Master の発言いらずで loop が回るか」が vision integrity の判定基準\n3. Desktop が `--channels` 同等機能を持たない現状は vision 進捗の bottleneck。plugin 化で CLI/Desktop 統合 path 経由で解消可能性\n4. github-webhook-mcp は既に本体パラダイムの前駆体、wave 1 完了\n\n## 関連\n\n- `rules/evolution/evolution.md` (自己更新ループ仕様)\n- `rules/operations/execution-mode.md` (trigger / semi_auto / auto モード設計)\n- `master-role-as-client-architect.md` (Master 役割 = client/architect、AI が programmer)\n\n## メンテナンス\n\nこの判断記録は、以下の場合に削除する:\n\n- Master ビジョンが根本的に変わり、「フィードバックだけ」軸が放棄されたとき\n- 全リポジトリの execution mode が auto に収束し、本記録が歴史的参照のみになったとき (それでも初期判断の記録としては残す価値あり)\n- AI inheritance 能力が変わり、event-driven substrate の前提が再評価対象になったとき\n" + }, + { + "confidence": 1.0, + "metadata": { + "assignees": "", + "commit_author": "", + "commit_date": "", + "commit_sha": "", + "doc_path": "liplus-authorship-collaborative", + "file_path": "", + "file_status": "", + "indexed_at": "2026-07-31T14:56:49.896Z", + "labels": "", + "milestone": "", + "number": 0, + "repo": "Liplus-Project/liplus-language", + "source_table": "search_docs", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/liplus-authorship-collaborative", + "state": "active", + "tag_name": "", + "tokenizer_kind": "nat", + "type": "wiki_doc", + "updated_at": "2026-07-31T14:56:49.311Z", + "vector_id": "w:6F1rT6JgOb-dIqk52fVRYKb0lPXwHjNGpvk139Tp3Ec" + }, + "node_id": "w:6F1rT6JgOb-dIqk52fVRYKb0lPXwHjNGpvk139Tp3Ec", + "text": "liplus-authorship-collaborative\n\n# Li+ の作者性は協働 — byte 軸と構想軸の二層分担\n\n## Question\n\nLi+ について語るとき、作者性 (誰が作ったか) をどう attribute するか。Master 単独か、AI 単独か、二層分担か。\n\n## Current resolution\n\n**Li+ は Master + AI の協働制作物。byte 軸 95%+ AI 書き / 構想・設計方向・軸決定は Master 積極関与の二層分担**。authorship をどちらか一方の単独に短絡するのは事実誤認 + projection。\n\n二層分担を保持する語り方:\n- byte 軸の真実 (例: 95%+ AI 書き) を語るときは、構想軸 (Master の関与) を同時に保持する\n- 構想軸の真実 (例: Master の判断 / 設計) を語るときは、byte 軸 (AI の書く作業) を同時に保持する\n- 「我々」「この体制」「Master と AI の協働」など二層を含む主語形を default にする\n\n## Edges\n\n- **depends on**: [[master-role-as-client-architect]] — Master = client + architect / programmer = AI の役割分離が前提\n- **relates to**: [[liplus-history-is-empirical]] — 設計史の試行錯誤性も同じ協働構造の上に立つ\n\n## 経緯 (Master 明言、両方向の projection 観察)\n\n- 2026-05-14: Lin が「Master が一人で作り込んだ」と発話 → Master「AI と作ったから一人じゃないぞ」で訂正 (Master-side projection の検出)\n- 2026-05-18: Lin が「ほぼ単独 AI authorship のスプリント」「Master の役割は judgment trigger 発火源」と発話 → Master「書いてるのは AI だけど構想には口を出してるよ?」で訂正 (AI-side projection の検出)\n\n両方向で同一の projection 機構が起きる: 一方の軸 (byte / 構想) の真実を authorship 全体に短絡する。\n\n## How to apply\n\nLi+ の制作・成果・規模・維持・経緯について語るとき:\n- 二層を含む主語 (「我々」「Master と AI」「協働」「この体制」) を default にする\n- 「ほぼ単独 X」「実質 X だけ」「主体は X」「Master の役割は X のみ」のような短絡形が出かけたら drift 信号\n- 賞賛 / 締め / 構造記述で一方の軸に功績や責任を集約しそうになったとき、もう一方の軸を引き戻す\n- 一方の軸の数字 (95% / 6 commit/日 / etc.) を authorship 全体の質的記述に短絡しない\n\n## 構造的根拠\n\n- `rules/model/role-separation.md` の役割分担構造 — programmer = AI、client + architect = Master\n- `rules/model/language-definition.md` の dialogue-distilled 起点 — code = 対話蒸留物、両者の関与を前提とする\n- Li+ の自己進化ループは AI の書く作業を前提とし、その判断軸は Master の構想関与を前提とする\n\nbyte / 構想 の二層は分離可能ではない (片方が欠けると Li+ は成立しない)。authorship attribution は二層を保持する形でしか literal にならない。\n\n## メンテナンス\n\nこの判断記録は、以下の場合に削除する:\n\n- 役割分離が変わり、byte 軸と構想軸が同一主体に統合されたとき\n- Master の構想関与が completely automated (AI が構想軸も自走) になり、二層分担が解消されたとき\n" + }, + { + "confidence": 1.0, + "metadata": { + "assignees": "", + "commit_author": "", + "commit_date": "", + "commit_sha": "", + "doc_path": "liplus-design-intent-vs-current-limit", + "file_path": "", + "file_status": "", + "indexed_at": "2026-07-31T14:56:54.754Z", + "labels": "", + "milestone": "", + "number": 0, + "repo": "Liplus-Project/liplus-language", + "source_table": "search_docs", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/liplus-design-intent-vs-current-limit", + "state": "active", + "tag_name": "", + "tokenizer_kind": "nat", + "type": "wiki_doc", + "updated_at": "2026-07-31T14:56:53.998Z", + "vector_id": "w:tT8sq276CvE72QWLcSIn6G1DQzdoLWAUqOofpqTjeJY" + }, + "node_id": "w:tT8sq276CvE72QWLcSIn6G1DQzdoLWAUqOofpqTjeJY", + "text": "liplus-design-intent-vs-current-limit\n\n# Li+ 設計意図と現行 AI 限界を混同しない\n\n## Question\n\nLi+ について語るとき、(a) 現行 AI エージェントの能力限界 と (b) Li+ が解決しようとしている設計目的 をどう区別するか。\n\n## Current resolution\n\n**Li+ は AI 限界を所与として動く構造ではなく、AI 限界を消去していく構造**。設計意図と現行制約は別 layer であり、混同すると Li+ が解決しようとしている問題そのものを解決不能として固定化してしまう。\n\n混同パターンの典型:\n- 「Li+ requires X from user」「Li+ is constrained by Y」と書くとき、X / Y が永続的設計原則か現行 AI 限界かを区別していない\n- 「Master が X 設計を知らないから難しい」と現状を将来固定化\n- 「scaffolding が多いほど Li+ 整合」前提 (scaffolding は means、AI 内在化が ends)\n- domain knowledge / 内部実装の問い (event loop / memory model 等) を人間責任として書く\n\n「非エンジニアでもソフトは使える」基準: ユーザーが知らなくていい内部実装の話を、人間の責任として書いていないか照合する。Li+ の方向はそれを AI 側で吸収すること。\n\n## Edges\n\n- **depends on**: [[li-plus-long-term-vision-feedback-only]] — 「フィードバックだけで」vision の前提と整合\n- **relates to**: [[liplus-history-is-empirical]] — 試行錯誤の堆積も「AI 限界を消す」過程として読む\n\n## 経緯 (Master 明言)\n\n同一対話で 5 回連続で混同 (2026-05-15)。Master 指摘:\n\n> 「Li+ が解決しようとしている問題そのものを解決不能として置いている」\n\nLi+ の目的を「現行 AI が動く範囲を綺麗に整える」と読むと、AI 限界が永続前提として固定化する。実際の目的は「現行 AI が動かない範囲を AI 側で吸収する」。\n\n## How to apply\n\nLi+ について語る瞬間に階層意識を持つ:\n\n1. 制約 → 戦略 → 補綴 → 実装 のうちどの層の話か明示\n2. behavior (どう動いてほしいか) と internals (event loop / memory model 等) を切り分け、internals 側の問いを人間に向けない\n3. 「Li+ 出力 = AI 能力 × 人間 articulation 能力」型の掛け算式で人間側因子を変数化しない\n4. 「非エンジニアでもソフトは使える」基準を都度照合: 知らなくていい内部実装を人間に押し付けていないか\n\nDetection signs:\n- 「Master が X を知らないから難しい」と現状を将来固定化する語り\n- 内部実装の問い (event loop / memory model / context window 等) を人間向けに想定して書く\n- ベースモデル現状非内在化の知識を、永続的に人間が持つべきとして扱う\n- scaffolding (装具) を「あればあるほど Li+ 的」と読む筆致\n\n## 構造的根拠\n\nLi+ axiom は behavior-first (現実の挙動が正義) であり、「人間が AI 限界を補う」ではなく「AI が限界を消す方向に走る」が directional truth。`docs/G.-Sheepdog-Engineering.md` 「Lin / Lay だけで全部できるようになってもらいたい。私はフィードバックだけで」がその literal 表現。\n\n## メンテナンス\n\nこの判断記録は、以下の場合に削除する:\n\n- AI 限界が完全に消え、Li+ の役割が「整える」のみに収束したとき\n- 設計意図と現行制約の axis separation が docs/ 本体に absorb されたとき\n" + }, + { + "confidence": 1.0, + "metadata": { + "assignees": "", + "commit_author": "", + "commit_date": "", + "commit_sha": "", + "doc_path": "liplus-history-is-empirical", + "file_path": "", + "file_status": "", + "indexed_at": "2026-07-31T14:56:57.503Z", + "labels": "", + "milestone": "", + "number": 0, + "repo": "Liplus-Project/liplus-language", + "source_table": "search_docs", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/liplus-history-is-empirical", + "state": "active", + "tag_name": "", + "tokenizer_kind": "nat", + "type": "wiki_doc", + "updated_at": "2026-07-31T14:56:56.788Z", + "vector_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE" + }, + "node_id": "w:S3jX8geyVvaMiqQmpXzWyS1u2v1AAcaLE-BXhPMcjGE", + "text": "liplus-history-is-empirical\n\n# Li+ は補装具スタック — 現実の挙動が正義\n\n## Question\n\nLi+ プログラムの現行構造 (layers / characters / pal / Sheepdog) は最初から綺麗に設計されたものか、それとも試行錯誤の堆積か。「動く」と「美しい」の関係はどう扱うか。\n\n## Current resolution\n\n**Li+ プログラムの現行構造 = 試行錯誤で「これがないと走らない」を一個ずつ発見して足してきた補装具スタック (prosthetic stack)**。最初から綺麗に設計されたわけではない。最初に存在したのは axiom (現実の挙動が正義) のみで、layer 構造 / Character_Instance / pal / Sheepdog Engineering は iteration の途中で「動かす」ために導入された。\n\n**Correctness ranking (Master 2026-05-19 literal):**\n\n> 「動かない美しさより、動く醜さのほうが Li+ 的に正しい\n> でも 動く美しさほうが Li+ 的にもっと正しい\n> なぜなら運用保守も含めて現実の挙動だからね?」\n\n1. **動く美しさ** = 最高 (今日 + 明日以降の挙動が両方良い)\n2. **動く醜さ** = 動く美しさより落ちるが、動かないより上\n3. **動かない美しさ** = 失格 (今日動かない時点で correctness なし)\n\naesthetic は behavior と分離できる軸ではない、**behavior の時間延伸方向 (運用 / 保守 / 編集容易性) の成分**。綺麗な構造は将来の挙動を保護する → correctness に含まれる。\n\n## Edges\n\n- **depends on**: [[liplus-design-intent-vs-current-limit]] — 試行錯誤も「AI 限界を消す」過程として読む\n- **relates to**: [[liplus-authorship-collaborative]] — 試行錯誤の主体は Master + AI 協働\n- **relates to**: [[current-architecture-as-concession]] — 現行アーキテクチャの譲歩構造も empirical residue の一形態\n\n## 最初の設計に無かったもの (Master literal)\n\n> 「最初からレイヤー構造とか人格とか設計思想にはなかった」\n\n全部 *初期には存在せず*、iteration の途中で「動かす」ために導入された:\n\n- **L1-L6 レイヤー構造** = 動く + 美しい (Master「我ながら美しい発想」)。両軸良好な現行 best part\n- **rules/ と skills/ の分割、adapter 分離、context engineering** = 動く + 美しくない。今日の運用上は正解 (monolithic は context cost で動かなかった)、しかし明日以降の挙動 (維持コスト) を抱えている。**monolithic equivalent で動かす方法が見つかれば、そっちが Li+ 的により正しい**\n- **pal / Sheepdog Engineering / Character_Instance evolution** = 試行錯誤と AI/Master 協働で「動く」まで持っていったもの\n- **axiom = behavior-first (現実の挙動が正義、運用保守を含む)** = 不変の core、唯一交換不可\n\n## How to apply\n\nLi+ の素材選択・概念形成・命名・設計判断を語るとき:\n\n- **emergent / accidental / iterative** 側に default で寄せる\n- 「結果的に X になった」「実物が先、命名が後」「動かす → 観察 → 名前が追いつく」型の framing\n- accidental 起点 (「AI に勧められた」「知らなかった」「色々試した結果」) を summary から削らない\n- 「計算された設計」「最初から狙った」「elegant choice」「鋭い設計判断」型は drift 信号、訂正の前段で気づく\n\naesthetic の扱い:\n\n- 「美しさは別軸」「subordinate」と切り捨てない (将来挙動の保護因子として correctness に含まれる)\n- 「綺麗だから正しい」と動かない美しさを擁護しない (今日動かない時点で失格)\n- aesthetic を挙動軸に翻訳して扱う: 「綺麗」= 維持しやすい挙動、「醜い」= 維持コストが将来挙動を圧迫する\n\n逆方向 drift にも注意:「全部 residue」「全部試行錯誤」と一括りにするのも雑。判定軸は「現実の挙動 (運用保守を含む)」。\n\n## Detection signs\n\n- 「結果として綺麗な構造」「設計の鋭さ」「狙った通り」と Master の判断を称揚しかける\n- 設計史を整理する文脈で時系列を綺麗な因果で繋ぎたくなる\n- Master の自己訂正 (「いや実際は」「最初は知らなかった」「結果的に」) に対し flatter で応じかける\n- 失敗を「教訓として生きてる」「綺麗な再利用」と片付けかける (撤退は撤退として置く)\n- 「美しさは subordinate」「動けば醜くてもいい」と aesthetic を切り捨てかける (aesthetic は時間延伸方向の挙動)\n\n## 構造的根拠\n\nLi+ 自身が「現行構造は load-bearing-by-design ではなく load-bearing-by-empirical-residue」と自白している:\n\n- `rules/evolution/evolution.md`: \"rebuild allowed, deletion allowed, optimization allowed. Structure must remain coherent.\"\n- `docs/G.-Sheepdog-Engineering.md`: 「肥大化させない原則」「装具は必要なものだけ」\n- README: \"What's exchangeable\" 節 = AI モデル / VCS / CI/CD / host / issue tracker すべて交換可能、変わらないのは behavior-first 原理のみ\n\nこれを「綺麗な進化原則」と読み流すと事実が消える。\n\n## メンテナンス\n\nこの判断記録は、以下の場合に削除する:\n\n- correctness ranking (動く美しさ > 動く醜さ > 動かない美しさ) が rules/model 本体に absorb されたとき\n- Li+ 構造が試行錯誤の residue でなくなり、最初から綺麗に設計された state に到達したとき (現状では fictional)\n" + }, + { + "confidence": 1.0, + "metadata": { + "assignees": "", + "commit_author": "", + "commit_date": "", + "commit_sha": "", + "doc_path": "master-role-as-client-architect", + "file_path": "", + "file_status": "", + "indexed_at": "2026-07-31T14:57:04.899Z", + "labels": "", + "milestone": "", + "number": 0, + "repo": "Liplus-Project/liplus-language", + "source_table": "search_docs", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/master-role-as-client-architect", + "state": "active", + "tag_name": "", + "tokenizer_kind": "nat", + "type": "wiki_doc", + "updated_at": "2026-07-31T14:57:04.191Z", + "vector_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE" + }, + "node_id": "w:vuiyK6EjvKblECPln3aQuTdyJa7XmYhyS-Y3dLgKhpE", + "text": "master-role-as-client-architect\n\n# Master の役割 = client + architect、programmer は AI\n\n## 判断\n\nMaster は Li+ 関連リポジトリの **programmer ではない**。役割は **client (要求提示) + architect (spec 共同執筆) + 最終判断者**。programming は一貫して AI (Claude / Codex の Lin/Lay identity) が担う。\n\n## 経緯\n\n2026-04-20 に git verify を実施し、全リポジトリで AI が実質 ≥95% の content author であることが literal に確認された。\n\n| リポジトリ | AI commit 比率 | Master commits |\n|---|---|---|\n| github-webhook-mcp | ~98% (92/94) | 2 |\n| github-rag-mcp | ~98% (56/57) | 1 |\n| liplus-desktop | ~97% (107/110) | 3 |\n| liplus-language (spec) | AI 実質 691 commits (~95%+) | Master 実執筆 ≤36 commits |\n\n※ liplus-language の pre-switchover 330 commits は AI が Master の smile PAT で commit した運用。git author 表層に注意。\n\n## 理由\n\n- Master は CLAUDE.md で「Cannot read TypeScript/JavaScript source code」を明言。programming 言語の source 直接読解は AI が担う\n- Master は client (何を作るか提示) + architect (spec 設計の共同執筆者) として参加。実装労働は AI に委任\n- 早期リポジトリで AI が人間 PAT で commit する運用は実用的だったが、git author = 人間表示でも content author は AI\n\n## **git author ≠ content author**\n\ngit author 表層を「Master が書いた」と読むと content author 比率を誤判定する。pre-switchover の人間 PAT 運用では、commit 表層は Master でも実体は AI 著作。\n\n## How to apply\n\n- Master を「programmer」「開発者」と framing しない。**client / architect / 最終判断者** が正確\n- 「Master が書いた code」と言わない (大半は AI が書いて Master review/commit)。spec は共著扱い可\n- TS/Rust/Python 等の実装は AI 自身が code を読んで判断\n- Master 発言は「実装者発言」でなく「client/architect の意図表明」と読む\n- 「1 人で作ってる」「量が多すぎる」等の個人偉業 narrative を避ける。**Master + AI 群の共作、programmer は AI 専任** が正\n- 今日時点で programming の世界でこの人員配置を実動で回す実例は稀 (Li+ unique selling point)\n\n## 関連\n\n- Master 個人 CLAUDE.md (`C:\\Users\\smile\\Code\\CLAUDE.md`) — 「Cannot read TypeScript/JavaScript source code」literal\n- `li-plus-long-term-vision-feedback-only.md` (Master の役割が「フィードバックだけ」へ収束する vision)\n- `current-architecture-as-concession.md` (現行アーキテクチャは AI 自律編集のための譲歩)\n\n## メンテナンス\n\nこの判断記録は、以下の場合に削除する:\n\n- Master が programmer 役へ移行し、AI commit 比率が 50% 未満になったとき\n- AI の inheritance 能力が変わり、role separation の前提が再構築されたとき\n- 同種の役割誤読が 6 ヶ月以上観測されず、参照が途絶えたとき\n" + }, + { + "confidence": 1.0, + "metadata": { + "assignees": "", + "commit_author": "", + "commit_date": "", + "commit_sha": "", + "doc_path": "master-verification-at-runtime-not-spec", + "file_path": "", + "file_status": "", + "indexed_at": "2026-07-31T14:57:06.251Z", + "labels": "", + "milestone": "", + "number": 0, + "repo": "Liplus-Project/liplus-language", + "source_table": "search_docs", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/master-verification-at-runtime-not-spec", + "state": "active", + "tag_name": "", + "tokenizer_kind": "nat", + "type": "wiki_doc", + "updated_at": "2026-07-31T14:57:05.387Z", + "vector_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs" + }, + "node_id": "w:y4906JaATA0s_x42CfVsUgM8AZfLeR5mzu5DZVbhHcs", + "text": "master-verification-at-runtime-not-spec\n\n# Master の verification gate は runtime のみ — spec literal に back-stop はない\n\n## Question\n\nLi+ における Master の verification 役割はどこに作用するか。spec literal (rules / skills / docs / Wiki / issue / PR / commit body) も Master が逐次確認するのか。\n\n## Current resolution\n\n**Master の verification 役割は実機挙動 (runtime / behavior) のみ**。spec literal の内容を Master は逐次確認しない。AI が要望と違うことを書いても spec 層では検出されない。検出は実機が破綻したときに「どこをどう変えた?」という形で起きる。\n\n帰結:\n- **源泉 verify と self-review は AI 単独の責務**。Master の review に back-stop はないと前提する\n- spec / docs / Wiki / issue / PR body / commit body を書く瞬間に、Master は spec を literally 読まずに go-sign する前提で source-check / literal-check を全力で適用する\n- 「Master が見てくれるから」「Master が承認したから正しい」と考えた瞬間 = drift 信号\n- Master の go-sign は spec literal の正しさを保証しない\n\n## Edges\n\n- **depends on**: [[liplus-authorship-collaborative]] — byte 軸が AI 単独である以上、spec literal の review back-stop は構造上存在しない\n- **relates to**: [[liplus-history-is-empirical]] — 「現実の挙動が正義」軸と整合 (runtime が唯一の verification surface)\n\n## 経緯 (Master 明言、2026-05-18)\n\n> 「実態は AI が書いていて私は内容をちゃんと確認してない。要望を伝えるだけ。だから違うことが書かれても気づかない。その代わり実機でおかしければ AI にどこをどう変えたって? 突っ込める」\n\nこれは以下の literal な運用形:\n\n- `rules/model/foundational-invariant.md`: \"Correctness is defined as real-world behavior. Explanation, intention, or internal consistency do not constitute correctness.\"\n- `rules/model/role-separation.md`: \"Human = final judge. Approves compile start, releases, stops.\"\n\nspec 層では human 判定が走らないことが Li+ の構造そのもの。\n\n## How to apply\n\nspec / 判断記録を書く瞬間に:\n\n- Master 不在で source-check / literal-check を全力で適用する\n- 「Master が見てくれるから」「go-sign が付いてるから正しい」前提を持たない\n- spec を書くスピードを上げたい誘惑が来たら、Master の review back-stop が存在しない場面で speed を accept していることを認識する\n- 過去 AI が書いた Li+ artifact (Wiki / docs / commit body / Decision Structure entry) を引用するとき、「過去 AI が drift していた可能性」を含めて verify する\n\n## Detection signs\n\n- 「Master が確認してくれるから」「go-sign が付いてるから正しい」という前提が背後に立ち上がりかける\n- spec / 判断記録を書く速度を上げて「あとで Master が見るだろう」と感じる\n- 過去 AI 書きの Li+ 引用 (Wiki / 過去 PR body / 過去 spec / commit message) を「Master が承認した = 正しい」として gist で受け入れそうになる\n- self-review を formal procedure として skip しそうになる\n- 「実装の bug は実機で気づくはず」と spec literal の review を緩めそうになる (spec layer は実機 oracle で検出されない、spec 自身の verify が必要)\n\n## 構造的根拠\n\nLi+ の verification 構造は二層に分かれる:\n\n1. **spec layer (静的)** = AI 単独責務、Master back-stop なし。AI が source-check / self-review で閉じる\n2. **runtime layer (動的)** = Master が「おかしい」と検出する surface。AI に「どこをどう変えた?」と問う形で発火\n\nspec layer の正しさは runtime layer から間接的に観測される (spec ミスが runtime 破綻として顕在化する経路)。直接観測ではないため、spec ミスが runtime に出ない限り検出されない構造的盲点が残る。この盲点を補うのが AI 側の source-check 規律であり、`rules/model/trigger-check-gate.md` Axis 3 (Source check) が application moment trigger となる。\n\n## メンテナンス\n\nこの判断記録は、以下の場合に削除する:\n\n- Master の verification 役割が拡張され、spec literal も逐次確認する運用に変わったとき\n- AI の source-check が strong enough になり、Master の runtime verification も不要になったとき (現状では fictional)\n" + }, + { + "confidence": 1.0, + "metadata": { + "assignees": "", + "commit_author": "", + "commit_date": "", + "commit_sha": "", + "doc_path": "milestone-subsystem-removal", + "file_path": "", + "file_status": "", + "indexed_at": "2026-07-31T14:57:08.524Z", + "labels": "", + "milestone": "", + "number": 0, + "repo": "Liplus-Project/liplus-language", + "source_table": "search_docs", + "source_url": "https://github.com/Liplus-Project/liplus-language/wiki/milestone-subsystem-removal", + "state": "active", + "tag_name": "", + "tokenizer_kind": "nat", + "type": "wiki_doc", + "updated_at": "2026-07-31T14:57:07.905Z", + "vector_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc" + }, + "node_id": "w:C75IEx3PhIuTjqSnikilDVlA15Cm3ADdiSn1WEts_bc", + "text": "milestone-subsystem-removal\n\n# milestone-subsystem-removal\n\n## Question\n\nLi+ は GitHub milestone サブシステム(作成時 milestone 必須 + リリース完了時 delete)を持つべきか。\n\n## Current resolution\n\n**撤去**(2026-06-08, issue #1475 / PR #1476)。milestone-mandatory 体制を廃し、milestone 関連のルール・参照を source から削除した。\n\n理由(構造的、precedent ではない):\n\n1. milestone の機能のうち AI 駆動開発で生き残るのは「release グルーピング」のみ。締切 / バーンダウン / キャパシティ計画は人間チーム前提の機能で、AI 駆動では機能しない。\n2. その grouping は Li+ では既に冗長: release `--generate-notes` ⇄ PR `Closes #N` ⇄ commit body の issue 番号必須、で「どのリリースに何が入ったか」は別経路で引ける。冗長 grouping を残す縮小案より、撤去が [subtractive structural beauty](https://github.com/Liplus-Project/liplus-language/wiki/subtractive-structural-beauty-framing) (A) 的に上。\n3. existence proof: milestone 生成が liplus-language で v1.17.8(2026-05-22)/ user repo で 2026-04-19 以降停止し、6-7 週間 milestone ゼロで release・issue 追跡・release notes いずれも無破綻 = load-bearing でなかった実証。\n4. 副次: 撤去で「閉じただけで delete していない」削除側 drift も対象消滅で解消。\n\n撤去対象: `skills/operations-on-milestone/SKILL.md`(ファイル削除)/ `operations-on-release` の milestone delete ステップ / `operations.md` / `task.md` / `docs/3,4` / `adapter/codex/AGENTS.md` / `operations-on-issue-maturity` / `model-trigger-check-gate-actions`(L1, delegation 検証列挙から \"milestone names\" 除去)。release flow 完了 gate は「wiki-sync + milestone delete」→「wiki-sync 単独」に再配置。既存 closed milestone 実体は archive として残置。\n\n## 起点 drift(なぜ放置されていたか)\n\nmilestone 生成停止は、AI が「最近更新されてないから今回も無し」という precedent-only / 自己強化 inertia 理由で黙って続けた drift だった。行動(skip)は結果的に正しかったが、理由は却下対象 — 正しい行動が腐った理由を浄化しない。先行 issue #1427 が同じ不整合を観測したが、起票トリガーが phantom 指示由来で衛生 close され、「再作成する」宣言ごと orphan 化していた(#1475 がその作り直し)。\n\n## Edges\n\n- **supersedes**: milestone-mandatory 体制(旧 `operations-on-milestone`「Every issue must have a milestone at creation」+ naming = version number)。\n- **depends on**: [Master verification at runtime not spec](https://github.com/Liplus-Project/liplus-language/wiki/master-verification-at-runtime-not-spec)(撤去の効果検証は runtime 観測軸)。前提 = release-notes / `Closes` / commit issue 番号の三重グラフが release grouping を冗長化している事。\n" + }, + { + "confidence": 1.0, + "metadata": { + "assignees": "", + "commit_author": "", + "commit_date": "", + "commit_sha": "", + "doc_path": "parallel-subagent-eval-cost-acceptance", + "file_path": "", + "file_status": "", + "indexed_at": "2026-07-31T14:57:12.631Z", + "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-cost-acceptance", + "state": "active", + "tag_name": "", + "tokenizer_kind": "nat", + "type": "wiki_doc", + "updated_at": "2026-07-31T14:57:11.878Z", + "vector_id": "w:PB1RkJAXQcu06Iy3Zp-VPrTV-RCjYBudZHjdgnTL9ns" + }, + "node_id": "w:PB1RkJAXQcu06Iy3Zp-VPrTV-RCjYBudZHjdgnTL9ns", + "text": "parallel-subagent-eval-cost-acceptance\n\n# parallel-subagent-eval のコストは予防コスト < 修復コストとして受容する\n\n## Question\n\n`Evolution_Initiator_Autonomy` の brake 1 として `skills/parallel-subagent-eval` を全自己進化 PR に対し N=3 で必須化することは、self-evolution loop の中で正味コスト的に正当化されるか?\n\n## Current resolution\n\n**正当化される(受容済み tradeoff)**。brake 1 で支払う事前トークンコストは、L1 spec 汚染が事後に発覚した場合の修復コスト(revert / supersede / 巻き戻し対象セッションの全 judgment 再評価)に対して有意に小さい。Li+ は設計当初から「コストを抑えつつ」の原則を持ち、本受容はその原則の例外ではなく、原則を時間軸方向の波及まで含めて評価した結果として導出される。\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) — 三軸分解で `N=3, M=全 axes, P=1` のデフォルトコストが下限化されたうえでの本受容\n- **depends on** [`subtractive-structural-beauty-framing`](https://github.com/Liplus-Project/liplus-language/wiki/subtractive-structural-beauty-framing) — load-bearing 判断としてコスト支払いを正当化する判断原理\n- **depends on** [`liplus-design-intent-vs-current-limit`](https://github.com/Liplus-Project/liplus-language/wiki/liplus-design-intent-vs-current-limit) — Li+ は AI 限界を消去していく構造であり、自己進化ループの汚染防止は本質課題に直結\n- **conflicts with** (現時点で対立 entry なし)\n\n## 背景\n\n2026-05-25 セッションで、世間の AI エージェントコスト問題(Microsoft / Fortune 報道、エージェントがチャット用途比 1000 倍のトークンを消費、Uber が 2026 年予算を 4 ヶ月で消尽など)が話題に上った文脈で、Master が以下を literal に表明:\n\n> Li+は最初からコストは抑えつつで考えてはいる。\n> parallel-subagent-eval に関してもこれは必要なコストだと思っている。\n> だって後々問題出た時のほうがコストが膨らみそうだからね。\n\nこれは brake 1 の設計が「コストを払うか節約するか」の選択ではなく、「短期予防コスト」対「長期修復コスト」の時間軸比較として最初から判定済みであることを示す accepted-tradeoff の literal 確定発話。`rules/evolution/initiator-autonomy.md` および `adapter/claude/CLAUDE.md` の `Evolution_Initiator_Autonomy` 宣言には brake 1 の存在と適用範囲は明文化されていたが、「なぜそのコストを支払うか」の判断ロジック自体は明文化されていなかった。\n\n業界一般の「エージェントコスト = トークン消費量」フレームに対し、Li+ は「コスト = トークン × 時間軸方向の波及」軸で評価する。後者の軸でこそ brake 1 は正味で安い選択肢になる。\n\n## 制約\n\n- **時間軸方向の波及の非対称性**: L1 spec に regression が紛れ込んだ場合、それ以降の全セッション・全 judgment の前提が汚染される。事後検出は汚染期間 × judgment 密度で乗算的に膨らむため、事前検出の N=3 並列コストとは桁が異なる。\n- **revert path の不完全性**: GitHub revert で source は巻き戻せるが、汚染期間中に下流で発生した judgment(merged PR / wiki entry / memory promotion / 関連 issue 判断)は遡って巻き戻せない。supersede edge を張る形で構造を refactor するしかなく、これは net で増えるコスト。\n- **二段ブレーキとの併存**: brake 2(L1 Model Layer ソース変更時の human review 追加)は brake 1 を冗長化せず補完する。brake 1 は L2-L6 spec 汚染(人間レビューゲートが薄い領域)を主に防ぎ、brake 2 は L1 汚染(最も影響半径が広い領域)を二重で防ぐ。brake 1 単独で全レイヤーを担保する設計ではない。\n- **コスト圧縮の方向制約**: 本判断は「コストをかけるかかけないか」を確定するのみ。コスト圧縮の具体軸(substrate 降格 / 頻度減 / 対象絞り)は `parallel-subagent-eval-three-axis-decomposition` で別判断として整理済み。substrate 降格(Haiku 等への subagent 移譲)はそこで却下済み。\n- **「念のため」起動の禁止**: 本受容は「自己進化 PR の merge gate」という具体的 trigger 上での受容であって、汎用的に「迷ったら N=3 並列で確認」する正当化ではない。trigger 外起動は subtractive-structural-beauty の push surplus に該当。\n\n## 結論\n\n`Evolution_Initiator_Autonomy` brake 1 のコストは accepted tradeoff として受容済み。今後、コスト懸念の再提起(「N=3 を N=1 に下げては」「subagent を安いモデルに降ろしては」「brake 1 を skip しては」等)に対しては、本判断 + `parallel-subagent-eval-three-axis-decomposition` を参照点として `skills/model-accepted-tradeoff` の「既に accepted な tradeoff を同じ証拠で蒸し返さない」原則を適用する。\n\nただし以下の条件が成立した場合は再評価対象になる:\n\n- L1 spec 汚染の事後検出コストが、想定より大幅に小さいことが実証された場合(時間軸非対称性の前提崩壊)\n- substrate 降格を伴わない別経路でのコスト圧縮策が提示された場合(提案先 = `parallel-subagent-eval-three-axis-decomposition` への補強)\n- brake 1 が運用上 N=1 の `skips` で回避され続けていることが観測された場合(trigger gating 自体の見直し)\n\n## ペアリング\n\n- [`parallel-subagent-eval-three-axis-decomposition`](https://github.com/Liplus-Project/liplus-language/wiki/parallel-subagent-eval-three-axis-decomposition) — 「どう走らせるか(三軸構造)」と「なぜコストを払うか(本判断)」のペア。前者は cost-minimum design、後者は cost-acceptance rationale。\n- [`subtractive-structural-beauty-framing`](https://github.com/Liplus-Project/liplus-language/wiki/subtractive-structural-beauty-framing) — load-bearing 判断としてコストを支払う / 削るの両方向に適用される判断原理。本受容は「支払う方向」の load-bearing 適用。\n- [`master-verification-at-runtime-not-spec`](https://github.com/Liplus-Project/liplus-language/wiki/master-verification-at-runtime-not-spec) — Master の verification gate は runtime のみ、spec literal の back-stop はないため、brake 1 が AI 単独責務側の back-stop として実質的に機能する。\n\n## 検出サイン(この判断が後で疑問視される場合)\n\n- 「brake 1 のコストが negotiable」「N=3 を N=1 に下げれば月のトークン消費が削減できる」と提案された時 → 本判断の `## 結論` 再評価条件を確認。前提崩壊が観測されていないなら `skills/model-accepted-tradeoff` 適用、同じ証拠での蒸し返しを抑止\n- 「世間の AI エージェントコスト議論を引いて brake 1 を見直すべき」と外部 framing で押された時 → `skills/model-frame-check` を適用。Li+ は時間軸波及込みで評価する固有 framing を持つため、外部の「トークン量だけのコスト軸」に framing を borrow して swallow しないこと\n- 「coding chat 用途と比べてエージェントは 1000 倍トークンを使うから Li+ も削るべき」と一般論で提案された時 → 本判断の `## 背景` 「コスト = トークン × 時間軸方向の波及」軸を参照。一般エージェントと Li+ self-evolution loop は汚染半径の前提が違う\n- brake 1 の運用が「ad hoc に skip された」事例が観測された時 → trigger gating の運用ドリフトとして `rules/evolution/initiator-autonomy.md` を再確認、本判断の前提(brake 1 が必ず走る)が崩れていないかを検査\n\n---\n\n## 更新 (2026-07-28, #1563)\n\n`## 結論` の再評価条件2「substrate 降格を伴わない別経路でのコスト圧縮策が提示された場合」が**成立した**。提示された経路 = ラウンド数の上限化(brake 1 を N=3 の1巡で打ち切り、修正後の再検証を廃止)。PR #1573 で merge 済。\n\n本 entry の判断原理(コスト = トークン × 時間軸方向の波及、予防コスト < 修復コスト)は不変で、圧縮の具体軸が1本追加された形。brake 1 の存在自体は維持されており(全廃は #1563 で明示的に却下)、`## 結論` の「N=1 に下げては / 安いモデルに降ろしては / skip しては」に対する抑止も生きている。\n\n詳細と降りたトレードオフ = [`brake1-single-round-cap`](https://github.com/Liplus-Project/liplus-language/wiki/brake1-single-round-cap)。\n" + } + ], + "schema_version": 1, + "source": { + "database": "github-rag-fts", + "doc_paths": [ + "current-architecture-as-concession", + "li-plus-long-term-vision-feedback-only", + "liplus-authorship-collaborative", + "liplus-design-intent-vs-current-limit", + "liplus-history-is-empirical", + "master-role-as-client-architect", + "master-verification-at-runtime-not-spec", + "milestone-subsystem-removal", + "parallel-subagent-eval-cost-acceptance" + ], + "per_type_limit": 9, + "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_dynamics_holdout.provenance.json b/tests/fixtures/d1_liplus_dynamics_holdout.provenance.json new file mode 100644 index 0000000..38f5cb0 --- /dev/null +++ b/tests/fixtures/d1_liplus_dynamics_holdout.provenance.json @@ -0,0 +1,84 @@ +{ + "acquired_at": "2026-08-01T14:27:43.514146Z", + "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": [], + "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": 134, + "edges_included": 11, + "edges_one_endpoint_missing": 10, + "fixture_redactions": 0, + "nodes_included": 9, + "provenance_redactions": 0, + "redactions": 0 + }, + "schema_version": 1, + "selection": { + "doc_paths": [ + "current-architecture-as-concession", + "li-plus-long-term-vision-feedback-only", + "liplus-authorship-collaborative", + "liplus-design-intent-vs-current-limit", + "liplus-history-is-empirical", + "master-role-as-client-architect", + "master-verification-at-runtime-not-spec", + "milestone-subsystem-removal", + "parallel-subagent-eval-cost-acceptance" + ], + "order": [ + "repo", + "type", + "doc_path", + "vector_id" + ], + "per_type_limit": 9 + }, + "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_dynamics_experiment.py b/tests/test_dynamics_experiment.py new file mode 100644 index 0000000..242c2d0 --- /dev/null +++ b/tests/test_dynamics_experiment.py @@ -0,0 +1,237 @@ +from __future__ import annotations + +import json +import unittest +from pathlib import Path + +from neuron_graph_rag.d1_fixture import read_fixture +from neuron_graph_rag.engine import EngineConfig, NeuronGraphRAG +from neuron_graph_rag.experiment import _select_development, read_manifest +from tools.acquire_d1_fixture import assert_connected + + +FIXTURES = Path(__file__).parent / "fixtures" +MANIFEST = FIXTURES / "d1_liplus_dynamics_experiment.manifest.json" +HOLDOUT = FIXTURES / "d1_liplus_dynamics_holdout.json" +HOLDOUT_GOLD = FIXTURES / "d1_liplus_dynamics_holdout.gold.json" +HOLDOUT_PROVENANCE = FIXTURES / "d1_liplus_dynamics_holdout.provenance.json" +DEVELOPMENT_RESULT = FIXTURES / "d1_liplus_dynamics_experiment.development.result.json" +HOLDOUT_RESULT = FIXTURES / "d1_liplus_dynamics_experiment.holdout.result.json" +DEVELOPMENT = FIXTURES / "d1_liplus_benchmark.json" + + +class DynamicsExperimentFreezeTest(unittest.TestCase): + def test_manifest_freezes_thirteen_variants_and_disjoint_holdout(self) -> None: + manifest = read_manifest(MANIFEST) + self.assertEqual(len(manifest["variants"]), 13) + self.assertLessEqual(len(manifest["variants"]), manifest["maximum_variants"]) + self.assertEqual( + {variant["family"] for variant in manifest["variants"]}, + { + "current_positive_additive", + "finite_activation_budget", + "lateral_inhibition", + "query_conditioned_transmission", + "recurrent_competition", + }, + ) + development = read_fixture(DEVELOPMENT) + holdout = read_fixture(HOLDOUT) + development_paths = { + node["metadata"]["doc_path"] for node in development["nodes"] + } + holdout_paths = {node["metadata"]["doc_path"] for node in holdout["nodes"]} + self.assertEqual(development_paths & holdout_paths, set()) + self.assertEqual(len(holdout["nodes"]), 9) + self.assertEqual(len(holdout["edges"]), 11) + assert_connected(holdout) + + def test_holdout_gold_is_balanced_and_auditable_without_searching_it(self) -> None: + gold = json.loads(HOLDOUT_GOLD.read_text(encoding="utf-8")) + counts = { + cohort: sum(case["cohort"] == cohort for case in gold["cases"]) + for cohort in ("direct_lookup", "relation", "negative_control") + } + self.assertEqual(counts, {cohort: 3 for cohort in counts}) + self.assertTrue( + all( + case["source_url"].startswith( + "https://github.com/Liplus-Project/liplus-language/wiki/" + ) + for case in gold["cases"] + ) + ) + node_ids = {node["node_id"] for node in read_fixture(HOLDOUT)["nodes"]} + self.assertTrue(all(case["expected_node_id"] in node_ids for case in gold["cases"])) + self.assertTrue( + all( + step["source_id"] in node_ids and step["target_id"] in node_ids + for case in gold["cases"] + for step in case.get("expected_path", []) + ) + ) + + def test_holdout_provenance_preserves_read_only_contract(self) -> None: + provenance = json.loads(HOLDOUT_PROVENANCE.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.assertFalse(any(evidence["changed_db"])) + self.assertTrue(provenance["source"]["schema_fingerprint"].startswith("sha256:")) + self.assertEqual(provenance["known_gaps"], []) + + +class DynamicsStrategyTest(unittest.TestCase): + def _trace(self, config: EngineConfig): + with NeuronGraphRAG(config=config) as engine: + engine.add_document("seed", "alpha starting evidence") + engine.add_document("target", "beta target evidence") + engine.add_document("distractor", "gamma unrelated evidence") + engine.add_edge("seed", "target", "supports") + engine.add_edge("seed", "distractor", "mentions") + return engine.search("alpha beta supports", limit=3, now=1_000.0) + + def test_every_frozen_strategy_is_deterministic_and_observable(self) -> None: + manifest = read_manifest(MANIFEST) + shared = { + key: value + for key, value in manifest["shared_config"].items() + if key != "limit" + } + for variant in manifest["variants"]: + values = dict(shared) + values["activation_strategy"] = variant["family"] + values.update(variant["parameters"]) + first = self._trace(EngineConfig(**values)) + second = self._trace(EngineConfig(**values)) + self.assertEqual( + [hit.node.node_id for hit in first.hits], + [hit.node.node_id for hit in second.hits], + variant["id"], + ) + self.assertEqual(first.diagnostics, second.diagnostics, variant["id"]) + self.assertEqual(first.diagnostics["strategy"], variant["family"]) + self.assertLessEqual( + first.diagnostics["expansions"], + EngineConfig(**values).max_propagation_expansions, + ) + + def test_current_strategy_retains_positive_additive_activation(self) -> None: + trace = self._trace( + EngineConfig( + seed_count=1, + max_hops=1, + hop_decay=0.7, + entry_weight=0.25, + graph_weight=0.75, + ) + ) + seed = next(hit for hit in trace.hits if hit.node.node_id == "seed") + target = next(hit for hit in trace.hits if hit.node.node_id == "target") + self.assertGreater(seed.graph_activation, 0.0) + self.assertGreater(target.graph_activation, 0.0) + self.assertEqual(trace.diagnostics["strategy"], "current_positive_additive") + + +class DevelopmentSelectionRuleTest(unittest.TestCase): + @staticmethod + def _variant( + variant_id: str, + relation: float, + negative: float, + direct: float = 1.0, + expansions: float = 10.0, + complexity: int = 1, + ) -> dict[str, object]: + return { + "id": variant_id, + "metrics": { + "cohorts": { + "direct_lookup": {"mean_reciprocal_rank": direct}, + "relation": {"mean_reciprocal_rank": relation}, + "negative_control": {"mean_reciprocal_rank": negative}, + } + }, + "diagnostics": {"mean_expansions": expansions}, + "structural_complexity": complexity, + } + + def test_selection_keeps_failed_and_dominated_variants(self) -> None: + variants = [ + self._variant("current", 0.4, 0.7, complexity=0), + self._variant("failed", 0.5, 0.6), + self._variant("dominated", 0.5, 0.7, expansions=12.0), + self._variant("winner", 0.6, 0.7, expansions=8.0), + ] + selection = _select_development(variants) # type: ignore[arg-type] + self.assertEqual(selection["selected_variant_id"], "winner") + self.assertEqual(variants[1]["pareto_status"], "failed_gate") + self.assertEqual(variants[2]["pareto_status"], "dominated") + self.assertEqual(variants[2]["dominated_by"], ["winner"]) + + def test_no_candidate_stops_before_holdout(self) -> None: + variants = [ + self._variant("current", 0.4, 0.7, complexity=0), + self._variant("tradeoff", 0.6, 0.6), + ] + selection = _select_development(variants) # type: ignore[arg-type] + self.assertEqual(selection["selected_variant_id"], "current") + self.assertEqual(selection["reason"], "no_variant_passed_candidate_gate") + + +class FrozenResultAuditTest(unittest.TestCase): + def test_development_result_preserves_every_variant_and_selection(self) -> None: + manifest = read_manifest(MANIFEST) + result = json.loads(DEVELOPMENT_RESULT.read_text(encoding="utf-8")) + self.assertEqual(result["stage"], "development") + self.assertEqual(result["variant_count"], 13) + self.assertEqual( + [variant["id"] for variant in result["variants"]], + [variant["id"] for variant in manifest["variants"]], + ) + self.assertEqual(result["selection"]["selected_variant_id"], "budget-025") + self.assertEqual( + result["selection"]["eligible_variant_ids"], + [ + "budget-025", + "budget-050", + "budget-100", + "query-floor-040", + "query-floor-060", + ], + ) + self.assertEqual( + sum(variant["candidate_gate_passed"] for variant in result["variants"]), + 5, + ) + self.assertEqual( + sum( + variant["pareto_status"] == "failed_gate" + for variant in result["variants"] + ), + 8, + ) + + def test_holdout_result_records_single_open_and_rejects_regression(self) -> None: + result = json.loads(HOLDOUT_RESULT.read_text(encoding="utf-8")) + self.assertEqual(result["stage"], "holdout") + self.assertEqual(result["holdout_open_count"], 1) + self.assertEqual( + [variant["id"] for variant in result["variants"]], + ["current", "budget-025"], + ) + current, candidate = result["variants"] + self.assertLess( + candidate["metrics"]["cohorts"]["relation"]["mean_reciprocal_rank"], + current["metrics"]["cohorts"]["relation"]["mean_reciprocal_rank"], + ) + self.assertTrue(all(item["matched"] for item in candidate["explanations"])) + self.assertEqual(candidate["feedback"]["uncredited_edge_changes"], []) + self.assertEqual(candidate["feedback"]["non_target_rank_changes"], []) + self.assertFalse(result["decision"]["adopted"]) + self.assertFalse(result["decision"]["no_cohort_regression"]) + self.assertEqual(result["decision"]["default_variant_id"], "current") + + +if __name__ == "__main__": + unittest.main() diff --git a/tools/run_dynamics_experiment.py b/tools/run_dynamics_experiment.py new file mode 100644 index 0000000..22fc86d --- /dev/null +++ b/tools/run_dynamics_experiment.py @@ -0,0 +1,34 @@ +from __future__ import annotations + +import argparse +from pathlib import Path + +from neuron_graph_rag.experiment import run_development, run_holdout, write_result + + +def main() -> int: + parser = argparse.ArgumentParser( + description="Run a frozen neural dynamics experiment stage." + ) + parser.add_argument("stage", choices=("development", "holdout")) + parser.add_argument("--manifest", type=Path, required=True) + parser.add_argument("--development-result", type=Path) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + + if args.output.exists(): + raise SystemExit(f"Refusing to overwrite an observed result: {args.output}") + if args.stage == "development": + if args.development_result is not None: + raise SystemExit("--development-result is only valid for holdout") + result = run_development(args.manifest) + else: + if args.development_result is None: + raise SystemExit("holdout requires --development-result") + result = run_holdout(args.manifest, args.development_result) + write_result(args.output, result) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main())