symbolic_mutations / lineage_tracker.py
RFTSystems's picture
Update lineage_tracker.py
cb3c992 verified
# Author: Liam Grinstead
# Multi-generation lineage tracking with mutation provenance
from typing import Dict, List
LINEAGE: Dict[str, List[dict]] = {}
PARENT_OF: Dict[str, str] = {}
def register_lineage(parent_id: str, child_id: str, mutation_profile: dict):
entry = {
"child_id": child_id,
"tier": mutation_profile.get("tier_drift"),
"overlay": mutation_profile.get("collapse_torque"),
"operators": mutation_profile.get("symbolic_operators", []),
}
LINEAGE.setdefault(parent_id, []).append(entry)
PARENT_OF[child_id] = parent_id
def get_ancestors(agent_id: str) -> List[str]:
chain = []
cur = agent_id
while cur in PARENT_OF:
p = PARENT_OF[cur]
chain.append(p)
cur = p
return chain[::-1]
def get_descendants(agent_id: str, depth: int = 6) -> Dict[int, List[dict]]:
levels: Dict[int, List[dict]] = {}
frontier = [agent_id]
for d in range(1, depth + 1):
nxt = []
for node in frontier:
children = LINEAGE.get(node, [])
if children:
levels.setdefault(d, []).extend(children)
nxt.extend([c["child_id"] for c in children])
frontier = nxt
if not frontier:
break
return levels