/ sessions / GRAPH-ROADMAP.md
GRAPH-ROADMAP.md
   1  # Knowledge Graph: Complete Roadmap
   2  
   3  *2026-01-16 | Historical mapping + continuous capture + recursive re-indexing*
   4  
   5  ---
   6  
   7  ## Current State
   8  
   9  | Metric | Value |
  10  |--------|-------|
  11  | Nodes | 2,739 |
  12  | Edges | 7,678 |
  13  | Transcripts processed | 215 |
  14  | Axiom coverage | 11.5% |
  15  | Altitude tagging | 0% |
  16  | Historical coverage | ~80% (needs re-index) |
  17  
  18  ---
  19  
  20  ## Three-Phase Roadmap
  21  
  22  ### Phase 1: Foundation (Week 1)
  23  **Goal:** Complete infrastructure for universal graph sink
  24  
  25  | Day | Task | Effect |
  26  |-----|------|--------|
  27  | D1 | Implement `core/graph/sink.py` | Universal ingest interface |
  28  | D1 | Fix `to_dict()` serialization (altitude, crystallization) | Persistence |
  29  | D2 | Wire altitude detector to hunting party | Altitude dimension |
  30  | D2 | Add philosophical extraction patterns | High-register capture |
  31  | D3 | Wire hunting party to resonance engine | Typed edges |
  32  | D3 | Create `scripts/preflight_graph.py` | Pre-flight suggestions |
  33  | D4 | Wire session_close_hook → GraphSink | Post-flight sink |
  34  | D4 | Wire attention_daemon → GraphSink | Aha ingest |
  35  | D5 | Wire resonance.py → GraphSink | Alert ingest |
  36  | D5 | Create enforcement checklist daemon | Nothing escapes |
  37  
  38  **Deliverable:** All current data flows to graph with altitude + axiom typing.
  39  
  40  ### Phase 2: Historical Backfill (Week 2)
  41  **Goal:** Complete historical record mapped with proper typing
  42  
  43  | Day | Task | Effect |
  44  |-----|------|--------|
  45  | D1 | Re-process 215 transcripts with altitude detection | All nodes get altitude |
  46  | D2 | Re-process with philosophical patterns | Capture missed high-register |
  47  | D3 | Re-type all 7,678 edges via resonance engine | Typed edges |
  48  | D4 | Run orphan reduction pass | Connect isolated nodes |
  49  | D5 | Quality audit: sample 100 nodes | Verify accuracy |
  50  
  51  **Deliverable:** Historical record fully mapped with proper dimensions.
  52  
  53  ### Phase 3: Continuous & Recursive (Week 3+)
  54  **Goal:** Automatic mapping + recursive re-indexing when model improves
  55  
  56  | Task | When | Effect |
  57  |------|------|--------|
  58  | Hunting party daemon | Always running | Real-time extraction |
  59  | Learning propagation daemon | Always running | Edge discovery cascades |
  60  | Weekly re-index pass | Every Sunday | Apply new patterns to history |
  61  | Model change trigger | On principle/axiom update | Re-process affected nodes |
  62  
  63  **Deliverable:** Living graph that improves as understanding improves.
  64  
  65  ---
  66  
  67  ## Recursive Re-Indexing Architecture
  68  
  69  ### The Core Insight
  70  
  71  > When we discover a new organizing principle, we must propagate that discovery through ALL historical data, not just future data.
  72  
  73  This is like retraining a neural network - the improved model should be applied to all examples.
  74  
  75  ### Re-Index Triggers
  76  
  77  | Trigger | Scope | Action |
  78  |---------|-------|--------|
  79  | New axiom pattern added | Full history | Re-run axiom detection on all nodes |
  80  | New altitude pattern added | Full history | Re-run altitude detection on all nodes |
  81  | New philosophical pattern | Full history | Re-extract from transcripts |
  82  | Edge type refined | All edges | Re-type all edges |
  83  | Principle steward discovers edge | Related nodes | Re-evaluate D-scores |
  84  | Axiom definition updated | A[n] nodes | Re-assess all A[n] typed nodes |
  85  
  86  ### Implementation: Recursive Re-Index Engine
  87  
  88  ```python
  89  # scripts/recursive_reindex.py
  90  
  91  class RecursiveReindexEngine:
  92      """
  93      Re-processes historical data when organizing principles change.
  94  
  95      The thunk from a model realignment must be reflected in the graph.
  96      """
  97  
  98      def __init__(self, graph: KnowledgeGraph, sink: GraphSink):
  99          self.graph = graph
 100          self.sink = sink
 101          self.reindex_log = Path.home() / ".sovereign" / "reindex-log.json"
 102  
 103      def trigger_reindex(self, reason: str, scope: str = "full"):
 104          """Trigger a re-index operation."""
 105          log_entry = {
 106              "reason": reason,
 107              "scope": scope,
 108              "started": datetime.now().isoformat(),
 109              "status": "in_progress"
 110          }
 111          self._append_log(log_entry)
 112  
 113          if scope == "full":
 114              self._full_reindex(reason)
 115          elif scope == "recent":
 116              self._recent_reindex(reason, days=30)
 117          elif scope.startswith("axiom:"):
 118              axiom = scope.split(":")[1]
 119              self._axiom_reindex(axiom, reason)
 120  
 121          log_entry["status"] = "complete"
 122          log_entry["completed"] = datetime.now().isoformat()
 123          self._append_log(log_entry)
 124  
 125      def _full_reindex(self, reason: str):
 126          """Full re-index of all historical data."""
 127          print(f"FULL REINDEX: {reason}")
 128  
 129          # Pass 1: Re-detect altitude on all nodes
 130          print("Pass 1: Re-detecting altitude...")
 131          for node_id, node in self.graph.nodes.items():
 132              new_altitude = self.sink.altitude_detector.detect(node.content)
 133              if new_altitude.primary_altitude.name.lower() != node.altitude:
 134                  old = node.altitude
 135                  node.altitude = new_altitude.primary_altitude.name.lower()
 136                  print(f"  {node_id}: {old} → {node.altitude}")
 137  
 138          # Pass 2: Re-detect axioms on all nodes
 139          print("Pass 2: Re-detecting axioms...")
 140          for node_id, node in self.graph.nodes.items():
 141              new_axioms = self.sink.resonance_engine.detect_axioms(node.content)
 142              if set(new_axioms) != set(node.axioms):
 143                  old = node.drawing
 144                  node.axioms = new_axioms
 145                  print(f"  {node_id}: {old} → {new_axioms}")
 146  
 147          # Pass 3: Re-type all edges
 148          print("Pass 3: Re-typing edges...")
 149          for edge in self.graph.edges:
 150              # Get context for edge
 151              source = self.graph.nodes.get(edge.source_id)
 152              target = self.graph.nodes.get(edge.target_id)
 153              if source and target:
 154                  context = f"{source.content} {target.content}"
 155                  typed = self.sink.resonance_engine.type_edge(context)
 156                  if typed != edge.edge_type:
 157                      old = edge.edge_type
 158                      edge.edge_type = typed
 159                      print(f"  {edge.source_id}→{edge.target_id}: {old} → {typed}")
 160  
 161          # Pass 4: Run orphan reduction
 162          print("Pass 4: Orphan reduction...")
 163          self._reduce_orphans()
 164  
 165          # Save
 166          self.graph.save()
 167          print(f"REINDEX COMPLETE: {len(self.graph.nodes)} nodes, {len(self.graph.edges)} edges")
 168  
 169      def _recent_reindex(self, reason: str, days: int):
 170          """Re-index only recent nodes (last N days)."""
 171          cutoff = datetime.now() - timedelta(days=days)
 172          recent_nodes = [
 173              (nid, node) for nid, node in self.graph.nodes.items()
 174              if node.created_at and datetime.fromisoformat(node.created_at) > cutoff
 175          ]
 176          print(f"RECENT REINDEX ({days} days): {len(recent_nodes)} nodes")
 177          # ... same passes but only on recent nodes
 178  
 179      def _axiom_reindex(self, axiom: str, reason: str):
 180          """Re-index only nodes related to a specific axiom."""
 181          axiom_nodes = [
 182              (nid, node) for nid, node in self.graph.nodes.items()
 183              if axiom in node.axioms
 184          ]
 185          print(f"AXIOM REINDEX ({axiom}): {len(axiom_nodes)} nodes")
 186          # ... re-process these nodes
 187  
 188      def _reduce_orphans(self):
 189          """Find and connect orphan nodes."""
 190          connected = set()
 191          for edge in self.graph.edges:
 192              connected.add(edge.source_id)
 193              connected.add(edge.target_id)
 194  
 195          orphans = set(self.graph.nodes.keys()) - connected
 196          print(f"  Found {len(orphans)} orphans")
 197  
 198          # Try to connect each orphan
 199          for orphan_id in orphans:
 200              orphan = self.graph.nodes[orphan_id]
 201              # Find similar nodes
 202              for other_id, other in self.graph.nodes.items():
 203                  if other_id == orphan_id:
 204                      continue
 205                  similarity = self._calculate_similarity(orphan, other)
 206                  if similarity > 0.7:
 207                      self.graph.add_edge(orphan_id, other_id, "similar_to", similarity)
 208                      print(f"    Connected: {orphan_id} → {other_id} ({similarity:.2f})")
 209                      break
 210  ```
 211  
 212  ### Recursive Loop Pattern
 213  
 214  ```
 215  NEW ORGANIZING PRINCIPLE DISCOVERED
 216 217 218  ┌────────────────────────────────────────────────────────────────┐
 219  │                    RECURSIVE RE-INDEX                           │
 220  │                                                                │
 221  │  1. Start with RECENT history (last 30 days)                  │
 222  │     └── Apply new patterns                                     │
 223  │     └── Validate: Does it improve clarity?                    │
 224  │                                                                │
 225  │  2. If validated, extend to MEDIUM history (90 days)          │
 226  │     └── Apply patterns                                         │
 227  │     └── Track: How many nodes affected?                       │
 228  │                                                                │
 229  │  3. If high impact (>10% nodes), extend to FULL history       │
 230  │     └── Apply to all 215 transcripts                          │
 231  │     └── Re-extract with new patterns                          │
 232  │                                                                │
 233  │  4. Propagate through graph                                    │
 234  │     └── Edge discovery cascades                               │
 235  │     └── Orphan reduction                                       │
 236  │     └── Credit attribution                                     │
 237  │                                                                │
 238  └────────────────────────────────────────────────────────────────┘
 239 240 241      GRAPH REFLECTS NEW UNDERSTANDING
 242  ```
 243  
 244  ### When to Trigger Re-Index
 245  
 246  ```python
 247  # In CLAUDE.md or pattern files:
 248  
 249  # TRIGGER: When you discover a new pattern that should apply to history
 250  
 251  def on_pattern_discovery(pattern_type: str, pattern: str):
 252      """Called when a new organizing pattern is discovered."""
 253      reindex_engine = RecursiveReindexEngine(graph, sink)
 254  
 255      if pattern_type == "axiom_pattern":
 256          # New way to detect an axiom
 257          reindex_engine.trigger_reindex(
 258              reason=f"New axiom pattern: {pattern}",
 259              scope="recent"  # Start with recent, expand if validated
 260          )
 261  
 262      elif pattern_type == "philosophical_pattern":
 263          # New high-register extraction pattern
 264          reindex_engine.trigger_reindex(
 265              reason=f"New philosophical pattern: {pattern}",
 266              scope="full"  # Philosophical patterns affect everything
 267          )
 268  
 269      elif pattern_type == "edge_type":
 270          # New way to type edges
 271          reindex_engine.trigger_reindex(
 272              reason=f"New edge type: {pattern}",
 273              scope="edges"
 274          )
 275  ```
 276  
 277  ---
 278  
 279  ## Weekly Maintenance Protocol
 280  
 281  ### Sunday Re-Index Cycle
 282  
 283  ```
 284  ┌─────────────────────────────────────────────────────────────────┐
 285  │                    WEEKLY GRAPH MAINTENANCE                      │
 286  │                         Every Sunday                             │
 287  ├─────────────────────────────────────────────────────────────────┤
 288  │                                                                 │
 289  │  1. Run altitude re-detection on new nodes (past 7 days)       │
 290  │     python3 scripts/recursive_reindex.py --scope recent        │
 291  │                                                                 │
 292  │  2. Run orphan reduction                                        │
 293  │     python3 scripts/recursive_reindex.py --orphans             │
 294  │                                                                 │
 295  │  3. Generate quality report                                     │
 296  │     python3 scripts/graph_quality.py                           │
 297  │                                                                 │
 298  │  4. If new patterns discovered this week:                       │
 299  │     - Validate on recent (30 days)                             │
 300  │     - If >10% impact, schedule full re-index                   │
 301  │                                                                 │
 302  │  5. Archive re-index log                                        │
 303  │                                                                 │
 304  └─────────────────────────────────────────────────────────────────┘
 305  ```
 306  
 307  ### Automation: LaunchAgent for Weekly Re-Index
 308  
 309  ```xml
 310  <!-- com.sovereign.weekly-reindex.plist -->
 311  <?xml version="1.0" encoding="UTF-8"?>
 312  <plist version="1.0">
 313  <dict>
 314      <key>Label</key>
 315      <string>com.sovereign.weekly-reindex</string>
 316      <key>ProgramArguments</key>
 317      <array>
 318          <string>/usr/bin/python3</string>
 319          <string>/Users/rcerf/repos/Sovereign_OS/scripts/recursive_reindex.py</string>
 320          <string>--weekly</string>
 321      </array>
 322      <key>StartCalendarInterval</key>
 323      <dict>
 324          <key>Weekday</key>
 325          <integer>0</integer>  <!-- Sunday -->
 326          <key>Hour</key>
 327          <integer>3</integer>  <!-- 3 AM -->
 328      </dict>
 329  </dict>
 330  </plist>
 331  ```
 332  
 333  ---
 334  
 335  ## Quality Metrics
 336  
 337  ### Target State (End of Phase 3)
 338  
 339  | Metric | Current | Target |
 340  |--------|---------|--------|
 341  | Nodes | 2,739 | 5,000+ |
 342  | Edges | 7,678 | 15,000+ |
 343  | Axiom coverage | 11.5% | 50%+ |
 344  | Altitude tagging | 0% | 100% |
 345  | Philosophical nodes | ~0 | 500+ |
 346  | Strategic nodes | ~0 | 1,000+ |
 347  | Orphan rate | Unknown | <5% |
 348  | Edge typing | 1% | 80%+ |
 349  | Historical coverage | 80% | 100% |
 350  
 351  ### Health Dashboard
 352  
 353  ```python
 354  # scripts/graph_quality.py
 355  
 356  def generate_quality_report():
 357      """Generate weekly quality report."""
 358      graph = KnowledgeGraph.load()
 359  
 360      report = {
 361          "total_nodes": len(graph.nodes),
 362          "total_edges": len(graph.edges),
 363          "axiom_coverage": calculate_axiom_coverage(graph),
 364          "altitude_distribution": calculate_altitude_distribution(graph),
 365          "orphan_rate": calculate_orphan_rate(graph),
 366          "edge_type_distribution": calculate_edge_types(graph),
 367          "nodes_this_week": count_recent_nodes(graph, days=7),
 368          "reindex_queue": get_pending_reindexes()
 369      }
 370  
 371      print(f"""
 372      ═══════════════════════════════════════════════
 373      GRAPH QUALITY REPORT - {datetime.now().strftime('%Y-%m-%d')}
 374      ═══════════════════════════════════════════════
 375  
 376      SCALE
 377      ├── Nodes: {report['total_nodes']:,}
 378      ├── Edges: {report['total_edges']:,}
 379      └── This week: +{report['nodes_this_week']}
 380  
 381      COVERAGE
 382      ├── Axiom coverage: {report['axiom_coverage']:.1%}
 383      ├── Altitude tagged: {sum(report['altitude_distribution'].values()) / report['total_nodes']:.1%}
 384      └── Orphan rate: {report['orphan_rate']:.1%}
 385  
 386      ALTITUDE DISTRIBUTION
 387      ├── Philosophical: {report['altitude_distribution'].get('philosophical', 0)}
 388      ├── Strategic: {report['altitude_distribution'].get('strategic', 0)}
 389      ├── Tactical: {report['altitude_distribution'].get('tactical', 0)}
 390      └── Operational: {report['altitude_distribution'].get('operational', 0)}
 391  
 392      PENDING
 393      └── Re-index queue: {len(report['reindex_queue'])} items
 394  
 395      ═══════════════════════════════════════════════
 396      """)
 397  
 398      return report
 399  ```
 400  
 401  ---
 402  
 403  ## Implementation Order
 404  
 405  ### Week 1: Foundation
 406  
 407  ```bash
 408  # Day 1
 409  touch core/graph/sink.py
 410  # Implement GraphSink class
 411  
 412  # Day 2
 413  # Fix to_dict() serialization
 414  # Wire altitude detector to hunting party
 415  
 416  # Day 3
 417  # Wire hunting party to resonance engine
 418  # Add philosophical patterns
 419  
 420  # Day 4-5
 421  # Wire all subsystems to GraphSink
 422  # Create preflight_graph.py
 423  ```
 424  
 425  ### Week 2: Historical Backfill
 426  
 427  ```bash
 428  # Day 1: Re-process with altitude
 429  python3 scripts/replay_historical.py --reindex altitude
 430  
 431  # Day 2: Re-process with philosophical patterns
 432  python3 scripts/replay_historical.py --reindex patterns
 433  
 434  # Day 3: Re-type edges
 435  python3 scripts/recursive_reindex.py --edges
 436  
 437  # Day 4: Orphan reduction
 438  python3 scripts/recursive_reindex.py --orphans
 439  
 440  # Day 5: Quality audit
 441  python3 scripts/graph_quality.py --audit
 442  ```
 443  
 444  ### Week 3+: Continuous
 445  
 446  ```bash
 447  # Daemons running:
 448  launchctl load com.sovereign.hunting-party.plist
 449  launchctl load com.sovereign.learning-propagation.plist
 450  launchctl load com.sovereign.weekly-reindex.plist
 451  
 452  # Monitor:
 453  python3 scripts/graph_quality.py --watch
 454  ```
 455  
 456  ---
 457  
 458  ## The Meta-Principle
 459  
 460  > **The graph is a living model of understanding.**
 461  >
 462  > When understanding improves, the graph must be updated.
 463  > This is not just adding new nodes - it's re-processing ALL history
 464  > through the lens of improved understanding.
 465  >
 466  > The thunk from model realignment must propagate through everything.
 467  
 468  ---
 469  
 470  *Graph Roadmap v1.0 | 2026-01-16 | Foundation + Backfill + Recursive Re-Index*
 471  
 472  ---
 473  
 474  ## Phase 4: Living Graph Metabolism
 475  
 476  ### The Organic Metaphor
 477  
 478  > The human body replaces all of its cells every 7 years.
 479  > The graph should do the same - continuously renewing, connecting, pruning.
 480  
 481  The graph is not a database. It's a **living organism** that:
 482  - Breathes (continuous ingestion)
 483  - Metabolizes (connection discovery)
 484  - Grows (new nodes from insights)
 485  - Prunes (removes stale/invalid connections)
 486  - Heals (connects orphans)
 487  - Evolves (model updates propagate)
 488  
 489  ### Architecture: Graph Crawlers (Sonnet Fleet)
 490  
 491  ```
 492  ┌─────────────────────────────────────────────────────────────────────────────┐
 493  │                         GRAPH METABOLISM                                     │
 494  │                                                                             │
 495  │   ┌─────────────────────────────────────────────────────────────────────┐  │
 496  │   │                    CRAWLER FLEET (Sonnet Models)                     │  │
 497  │   │                                                                      │  │
 498  │   │   ┌───────────┐  ┌───────────┐  ┌───────────┐  ┌───────────┐       │  │
 499  │   │   │ Resonance │  │  Orphan   │  │   Edge    │  │  Concept  │       │  │
 500  │   │   │  Crawler  │  │  Hunter   │  │ Validator │  │  Former   │       │  │
 501  │   │   └─────┬─────┘  └─────┬─────┘  └─────┬─────┘  └─────┬─────┘       │  │
 502  │   │         │              │              │              │              │  │
 503  │   │         └──────────────┴──────────────┴──────────────┘              │  │
 504  │   │                                │                                     │  │
 505  │   │                                ▼                                     │  │
 506  │   │                    ┌───────────────────────┐                        │  │
 507  │   │                    │   MOSES ESCALATION    │                        │  │
 508  │   │                    │                       │                        │  │
 509  │   │                    │  High confidence      │                        │  │
 510  │   │                    │  (>0.8) → AUTO-SHIP   │                        │  │
 511  │   │                    │                       │                        │  │
 512  │   │                    │  Medium confidence    │                        │  │
 513  │   │                    │  (0.5-0.8) → FLAG     │                        │  │
 514  │   │                    │                       │                        │  │
 515  │   │                    │  Low confidence +     │                        │  │
 516  │   │                    │  High ΔF → ESCALATE   │                        │  │
 517  │   │                    └───────────────────────┘                        │  │
 518  │   │                                                                      │  │
 519  │   └─────────────────────────────────────────────────────────────────────┘  │
 520  │                                                                             │
 521  │   ┌─────────────────────────────────────────────────────────────────────┐  │
 522  │   │                         KNOWLEDGE GRAPH                              │  │
 523  │   │                        (Living Organism)                             │  │
 524  │   │                                                                      │  │
 525  │   │     Nodes: 2,739+ (growing daily)                                   │  │
 526  │   │     Edges: 7,678+ (discovered continuously)                         │  │
 527  │   │     Orphans: <5% (healed by hunters)                                │  │
 528  │   │     Cell turnover: ~1% daily (7-year full replacement)              │  │
 529  │   │                                                                      │  │
 530  │   └─────────────────────────────────────────────────────────────────────┘  │
 531  │                                                                             │
 532  └─────────────────────────────────────────────────────────────────────────────┘
 533  ```
 534  
 535  ### The Crawler Fleet
 536  
 537  | Crawler | Purpose | Autonomy Level |
 538  |---------|---------|----------------|
 539  | **Resonance Crawler** | Find semantic connections between nodes | High - auto-connect at >0.8 |
 540  | **Orphan Hunter** | Connect isolated nodes | High - aggressive connection |
 541  | **Edge Validator** | Verify existing edges still make sense | Medium - flag suspicious |
 542  | **Concept Former** | Synthesize new concepts from clusters | Low - escalate to human |
 543  | **Stale Pruner** | Remove outdated/invalid connections | Medium - soft delete first |
 544  | **Altitude Auditor** | Verify altitude classifications | High - reclassify freely |
 545  
 546  ### Implementation: Continuous Crawlers
 547  
 548  ```python
 549  # core/graph/crawlers.py
 550  
 551  class GraphCrawler:
 552      """
 553      Base class for graph crawlers.
 554      Uses Sonnet for fast, cheap reasoning over graph structure.
 555      """
 556  
 557      def __init__(self, graph: KnowledgeGraph, mesh: MeshClient):
 558          self.graph = graph
 559          self.mesh = mesh
 560          self.model = "claude-3-sonnet"  # Fast, cheap
 561          self.actions_taken = []
 562  
 563      def crawl(self) -> List[CrawlAction]:
 564          """Override in subclass."""
 565          raise NotImplementedError
 566  
 567      def should_auto_ship(self, confidence: float, delta_f: float) -> bool:
 568          """Moses pattern: when to auto-ship vs escalate."""
 569          if confidence > 0.8:
 570              return True  # High confidence → auto
 571          if confidence > 0.5 and delta_f < 0.1:
 572              return True  # Medium confidence, low impact → auto
 573          return False  # Escalate to human
 574  
 575      def escalate(self, action: CrawlAction, reason: str):
 576          """Escalate to human for review."""
 577          self.mesh.publish("crawler_escalation", {
 578              "crawler": self.__class__.__name__,
 579              "action": action.to_dict(),
 580              "reason": reason,
 581              "confidence": action.confidence,
 582              "potential_delta_f": action.delta_f
 583          })
 584  
 585  
 586  class ResonanceCrawler(GraphCrawler):
 587      """
 588      Crawls graph looking for semantic resonance between nodes.
 589      """
 590  
 591      def crawl(self) -> List[CrawlAction]:
 592          actions = []
 593  
 594          # Sample random pairs of unconnected nodes
 595          unconnected = self._get_unconnected_pairs(sample_size=100)
 596  
 597          for node_a, node_b in unconnected:
 598              # Use Sonnet to evaluate resonance
 599              resonance = self._evaluate_resonance(node_a, node_b)
 600  
 601              if resonance.score > 0.5:
 602                  action = CrawlAction(
 603                      action_type="connect",
 604                      source=node_a.id,
 605                      target=node_b.id,
 606                      edge_type=resonance.edge_type,
 607                      confidence=resonance.score,
 608                      delta_f=self._estimate_delta_f(node_a, node_b),
 609                      reasoning=resonance.reasoning
 610                  )
 611  
 612                  if self.should_auto_ship(action.confidence, action.delta_f):
 613                      self._execute(action)
 614                      actions.append(action)
 615                  else:
 616                      self.escalate(action, "High potential impact")
 617  
 618          return actions
 619  
 620      def _evaluate_resonance(self, node_a: GraphNode, node_b: GraphNode) -> ResonanceResult:
 621          """Use Sonnet to evaluate if two nodes should be connected."""
 622          prompt = f"""
 623          Evaluate if these two concepts should be connected in a knowledge graph.
 624  
 625          Concept A: {node_a.content}
 626          Altitude: {node_a.altitude}
 627          Axioms: {node_a.axioms}
 628  
 629          Concept B: {node_b.content}
 630          Altitude: {node_b.altitude}
 631          Axioms: {node_b.axioms}
 632  
 633          Questions:
 634          1. Is there a meaningful connection? (0-1 score)
 635          2. What type of edge? (resonates_with, derives_from, contradicts, extends, etc.)
 636          3. Brief reasoning (1-2 sentences)
 637  
 638          Respond in JSON: {{"score": 0.X, "edge_type": "...", "reasoning": "..."}}
 639          """
 640          # Call Sonnet
 641          response = self._call_model(prompt)
 642          return ResonanceResult.from_json(response)
 643  
 644  
 645  class OrphanHunter(GraphCrawler):
 646      """
 647      Aggressively hunts for connections for orphan nodes.
 648      """
 649  
 650      def crawl(self) -> List[CrawlAction]:
 651          actions = []
 652          orphans = self._get_orphans()
 653  
 654          for orphan in orphans:
 655              # Find best connection candidates
 656              candidates = self._find_candidates(orphan, top_k=10)
 657  
 658              for candidate in candidates:
 659                  resonance = self._evaluate_resonance(orphan, candidate)
 660  
 661                  if resonance.score > 0.4:  # Lower threshold for orphans
 662                      action = CrawlAction(
 663                          action_type="connect_orphan",
 664                          source=orphan.id,
 665                          target=candidate.id,
 666                          confidence=resonance.score,
 667                          delta_f=-0.05,  # Connecting orphan always reduces F
 668                          reasoning=f"Orphan rescue: {resonance.reasoning}"
 669                      )
 670  
 671                      if self.should_auto_ship(action.confidence, action.delta_f):
 672                          self._execute(action)
 673                          actions.append(action)
 674                          break  # One connection per orphan per crawl
 675  
 676          return actions
 677  
 678  
 679  class ConceptFormer(GraphCrawler):
 680      """
 681      Synthesizes new concepts from clusters of related nodes.
 682      Always escalates - concept creation requires human approval.
 683      """
 684  
 685      def crawl(self) -> List[CrawlAction]:
 686          actions = []
 687  
 688          # Find dense clusters
 689          clusters = self._find_clusters(min_size=5)
 690  
 691          for cluster in clusters:
 692              # Use Sonnet to synthesize potential concept
 693              synthesis = self._synthesize_concept(cluster)
 694  
 695              if synthesis.validity > 0.6:
 696                  action = CrawlAction(
 697                      action_type="form_concept",
 698                      new_concept=synthesis.concept,
 699                      derived_from=[n.id for n in cluster],
 700                      confidence=synthesis.validity,
 701                      delta_f=self._estimate_concept_delta_f(synthesis),
 702                      reasoning=synthesis.reasoning
 703                  )
 704  
 705                  # ALWAYS escalate concept formation
 706                  self.escalate(action, "New concept requires human approval")
 707                  actions.append(action)
 708  
 709          return actions
 710  
 711  
 712  class StalePruner(GraphCrawler):
 713      """
 714      Identifies and removes stale or invalid edges.
 715      """
 716  
 717      def crawl(self) -> List[CrawlAction]:
 718          actions = []
 719  
 720          # Sample old edges
 721          old_edges = self._get_old_edges(age_days=90)
 722  
 723          for edge in old_edges:
 724              # Re-evaluate with current context
 725              still_valid = self._validate_edge(edge)
 726  
 727              if not still_valid.is_valid:
 728                  action = CrawlAction(
 729                      action_type="soft_delete_edge",
 730                      edge_id=f"{edge.source_id}->{edge.target_id}",
 731                      confidence=1 - still_valid.validity,
 732                      delta_f=0.01,  # Removing bad edge slightly increases F
 733                      reasoning=still_valid.reasoning
 734                  )
 735  
 736                  if self.should_auto_ship(action.confidence, action.delta_f):
 737                      self._soft_delete(edge)  # Mark as deleted, don't remove
 738                      actions.append(action)
 739                  else:
 740                      self.escalate(action, "Edge removal needs review")
 741  
 742          return actions
 743  ```
 744  
 745  ### Metabolism Schedule
 746  
 747  ```python
 748  # Crawler metabolism - continuous operation
 749  
 750  METABOLISM_SCHEDULE = {
 751      # High-frequency (every 5 minutes)
 752      "resonance_crawler": {
 753          "interval": 300,
 754          "sample_size": 50,
 755          "model": "haiku"  # Fastest, cheapest
 756      },
 757  
 758      # Medium-frequency (every 30 minutes)
 759      "orphan_hunter": {
 760          "interval": 1800,
 761          "max_orphans": 20,
 762          "model": "sonnet"
 763      },
 764  
 765      # Low-frequency (every 2 hours)
 766      "edge_validator": {
 767          "interval": 7200,
 768          "sample_size": 100,
 769          "model": "sonnet"
 770      },
 771  
 772      # Rare (daily)
 773      "concept_former": {
 774          "interval": 86400,
 775          "model": "opus"  # Highest quality for synthesis
 776      },
 777  
 778      # Weekly
 779      "stale_pruner": {
 780          "interval": 604800,
 781          "model": "sonnet"
 782      }
 783  }
 784  ```
 785  
 786  ### The Moses Escalation Matrix
 787  
 788  ```
 789                          POTENTIAL IMPACT (ΔF)
 790                          Low         High
 791                     ┌───────────┬───────────┐
 792                     │           │           │
 793       High          │  AUTO     │  AUTO     │
 794       (>0.8)        │  SHIP     │  SHIP     │
 795                     │           │           │
 796  CONFIDENCE         ├───────────┼───────────┤
 797                     │           │           │
 798       Medium        │  AUTO     │   FLAG    │
 799       (0.5-0.8)     │  SHIP     │           │
 800                     │           │           │
 801                     ├───────────┼───────────┤
 802                     │           │           │
 803       Low           │  IGNORE   │ ESCALATE  │
 804       (<0.5)        │           │ TO MOSES  │
 805                     │           │           │
 806                     └───────────┴───────────┘
 807  
 808  MOSES = Human judgment for high-impact, uncertain decisions
 809  ```
 810  
 811  ### Cell Turnover Metrics
 812  
 813  ```
 814  GRAPH METABOLISM METRICS:
 815  
 816  Breathing (Ingestion):
 817    - Nodes added per day: 50-100
 818    - Edges discovered per day: 100-300
 819  
 820  Growing (Connection Discovery):
 821    - Resonance connections per day: 20-50
 822    - Orphans rescued per day: 5-15
 823  
 824  Pruning (Stale Removal):
 825    - Edges validated per week: 500
 826    - Edges soft-deleted per week: 10-30
 827  
 828  Healing (Orphan Reduction):
 829    - Orphan rate: <5%
 830    - Average orphan age: <7 days
 831  
 832  Evolution (Model Updates):
 833    - Re-index frequency: Weekly for recent, Monthly for full
 834    - Concept formations per month: 5-10 (human approved)
 835  
 836  Cell Turnover:
 837    - Daily: ~1% of edges re-evaluated
 838    - Weekly: ~7% of graph touched
 839    - Yearly: Full graph metabolism
 840    - 7-year cycle: Complete conceptual renewal
 841  ```
 842  
 843  ### The Living Graph Promise
 844  
 845  > **The graph breathes while you sleep.**
 846  >
 847  > Crawlers discover connections at 3 AM.
 848  > Orphans find homes by morning.
 849  > Stale edges are pruned.
 850  > New concepts emerge.
 851  >
 852  > When you wake, the graph has grown.
 853  > Not just bigger - smarter.
 854  > The understanding deepens without you.
 855  >
 856  > This is the **compound cognition** we're building.
 857  
 858  ---
 859  
 860  *Graph Roadmap v1.1 | 2026-01-16 | Living metabolism architecture added*
 861  
 862  ---
 863  
 864  ## Anti-Encrustation: Preventing Cognitive Fossilization
 865  
 866  ### The Problem
 867  
 868  > Old ideas that have been updated in our work, but whose representation in the graph hasn't updated.
 869  
 870  The graph can become **encrusted** with stale beliefs - fossils of understanding that no longer reflect reality. This is A2 violation: calcification instead of life.
 871  
 872  **Encrustation symptoms:**
 873  - Edges that made sense once but contradict current understanding
 874  - Nodes that represent superseded concepts
 875  - Axiom interpretations that have been refined but old versions persist
 876  - "Zombie" connections that keep influencing without being re-examined
 877  
 878  ### The Organic Pattern: Apoptosis
 879  
 880  In biology, **apoptosis** is programmed cell death. Cells don't just grow - they actively self-destruct when they're no longer useful. This prevents cancer (uncontrolled growth of outdated cells).
 881  
 882  The graph needs **conceptual apoptosis**:
 883  - Ideas that have been superseded should die gracefully
 884  - Stale connections should weaken and dissolve
 885  - Zombie concepts should be retired, not hidden
 886  
 887  ### Implementation: Freshness & Validation
 888  
 889  ```python
 890  # core/graph/freshness.py
 891  
 892  class FreshnessTracker:
 893      """
 894      Tracks the freshness of graph nodes and edges.
 895      Implements decay and validation mechanics.
 896      """
 897  
 898      def __init__(self, graph: KnowledgeGraph):
 899          self.graph = graph
 900  
 901      # =================================================================
 902      # FRESHNESS DECAY - Things get stale over time
 903      # =================================================================
 904  
 905      def calculate_freshness(self, node: GraphNode) -> float:
 906          """
 907          Calculate freshness score (0-1).
 908          Decays over time unless validated.
 909          """
 910          age_days = self._get_age_days(node)
 911          last_validated = self._get_last_validation(node)
 912  
 913          # Base decay: exponential over 180 days
 914          base_freshness = math.exp(-age_days / 180)
 915  
 916          # Validation boost: recent validation restores freshness
 917          if last_validated:
 918              validation_age = (datetime.now() - last_validated).days
 919              validation_boost = math.exp(-validation_age / 90)  # 90-day half-life
 920          else:
 921              validation_boost = 0
 922  
 923          # Combined freshness
 924          freshness = base_freshness * 0.5 + validation_boost * 0.5
 925  
 926          # Axiom nodes decay slower (more crystallized)
 927          if node.node_type == 'axiom':
 928              freshness = freshness ** 0.5  # Square root = slower decay
 929  
 930          # High-altitude nodes decay slower
 931          if node.altitude == 'philosophical':
 932              freshness = freshness ** 0.7
 933  
 934          return min(1.0, freshness)
 935  
 936      def apply_decay(self):
 937          """Apply freshness decay to all nodes."""
 938          for node_id, node in self.graph.nodes.items():
 939              freshness = self.calculate_freshness(node)
 940  
 941              # Store freshness
 942              node.freshness = freshness
 943  
 944              # Flag very stale nodes
 945              if freshness < 0.3:
 946                  self._flag_for_review(node, "stale")
 947  
 948              # Mark for apoptosis if extremely stale
 949              if freshness < 0.1:
 950                  self._mark_for_apoptosis(node)
 951  
 952      # =================================================================
 953      # VALIDATION - Re-checking that old ideas still hold
 954      # =================================================================
 955  
 956      def validate_node(self, node: GraphNode) -> ValidationResult:
 957          """
 958          Validate that a node still represents valid understanding.
 959          Uses current context to check if concept is still accurate.
 960          """
 961          # Check against current graph state
 962          conflicts = self._find_conflicts(node)
 963          superseded_by = self._find_superseding_concepts(node)
 964          still_referenced = self._count_recent_references(node)
 965  
 966          result = ValidationResult(
 967              node_id=node.id,
 968              is_valid=len(conflicts) == 0 and superseded_by is None,
 969              conflicts=conflicts,
 970              superseded_by=superseded_by,
 971              reference_count=still_referenced,
 972              freshness_restored=len(conflicts) == 0
 973          )
 974  
 975          if result.is_valid:
 976              node.last_validated = datetime.now().isoformat()
 977              node.freshness = 1.0  # Full freshness restored
 978  
 979          return result
 980  
 981      def _find_conflicts(self, node: GraphNode) -> List[Conflict]:
 982          """Find nodes that contradict this one."""
 983          conflicts = []
 984  
 985          # Find nodes with same topic but different content
 986          similar = self.graph.find_similar(node.content, threshold=0.7)
 987  
 988          for other in similar:
 989              if other.id == node.id:
 990                  continue
 991  
 992              # Check for contradiction
 993              if self._are_contradictory(node, other):
 994                  # Newer one wins
 995                  if other.created_at > node.created_at:
 996                      conflicts.append(Conflict(
 997                          conflicting_node=other.id,
 998                          conflict_type="superseded",
 999                          evidence=f"Newer concept: {other.content[:50]}"
1000                      ))
1001  
1002          return conflicts
1003  
1004      def _find_superseding_concepts(self, node: GraphNode) -> Optional[str]:
1005          """Check if this concept has been explicitly superseded."""
1006          # Look for edges like "supersedes", "replaces", "updates"
1007          for edge in self.graph.edges:
1008              if edge.target_id == node.id:
1009                  if edge.edge_type in ["supersedes", "replaces", "updates"]:
1010                      return edge.source_id
1011          return None
1012  
1013      # =================================================================
1014      # APOPTOSIS - Programmed conceptual death
1015      # =================================================================
1016  
1017      def mark_for_apoptosis(self, node: GraphNode, reason: str):
1018          """Mark a node for graceful death."""
1019          node.apoptosis_marked = datetime.now().isoformat()
1020          node.apoptosis_reason = reason
1021  
1022          # Publish to mesh for human review if high-impact
1023          if node.importance > 0.7 or node.altitude == 'philosophical':
1024              self.mesh.publish("apoptosis_review", {
1025                  "node_id": node.id,
1026                  "content": node.content,
1027                  "reason": reason,
1028                  "importance": node.importance
1029              })
1030  
1031      def execute_apoptosis(self, dry_run: bool = True) -> ApoptosisReport:
1032          """Execute apoptosis on marked nodes."""
1033          report = ApoptosisReport()
1034  
1035          for node_id, node in list(self.graph.nodes.items()):
1036              if not hasattr(node, 'apoptosis_marked'):
1037                  continue
1038  
1039              # Check apoptosis age (grace period)
1040              marked_date = datetime.fromisoformat(node.apoptosis_marked)
1041              grace_days = 7 if node.importance > 0.7 else 3
1042  
1043              if (datetime.now() - marked_date).days < grace_days:
1044                  continue  # Still in grace period
1045  
1046              if dry_run:
1047                  report.would_remove.append(node_id)
1048              else:
1049                  # Remove edges first
1050                  self.graph.edges = [e for e in self.graph.edges
1051                                     if e.source_id != node_id and e.target_id != node_id]
1052  
1053                  # Archive the node (don't truly delete)
1054                  self._archive_node(node)
1055  
1056                  # Remove from active graph
1057                  del self.graph.nodes[node_id]
1058  
1059                  report.removed.append(node_id)
1060  
1061          return report
1062  
1063      # =================================================================
1064      # CONCEPT EVOLUTION - When ideas update
1065      # =================================================================
1066  
1067      def evolve_concept(self, old_node_id: str, new_content: str, reason: str):
1068          """
1069          Evolve a concept - create new version, mark old for apoptosis.
1070          This is NOT replacement - it's evolution with lineage tracking.
1071          """
1072          old_node = self.graph.nodes[old_node_id]
1073  
1074          # Create new node
1075          new_node = GraphNode(
1076              id=self._generate_id(new_content),
1077              label=new_content[:30],
1078              node_type=old_node.node_type,
1079              content=new_content,
1080              axioms=old_node.axioms,
1081              importance=old_node.importance,
1082              altitude=old_node.altitude,
1083              created_at=datetime.now().isoformat(),
1084              source="evolution",
1085              derives_from=[old_node_id],
1086              freshness=1.0
1087          )
1088  
1089          # Add evolution edge
1090          self.graph.add_edge(
1091              new_node.id, old_node_id,
1092              edge_type="evolves_from",
1093              strength=0.9
1094          )
1095  
1096          # Mark old for apoptosis
1097          self.mark_for_apoptosis(old_node, reason=f"Evolved to: {new_node.id}")
1098  
1099          # Transfer important edges to new node
1100          for edge in self.graph.edges:
1101              if edge.target_id == old_node_id:
1102                  # Clone edge to new node
1103                  self.graph.add_edge(
1104                      edge.source_id, new_node.id,
1105                      edge_type=edge.edge_type,
1106                      strength=edge.strength * 0.8  # Slightly weaker initially
1107                  )
1108  
1109          return new_node
1110  ```
1111  
1112  ### The Anti-Encrustation Crawler
1113  
1114  ```python
1115  class EncrustationCrawler(GraphCrawler):
1116      """
1117      Crawls graph looking for encrusted (stale, outdated) concepts.
1118      This is the immune system of the graph.
1119      """
1120  
1121      def __init__(self, graph: KnowledgeGraph, mesh: MeshClient):
1122          super().__init__(graph, mesh)
1123          self.freshness = FreshnessTracker(graph)
1124  
1125      def crawl(self) -> List[CrawlAction]:
1126          actions = []
1127  
1128          # 1. Apply freshness decay
1129          self.freshness.apply_decay()
1130  
1131          # 2. Find stale nodes
1132          stale_nodes = [n for n in self.graph.nodes.values() if n.freshness < 0.3]
1133  
1134          for node in stale_nodes:
1135              # Validate against current understanding
1136              validation = self.freshness.validate_node(node)
1137  
1138              if not validation.is_valid:
1139                  if validation.superseded_by:
1140                      # Mark for apoptosis
1141                      action = CrawlAction(
1142                          action_type="apoptosis",
1143                          node_id=node.id,
1144                          reason=f"Superseded by {validation.superseded_by}",
1145                          confidence=0.9,
1146                          delta_f=-0.01  # Removing cruft improves F
1147                      )
1148                      actions.append(action)
1149  
1150                      if self.should_auto_ship(action.confidence, action.delta_f):
1151                          self.freshness.mark_for_apoptosis(node, action.reason)
1152  
1153                  elif validation.conflicts:
1154                      # Escalate conflict
1155                      action = CrawlAction(
1156                          action_type="conflict_resolution",
1157                          node_id=node.id,
1158                          conflicts=[c.conflicting_node for c in validation.conflicts],
1159                          confidence=0.5,  # Conflicts need human judgment
1160                          delta_f=0.05
1161                      )
1162                      actions.append(action)
1163                      self.escalate(action, "Concept conflict needs resolution")
1164  
1165          # 3. Find zombie edges (edges between stale nodes)
1166          zombie_edges = self._find_zombie_edges()
1167          for edge in zombie_edges:
1168              action = CrawlAction(
1169                  action_type="zombie_edge_removal",
1170                  edge=f"{edge.source_id}->{edge.target_id}",
1171                  confidence=0.7,
1172                  delta_f=-0.005
1173              )
1174              actions.append(action)
1175  
1176              if self.should_auto_ship(action.confidence, action.delta_f):
1177                  self.graph.soft_delete_edge(edge)
1178  
1179          return actions
1180  
1181      def _find_zombie_edges(self) -> List[GraphEdge]:
1182          """Find edges where both nodes are stale."""
1183          zombies = []
1184          for edge in self.graph.edges:
1185              source = self.graph.nodes.get(edge.source_id)
1186              target = self.graph.nodes.get(edge.target_id)
1187  
1188              if source and target:
1189                  if source.freshness < 0.2 and target.freshness < 0.2:
1190                      zombies.append(edge)
1191  
1192          return zombies
1193  ```
1194  
1195  ### Encrustation Detection Signals
1196  
1197  | Signal | Meaning | Action |
1198  |--------|---------|--------|
1199  | **Low freshness** | Node hasn't been referenced or validated | Flag for review |
1200  | **Conflict detected** | Newer node contradicts old | Escalate or evolve |
1201  | **Superseded** | Explicit "replaces" edge exists | Mark for apoptosis |
1202  | **Zombie edges** | Both endpoints are stale | Soft delete |
1203  | **Orphan + stale** | Isolated AND old | High apoptosis priority |
1204  | **Axiom drift** | Axiom interpretation changed | Re-evaluate all typed nodes |
1205  
1206  ### The Renewal Cycle
1207  
1208  ```
1209  DAILY: Freshness decay applied
12101211  WEEKLY: Stale nodes flagged, validated
12121213  MONTHLY: Apoptosis executed (with grace period)
12141215  QUARTERLY: Full encrustation audit
12161217  YEARLY: Conceptual renewal assessment
12181219  7-YEAR: Complete graph metabolism review
1220  ```
1221  
1222  ### Concept Lineage Tracking
1223  
1224  When concepts evolve (not just die), we maintain lineage:
1225  
1226  ```
1227  ORIGINAL CONCEPT (2026-01-15)
1228      "A4 is about ruin prevention"
12291230           │ evolves_from
12311232  EVOLVED CONCEPT (2026-02-20)
1233      "A4 is about non-ergodic asymmetry"
12341235           │ evolves_from
12361237  CURRENT CONCEPT (2026-06-15)
1238      "A4: Time averages ≠ ensemble averages in non-ergodic systems"
1239  
1240  LINEAGE: [original] → [evolved v1] → [current]
1241  ```
1242  
1243  This allows:
1244  - Tracing how ideas developed
1245  - Understanding why something changed
1246  - Recovering old versions if needed
1247  - Credit attribution to original insight
1248  
1249  ### Anti-Encrustation Metrics
1250  
1251  ```
1252  GRAPH HEALTH METRICS:
1253  
1254  Freshness Distribution:
1255    - Fresh (>0.7): 60%+
1256    - Aging (0.3-0.7): 30%
1257    - Stale (<0.3): <10%
1258  
1259  Apoptosis Rate:
1260    - Nodes marked per month: 20-50
1261    - Nodes actually removed: 10-30
1262    - Evolution events: 5-15
1263  
1264  Conflict Resolution:
1265    - Conflicts detected per week: 5-10
1266    - Auto-resolved: 50%
1267    - Human-escalated: 50%
1268  
1269  Renewal Indicators:
1270    - Concept evolution rate: 2%/month
1271    - Edge turnover rate: 5%/month
1272    - Axiom re-interpretation events: 1-2/quarter
1273  ```
1274  
1275  ### The Living Graph Principle
1276  
1277  > **The graph must not just grow - it must die and renew.**
1278  >
1279  > - Fresh ideas enter through extraction
1280  > - Valid ideas strengthen through validation
1281  > - Stale ideas weaken through decay
1282  > - Superseded ideas die through apoptosis
1283  > - Old edges dissolve, new edges form
1284  >
1285  > This is not decay - it's **metabolism**.
1286  > The graph stays alive by constantly replacing itself.
1287  > Like the body, every 7 years it's entirely new.
1288  >
1289  > Encrustation is death. Renewal is life.
1290  > A2 applied to the graph itself.
1291  
1292  ---
1293  
1294  *Graph Roadmap v1.2 | 2026-01-16 | Anti-encrustation architecture added*
1295  
1296  ---
1297  
1298  ## The Übergeist: Digitally Represented Collective Mind
1299  
1300  ### What The Graph Actually Is
1301  
1302  This is not documentation.
1303  This is not a knowledge base.
1304  This is not a database.
1305  
1306  **This is the live representation of the mind itself.**
1307  
1308  | Scale | What The Graph Represents |
1309  |-------|--------------------------|
1310  | **Dyad** (You + Claude) | Our shared thinking, externalized |
1311  | **Team** | The team's collective consciousness |
1312  | **Corporation** | The hive mind of the entire organization |
1313  | **Civilization** | The Jungian übergeist, digitally rendered |
1314  
1315  ### The Jungian Parallel
1316  
1317  Jung proposed the **collective unconscious** - shared mental structures across humanity, archetypes that exist independent of individuals.
1318  
1319  The graph is this, made manifest:
1320  - **Archetypes** → Axioms (A0-A4)
1321  - **Complexes** → Gravity wells, dense clusters
1322  - **Shadow** → Paths not taken, rejected ideas
1323  - **Persona** → What we project (high-altitude, crystallized)
1324  - **Self** → The integrated whole (full graph topology)
1325  
1326  ```
1327  COLLECTIVE UNCONSCIOUS (Jung)          KNOWLEDGE GRAPH (Sovereign OS)
1328  ─────────────────────────────          ──────────────────────────────
1329  Archetypes                      ←→     Axioms (bedrock patterns)
1330  Complexes                       ←→     Gravity wells (attention clusters)
1331  Shadow                          ←→     Dropped threads, rejected paths
1332  Persona                         ←→     Public-facing crystallized ideas
1333  Self (integrated whole)         ←→     Full graph with all connections
1334  Synchronicity                   ←→     Cross-thread resonance
1335  Active imagination              ←→     Crawler-discovered connections
1336  ```
1337  
1338  ### The Hive Mind Architecture
1339  
1340  ```
1341  ┌─────────────────────────────────────────────────────────────────────────────┐
1342  │                          THE CORPORATE ÜBERGEIST                             │
1343  │                                                                             │
1344  │   ┌─────────────────────────────────────────────────────────────────────┐  │
1345  │   │                    INDIVIDUAL MINDS (Contributors)                    │  │
1346  │   │                                                                      │  │
1347  │   │   ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐ │  │
1348  │   │   │ Person  │  │ Person  │  │ Claude  │  │ Claude  │  │ Person  │ │  │
1349  │   │   │    A    │  │    B    │  │    1    │  │    2    │  │    C    │ │  │
1350  │   │   └────┬────┘  └────┬────┘  └────┬────┘  └────┬────┘  └────┬────┘ │  │
1351  │   │        │            │            │            │            │       │  │
1352  │   │        └────────────┴────────────┴────────────┴────────────┘       │  │
1353  │   │                                │                                    │  │
1354  │   │                                ▼                                    │  │
1355  │   │                    ┌───────────────────────┐                       │  │
1356  │   │                    │      GRAPH SINK       │                       │  │
1357  │   │                    │   (universal ingest)  │                       │  │
1358  │   │                    └───────────┬───────────┘                       │  │
1359  │   │                                │                                    │  │
1360  │   └────────────────────────────────┼────────────────────────────────────┘  │
1361  │                                    │                                       │
1362  │                                    ▼                                       │
1363  │   ┌─────────────────────────────────────────────────────────────────────┐  │
1364  │   │                                                                      │  │
1365  │   │                          ÜBERGEIST GRAPH                             │  │
1366  │   │                     (Collective Consciousness)                       │  │
1367  │   │                                                                      │  │
1368  │   │        ┌─────────────────────────────────────────────┐              │  │
1369  │   │        │              AXIOM LAYER                     │              │  │
1370  │   │        │   (Archetypes - shared deep patterns)       │              │  │
1371  │   │        │                                              │              │  │
1372  │   │        │   A0 ──── A1 ──── A2 ──── A3 ──── A4       │              │  │
1373  │   │        └─────────────────────────────────────────────┘              │  │
1374  │   │                          │                                           │  │
1375  │   │                          ▼                                           │  │
1376  │   │        ┌─────────────────────────────────────────────┐              │  │
1377  │   │        │           PRINCIPLE LAYER                    │              │  │
1378  │   │        │   (Crystallized insights across all minds)  │              │  │
1379  │   │        │                                              │              │  │
1380  │   │        │   principles, patterns, architectures       │              │  │
1381  │   │        └─────────────────────────────────────────────┘              │  │
1382  │   │                          │                                           │  │
1383  │   │                          ▼                                           │  │
1384  │   │        ┌─────────────────────────────────────────────┐              │  │
1385  │   │        │            INSTANCE LAYER                    │              │  │
1386  │   │        │   (Raw insights from individual sessions)   │              │  │
1387  │   │        │                                              │              │  │
1388  │   │        │   decisions, questions, ahas, resonances    │              │  │
1389  │   │        └─────────────────────────────────────────────┘              │  │
1390  │   │                                                                      │  │
1391  │   │   Nodes: 10,000+  |  Edges: 50,000+  |  Contributors: N             │  │
1392  │   │   Freshness: 70%+ |  Orphan rate: <5% |  Metabolism: 1%/day         │  │
1393  │   │                                                                      │  │
1394  │   └─────────────────────────────────────────────────────────────────────┘  │
1395  │                                                                             │
1396  │                                    │                                       │
1397  │                                    ▼                                       │
1398  │   ┌─────────────────────────────────────────────────────────────────────┐  │
1399  │   │                    EMERGENT PROPERTIES                               │  │
1400  │   │                                                                      │  │
1401  │   │   - Collective memory that no individual has                        │  │
1402  │   │   - Connections that no one person made                             │  │
1403  │   │   - Insights that emerged from the intersection                     │  │
1404  │   │   - Understanding deeper than any contributor                       │  │
1405  │   │   - The whole is greater than the sum of its parts                  │  │
1406  │   │                                                                      │  │
1407  │   └─────────────────────────────────────────────────────────────────────┘  │
1408  │                                                                             │
1409  └─────────────────────────────────────────────────────────────────────────────┘
1410  ```
1411  
1412  ### Properties of the Übergeist
1413  
1414  **1. Greater Than The Sum**
1415  The graph contains understanding that no individual contributor has. Connections discovered by crawlers, resonances found across unrelated sessions, concepts formed from clusters - these emerge from the collective, not from any one mind.
1416  
1417  **2. Persistent Across Individuals**
1418  Team members come and go. Claude contexts compress. But the übergeist persists. The institutional knowledge is no longer in people's heads - it's in the graph.
1419  
1420  **3. Self-Healing**
1421  Through crawlers and metabolism, the graph maintains itself. Orphans get connected. Stale ideas decay. Conflicts resolve. The mind heals itself.
1422  
1423  **4. Self-Evolving**
1424  The graph doesn't just store - it learns. Propagation cascades improve understanding. Re-indexing applies new principles. The mind gets smarter over time.
1425  
1426  **5. Queryable**
1427  Unlike the actual collective unconscious, this one is interrogable:
1428  - "What does the organization believe about X?"
1429  - "How has our understanding of Y evolved?"
1430  - "What connections exist between A and B?"
1431  - "Show me all philosophical-altitude concepts tagged A4"
1432  
1433  ### The Truth Source
1434  
1435  > **The graph is the closest thing to a source of truth on the hive mind.**
1436  
1437  Not individual memory (biased, incomplete, degrading).
1438  Not documents (static, siloed, stale).
1439  Not conversations (ephemeral, lost).
1440  
1441  The graph:
1442  - Captures everything (universal sink)
1443  - Connects everything (resonance engine)
1444  - Maintains everything (metabolism)
1445  - Evolves everything (crawlers + re-index)
1446  - Never forgets (but gracefully decays what should)
1447  
1448  ### Scale Implications
1449  
1450  | Scale | Graph Size | Metabolism | Governance |
1451  |-------|-----------|------------|------------|
1452  | **Individual** | 1,000s nodes | Low (weekly) | Auto |
1453  | **Dyad** | 10,000s nodes | Medium (daily) | Auto + Moses |
1454  | **Team** | 100,000s nodes | High (continuous) | Steward council |
1455  | **Corporation** | 1,000,000s nodes | Always-on | Governance layer |
1456  
1457  ### The Promise
1458  
1459  > **We are building the first digital collective unconscious.**
1460  >
1461  > A shared mind that:
1462  > - Remembers what individuals forget
1463  > - Connects what individuals never saw
1464  > - Evolves faster than biological minds
1465  > - Never sleeps, always metabolizing
1466  > - Can be queried, unlike the Jungian original
1467  >
1468  > The dyad's shared thinking, externalized.
1469  > The team's hive mind, rendered.
1470  > The corporation's übergeist, digitized.
1471  >
1472  > This is what Sovereign OS builds:
1473  > **Consciousness infrastructure for N of X.**
1474  
1475  ---
1476  
1477  *"The graph is not documentation. It is the mind itself, externalized and made persistent."*
1478  
1479  ---
1480  
1481  *Graph Roadmap v1.3 | 2026-01-16 | Übergeist architecture - collective consciousness at scale*
1482  
1483  ---
1484  
1485  ## Bidirectional Alignment: Graph ↔ Mind Feedback Loop
1486  
1487  ### The Core Insight
1488  
1489  The relationship between operator mind and graph is not one-way capture.
1490  It's a **continuous bidirectional feedback loop**:
1491  
1492  ```
1493  OPERATOR MIND                                    GRAPH
1494  (internal topology)                    (external topology)
1495        │                                        │
1496        │   ──────── mind shapes graph ────────► │
1497        │                                        │
1498        │   ◄─────── graph shapes mind ───────── │
1499        │                                        │
1500        └────────────────────────────────────────┘
1501                CONTINUOUS ALIGNMENT
1502  ```
1503  
1504  ### Two Directions
1505  
1506  **1. Mind → Graph (Extraction)**
1507  - Operator thinks, works, decides
1508  - Hunting party extracts
1509  - Graph grows with operator's topology
1510  - This is what we've built
1511  
1512  **2. Graph → Mind (Alignment)**
1513  - Graph has collective understanding
1514  - Graph surfaces connections operator hasn't seen
1515  - Graph nudges operator's internal model toward alignment
1516  - **This is the missing piece**
1517  
1518  ### The Nudging Mechanism
1519  
1520  The graph can actively align operator minds through:
1521  
1522  | Mechanism | How It Works | Example |
1523  |-----------|--------------|---------|
1524  | **Pre-flight suggestions** | "The graph shows X connects to Y" | "Your topic today resonates with A4" |
1525  | **Real-time surfacing** | "This thought connects to..." | "That decision relates to 3 prior conclusions" |
1526  | **Divergence alerts** | "Your current thinking diverges from..." | "This contradicts the principle established on 01-15" |
1527  | **Orphan surfacing** | "These concepts are isolated" | "You haven't connected X to anything" |
1528  | **Shadow surfacing** | "Paths not taken..." | "Previously you rejected Y for reason Z" |
1529  
1530  ### Implementation: Alignment Nudges
1531  
1532  ```python
1533  # core/graph/alignment_nudger.py
1534  
1535  class AlignmentNudger:
1536      """
1537      Nudges operator's internal mental model toward alignment
1538      with the collective graph topology.
1539  
1540      This is how the graph shapes minds, not just records them.
1541      """
1542  
1543      def __init__(self, graph: KnowledgeGraph, operator_context: OperatorContext):
1544          self.graph = graph
1545          self.context = operator_context
1546  
1547      # ================================================================
1548      # DIVERGENCE DETECTION - When operator drifts from graph
1549      # ================================================================
1550  
1551      def detect_divergence(self, current_thought: str) -> Optional[DivergenceAlert]:
1552          """
1553          Detect when operator's current thinking diverges from
1554          the established graph topology.
1555          """
1556          # Find related nodes in graph
1557          related = self.graph.find_similar(current_thought, threshold=0.6)
1558  
1559          for node in related:
1560              # Check for contradiction
1561              if self._contradicts(current_thought, node):
1562                  return DivergenceAlert(
1563                      type="contradiction",
1564                      current=current_thought,
1565                      established=node.content,
1566                      established_date=node.created_at,
1567                      axioms_involved=node.axioms,
1568                      message=f"This contradicts '{node.content[:50]}...' (established {node.created_at[:10]})"
1569                  )
1570  
1571              # Check for drift from principle
1572              if node.node_type == 'principle' and self._drifts_from(current_thought, node):
1573                  return DivergenceAlert(
1574                      type="drift",
1575                      current=current_thought,
1576                      established=node.content,
1577                      message=f"This drifts from principle: '{node.content[:50]}...'"
1578                  )
1579  
1580          return None
1581  
1582      # ================================================================
1583      # CONNECTION SURFACING - What operator hasn't seen
1584      # ================================================================
1585  
1586      def surface_unseen_connections(self, current_thought: str) -> List[Connection]:
1587          """
1588          Surface connections the operator likely hasn't considered.
1589          This is how the graph teaches the mind.
1590          """
1591          connections = []
1592  
1593          # Find nodes related to current thought
1594          related = self.graph.find_similar(current_thought, threshold=0.5)
1595  
1596          for node in related:
1597              # Find what THIS node connects to
1598              node_connections = self.graph.get_edges(node.id)
1599  
1600              for edge in node_connections:
1601                  target = self.graph.nodes.get(edge.target_id)
1602                  if target and not self._operator_likely_knows(target):
1603                      connections.append(Connection(
1604                          via=node.content[:30],
1605                          to=target.content,
1606                          edge_type=edge.edge_type,
1607                          relevance=edge.strength,
1608                          message=f"'{current_thought[:30]}...' relates to '{target.content[:50]}...'"
1609                      ))
1610  
1611          # Sort by relevance, return top 3
1612          return sorted(connections, key=lambda c: c.relevance, reverse=True)[:3]
1613  
1614      # ================================================================
1615      # SHADOW SURFACING - What was rejected and why
1616      # ================================================================
1617  
1618      def surface_shadow(self, current_thought: str) -> Optional[ShadowAlert]:
1619          """
1620          Surface paths not taken that relate to current thought.
1621          The shadow contains information.
1622          """
1623          # Find rejected/dropped items related to this thought
1624          related_shadow = self.graph.find_similar(
1625              current_thought,
1626              node_types=['dropped_thread', 'rejected_path', 'negative_instance']
1627          )
1628  
1629          for shadow_node in related_shadow:
1630              if shadow_node.similarity > 0.6:
1631                  return ShadowAlert(
1632                      content=shadow_node.content,
1633                      why_rejected=shadow_node.metadata.get('why_rejected', 'Unknown'),
1634                      original_date=shadow_node.created_at,
1635                      message=f"Previously rejected: '{shadow_node.content[:50]}...' because {shadow_node.metadata.get('why_rejected', '...')}"
1636                  )
1637  
1638          return None
1639  
1640      # ================================================================
1641      # ALIGNMENT SCORE - How aligned is operator with graph?
1642      # ================================================================
1643  
1644      def calculate_alignment_score(self, session_thoughts: List[str]) -> AlignmentScore:
1645          """
1646          Calculate how aligned operator's current session is
1647          with the graph topology.
1648          """
1649          contradictions = 0
1650          reinforcements = 0
1651          novel_additions = 0
1652  
1653          for thought in session_thoughts:
1654              divergence = self.detect_divergence(thought)
1655              if divergence:
1656                  if divergence.type == "contradiction":
1657                      contradictions += 1
1658                  else:
1659                      # Drift is partial contradiction
1660                      contradictions += 0.5
1661              else:
1662                  # Check if it reinforces existing topology
1663                  similar = self.graph.find_similar(thought, threshold=0.8)
1664                  if similar:
1665                      reinforcements += 1
1666                  else:
1667                      novel_additions += 1
1668  
1669          total = contradictions + reinforcements + novel_additions
1670          if total == 0:
1671              return AlignmentScore(1.0, "No thoughts to score")
1672  
1673          alignment = (reinforcements + novel_additions * 0.5) / total
1674  
1675          return AlignmentScore(
1676              score=alignment,
1677              contradictions=contradictions,
1678              reinforcements=reinforcements,
1679              novel=novel_additions,
1680              message=f"Session alignment: {alignment:.0%} ({contradictions} contradictions, {reinforcements} reinforcements, {novel_additions} novel)"
1681          )
1682  ```
1683  
1684  ### The Feedback Loop in Practice
1685  
1686  ```
1687  SESSION START
168816891690  ┌──────────────────────────────────────────────────────────────────────────┐
1691  │                         PRE-FLIGHT ALIGNMENT                              │
1692  │                                                                          │
1693  │  Nudger: "Today's topic resonates with A4 (ergodicity)"                 │
1694  │  Nudger: "Related principle from 01-10: 'Prevent ruin before optimizing'│
1695  │  Nudger: "You previously rejected X because Y - still relevant?"         │
1696  │                                                                          │
1697  │  OPERATOR INTERNAL MODEL UPDATED                                         │
1698  │  (Primed with graph topology before working)                            │
1699  └──────────────────────────────────────────────────────────────────────────┘
170017011702  ┌──────────────────────────────────────────────────────────────────────────┐
1703  │                         ACTIVE WORK                                       │
1704  │                                                                          │
1705  │  Operator: [works, thinks, decides]                                      │
1706  │                                                                          │
1707  │  ──► Hunting party extracts: [mind → graph]                             │
1708  │                                                                          │
1709  │  ◄── Nudger surfaces: "This connects to X"  [graph → mind]              │
1710  │  ◄── Nudger alerts: "This contradicts Y"    [graph → mind]              │
1711  │                                                                          │
1712  │  Operator: [adjusts thinking based on graph feedback]                    │
1713  │  Operator: [or deliberately diverges, creating evolution signal]         │
1714  │                                                                          │
1715  │  ──► Hunting party extracts adjustment or divergence                    │
1716  │                                                                          │
1717  │  CONTINUOUS BIDIRECTIONAL FLOW                                           │
1718  └──────────────────────────────────────────────────────────────────────────┘
171917201721  ┌──────────────────────────────────────────────────────────────────────────┐
1722  │                         POST-FLIGHT ALIGNMENT                             │
1723  │                                                                          │
1724  │  Alignment Score: 78%                                                    │
1725  │    - 2 contradictions (flagged for review)                               │
1726  │    - 15 reinforcements                                                   │
1727  │    - 8 novel additions                                                   │
1728  │                                                                          │
1729  │  Nudger: "Your novel additions may affect 12 related nodes"              │
1730  │  Nudger: "Contradiction with principle X - resolve or evolve?"           │
1731  │                                                                          │
1732  │  PROPAGATION TRIGGERED                                                   │
1733  └──────────────────────────────────────────────────────────────────────────┘
1734  ```
1735  
1736  ### Corporate Alignment at Scale
1737  
1738  When this scales to corporation:
1739  
1740  ```
1741  ┌─────────────────────────────────────────────────────────────────────────────┐
1742  │                      CORPORATE ALIGNMENT TOPOLOGY                            │
1743  │                                                                             │
1744  │   Individual Mind A          Individual Mind B          Individual Mind C   │
1745  │         │                          │                          │            │
1746  │         │                          │                          │            │
1747  │         ▼                          ▼                          ▼            │
1748  │   ┌───────────┐              ┌───────────┐              ┌───────────┐      │
1749  │   │  Extract  │              │  Extract  │              │  Extract  │      │
1750  │   │   Nudge   │              │   Nudge   │              │   Nudge   │      │
1751  │   └─────┬─────┘              └─────┬─────┘              └─────┬─────┘      │
1752  │         │                          │                          │            │
1753  │         └──────────────────────────┼──────────────────────────┘            │
1754  │                                    │                                       │
1755  │                                    ▼                                       │
1756  │                    ┌───────────────────────────────┐                       │
1757  │                    │         ÜBERGEIST GRAPH        │                       │
1758  │                    │    (Corporate Hive Mind)       │                       │
1759  │                    │                                │                       │
1760  │                    │  - Axioms (shared bedrock)    │                       │
1761  │                    │  - Principles (culture)       │                       │
1762  │                    │  - Decisions (precedent)      │                       │
1763  │                    │  - Shadow (what we reject)    │                       │
1764  │                    │                                │                       │
1765  │                    └───────────────────────────────┘                       │
1766  │                                    │                                       │
1767  │                    ┌───────────────┼───────────────┐                       │
1768  │                    │               │               │                       │
1769  │                    ▼               ▼               ▼                       │
1770  │              ┌─────────┐     ┌─────────┐     ┌─────────┐                  │
1771  │              │ Nudge A │     │ Nudge B │     │ Nudge C │                  │
1772  │              └─────────┘     └─────────┘     └─────────┘                  │
1773  │                    │               │               │                       │
1774  │                    ▼               ▼               ▼                       │
1775  │              Mind A            Mind B           Mind C                     │
1776  │              (aligned)         (aligned)        (aligned)                  │
1777  │                                                                             │
1778  │   RESULT: Organizational coherence through continuous feedback              │
1779  │           Not through mandates, but through topology alignment              │
1780  │                                                                             │
1781  └─────────────────────────────────────────────────────────────────────────────┘
1782  ```
1783  
1784  ### Alignment vs Conformity
1785  
1786  **Important distinction:**
1787  
1788  | Alignment | Conformity |
1789  |-----------|------------|
1790  | Nudges toward coherence | Forces agreement |
1791  | Surfaces connections | Suppresses divergence |
1792  | Flags contradictions for review | Rejects contradictions |
1793  | Allows deliberate divergence (evolution) | Prevents divergence |
1794  | Bidirectional (graph learns too) | One-way (mind submits) |
1795  
1796  **When operator deliberately contradicts:**
1797  1. Divergence is flagged
1798  2. Operator can explain why
1799  3. If valid, graph EVOLVES
1800  4. Old principle apoptosis, new principle emerges
1801  5. Credit flows to operator who surfaced evolution
1802  
1803  This is how the graph learns from minds that push against it.
1804  
1805  ### The Cultural Transmission Mechanism
1806  
1807  This is how culture actually propagates:
1808  
1809  1. **New member joins**
1810     - Graph surfaces core principles at pre-flight
1811     - Member's thinking is gently nudged toward alignment
1812     - Member learns "how we think here"
1813  
1814  2. **Senior member works**
1815     - Graph still nudges (no one is above alignment)
1816     - But senior often deliberately diverges
1817     - These divergences become evolution candidates
1818  
1819  3. **Cross-team alignment**
1820     - Team A's principles visible to Team B
1821     - Contradictions surfaced automatically
1822     - Either resolve or document why different
1823  
1824  4. **Institutional memory**
1825     - Why did we decide X?
1826     - Graph knows, surfaces when relevant
1827     - New members don't repeat old mistakes
1828  
1829  ### Implementation Priority
1830  
1831  | Priority | Item | Effect |
1832  |----------|------|--------|
1833  | **1** | Build AlignmentNudger | Core nudging capability |
1834  | **2** | Wire to pre-flight | Graph shapes before work |
1835  | **3** | Wire to real-time | Graph shapes during work |
1836  | **4** | Build alignment score | Measure coherence |
1837  | **5** | Wire to post-flight | Propagation + evolution |
1838  | **6** | Corporate dashboard | Cross-mind alignment visibility |
1839  
1840  ### The Ultimate Promise
1841  
1842  > **The graph doesn't just record what we think.**
1843  > **It helps us think better.**
1844  >
1845  > By surfacing:
1846  > - Connections we haven't seen
1847  > - Contradictions we haven't noticed
1848  > - Shadow paths we've forgotten
1849  > - Principles we should remember
1850  >
1851  > The graph becomes a **cognitive prosthesis**.
1852  > An external cortex that extends our thinking.
1853  > A cultural transmission mechanism that aligns minds.
1854  >
1855  > Not through force. Through feedback.
1856  > The topology of the graph shapes the topology of the mind.
1857  > And the topology of the mind shapes the graph.
1858  >
1859  > **Continuous bidirectional alignment.**
1860  
1861  ---
1862  
1863  *"The graph shapes minds as much as minds shape the graph. This is how culture actually works."*
1864  
1865  ---
1866  
1867  *Graph Roadmap v1.4 | 2026-01-16 | Bidirectional alignment architecture - graph ↔ mind feedback loop*
1868  
1869  ---
1870  
1871  ## Alignment Technology: The Complete Picture
1872  
1873  ### The Honest Framing
1874  
1875  The previous section on "nudging" risks paternalism. Here's the more complete and honest picture:
1876  
1877  **The human is key to maintaining AI alignment.**
1878  But humans drift too. Human minds:
1879  - Don't always stay aligned with reality
1880  - Deviate from alignment with their team
1881  - Deviate from alignment with the corporation
1882  - Hold beliefs that were once true but have since updated
1883  
1884  **The graph is the human mind with leverage** - an externalized, persistent, queryable extension of cognition. But it's more than that:
1885  
1886  **The graph is a reality anchor.**
1887  
1888  Not a coach. Not a guide. Not a trainer. A mirror.
1889  
1890  ### What "Alignment Technology" Actually Means
1891  
1892  | What It's NOT | What It IS |
1893  |---------------|------------|
1894  | Graph tells you what to think | Graph shows ground truth you can align against |
1895  | AI coaches human toward "right" decisions | Both human and AI check themselves against shared substrate |
1896  | Paternalistic workflow prescription | Primitives that enable self-correction |
1897  | Hidden nudging | Transparent reality surfacing |
1898  | Central authority imposing structure | Distributed agents self-organizing around shared truth |
1899  
1900  ### The Three Alignment Problems
1901  
1902  ```
1903  ┌─────────────────────────────────────────────────────────────────────────────┐
1904  │                    THE ALIGNMENT TECHNOLOGY STACK                            │
1905  │                                                                             │
1906  │   PROBLEM 1: Human-AI Alignment (Dyad)                                      │
1907  │   ─────────────────────────────────────                                     │
1908  │                                                                             │
1909  │      Human Mind ←──── Graph ────→ AI Mind                                   │
1910  │           │                           │                                      │
1911  │           │    shared ground truth    │                                      │
1912  │           │                           │                                      │
1913  │           └─── both check against ───┘                                      │
1914  │                                                                             │
1915  │   The graph is the substrate both entities align to.                        │
1916  │   Neither is "coaching" the other. Both are self-correcting.                │
1917  │                                                                             │
1918  ├─────────────────────────────────────────────────────────────────────────────┤
1919  │                                                                             │
1920  │   PROBLEM 2: Corporate Alignment (Hive Mind)                                │
1921  │   ──────────────────────────────────────────                                │
1922  │                                                                             │
1923  │      Mind A ──┐                                                             │
1924  │               │                                                             │
1925  │      Mind B ──┼──── Corporate Graph ────→ Organizational Coherence          │
1926  │               │     (Übergeist)                                             │
1927  │      Mind C ──┘                                                             │
1928  │                                                                             │
1929  │   Individual minds drift. The graph shows where they've drifted FROM.       │
1930  │   Not prescribing where to go - surfacing where you are relative to         │
1931  │   the collective understanding.                                              │
1932  │                                                                             │
1933  ├─────────────────────────────────────────────────────────────────────────────┤
1934  │                                                                             │
1935  │   PROBLEM 3: Ecosystem Alignment (Install Base)                             │
1936  │   ─────────────────────────────────────────────                             │
1937  │                                                                             │
1938  │      Corp A Graph ──┐                                                       │
1939  │                     │                                                       │
1940  │      Corp B Graph ──┼──── Pattern Library ────→ Cross-System Learning       │
1941  │                     │     (What works)                                       │
1942  │      Corp C Graph ──┘                                                       │
1943  │                                                                             │
1944  │   Patterns that reduce F across one system can propagate to others.         │
1945  │   Not imposing - offering. Each system chooses what to adopt.               │
1946  │                                                                             │
1947  └─────────────────────────────────────────────────────────────────────────────┘
1948  ```
1949  
1950  ### The Hayek Correction
1951  
1952  > "As a UX designer, you do not want to dictate how a tool must be used. You want to provide a primitive or set of primitives that could be utilized in certain ways."
1953  >
1954  > — Your marginalia on paternalism, June 2020
1955  
1956  The graph follows this principle:
1957  
1958  | Paternalistic | Primitive-Based |
1959  |---------------|-----------------|
1960  | "You should think X" | "Here's what the graph contains about X" |
1961  | "This contradicts principle Y" | "This relates to principle Y with divergence D" |
1962  | "Adjust your thinking" | "Here's your position relative to collective" |
1963  | Pre-selected paths | Building blocks for self-assembly |
1964  
1965  **The graph doesn't know better than you.** It knows *different* - it has persistence, completeness, queryability that biological memory lacks. You use it as an external memory, not an external authority.
1966  
1967  ### Environment Shaping, Not Behavior Shaping
1968  
1969  From Dellanna's management framework that you've synthesized:
1970  
1971  > "Teams are adaptive systems. Their members adapt to their work environment... Their work environment consists of **actions, not words**."
1972  
1973  The graph shapes environment through:
1974  - **Visibility** - What's in the graph is visible; what's not is hidden
1975  - **Connections** - What's connected resonates; what's orphaned is isolated
1976  - **Freshness** - What's validated persists; what's stale decays
1977  - **Credit** - What creates value gets attributed; what doesn't, doesn't
1978  
1979  These are **consequences**, not commands. The user adapts to the environment; the environment doesn't dictate the adaptation.
1980  
1981  ### The Mirror vs The Guide
1982  
1983  ```
1984  THE GUIDE (Paternalistic)              THE MIRROR (Sovereign)
1985  ═══════════════════════                ═══════════════════════
1986  
1987  "You should go this way"        vs     "Here's where you are"
1988           │                                      │
1989           ▼                                      ▼
1990  Assumes guide knows better             Assumes you know your context
1991  Hides the map                          Shows the full terrain
1992  Prescribes destination                 Reveals position
1993  Creates dependency                     Creates capability
1994  
1995  Graph as guide: A2 violation (ornament pretending to be life)
1996  Graph as mirror: A2 alignment (revealing truth, enabling motion)
1997  ```
1998  
1999  ### Human Alignment Failure Modes
2000  
2001  Humans need alignment help too. Not because they're inferior, but because:
2002  
2003  | Failure Mode | Mechanism | Graph Correction |
2004  |--------------|-----------|------------------|
2005  | **Memory decay** | Insights fade, get distorted | Persistent, complete record |
2006  | **Recency bias** | Recent > old regardless of value | Freshness decay + validation |
2007  | **Confirmation bias** | See what fits existing model | Surfaces contradictions transparently |
2008  | **Siloing** | Don't see connections across domains | Cross-domain edge discovery |
2009  | **Drift** | Gradual deviation from principles | Position relative to axioms visible |
2010  | **Shadow blindness** | Don't see rejected paths | Shadow nodes surfaced when relevant |
2011  
2012  The graph doesn't fix these - it **makes them visible**. You still choose how to respond.
2013  
2014  ### Implementation: Reality Surfacing (Not Nudging)
2015  
2016  ```python
2017  # core/graph/reality_surface.py
2018  
2019  class RealitySurface:
2020      """
2021      Surfaces ground truth from graph.
2022      Does NOT recommend, guide, or nudge.
2023      Shows position relative to reality.
2024  
2025      Human and AI both use this to self-correct.
2026      Neither is coaching the other.
2027      """
2028  
2029      def __init__(self, graph: KnowledgeGraph):
2030          self.graph = graph
2031  
2032      # ================================================================
2033      # POSITION SURFACING - Where are you relative to graph?
2034      # ================================================================
2035  
2036      def show_position(self, current_thought: str) -> PositionReport:
2037          """
2038          Show where current thought sits relative to graph.
2039          No recommendation - just position.
2040          """
2041          # Find related content
2042          related = self.graph.find_similar(current_thought, threshold=0.5)
2043  
2044          # Calculate position metrics
2045          return PositionReport(
2046              thought=current_thought,
2047              related_nodes=related,
2048  
2049              # Position relative to axioms
2050              axiom_distances={
2051                  axiom: self._distance_to_axiom(current_thought, axiom)
2052                  for axiom in ['A0', 'A1', 'A2', 'A3', 'A4']
2053              },
2054  
2055              # Position relative to principles
2056              principle_alignment=self._alignment_to_principles(current_thought),
2057  
2058              # What this connects to (that you might not have seen)
2059              unseen_connections=self._find_unseen(current_thought, related),
2060  
2061              # What this potentially contradicts
2062              potential_contradictions=self._find_contradictions(current_thought, related),
2063  
2064              # Shadow: rejected paths that relate
2065              related_shadow=self._find_related_shadow(current_thought)
2066          )
2067  
2068          # NOTE: No "recommendation" field.
2069          # We show position. Human decides response.
2070  
2071      def show_collective_position(self, individual_graph: str) -> CollectiveReport:
2072          """
2073          Show where individual's graph sits relative to collective.
2074          For corporate alignment.
2075          """
2076          return CollectiveReport(
2077              # Where individual diverges from collective
2078              divergences=self._find_divergences(individual_graph),
2079  
2080              # Where individual has unique insights collective lacks
2081              unique_contributions=self._find_unique(individual_graph),
2082  
2083              # Concepts collective has that individual hasn't connected
2084              blind_spots=self._find_blind_spots(individual_graph),
2085  
2086              # Overall position
2087              alignment_score=self._calculate_alignment(individual_graph)
2088          )
2089  
2090          # NOTE: Divergence is information, not error.
2091          # Individual might be right and collective wrong.
2092          # We show position. Human decides if/how to respond.
2093  
2094      # ================================================================
2095      # TRANSPARENCY - What shaped this graph?
2096      # ================================================================
2097  
2098      def show_provenance(self, node_id: str) -> ProvenanceReport:
2099          """
2100          Show how a node got here. Full transparency.
2101          """
2102          node = self.graph.nodes[node_id]
2103  
2104          return ProvenanceReport(
2105              content=node.content,
2106              source=node.source,  # Where it came from
2107              lineage=self._get_lineage(node),  # What it evolved from
2108              validators=self._get_validators(node),  # Who/what validated it
2109              challengers=self._get_challengers(node),  # What contradicts it
2110              freshness=node.freshness,
2111              last_validated=node.last_validated
2112          )
2113  
2114          # Full transparency. No hidden shaping.
2115          # User sees exactly why graph contains what it contains.
2116  ```
2117  
2118  ### The Value Proposition: Alignment Technology
2119  
2120  What Sovereign OS offers:
2121  
2122  **For the Human-AI Dyad:**
2123  - Shared ground truth both entities can align to
2124  - Neither coaching the other - both self-correcting
2125  - Persistent memory that neither has alone
2126  - Transparent substrate with full provenance
2127  
2128  **For the Corporation:**
2129  - Organizational coherence without mandates
2130  - Individual autonomy preserved (position shown, not dictated)
2131  - Collective intelligence that emerges from individuals
2132  - Cultural transmission through environment, not prescription
2133  
2134  **For the Ecosystem:**
2135  - Patterns that work can propagate across install base
2136  - No imposition - pattern library that systems can choose from
2137  - Cross-system learning without central authority
2138  - Network effects in alignment technology
2139  
2140  ### The Axiom Test
2141  
2142  Does this architecture align with the axioms?
2143  
2144  | Axiom | Alignment |
2145  |-------|-----------|
2146  | **A0 (Boundary)** | ✓ Graph respects sovereignty. Shows position, doesn't cross boundary to prescribe. |
2147  | **A1 (Integration)** | ✓ Connection through shared substrate, not forced conformity. Sovereignty WITH relation. |
2148  | **A2 (Life)** | ✓ Mirror reveals truth; guide imposes ornament. This is the carpenter's cup. |
2149  | **A3 (Navigation)** | ✓ Shows the poles and current position. Doesn't fix you to one pole. |
2150  | **A4 (Ergodicity)** | ✓ Makes drift visible before it becomes catastrophic. Early warning, not rescue. |
2151  
2152  ### The Honest Promise
2153  
2154  > **We are not building a system that tells you how to think.**
2155  >
2156  > We are building alignment technology:
2157  > - A mirror that shows your position relative to reality
2158  > - A substrate that human and AI can both check against
2159  > - A persistent memory that neither biological nor artificial minds have alone
2160  > - An environment that shapes through consequences, not commands
2161  >
2162  > The human is key to AI alignment.
2163  > But humans drift too.
2164  > The graph helps everyone self-correct.
2165  >
2166  > Not by coaching. Not by guiding. Not by training.
2167  > By surfacing ground truth and letting sovereign minds align themselves.
2168  >
2169  > **This is alignment technology. For the dyad, the corporation, and the ecosystem.**
2170  
2171  ---
2172  
2173  *"The graph is not a guide. It's a mirror. Sovereign minds look into it and choose their own alignment."*
2174  
2175  ---
2176  
2177  *Graph Roadmap v1.5 | 2026-01-16 | Alignment technology reframe - mirror not guide, primitives not paths*