{
  "generatedAt": "2026-05-25T11:32:42.277Z",
  "targetPath": "infrastructure/infrastructure-services.md",
  "targetKind": "folder",
  "metadataDraft": {
    "sectionProvenance": [
      {
        "sectionId": "dependency_map_graph",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BillingService.cs",
          "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "NexusReader.Infrastructure/Services/PromptRegistry.cs"
        ]
      },
      {
        "sectionId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BillingService.cs",
          "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "NexusReader.Infrastructure/Services/PromptRegistry.cs"
        ]
      },
      {
        "sectionId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BillingService.cs",
          "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "NexusReader.Infrastructure/Services/PromptRegistry.cs"
        ]
      },
      {
        "sectionId": "contracts_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BillingService.cs",
          "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "NexusReader.Infrastructure/Services/PromptRegistry.cs"
        ]
      },
      {
        "sectionId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BillingService.cs",
          "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "NexusReader.Infrastructure/Services/PromptRegistry.cs"
        ]
      },
      {
        "sectionId": "method_flows_graph",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BillingService.cs",
          "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "NexusReader.Infrastructure/Services/PromptRegistry.cs"
        ]
      }
    ],
    "claimGrounding": [],
    "nodeMetadata": [
      {
        "id": "flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1",
        "label": "BillingService",
        "diagramId": "dependency_map_graph",
        "nodeRole": "service",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "Implements billing-related reactions (subscription updated/deleted) tying Stripe product events to local user subscription plan and token limits.",
        "responsibility": "Two primary runtime entrypoints react to Stripe subscription events: update maps product IDs to local plans with branching and fallbacks; delete resets user to Free plan. Both perform DB reads for plan records and persist user updates via UserManager, with extensive logging and exception handling.",
        "technologyHints": [
          "csharp",
          "Service",
          "Repository (DbContext access)",
          "Identity user management"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BillingService"
          },
          {
            "label": "Domain",
            "value": "SubscriptionPlan, NexusUser, Stripe product id mapping"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BillingService.cs:1:1",
            "path": "NexusReader.Infrastructure/Services/BillingService.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
        "sourceLine": 1,
        "sourceTargetKind": "service",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BillingService.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_configuration_stripesettings_cs_file_1",
        "label": "StripeSettings",
        "diagramId": "dependency_map_graph",
        "nodeRole": "class",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "Holds Stripe product identifiers and exposes the configuration section name for binding.",
        "responsibility": "Holds Stripe product identifiers and exposes the configuration section name for binding.",
        "technologyHints": [
          "csharp",
          "Options Pattern",
          "Configuration POCO"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "StripeSettings"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "4"
          },
          {
            "label": "SectionName",
            "value": "const string required"
          },
          {
            "label": "ProProductId",
            "value": "string required"
          },
          {
            "label": "BasicProductId",
            "value": "string required"
          },
          {
            "label": "FreeProductId",
            "value": "string required"
          },
          {
            "label": "Domain",
            "value": "Stripe, Billing, Products"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Configuration/StripeSettings.cs:1:1",
            "path": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
        "sourceLine": 1,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Configuration/StripeSettings.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
        "label": "BookStorageService",
        "diagramId": "dependency_map_graph",
        "nodeRole": "class",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
        "responsibility": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(environment: IWebHostEnvironment) -> BookStorageService"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:mapping",
            "value": "Store IWebHostEnvironment @L16"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "1"
          },
          {
            "label": "_environment",
            "value": "IWebHostEnvironment required"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:1:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 1,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10",
        "label": "BookStorageService",
        "diagramId": "dependency_map_graph",
        "nodeRole": "class",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
        "responsibility": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(environment: IWebHostEnvironment) -> BookStorageService"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:mapping",
            "value": "Store IWebHostEnvironment @L16"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "1"
          },
          {
            "label": "_environment",
            "value": "IWebHostEnvironment required"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:10:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 10,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 10,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1",
        "label": "EpubReaderService",
        "diagramId": "dependency_map_graph",
        "nodeRole": "service",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "Constructor that injects the DB context factory and logger.",
        "responsibility": "Constructor that injects the DB context factory and logger.",
        "technologyHints": [
          "csharp",
          "Service",
          "Factory (CreateAiTrigger)"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "EpubReaderService"
          },
          {
            "label": "Signature",
            "value": "(dbContextFactory: IDbContextFactory<AppDbContext>, logger: ILogger<EpubReaderService>) -> EpubReaderService"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:mapping",
            "value": "stores dependencies @L25"
          },
          {
            "label": "Domain",
            "value": "Ebook, Chapter, ReaderPageViewModel"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/EpubReaderService.cs:1:1",
            "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
        "sourceLine": 1,
        "sourceTargetKind": "service",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/EpubReaderService.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1",
        "label": "KnowledgeService",
        "diagramId": "dependency_map_graph",
        "nodeRole": "service",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "Constructor wiring dependencies, configuring retry pipeline and tokenizer",
        "responsibility": "Constructor wiring dependencies, configuring retry pipeline and tokenizer",
        "technologyHints": [
          "csharp",
          "Cache (SemanticKnowledgeCache)",
          "Request coalescing / deduplication (ConcurrentDictionary + Lazy<Task>)",
          "Retry/Resilience (Polly/ResiliencePipeline)",
          "RAG (Qdrant vector search + Neo4j graph expansion)"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "KnowledgeService"
          },
          {
            "label": "Signature",
            "value": "(IChatClient chatClient, IEmbeddingGenerator<string, Embedding<float>> embeddingGenerator, IDbContextFactory<AppDbContext> dbContextFactory, ResiliencePipelineProvider<string> pipelineProvider, IOptions<AiSettings> settings, ILogger<KnowledgeService> logger, QdrantClient qdrantClient, IDriver neo4jDriver) -> KnowledgeService"
          },
          {
            "label": "Calls",
            "value": "2"
          },
          {
            "label": "Action:mapping",
            "value": "store dependencies @L48"
          },
          {
            "label": "Action:mapping",
            "value": "init tokenizer @L58"
          },
          {
            "label": "Domain",
            "value": "KnowledgeUnit, KnowledgeUnitLink, SemanticKnowledgeCache"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/KnowledgeService.cs:1:1",
            "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
        "sourceLine": 1,
        "sourceTargetKind": "service",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/KnowledgeService.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1",
        "label": "ContentHasher",
        "diagramId": "dependency_map_graph",
        "nodeRole": "class",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "Static helper class exposing normalization and hashing utilities for content.",
        "responsibility": "Static helper class exposing normalization and hashing utilities for content.",
        "technologyHints": [
          "csharp",
          "Utility",
          "Hashing",
          "Normalization"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "ContentHasher"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "0"
          },
          {
            "label": "Domain",
            "value": "content-hashing, fingerprinting, canonicalization"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Helpers/ContentHasher.cs:1:1",
            "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
        "sourceLine": 1,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_file_1",
        "label": "JsonRepairHelper",
        "diagramId": "dependency_map_graph",
        "nodeRole": "class",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "Static helper class that contains JSON repair utilities.",
        "responsibility": "Static helper class that contains JSON repair utilities.",
        "technologyHints": [
          "csharp",
          "Utility",
          "Stack-based parser"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "JsonRepairHelper"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "0"
          },
          {
            "label": "Domain",
            "value": "JSON, Truncation recovery, Bracket/quote balancing"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs:1:1",
            "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
        "sourceLine": 1,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1",
        "label": "AiSettings",
        "diagramId": "dependency_map_graph",
        "nodeRole": "dto",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
        "responsibility": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
        "technologyHints": [
          "csharp",
          "Options Pattern",
          "Configuration DTO"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "AiSettings"
          },
          {
            "label": "Shape",
            "value": "dto"
          },
          {
            "label": "Fields",
            "value": "8"
          },
          {
            "label": "SectionName",
            "value": "string (const) required"
          },
          {
            "label": "ApiKey",
            "value": "string"
          },
          {
            "label": "Model",
            "value": "string"
          },
          {
            "label": "EmbeddingModel",
            "value": "string"
          },
          {
            "label": "Domain",
            "value": "AI, Model selection, Embedding"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Configuration/AiSettings.cs:1:1",
            "path": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
        "sourceLine": 1,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Configuration/AiSettings.cs"
        ]
      },
      {
        "id": "flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3",
        "label": "AiSettings",
        "diagramId": "dependency_map_graph",
        "nodeRole": "dto",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
        "responsibility": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
        "technologyHints": [
          "csharp",
          "Options Pattern",
          "Configuration DTO"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "AiSettings"
          },
          {
            "label": "Shape",
            "value": "dto"
          },
          {
            "label": "Fields",
            "value": "8"
          },
          {
            "label": "SectionName",
            "value": "string (const) required"
          },
          {
            "label": "ApiKey",
            "value": "string"
          },
          {
            "label": "Model",
            "value": "string"
          },
          {
            "label": "EmbeddingModel",
            "value": "string"
          },
          {
            "label": "Domain",
            "value": "AI, Model selection, Embedding"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Configuration/AiSettings.cs:3:1",
            "path": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
            "line": 3,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
        "sourceLine": 3,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Configuration/AiSettings.cs"
        ]
      },
      {
        "id": "flow_type_nexusreader_infrastructure_configuration_stripesettings_cs_stripesettings_3",
        "label": "StripeSettings",
        "diagramId": "dependency_map_graph",
        "nodeRole": "class",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "Holds Stripe product identifiers and exposes the configuration section name for binding.",
        "responsibility": "Holds Stripe product identifiers and exposes the configuration section name for binding.",
        "technologyHints": [
          "csharp",
          "Options Pattern",
          "Configuration POCO"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "StripeSettings"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "4"
          },
          {
            "label": "SectionName",
            "value": "const string required"
          },
          {
            "label": "ProProductId",
            "value": "string required"
          },
          {
            "label": "BasicProductId",
            "value": "string required"
          },
          {
            "label": "FreeProductId",
            "value": "string required"
          },
          {
            "label": "Domain",
            "value": "Stripe, Billing, Products"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Configuration/StripeSettings.cs:3:1",
            "path": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
            "line": 3,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
        "sourceLine": 3,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Configuration/StripeSettings.cs"
        ]
      },
      {
        "id": "flow_type_nexusreader_infrastructure_helpers_contenthasher_cs_contenthasher_7",
        "label": "ContentHasher",
        "diagramId": "dependency_map_graph",
        "nodeRole": "class",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "Static helper class exposing normalization and hashing utilities for content.",
        "responsibility": "Static helper class exposing normalization and hashing utilities for content.",
        "technologyHints": [
          "csharp",
          "Utility",
          "Hashing",
          "Normalization"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "ContentHasher"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "0"
          },
          {
            "label": "Domain",
            "value": "content-hashing, fingerprinting, canonicalization"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Helpers/ContentHasher.cs:7:1",
            "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
            "line": 7,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
        "sourceLine": 7,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
        ]
      },
      {
        "id": "flow_type_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_jsonrepairhelper_6",
        "label": "JsonRepairHelper",
        "diagramId": "dependency_map_graph",
        "nodeRole": "class",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "Static helper class that contains JSON repair utilities.",
        "responsibility": "Static helper class that contains JSON repair utilities.",
        "technologyHints": [
          "csharp",
          "Utility",
          "Stack-based parser"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "JsonRepairHelper"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "0"
          },
          {
            "label": "Domain",
            "value": "JSON, Truncation recovery, Bracket/quote balancing"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs:6:1",
            "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
            "line": 6,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
        "sourceLine": 6,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1",
        "label": "SignalRSyncBroadcaster",
        "diagramId": "dependency_map_graph",
        "nodeRole": "class",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "SignalR-based implementation of ISyncBroadcaster that pushes sync and ingestion progress to a user's connected devices.",
        "responsibility": "SignalR-based implementation of ISyncBroadcaster that pushes sync and ingestion progress to a user's connected devices.",
        "technologyHints": [
          "csharp",
          "Adapter",
          "Real-time broadcaster",
          "SignalR integration"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "SignalRSyncBroadcaster"
          },
          {
            "label": "Signature",
            "value": "(IHubContext<SyncHub> hubContext) -> SignalRSyncBroadcaster"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:mapping",
            "value": "store hub context @L17"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "1"
          },
          {
            "label": "_hubContext",
            "value": "IHubContext<SyncHub> required"
          },
          {
            "label": "Domain",
            "value": "Sync progress, Ingestion progress, User sessions / connected devices"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs:1:1",
            "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
        "sourceLine": 1,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
        ]
      },
      {
        "id": "flow_type_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_signalrsyncbroadcaster_11",
        "label": "SignalRSyncBroadcaster",
        "diagramId": "dependency_map_graph",
        "nodeRole": "class",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "SignalR-based implementation of ISyncBroadcaster that pushes sync and ingestion progress to a user's connected devices.",
        "responsibility": "SignalR-based implementation of ISyncBroadcaster that pushes sync and ingestion progress to a user's connected devices.",
        "technologyHints": [
          "csharp",
          "Adapter",
          "Real-time broadcaster",
          "SignalR integration"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "SignalRSyncBroadcaster"
          },
          {
            "label": "Signature",
            "value": "(IHubContext<SyncHub> hubContext) -> SignalRSyncBroadcaster"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:mapping",
            "value": "store hub context @L17"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "1"
          },
          {
            "label": "_hubContext",
            "value": "IHubContext<SyncHub> required"
          },
          {
            "label": "Domain",
            "value": "Sync progress, Ingestion progress, User sessions / connected devices"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs:11:1",
            "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
            "line": 11,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
        "sourceLine": 11,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1",
        "label": "SyncHub",
        "diagramId": "dependency_map_graph",
        "nodeRole": "class",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "SignalR Hub that handles real-time reading progress updates and per-user group membership.",
        "responsibility": "SignalR Hub that handles real-time reading progress updates and per-user group membership.",
        "technologyHints": [
          "csharp",
          "Mediator",
          "SignalR Hub",
          "Group-based notifications"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "SyncHub"
          },
          {
            "label": "Signature",
            "value": "(mediator: IMediator) -> void"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:mapping",
            "value": "Store IMediator @L16"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "1"
          },
          {
            "label": "_mediator",
            "value": "IMediator required"
          },
          {
            "label": "Domain",
            "value": "User, ReadingProgress, Ebook"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/RealTime/SyncHub.cs:1:1",
            "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
        "sourceLine": 1,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/RealTime/SyncHub.cs"
        ]
      },
      {
        "id": "flow_type_nexusreader_infrastructure_realtime_synchub_cs_synchub_10",
        "label": "SyncHub",
        "diagramId": "dependency_map_graph",
        "nodeRole": "class",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "SignalR Hub that handles real-time reading progress updates and per-user group membership.",
        "responsibility": "SignalR Hub that handles real-time reading progress updates and per-user group membership.",
        "technologyHints": [
          "csharp",
          "Mediator",
          "SignalR Hub",
          "Group-based notifications"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "SyncHub"
          },
          {
            "label": "Signature",
            "value": "(mediator: IMediator) -> void"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:mapping",
            "value": "Store IMediator @L16"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "1"
          },
          {
            "label": "_mediator",
            "value": "IMediator required"
          },
          {
            "label": "Domain",
            "value": "User, ReadingProgress, Ebook"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/RealTime/SyncHub.cs:10:1",
            "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
            "line": 10,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
        "sourceLine": 10,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/RealTime/SyncHub.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_services_epubmetadataextractor_cs_file_1",
        "label": "EpubMetadataExtractor",
        "diagramId": "dependency_map_graph",
        "nodeRole": "class",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "Infrastructure implementation of IEpubMetadataExtractor that reads EPUB metadata from a stream.",
        "responsibility": "Infrastructure implementation of IEpubMetadataExtractor that reads EPUB metadata from a stream.",
        "technologyHints": [
          "csharp",
          "Extractor",
          "Adapter (library wrapper)"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "EpubMetadataExtractor"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "0"
          },
          {
            "label": "Domain",
            "value": "Epub, Metadata, Cover image"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs:1:1",
            "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
        "sourceLine": 1,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
        ]
      },
      {
        "id": "flow_type_nexusreader_infrastructure_services_epubmetadataextractor_cs_epubmetadataextractor_12",
        "label": "EpubMetadataExtractor",
        "diagramId": "dependency_map_graph",
        "nodeRole": "class",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "Infrastructure implementation of IEpubMetadataExtractor that reads EPUB metadata from a stream.",
        "responsibility": "Infrastructure implementation of IEpubMetadataExtractor that reads EPUB metadata from a stream.",
        "technologyHints": [
          "csharp",
          "Extractor",
          "Adapter (library wrapper)"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "EpubMetadataExtractor"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "0"
          },
          {
            "label": "Domain",
            "value": "Epub, Metadata, Cover image"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs:12:1",
            "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
            "line": 12,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
        "sourceLine": 12,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_services_promptregistry_cs_file_1",
        "label": "PromptRegistry",
        "diagramId": "dependency_map_graph",
        "nodeRole": "class",
        "diagramFamily": "dependency-map",
        "architecturalLayer": "backend",
        "summary": "Static registry class containing constant prompt strings for LLM-driven extraction and summarization tasks.",
        "responsibility": "Static registry class containing constant prompt strings for LLM-driven extraction and summarization tasks.",
        "technologyHints": [
          "csharp",
          "Registry",
          "Constants"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "PromptRegistry"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "4"
          },
          {
            "label": "KnowledgeExtractionSystemPrompt",
            "value": "string required"
          },
          {
            "label": "GraphExtractionPrompt",
            "value": "string required"
          },
          {
            "label": "SummaryAndQuizPrompt",
            "value": "string required"
          },
          {
            "label": "KM_ExtractionPrompt",
            "value": "string required"
          },
          {
            "label": "Domain",
            "value": "Knowledge extraction, Knowledge graph, Quiz generation"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/PromptRegistry.cs:1:1",
            "path": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
        "sourceLine": 1,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/PromptRegistry.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
        "label": "BookStorageService",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "class",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
        "responsibility": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(environment: IWebHostEnvironment) -> BookStorageService"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:mapping",
            "value": "Store IWebHostEnvironment @L16"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "1"
          },
          {
            "label": "_environment",
            "value": "IWebHostEnvironment required"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:1:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 1,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
        "label": "SaveEbookAsync",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "method",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "Wraps a byte-array payload into a MemoryStream and delegates to the Stream overload to persist an ebook.",
        "responsibility": "Wraps a byte-array payload into a MemoryStream and delegates to the Stream overload to persist an ebook.",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(data: byte[], fileName: string) -> Task<string>"
          },
          {
            "label": "Calls",
            "value": "1"
          },
          {
            "label": "Action:mapping",
            "value": "Create MemoryStream for byte[] @L21"
          },
          {
            "label": "Action:mapping",
            "value": "Delegate to Stream-based save @L22"
          },
          {
            "label": "Action:return",
            "value": "Returns result @L22"
          },
          {
            "label": "Action:await",
            "value": "Waits for async work @L22"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:19:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 19,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 19,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
        "label": "Returns result",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "return",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "return await SaveEbookAsync(stream, fileName);",
        "responsibility": "return await SaveEbookAsync(stream, fileName);",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "return"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:22:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 22,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 22,
        "sourceTargetKind": "return",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_22_22",
        "label": "Waits for async work",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "return await SaveEbookAsync(stream, fileName);",
        "responsibility": "return await SaveEbookAsync(stream, fileName);",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "await"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:22:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 22,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 22,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
        "label": "SaveEbookAsync",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "method",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "Writes the provided stream to the uploads folder under web root with a GUID-prefixed unique filename and returns a web-relative path (forward-slash).",
        "responsibility": "Writes the provided stream to the uploads folder under web root with a GUID-prefixed unique filename and returns a web-relative path (forward-slash).",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(data: Stream, fileName: string) -> Task<string>"
          },
          {
            "label": "Calls",
            "value": "1"
          },
          {
            "label": "Action:mapping",
            "value": "Resolve uploads folder path @L27"
          },
          {
            "label": "Action:guard-clause",
            "value": "Ensure uploads directory exists (create if missing) @L28"
          },
          {
            "label": "Action:mapping",
            "value": "Create unique filename @L30"
          },
          {
            "label": "Action:mapping",
            "value": "Write stream to file @L33"
          },
          {
            "label": "Action:await",
            "value": "Waits for async work @L35"
          },
          {
            "label": "Action:return",
            "value": "Return web-relative path with forward slash @L40"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:25:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 25,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 25,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
        "label": "Ensure uploads directory exists (create if missing)",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "EnsureDirectoryExists(uploadsFolder)",
        "responsibility": "EnsureDirectoryExists(uploadsFolder)",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "guard-clause"
          },
          {
            "label": "Condition",
            "value": "!Directory.Exists(path)"
          },
          {
            "label": "Outcomes",
            "value": "create-directory, continue"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:28:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 28,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 28,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
        "label": "Waits for async work",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "await data.CopyToAsync(fileStream);",
        "responsibility": "await data.CopyToAsync(fileStream);",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "await"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:35:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 35,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 35,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
        "label": "Return web-relative path with forward slash",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "return",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "return $\"uploads/{uniqueFileName}\"",
        "responsibility": "return $\"uploads/{uniqueFileName}\"",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "return"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:40:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 40,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 40,
        "sourceTargetKind": "return",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
        "label": "SaveCoverAsync",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "method",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "Validates byte-array cover data and delegates to the Stream overload; returns null for empty input.",
        "responsibility": "Validates byte-array cover data and delegates to the Stream overload; returns null for empty input.",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(data: byte[], fileName: string) -> Task<string?>"
          },
          {
            "label": "Calls",
            "value": "1"
          },
          {
            "label": "Action:guard-clause",
            "value": "Guards early exit or rejection path @L45"
          },
          {
            "label": "Action:guard-clause",
            "value": "Return null for missing/empty cover data @L45"
          },
          {
            "label": "Action:mapping",
            "value": "Create MemoryStream for byte[] @L46"
          },
          {
            "label": "Action:return",
            "value": "Returns result @L47"
          },
          {
            "label": "Action:await",
            "value": "Waits for async work @L47"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:43:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 43,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 43,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
        "label": "Guards early exit or rejection path",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "if (data == null || data.Length == 0) return null;",
        "responsibility": "if (data == null || data.Length == 0) return null;",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "guard-clause"
          },
          {
            "label": "Condition",
            "value": "data == null || data.Length == 0"
          },
          {
            "label": "Outcomes",
            "value": "exit, continue"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:45:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 45,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 45,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
        "label": "Returns result",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "return",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "return await SaveCoverAsync(stream, fileName);",
        "responsibility": "return await SaveCoverAsync(stream, fileName);",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "return"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:47:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 47,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 47,
        "sourceTargetKind": "return",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_47_47",
        "label": "Waits for async work",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "return await SaveCoverAsync(stream, fileName);",
        "responsibility": "return await SaveCoverAsync(stream, fileName);",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "await"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:47:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 47,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 47,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
        "label": "SaveCoverAsync",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "method",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "Writes the provided cover stream to the covers folder under web root with a GUID-prefixed unique filename and returns a web-relative path (nullable).",
        "responsibility": "Writes the provided cover stream to the covers folder under web root with a GUID-prefixed unique filename and returns a web-relative path (nullable).",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(data: Stream, fileName: string) -> Task<string?>"
          },
          {
            "label": "Calls",
            "value": "1"
          },
          {
            "label": "Action:mapping",
            "value": "Resolve covers folder path @L52"
          },
          {
            "label": "Action:guard-clause",
            "value": "Ensure covers directory exists (create if missing) @L53"
          },
          {
            "label": "Action:mapping",
            "value": "Create unique filename @L55"
          },
          {
            "label": "Action:mapping",
            "value": "Write stream to file @L58"
          },
          {
            "label": "Action:await",
            "value": "Waits for async work @L60"
          },
          {
            "label": "Action:return",
            "value": "Return web-relative path with forward slash @L63"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:50:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 50,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 50,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
        "label": "Ensure covers directory exists (create if missing)",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "EnsureDirectoryExists(coversFolder)",
        "responsibility": "EnsureDirectoryExists(coversFolder)",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "guard-clause"
          },
          {
            "label": "Condition",
            "value": "!Directory.Exists(path)"
          },
          {
            "label": "Outcomes",
            "value": "create-directory, continue"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:53:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 53,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 53,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
        "label": "Waits for async work",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "await data.CopyToAsync(fileStream);",
        "responsibility": "await data.CopyToAsync(fileStream);",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "await"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:60:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 60,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 60,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
        "label": "Return web-relative path with forward slash",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "return",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "return $\"covers/{uniqueFileName}\"",
        "responsibility": "return $\"covers/{uniqueFileName}\"",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "return"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:63:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 63,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 63,
        "sourceTargetKind": "return",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
        "label": "EnsureDirectoryExists",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "method",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "Checks for the existence of a directory and creates it if missing.",
        "responsibility": "Checks for the existence of a directory and creates it if missing.",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(path: string) -> void"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:guard-clause",
            "value": "Check directory existence and create if absent @L68"
          },
          {
            "label": "Action:branch",
            "value": "Evaluates branch condition @L68"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:66:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 66,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 66,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
        "label": "Check directory existence and create if absent",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "Directory.CreateDirectory(path)",
        "responsibility": "Directory.CreateDirectory(path)",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "guard-clause"
          },
          {
            "label": "Condition",
            "value": "!Directory.Exists(path)"
          },
          {
            "label": "Outcomes",
            "value": "create-directory, continue"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:68:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 68,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 68,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68",
        "label": "Evaluates branch condition",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "if (!Directory.Exists(path))",
        "responsibility": "if (!Directory.Exists(path))",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "branch"
          },
          {
            "label": "Condition",
            "value": "!Directory.Exists(path)"
          },
          {
            "label": "Outcomes",
            "value": "true, false"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:68:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 68,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 68,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10",
        "label": "BookStorageService",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "class",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
        "responsibility": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(environment: IWebHostEnvironment) -> BookStorageService"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:mapping",
            "value": "Store IWebHostEnvironment @L16"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "1"
          },
          {
            "label": "_environment",
            "value": "IWebHostEnvironment required"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:10:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 10,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 10,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1",
        "label": "AiSettings",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "dto",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
        "responsibility": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
        "technologyHints": [
          "csharp",
          "Options Pattern",
          "Configuration DTO"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "AiSettings"
          },
          {
            "label": "Shape",
            "value": "dto"
          },
          {
            "label": "Fields",
            "value": "8"
          },
          {
            "label": "SectionName",
            "value": "string (const) required"
          },
          {
            "label": "ApiKey",
            "value": "string"
          },
          {
            "label": "Model",
            "value": "string"
          },
          {
            "label": "EmbeddingModel",
            "value": "string"
          },
          {
            "label": "Domain",
            "value": "AI, Model selection, Embedding"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Configuration/AiSettings.cs:1:1",
            "path": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
        "sourceLine": 1,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Configuration/AiSettings.cs"
        ]
      },
      {
        "id": "flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3",
        "label": "AiSettings",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "dto",
        "diagramFamily": "primary-runtime",
        "architecturalLayer": "backend",
        "summary": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
        "responsibility": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
        "technologyHints": [
          "csharp",
          "Options Pattern",
          "Configuration DTO"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "AiSettings"
          },
          {
            "label": "Shape",
            "value": "dto"
          },
          {
            "label": "Fields",
            "value": "8"
          },
          {
            "label": "SectionName",
            "value": "string (const) required"
          },
          {
            "label": "ApiKey",
            "value": "string"
          },
          {
            "label": "Model",
            "value": "string"
          },
          {
            "label": "EmbeddingModel",
            "value": "string"
          },
          {
            "label": "Domain",
            "value": "AI, Model selection, Embedding"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Configuration/AiSettings.cs:3:1",
            "path": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
            "line": 3,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
        "sourceLine": 3,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Configuration/AiSettings.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
        "label": "BookStorageService",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "class",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
        "responsibility": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(environment: IWebHostEnvironment) -> BookStorageService"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:mapping",
            "value": "Store IWebHostEnvironment @L16"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "1"
          },
          {
            "label": "_environment",
            "value": "IWebHostEnvironment required"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:1:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 1,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
        "label": "SaveEbookAsync",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "method",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "Wraps a byte-array payload into a MemoryStream and delegates to the Stream overload to persist an ebook.",
        "responsibility": "Wraps a byte-array payload into a MemoryStream and delegates to the Stream overload to persist an ebook.",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(data: byte[], fileName: string) -> Task<string>"
          },
          {
            "label": "Calls",
            "value": "1"
          },
          {
            "label": "Action:mapping",
            "value": "Create MemoryStream for byte[] @L21"
          },
          {
            "label": "Action:mapping",
            "value": "Delegate to Stream-based save @L22"
          },
          {
            "label": "Action:return",
            "value": "Returns result @L22"
          },
          {
            "label": "Action:await",
            "value": "Waits for async work @L22"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:19:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 19,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 19,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
        "label": "Returns result",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "return",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "return await SaveEbookAsync(stream, fileName);",
        "responsibility": "return await SaveEbookAsync(stream, fileName);",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "return"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:22:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 22,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 22,
        "sourceTargetKind": "return",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_22_22",
        "label": "Waits for async work",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "return await SaveEbookAsync(stream, fileName);",
        "responsibility": "return await SaveEbookAsync(stream, fileName);",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "await"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:22:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 22,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 22,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
        "label": "SaveEbookAsync",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "method",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "Writes the provided stream to the uploads folder under web root with a GUID-prefixed unique filename and returns a web-relative path (forward-slash).",
        "responsibility": "Writes the provided stream to the uploads folder under web root with a GUID-prefixed unique filename and returns a web-relative path (forward-slash).",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(data: Stream, fileName: string) -> Task<string>"
          },
          {
            "label": "Calls",
            "value": "1"
          },
          {
            "label": "Action:mapping",
            "value": "Resolve uploads folder path @L27"
          },
          {
            "label": "Action:guard-clause",
            "value": "Ensure uploads directory exists (create if missing) @L28"
          },
          {
            "label": "Action:mapping",
            "value": "Create unique filename @L30"
          },
          {
            "label": "Action:mapping",
            "value": "Write stream to file @L33"
          },
          {
            "label": "Action:await",
            "value": "Waits for async work @L35"
          },
          {
            "label": "Action:return",
            "value": "Return web-relative path with forward slash @L40"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:25:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 25,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 25,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
        "label": "Ensure uploads directory exists (create if missing)",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "EnsureDirectoryExists(uploadsFolder)",
        "responsibility": "EnsureDirectoryExists(uploadsFolder)",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "guard-clause"
          },
          {
            "label": "Condition",
            "value": "!Directory.Exists(path)"
          },
          {
            "label": "Outcomes",
            "value": "create-directory, continue"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:28:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 28,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 28,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
        "label": "Waits for async work",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "await data.CopyToAsync(fileStream);",
        "responsibility": "await data.CopyToAsync(fileStream);",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "await"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:35:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 35,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 35,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
        "label": "Return web-relative path with forward slash",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "return",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "return $\"uploads/{uniqueFileName}\"",
        "responsibility": "return $\"uploads/{uniqueFileName}\"",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "return"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:40:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 40,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 40,
        "sourceTargetKind": "return",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
        "label": "SaveCoverAsync",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "method",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "Validates byte-array cover data and delegates to the Stream overload; returns null for empty input.",
        "responsibility": "Validates byte-array cover data and delegates to the Stream overload; returns null for empty input.",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(data: byte[], fileName: string) -> Task<string?>"
          },
          {
            "label": "Calls",
            "value": "1"
          },
          {
            "label": "Action:guard-clause",
            "value": "Guards early exit or rejection path @L45"
          },
          {
            "label": "Action:guard-clause",
            "value": "Return null for missing/empty cover data @L45"
          },
          {
            "label": "Action:mapping",
            "value": "Create MemoryStream for byte[] @L46"
          },
          {
            "label": "Action:return",
            "value": "Returns result @L47"
          },
          {
            "label": "Action:await",
            "value": "Waits for async work @L47"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:43:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 43,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 43,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
        "label": "Guards early exit or rejection path",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "if (data == null || data.Length == 0) return null;",
        "responsibility": "if (data == null || data.Length == 0) return null;",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "guard-clause"
          },
          {
            "label": "Condition",
            "value": "data == null || data.Length == 0"
          },
          {
            "label": "Outcomes",
            "value": "exit, continue"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:45:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 45,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 45,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
        "label": "Returns result",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "return",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "return await SaveCoverAsync(stream, fileName);",
        "responsibility": "return await SaveCoverAsync(stream, fileName);",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "return"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:47:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 47,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 47,
        "sourceTargetKind": "return",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_47_47",
        "label": "Waits for async work",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "return await SaveCoverAsync(stream, fileName);",
        "responsibility": "return await SaveCoverAsync(stream, fileName);",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "await"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:47:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 47,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 47,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
        "label": "SaveCoverAsync",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "method",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "Writes the provided cover stream to the covers folder under web root with a GUID-prefixed unique filename and returns a web-relative path (nullable).",
        "responsibility": "Writes the provided cover stream to the covers folder under web root with a GUID-prefixed unique filename and returns a web-relative path (nullable).",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(data: Stream, fileName: string) -> Task<string?>"
          },
          {
            "label": "Calls",
            "value": "1"
          },
          {
            "label": "Action:mapping",
            "value": "Resolve covers folder path @L52"
          },
          {
            "label": "Action:guard-clause",
            "value": "Ensure covers directory exists (create if missing) @L53"
          },
          {
            "label": "Action:mapping",
            "value": "Create unique filename @L55"
          },
          {
            "label": "Action:mapping",
            "value": "Write stream to file @L58"
          },
          {
            "label": "Action:await",
            "value": "Waits for async work @L60"
          },
          {
            "label": "Action:return",
            "value": "Return web-relative path with forward slash @L63"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:50:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 50,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 50,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
        "label": "Ensure covers directory exists (create if missing)",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "EnsureDirectoryExists(coversFolder)",
        "responsibility": "EnsureDirectoryExists(coversFolder)",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "guard-clause"
          },
          {
            "label": "Condition",
            "value": "!Directory.Exists(path)"
          },
          {
            "label": "Outcomes",
            "value": "create-directory, continue"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:53:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 53,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 53,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
        "label": "Waits for async work",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "await data.CopyToAsync(fileStream);",
        "responsibility": "await data.CopyToAsync(fileStream);",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "await"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:60:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 60,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 60,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
        "label": "Return web-relative path with forward slash",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "return",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "return $\"covers/{uniqueFileName}\"",
        "responsibility": "return $\"covers/{uniqueFileName}\"",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "return"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:63:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 63,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 63,
        "sourceTargetKind": "return",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
        "label": "EnsureDirectoryExists",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "method",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "Checks for the existence of a directory and creates it if missing.",
        "responsibility": "Checks for the existence of a directory and creates it if missing.",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(path: string) -> void"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:guard-clause",
            "value": "Check directory existence and create if absent @L68"
          },
          {
            "label": "Action:branch",
            "value": "Evaluates branch condition @L68"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:66:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 66,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 66,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
        "label": "Check directory existence and create if absent",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "Directory.CreateDirectory(path)",
        "responsibility": "Directory.CreateDirectory(path)",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "guard-clause"
          },
          {
            "label": "Condition",
            "value": "!Directory.Exists(path)"
          },
          {
            "label": "Outcomes",
            "value": "create-directory, continue"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:68:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 68,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 68,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68",
        "label": "Evaluates branch condition",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "if (!Directory.Exists(path))",
        "responsibility": "if (!Directory.Exists(path))",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "branch"
          },
          {
            "label": "Condition",
            "value": "!Directory.Exists(path)"
          },
          {
            "label": "Outcomes",
            "value": "true, false"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:68:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 68,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 68,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
        "label": "BookStorageService",
        "diagramId": "contracts_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "class",
        "diagramFamily": "class-diagram",
        "architecturalLayer": "backend",
        "summary": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
        "responsibility": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(environment: IWebHostEnvironment) -> BookStorageService"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:mapping",
            "value": "Store IWebHostEnvironment @L16"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "1"
          },
          {
            "label": "_environment",
            "value": "IWebHostEnvironment required"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:1:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 1,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10",
        "label": "BookStorageService",
        "diagramId": "contracts_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "class",
        "diagramFamily": "class-diagram",
        "architecturalLayer": "backend",
        "summary": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
        "responsibility": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(environment: IWebHostEnvironment) -> BookStorageService"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:mapping",
            "value": "Store IWebHostEnvironment @L16"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "1"
          },
          {
            "label": "_environment",
            "value": "IWebHostEnvironment required"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:10:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 10,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 10,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1",
        "label": "AiSettings",
        "diagramId": "contracts_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "dto",
        "diagramFamily": "class-diagram",
        "architecturalLayer": "backend",
        "summary": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
        "responsibility": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
        "technologyHints": [
          "csharp",
          "Options Pattern",
          "Configuration DTO"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "AiSettings"
          },
          {
            "label": "Shape",
            "value": "dto"
          },
          {
            "label": "Fields",
            "value": "8"
          },
          {
            "label": "SectionName",
            "value": "string (const) required"
          },
          {
            "label": "ApiKey",
            "value": "string"
          },
          {
            "label": "Model",
            "value": "string"
          },
          {
            "label": "EmbeddingModel",
            "value": "string"
          },
          {
            "label": "Domain",
            "value": "AI, Model selection, Embedding"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Configuration/AiSettings.cs:1:1",
            "path": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
        "sourceLine": 1,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Configuration/AiSettings.cs"
        ]
      },
      {
        "id": "flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3",
        "label": "AiSettings",
        "diagramId": "contracts_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "dto",
        "diagramFamily": "class-diagram",
        "architecturalLayer": "backend",
        "summary": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
        "responsibility": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
        "technologyHints": [
          "csharp",
          "Options Pattern",
          "Configuration DTO"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "AiSettings"
          },
          {
            "label": "Shape",
            "value": "dto"
          },
          {
            "label": "Fields",
            "value": "8"
          },
          {
            "label": "SectionName",
            "value": "string (const) required"
          },
          {
            "label": "ApiKey",
            "value": "string"
          },
          {
            "label": "Model",
            "value": "string"
          },
          {
            "label": "EmbeddingModel",
            "value": "string"
          },
          {
            "label": "Domain",
            "value": "AI, Model selection, Embedding"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Configuration/AiSettings.cs:3:1",
            "path": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
            "line": 3,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
        "sourceLine": 3,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Configuration/AiSettings.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
        "label": "SaveEbookAsync",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "method",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "Wraps a byte-array payload into a MemoryStream and delegates to the Stream overload to persist an ebook.",
        "responsibility": "Wraps a byte-array payload into a MemoryStream and delegates to the Stream overload to persist an ebook.",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(data: byte[], fileName: string) -> Task<string>"
          },
          {
            "label": "Calls",
            "value": "1"
          },
          {
            "label": "Action:mapping",
            "value": "Create MemoryStream for byte[] @L21"
          },
          {
            "label": "Action:mapping",
            "value": "Delegate to Stream-based save @L22"
          },
          {
            "label": "Action:return",
            "value": "Returns result @L22"
          },
          {
            "label": "Action:await",
            "value": "Waits for async work @L22"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:19:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 19,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 19,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
        "label": "Returns result",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "return",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "return await SaveEbookAsync(stream, fileName);",
        "responsibility": "return await SaveEbookAsync(stream, fileName);",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "return"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:22:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 22,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 22,
        "sourceTargetKind": "return",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
        "label": "SaveEbookAsync",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "method",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "Writes the provided stream to the uploads folder under web root with a GUID-prefixed unique filename and returns a web-relative path (forward-slash).",
        "responsibility": "Writes the provided stream to the uploads folder under web root with a GUID-prefixed unique filename and returns a web-relative path (forward-slash).",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(data: Stream, fileName: string) -> Task<string>"
          },
          {
            "label": "Calls",
            "value": "1"
          },
          {
            "label": "Action:mapping",
            "value": "Resolve uploads folder path @L27"
          },
          {
            "label": "Action:guard-clause",
            "value": "Ensure uploads directory exists (create if missing) @L28"
          },
          {
            "label": "Action:mapping",
            "value": "Create unique filename @L30"
          },
          {
            "label": "Action:mapping",
            "value": "Write stream to file @L33"
          },
          {
            "label": "Action:await",
            "value": "Waits for async work @L35"
          },
          {
            "label": "Action:return",
            "value": "Return web-relative path with forward slash @L40"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:25:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 25,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 25,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
        "label": "Ensure uploads directory exists (create if missing)",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "EnsureDirectoryExists(uploadsFolder)",
        "responsibility": "EnsureDirectoryExists(uploadsFolder)",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "guard-clause"
          },
          {
            "label": "Condition",
            "value": "!Directory.Exists(path)"
          },
          {
            "label": "Outcomes",
            "value": "create-directory, continue"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:28:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 28,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 28,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
        "label": "Waits for async work",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "await data.CopyToAsync(fileStream);",
        "responsibility": "await data.CopyToAsync(fileStream);",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "await"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:35:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 35,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 35,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
        "label": "Return web-relative path with forward slash",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "return",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "return $\"uploads/{uniqueFileName}\"",
        "responsibility": "return $\"uploads/{uniqueFileName}\"",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "return"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:40:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 40,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 40,
        "sourceTargetKind": "return",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
        "label": "SaveCoverAsync",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "method",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "Validates byte-array cover data and delegates to the Stream overload; returns null for empty input.",
        "responsibility": "Validates byte-array cover data and delegates to the Stream overload; returns null for empty input.",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(data: byte[], fileName: string) -> Task<string?>"
          },
          {
            "label": "Calls",
            "value": "1"
          },
          {
            "label": "Action:guard-clause",
            "value": "Guards early exit or rejection path @L45"
          },
          {
            "label": "Action:guard-clause",
            "value": "Return null for missing/empty cover data @L45"
          },
          {
            "label": "Action:mapping",
            "value": "Create MemoryStream for byte[] @L46"
          },
          {
            "label": "Action:return",
            "value": "Returns result @L47"
          },
          {
            "label": "Action:await",
            "value": "Waits for async work @L47"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:43:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 43,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 43,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
        "label": "Guards early exit or rejection path",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "if (data == null || data.Length == 0) return null;",
        "responsibility": "if (data == null || data.Length == 0) return null;",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "guard-clause"
          },
          {
            "label": "Condition",
            "value": "data == null || data.Length == 0"
          },
          {
            "label": "Outcomes",
            "value": "exit, continue"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:45:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 45,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 45,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
        "label": "Returns result",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "return",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "return await SaveCoverAsync(stream, fileName);",
        "responsibility": "return await SaveCoverAsync(stream, fileName);",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "return"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:47:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 47,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 47,
        "sourceTargetKind": "return",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
        "label": "SaveCoverAsync",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "method",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "Writes the provided cover stream to the covers folder under web root with a GUID-prefixed unique filename and returns a web-relative path (nullable).",
        "responsibility": "Writes the provided cover stream to the covers folder under web root with a GUID-prefixed unique filename and returns a web-relative path (nullable).",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(data: Stream, fileName: string) -> Task<string?>"
          },
          {
            "label": "Calls",
            "value": "1"
          },
          {
            "label": "Action:mapping",
            "value": "Resolve covers folder path @L52"
          },
          {
            "label": "Action:guard-clause",
            "value": "Ensure covers directory exists (create if missing) @L53"
          },
          {
            "label": "Action:mapping",
            "value": "Create unique filename @L55"
          },
          {
            "label": "Action:mapping",
            "value": "Write stream to file @L58"
          },
          {
            "label": "Action:await",
            "value": "Waits for async work @L60"
          },
          {
            "label": "Action:return",
            "value": "Return web-relative path with forward slash @L63"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:50:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 50,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 50,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
        "label": "Ensure covers directory exists (create if missing)",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "EnsureDirectoryExists(coversFolder)",
        "responsibility": "EnsureDirectoryExists(coversFolder)",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "guard-clause"
          },
          {
            "label": "Condition",
            "value": "!Directory.Exists(path)"
          },
          {
            "label": "Outcomes",
            "value": "create-directory, continue"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:53:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 53,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 53,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
        "label": "Waits for async work",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "await data.CopyToAsync(fileStream);",
        "responsibility": "await data.CopyToAsync(fileStream);",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "await"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:60:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 60,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 60,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
        "label": "Return web-relative path with forward slash",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "return",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "return $\"covers/{uniqueFileName}\"",
        "responsibility": "return $\"covers/{uniqueFileName}\"",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "return"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:63:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 63,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 63,
        "sourceTargetKind": "return",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
        "label": "EnsureDirectoryExists",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "method",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "Checks for the existence of a directory and creates it if missing.",
        "responsibility": "Checks for the existence of a directory and creates it if missing.",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Signature",
            "value": "(path: string) -> void"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:guard-clause",
            "value": "Check directory existence and create if absent @L68"
          },
          {
            "label": "Action:branch",
            "value": "Evaluates branch condition @L68"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:66:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 66,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 66,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
        "label": "Check directory existence and create if absent",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "Directory.CreateDirectory(path)",
        "responsibility": "Directory.CreateDirectory(path)",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "guard-clause"
          },
          {
            "label": "Condition",
            "value": "!Directory.Exists(path)"
          },
          {
            "label": "Outcomes",
            "value": "create-directory, continue"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:68:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 68,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 68,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68",
        "label": "Evaluates branch condition",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "nodeRole": "step",
        "diagramFamily": "control-flow",
        "architecturalLayer": "backend",
        "summary": "if (!Directory.Exists(path))",
        "responsibility": "if (!Directory.Exists(path))",
        "technologyHints": [
          "csharp",
          "Filesystem storage",
          "Infrastructure service"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "BookStorageService"
          },
          {
            "label": "Action",
            "value": "branch"
          },
          {
            "label": "Condition",
            "value": "!Directory.Exists(path)"
          },
          {
            "label": "Outcomes",
            "value": "true, false"
          },
          {
            "label": "Domain",
            "value": "Book, Ebook, Cover"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/BookStorageService.cs:68:1",
            "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
            "line": 68,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 68,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1",
        "label": "EpubReaderService",
        "diagramId": "method_flows_graph",
        "nodeRole": "service",
        "diagramFamily": "method-flow",
        "architecturalLayer": "backend",
        "summary": "Constructor that injects the DB context factory and logger.",
        "responsibility": "Constructor that injects the DB context factory and logger.",
        "technologyHints": [
          "csharp",
          "Service",
          "Factory (CreateAiTrigger)"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "EpubReaderService"
          },
          {
            "label": "Signature",
            "value": "(dbContextFactory: IDbContextFactory<AppDbContext>, logger: ILogger<EpubReaderService>) -> EpubReaderService"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:mapping",
            "value": "stores dependencies @L25"
          },
          {
            "label": "Domain",
            "value": "Ebook, Chapter, ReaderPageViewModel"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/EpubReaderService.cs:1:1",
            "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
        "sourceLine": 1,
        "sourceTargetKind": "service",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/EpubReaderService.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175",
        "label": "CountWords",
        "diagramId": "method_flows_graph",
        "nodeRole": "method",
        "diagramFamily": "method-flow",
        "architecturalLayer": "backend",
        "summary": "Counts words in a text by splitting on whitespace characters; returns 0 for null/whitespace input.",
        "responsibility": "Counts words in a text by splitting on whitespace characters; returns 0 for null/whitespace input.",
        "technologyHints": [
          "csharp",
          "Service",
          "Factory (CreateAiTrigger)"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "EpubReaderService"
          },
          {
            "label": "Signature",
            "value": "(text: string) -> int"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:guard-clause",
            "value": "empty check @L177"
          },
          {
            "label": "Action:guard-clause",
            "value": "Guards early exit or rejection path @L177"
          },
          {
            "label": "Action:return",
            "value": "Returns result @L178"
          },
          {
            "label": "Action:mapping",
            "value": "split on whitespace and count @L178"
          },
          {
            "label": "Domain",
            "value": "Ebook, Chapter, ReaderPageViewModel"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/EpubReaderService.cs:175:1",
            "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
            "line": 175,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
        "sourceLine": 175,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/EpubReaderService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177",
        "label": "empty check",
        "diagramId": "method_flows_graph",
        "nodeRole": "step",
        "diagramFamily": "method-flow",
        "architecturalLayer": "backend",
        "summary": "returns 0 if string.IsNullOrWhiteSpace",
        "responsibility": "returns 0 if string.IsNullOrWhiteSpace",
        "technologyHints": [
          "csharp",
          "Service",
          "Factory (CreateAiTrigger)"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "EpubReaderService"
          },
          {
            "label": "Action",
            "value": "guard-clause"
          },
          {
            "label": "Domain",
            "value": "Ebook, Chapter, ReaderPageViewModel"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/EpubReaderService.cs:177:1",
            "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
            "line": 177,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
        "sourceLine": 177,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/EpubReaderService.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_85_85",
        "label": "Waits for async work",
        "diagramId": "method_flows_graph",
        "nodeRole": "step",
        "diagramFamily": "method-flow",
        "architecturalLayer": "backend",
        "summary": "using var dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken);",
        "responsibility": "using var dbContext = await _dbContextFactory.CreateDbContextAsync(cancellationToken);",
        "technologyHints": [
          "csharp",
          "Cache (SemanticKnowledgeCache)",
          "Request coalescing / deduplication (ConcurrentDictionary + Lazy<Task>)",
          "Retry/Resilience (Polly/ResiliencePipeline)",
          "RAG (Qdrant vector search + Neo4j graph expansion)"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "KnowledgeService"
          },
          {
            "label": "Action",
            "value": "await"
          },
          {
            "label": "Domain",
            "value": "KnowledgeUnit, KnowledgeUnitLink, SemanticKnowledgeCache"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Services/KnowledgeService.cs:85:1",
            "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
            "line": 85,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
        "sourceLine": 85,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/KnowledgeService.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1",
        "label": "ContentHasher",
        "diagramId": "method_flows_graph",
        "nodeRole": "class",
        "diagramFamily": "method-flow",
        "architecturalLayer": "backend",
        "summary": "Static helper class exposing normalization and hashing utilities for content.",
        "responsibility": "Static helper class exposing normalization and hashing utilities for content.",
        "technologyHints": [
          "csharp",
          "Utility",
          "Hashing",
          "Normalization"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "ContentHasher"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "0"
          },
          {
            "label": "Domain",
            "value": "content-hashing, fingerprinting, canonicalization"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Helpers/ContentHasher.cs:1:1",
            "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
        "sourceLine": 1,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9",
        "label": "ComputeHash",
        "diagramId": "method_flows_graph",
        "nodeRole": "method",
        "diagramFamily": "method-flow",
        "architecturalLayer": "backend",
        "summary": "Normalize the provided string and return its SHA-256 hash as a lower-case hex string; returns empty string for null/whitespace input.",
        "responsibility": "Normalize the provided string and return its SHA-256 hash as a lower-case hex string; returns empty string for null/whitespace input.",
        "technologyHints": [
          "csharp",
          "Utility",
          "Hashing",
          "Normalization"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "ContentHasher"
          },
          {
            "label": "Signature",
            "value": "(input: string) -> string"
          },
          {
            "label": "Calls",
            "value": "1"
          },
          {
            "label": "Action:branch",
            "value": "Evaluates branch condition @L11"
          },
          {
            "label": "Action:guard-clause",
            "value": "Rejects empty or whitespace input @L11"
          },
          {
            "label": "Action:return",
            "value": "Returns result @L13"
          },
          {
            "label": "Action:mapping",
            "value": "Normalization call @L16"
          },
          {
            "label": "Action:mapping",
            "value": "UTF-8 encoding @L18"
          },
          {
            "label": "Action:external-call",
            "value": "SHA-256 hash computation @L19"
          },
          {
            "label": "Domain",
            "value": "content-hashing, fingerprinting, canonicalization"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Helpers/ContentHasher.cs:9:1",
            "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
            "line": 9,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
        "sourceLine": 9,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_branch_11_11",
        "label": "Evaluates branch condition",
        "diagramId": "method_flows_graph",
        "nodeRole": "step",
        "diagramFamily": "method-flow",
        "architecturalLayer": "backend",
        "summary": "if (string.IsNullOrWhiteSpace(input))",
        "responsibility": "if (string.IsNullOrWhiteSpace(input))",
        "technologyHints": [
          "csharp",
          "Utility",
          "Hashing",
          "Normalization"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "ContentHasher"
          },
          {
            "label": "Action",
            "value": "branch"
          },
          {
            "label": "Condition",
            "value": "string.IsNullOrWhiteSpace(input)"
          },
          {
            "label": "Outcomes",
            "value": "true, false"
          },
          {
            "label": "Domain",
            "value": "content-hashing, fingerprinting, canonicalization"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/Helpers/ContentHasher.cs:11:1",
            "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
            "line": 11,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
        "sourceLine": 11,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1",
        "label": "SignalRSyncBroadcaster",
        "diagramId": "method_flows_graph",
        "nodeRole": "class",
        "diagramFamily": "method-flow",
        "architecturalLayer": "backend",
        "summary": "SignalR-based implementation of ISyncBroadcaster that pushes sync and ingestion progress to a user's connected devices.",
        "responsibility": "SignalR-based implementation of ISyncBroadcaster that pushes sync and ingestion progress to a user's connected devices.",
        "technologyHints": [
          "csharp",
          "Adapter",
          "Real-time broadcaster",
          "SignalR integration"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "SignalRSyncBroadcaster"
          },
          {
            "label": "Signature",
            "value": "(IHubContext<SyncHub> hubContext) -> SignalRSyncBroadcaster"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:mapping",
            "value": "store hub context @L17"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "1"
          },
          {
            "label": "_hubContext",
            "value": "IHubContext<SyncHub> required"
          },
          {
            "label": "Domain",
            "value": "Sync progress, Ingestion progress, User sessions / connected devices"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs:1:1",
            "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
        "sourceLine": 1,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_21",
        "label": "BroadcastProgressAsync",
        "diagramId": "method_flows_graph",
        "nodeRole": "method",
        "diagramFamily": "method-flow",
        "architecturalLayer": "backend",
        "summary": "Sends a 'ProgressUpdated' notification to all connected devices of a user (attempts to consider an excluded connection id but falls back to User-scoped broadcast).",
        "responsibility": "Sends a 'ProgressUpdated' notification to all connected devices of a user (attempts to consider an excluded connection id but falls back to User-scoped broadcast).",
        "technologyHints": [
          "csharp",
          "Adapter",
          "Real-time broadcaster",
          "SignalR integration"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "SignalRSyncBroadcaster"
          },
          {
            "label": "Signature",
            "value": "(string userId, string pageId, DateTime timestamp, string? excludedConnectionId, CancellationToken cancellationToken = default) -> Task"
          },
          {
            "label": "Calls",
            "value": "2"
          },
          {
            "label": "Action:guard-clause",
            "value": "check excludedConnectionId presence @L30"
          },
          {
            "label": "Action:branch",
            "value": "Evaluates branch condition @L30"
          },
          {
            "label": "Action:await",
            "value": "Waits for async work @L32"
          },
          {
            "label": "Action:external-call",
            "value": "Calls external dependency @L34"
          },
          {
            "label": "Action:external-call",
            "value": "send progress update to user @L34"
          },
          {
            "label": "Action:mapping",
            "value": "note about exclusion limitations @L36"
          },
          {
            "label": "Domain",
            "value": "Sync progress, Ingestion progress, User sessions / connected devices"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs:21:1",
            "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
            "line": 21,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
        "sourceLine": 21,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_guard_clause_30_30",
        "label": "check excludedConnectionId presence",
        "diagramId": "method_flows_graph",
        "nodeRole": "step",
        "diagramFamily": "method-flow",
        "architecturalLayer": "backend",
        "summary": "If excludedConnectionId present the code enters the if-block but still uses Clients.User(userId).SendAsync (no actual exclusion implemented here).",
        "responsibility": "If excludedConnectionId present the code enters the if-block but still uses Clients.User(userId).SendAsync (no actual exclusion implemented here).",
        "technologyHints": [
          "csharp",
          "Adapter",
          "Real-time broadcaster",
          "SignalR integration"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "SignalRSyncBroadcaster"
          },
          {
            "label": "Action",
            "value": "guard-clause"
          },
          {
            "label": "Condition",
            "value": "!string.IsNullOrEmpty(excludedConnectionId)"
          },
          {
            "label": "Outcomes",
            "value": "enter branch: attempts exclusion comment, else: normal send"
          },
          {
            "label": "Domain",
            "value": "Sync progress, Ingestion progress, User sessions / connected devices"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs:30:1",
            "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
            "line": 30,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
        "sourceLine": 30,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
        ]
      },
      {
        "id": "flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1",
        "label": "SyncHub",
        "diagramId": "method_flows_graph",
        "nodeRole": "class",
        "diagramFamily": "method-flow",
        "architecturalLayer": "backend",
        "summary": "SignalR Hub that handles real-time reading progress updates and per-user group membership.",
        "responsibility": "SignalR Hub that handles real-time reading progress updates and per-user group membership.",
        "technologyHints": [
          "csharp",
          "Mediator",
          "SignalR Hub",
          "Group-based notifications"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "SyncHub"
          },
          {
            "label": "Signature",
            "value": "(mediator: IMediator) -> void"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:mapping",
            "value": "Store IMediator @L16"
          },
          {
            "label": "Shape",
            "value": "model"
          },
          {
            "label": "Fields",
            "value": "1"
          },
          {
            "label": "_mediator",
            "value": "IMediator required"
          },
          {
            "label": "Domain",
            "value": "User, ReadingProgress, Ebook"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/RealTime/SyncHub.cs:1:1",
            "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
            "line": 1,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
        "sourceLine": 1,
        "sourceTargetKind": "dependency",
        "evidencePaths": [
          "NexusReader.Infrastructure/RealTime/SyncHub.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19",
        "label": "UpdateProgress",
        "diagramId": "method_flows_graph",
        "nodeRole": "method",
        "diagramFamily": "method-flow",
        "architecturalLayer": "backend",
        "summary": "If the connection is associated with an authenticated user, create and forward an UpdateReadingProgressCommand (including ConnectionId) to the application via MediatR.",
        "responsibility": "If the connection is associated with an authenticated user, create and forward an UpdateReadingProgressCommand (including ConnectionId) to the application via MediatR.",
        "technologyHints": [
          "csharp",
          "Mediator",
          "SignalR Hub",
          "Group-based notifications"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "SyncHub"
          },
          {
            "label": "Signature",
            "value": "(pageId: string, ebookId: Guid, progress: double, chapterTitle: string?, chapterIndex: int) -> Task"
          },
          {
            "label": "Calls",
            "value": "1"
          },
          {
            "label": "Action:repository-read",
            "value": "Reads repository or persistence state @L21"
          },
          {
            "label": "Action:guard-clause",
            "value": "Require authenticated user @L21"
          },
          {
            "label": "Action:branch",
            "value": "Evaluates branch condition @L22"
          },
          {
            "label": "Action:mapping",
            "value": "Create UpdateReadingProgressCommand @L24"
          },
          {
            "label": "Action:mapping",
            "value": "Forward command via mediator @L24"
          },
          {
            "label": "Action:repository-read",
            "value": "Reads repository or persistence state @L24"
          },
          {
            "label": "Domain",
            "value": "User, ReadingProgress, Ebook"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/RealTime/SyncHub.cs:19:1",
            "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
            "line": 19,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
        "sourceLine": 19,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/RealTime/SyncHub.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_21_21",
        "label": "Reads repository or persistence state",
        "diagramId": "method_flows_graph",
        "nodeRole": "step",
        "diagramFamily": "method-flow",
        "architecturalLayer": "backend",
        "summary": "var userId = Context.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;",
        "responsibility": "var userId = Context.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;",
        "technologyHints": [
          "csharp",
          "Mediator",
          "SignalR Hub",
          "Group-based notifications"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "SyncHub"
          },
          {
            "label": "Action",
            "value": "repository-read"
          },
          {
            "label": "Domain",
            "value": "User, ReadingProgress, Ebook"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/RealTime/SyncHub.cs:21:1",
            "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
            "line": 21,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
        "sourceLine": 21,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/RealTime/SyncHub.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28",
        "label": "OnConnectedAsync",
        "diagramId": "method_flows_graph",
        "nodeRole": "method",
        "diagramFamily": "method-flow",
        "architecturalLayer": "backend",
        "summary": "When a client connects, add the connection to a per-user SignalR group if UserIdentifier is present, then call base.OnConnectedAsync.",
        "responsibility": "When a client connects, add the connection to a per-user SignalR group if UserIdentifier is present, then call base.OnConnectedAsync.",
        "technologyHints": [
          "csharp",
          "Mediator",
          "SignalR Hub",
          "Group-based notifications"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "SyncHub"
          },
          {
            "label": "Signature",
            "value": "() -> Task"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:repository-read",
            "value": "Reads repository or persistence state @L30"
          },
          {
            "label": "Action:branch",
            "value": "Evaluates branch condition @L31"
          },
          {
            "label": "Action:guard-clause",
            "value": "Only add to user group if UserIdentifier present @L31"
          },
          {
            "label": "Action:external-call",
            "value": "Add connection to per-user group @L33"
          },
          {
            "label": "Action:repository-read",
            "value": "Reads repository or persistence state @L33"
          },
          {
            "label": "Action:await",
            "value": "Waits for async work @L33"
          },
          {
            "label": "Domain",
            "value": "User, ReadingProgress, Ebook"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/RealTime/SyncHub.cs:28:1",
            "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
            "line": 28,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
        "sourceLine": 28,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/RealTime/SyncHub.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_30_30",
        "label": "Reads repository or persistence state",
        "diagramId": "method_flows_graph",
        "nodeRole": "step",
        "diagramFamily": "method-flow",
        "architecturalLayer": "backend",
        "summary": "var userId = Context.UserIdentifier;",
        "responsibility": "var userId = Context.UserIdentifier;",
        "technologyHints": [
          "csharp",
          "Mediator",
          "SignalR Hub",
          "Group-based notifications"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "SyncHub"
          },
          {
            "label": "Action",
            "value": "repository-read"
          },
          {
            "label": "Domain",
            "value": "User, ReadingProgress, Ebook"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/RealTime/SyncHub.cs:30:1",
            "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
            "line": 30,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
        "sourceLine": 30,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/RealTime/SyncHub.cs"
        ]
      },
      {
        "id": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38",
        "label": "OnDisconnectedAsync",
        "diagramId": "method_flows_graph",
        "nodeRole": "method",
        "diagramFamily": "method-flow",
        "architecturalLayer": "backend",
        "summary": "When a client disconnects, remove the connection from the per-user SignalR group if UserIdentifier is present, then call base.OnDisconnectedAsync(exception).",
        "responsibility": "When a client disconnects, remove the connection from the per-user SignalR group if UserIdentifier is present, then call base.OnDisconnectedAsync(exception).",
        "technologyHints": [
          "csharp",
          "Mediator",
          "SignalR Hub",
          "Group-based notifications"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "SyncHub"
          },
          {
            "label": "Signature",
            "value": "(exception: Exception?) -> Task"
          },
          {
            "label": "Calls",
            "value": "0"
          },
          {
            "label": "Action:repository-read",
            "value": "Reads repository or persistence state @L40"
          },
          {
            "label": "Action:branch",
            "value": "Evaluates branch condition @L41"
          },
          {
            "label": "Action:guard-clause",
            "value": "Only remove from user group if UserIdentifier present @L41"
          },
          {
            "label": "Action:repository-read",
            "value": "Reads repository or persistence state @L43"
          },
          {
            "label": "Action:external-call",
            "value": "Remove connection from per-user group @L43"
          },
          {
            "label": "Action:await",
            "value": "Waits for async work @L43"
          },
          {
            "label": "Domain",
            "value": "User, ReadingProgress, Ebook"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/RealTime/SyncHub.cs:38:1",
            "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
            "line": 38,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
        "sourceLine": 38,
        "sourceTargetKind": "method",
        "evidencePaths": [
          "NexusReader.Infrastructure/RealTime/SyncHub.cs"
        ]
      },
      {
        "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_40_40",
        "label": "Reads repository or persistence state",
        "diagramId": "method_flows_graph",
        "nodeRole": "step",
        "diagramFamily": "method-flow",
        "architecturalLayer": "backend",
        "summary": "var userId = Context.UserIdentifier;",
        "responsibility": "var userId = Context.UserIdentifier;",
        "technologyHints": [
          "csharp",
          "Mediator",
          "SignalR Hub",
          "Group-based notifications"
        ],
        "detailItems": [
          {
            "label": "Owner",
            "value": "SyncHub"
          },
          {
            "label": "Action",
            "value": "repository-read"
          },
          {
            "label": "Domain",
            "value": "User, ReadingProgress, Ebook"
          }
        ],
        "navigationTargets": [
          {
            "key": "source",
            "href": "vscode://file/NexusReader.Infrastructure/RealTime/SyncHub.cs:40:1",
            "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
            "line": 40,
            "tooltip": "Open source"
          }
        ],
        "confidence": "high",
        "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
        "sourceLine": 40,
        "sourceTargetKind": "step",
        "evidencePaths": [
          "NexusReader.Infrastructure/RealTime/SyncHub.cs"
        ]
      }
    ],
    "edgeMetadata": [
      {
        "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10_defines_type_10",
        "diagramId": "dependency_map_graph",
        "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
        "to": "flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10",
        "relation": "transforms",
        "label": "model BookStorageService",
        "semanticLabel": "model BookStorageService",
        "semanticTitle": "model BookStorageService",
        "collapsedLabel": "model BookStorageService",
        "expandedLabel": "defines-type",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 10,
        "sourceTargetKind": "call-site",
        "outputSummary": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1_flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3_maps_dto_3",
        "diagramId": "dependency_map_graph",
        "from": "flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1",
        "to": "flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3",
        "relation": "transforms",
        "label": "dto AiSettings",
        "semanticLabel": "dto AiSettings",
        "semanticTitle": "dto AiSettings",
        "collapsedLabel": "dto AiSettings",
        "expandedLabel": "maps-dto",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Configuration/AiSettings.cs",
        "sourceLine": 3,
        "sourceTargetKind": "call-site",
        "outputSummary": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Configuration/AiSettings.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_configuration_stripesettings_cs_file_1_flow_type_nexusreader_infrastructure_configuration_stripesettings_cs_stripesettings_3_defines_type_3",
        "diagramId": "dependency_map_graph",
        "from": "flow_file_nexusreader_infrastructure_configuration_stripesettings_cs_file_1",
        "to": "flow_type_nexusreader_infrastructure_configuration_stripesettings_cs_stripesettings_3",
        "relation": "transforms",
        "label": "model StripeSettings",
        "semanticLabel": "model StripeSettings",
        "semanticTitle": "model StripeSettings",
        "collapsedLabel": "model StripeSettings",
        "expandedLabel": "defines-type",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Configuration/StripeSettings.cs",
        "sourceLine": 3,
        "sourceTargetKind": "call-site",
        "outputSummary": "Holds Stripe product identifiers and exposes the configuration section name for binding.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Configuration/StripeSettings.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1_flow_type_nexusreader_infrastructure_helpers_contenthasher_cs_contenthasher_7_defines_type_7",
        "diagramId": "dependency_map_graph",
        "from": "flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1",
        "to": "flow_type_nexusreader_infrastructure_helpers_contenthasher_cs_contenthasher_7",
        "relation": "transforms",
        "label": "model ContentHasher",
        "semanticLabel": "model ContentHasher",
        "semanticTitle": "model ContentHasher",
        "collapsedLabel": "model ContentHasher",
        "expandedLabel": "defines-type",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
        "sourceLine": 7,
        "sourceTargetKind": "call-site",
        "outputSummary": "Static helper class exposing normalization and hashing utilities for content.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_file_1_flow_type_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_jsonrepairhelper_6_defines_type_6",
        "diagramId": "dependency_map_graph",
        "from": "flow_file_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_file_1",
        "to": "flow_type_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_jsonrepairhelper_6",
        "relation": "transforms",
        "label": "model JsonRepairHelper",
        "semanticLabel": "model JsonRepairHelper",
        "semanticTitle": "model JsonRepairHelper",
        "collapsedLabel": "model JsonRepairHelper",
        "expandedLabel": "defines-type",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
        "sourceLine": 6,
        "sourceTargetKind": "call-site",
        "outputSummary": "Static helper class that contains JSON repair utilities.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1_flow_type_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_signalrsyncbroadcaster_11_defines_type_11",
        "diagramId": "dependency_map_graph",
        "from": "flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1",
        "to": "flow_type_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_signalrsyncbroadcaster_11",
        "relation": "transforms",
        "label": "model SignalRSyncBroadcaster",
        "semanticLabel": "model SignalRSyncBroadcaster",
        "semanticTitle": "model SignalRSyncBroadcaster",
        "collapsedLabel": "model SignalRSyncBroadcaster",
        "expandedLabel": "defines-type",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
        "sourceLine": 11,
        "sourceTargetKind": "call-site",
        "outputSummary": "SignalR-based implementation of ISyncBroadcaster that pushes sync and ingestion progress to a user's connected devices.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1_flow_type_nexusreader_infrastructure_realtime_synchub_cs_synchub_10_defines_type_10",
        "diagramId": "dependency_map_graph",
        "from": "flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1",
        "to": "flow_type_nexusreader_infrastructure_realtime_synchub_cs_synchub_10",
        "relation": "transforms",
        "label": "model SyncHub",
        "semanticLabel": "model SyncHub",
        "semanticTitle": "model SyncHub",
        "collapsedLabel": "model SyncHub",
        "expandedLabel": "defines-type",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
        "sourceLine": 10,
        "sourceTargetKind": "call-site",
        "outputSummary": "SignalR Hub that handles real-time reading progress updates and per-user group membership.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_services_epubmetadataextractor_cs_file_1_flow_type_nexusreader_infrastructure_services_epubmetadataextractor_cs_epubmetadataextractor_12_defines_type_12",
        "diagramId": "dependency_map_graph",
        "from": "flow_file_nexusreader_infrastructure_services_epubmetadataextractor_cs_file_1",
        "to": "flow_type_nexusreader_infrastructure_services_epubmetadataextractor_cs_epubmetadataextractor_12",
        "relation": "transforms",
        "label": "model EpubMetadataExtractor",
        "semanticLabel": "model EpubMetadataExtractor",
        "semanticTitle": "model EpubMetadataExtractor",
        "collapsedLabel": "model EpubMetadataExtractor",
        "expandedLabel": "defines-type",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
        "sourceLine": 12,
        "sourceTargetKind": "call-site",
        "outputSummary": "Infrastructure implementation of IEpubMetadataExtractor that reads EPUB metadata from a stream.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19_invokes_19",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
        "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
        "relation": "calls",
        "label": "SaveEbookAsync",
        "semanticLabel": "SaveEbookAsync",
        "semanticTitle": "SaveEbookAsync",
        "collapsedLabel": "SaveEbookAsync",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 19,
        "sourceTargetKind": "call-site",
        "outputSummary": "Wraps a byte-array payload into a MemoryStream and delegates to the Stream overload to persist an ebook.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22_returns_22",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
        "relation": "returns",
        "label": "Returns result",
        "semanticLabel": "Returns result",
        "semanticTitle": "Returns result",
        "collapsedLabel": "Returns result",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 22,
        "sourceTargetKind": "return-source",
        "outputSummary": "return await SaveEbookAsync(stream, fileName);",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_22_22_invokes_22",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_22_22",
        "relation": "calls",
        "label": "Waits for async work",
        "semanticLabel": "Waits for async work",
        "semanticTitle": "Waits for async work",
        "collapsedLabel": "Waits for async work",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 22,
        "sourceTargetKind": "call-site",
        "outputSummary": "return await SaveEbookAsync(stream, fileName);",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25_invokes_25",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
        "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
        "relation": "calls",
        "label": "SaveEbookAsync",
        "semanticLabel": "SaveEbookAsync",
        "semanticTitle": "SaveEbookAsync",
        "collapsedLabel": "SaveEbookAsync",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 25,
        "sourceTargetKind": "call-site",
        "outputSummary": "Writes the provided stream to the uploads folder under web root with a GUID-prefixed unique filename and returns a web-relative path (forward-slash).",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28_evaluates_condition_28",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
        "relation": "calls",
        "label": "create-directory / continue",
        "semanticLabel": "create-directory / continue",
        "semanticTitle": "create-directory / continue",
        "collapsedLabel": "create-directory / continue",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 28,
        "sourceTargetKind": "call-site",
        "outputSummary": "EnsureDirectoryExists(uploadsFolder)",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35_invokes_35",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
        "relation": "calls",
        "label": "Waits for async work",
        "semanticLabel": "Waits for async work",
        "semanticTitle": "Waits for async work",
        "collapsedLabel": "Waits for async work",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 35,
        "sourceTargetKind": "call-site",
        "outputSummary": "await data.CopyToAsync(fileStream);",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_returns_40",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
        "relation": "returns",
        "label": "Return web-relative path with forward slash",
        "semanticLabel": "Return web-relative path with forward slash",
        "semanticTitle": "Return web-relative path with forward slash",
        "collapsedLabel": "Return web-relative path with forward slash",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 40,
        "sourceTargetKind": "return-source",
        "outputSummary": "return $\"uploads/{uniqueFileName}\"",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_returns_40",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
        "relation": "returns",
        "label": "Returns result",
        "semanticLabel": "Returns result",
        "semanticTitle": "Returns result",
        "collapsedLabel": "Returns result",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 40,
        "sourceTargetKind": "return-source",
        "outputSummary": "return $\"uploads/{uniqueFileName}\";",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43_invokes_43",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
        "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
        "relation": "calls",
        "label": "SaveCoverAsync",
        "semanticLabel": "SaveCoverAsync",
        "semanticTitle": "SaveCoverAsync",
        "collapsedLabel": "SaveCoverAsync",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 43,
        "sourceTargetKind": "call-site",
        "outputSummary": "Validates byte-array cover data and delegates to the Stream overload; returns null for empty input.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45_evaluates_condition_45",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
        "relation": "calls",
        "label": "exit / continue",
        "semanticLabel": "exit / continue",
        "semanticTitle": "exit / continue",
        "collapsedLabel": "exit / continue",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 45,
        "sourceTargetKind": "call-site",
        "outputSummary": "if (data == null || data.Length == 0) return null;",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47_returns_47",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
        "relation": "returns",
        "label": "Returns result",
        "semanticLabel": "Returns result",
        "semanticTitle": "Returns result",
        "collapsedLabel": "Returns result",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 47,
        "sourceTargetKind": "return-source",
        "outputSummary": "return await SaveCoverAsync(stream, fileName);",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_47_47_invokes_47",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_47_47",
        "relation": "calls",
        "label": "Waits for async work",
        "semanticLabel": "Waits for async work",
        "semanticTitle": "Waits for async work",
        "collapsedLabel": "Waits for async work",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 47,
        "sourceTargetKind": "call-site",
        "outputSummary": "return await SaveCoverAsync(stream, fileName);",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50_invokes_50",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
        "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
        "relation": "calls",
        "label": "SaveCoverAsync",
        "semanticLabel": "SaveCoverAsync",
        "semanticTitle": "SaveCoverAsync",
        "collapsedLabel": "SaveCoverAsync",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 50,
        "sourceTargetKind": "call-site",
        "outputSummary": "Writes the provided cover stream to the covers folder under web root with a GUID-prefixed unique filename and returns a web-relative path (nullable).",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53_evaluates_condition_53",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
        "relation": "calls",
        "label": "create-directory / continue",
        "semanticLabel": "create-directory / continue",
        "semanticTitle": "create-directory / continue",
        "collapsedLabel": "create-directory / continue",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 53,
        "sourceTargetKind": "call-site",
        "outputSummary": "EnsureDirectoryExists(coversFolder)",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60_invokes_60",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
        "relation": "calls",
        "label": "Waits for async work",
        "semanticLabel": "Waits for async work",
        "semanticTitle": "Waits for async work",
        "collapsedLabel": "Waits for async work",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 60,
        "sourceTargetKind": "call-site",
        "outputSummary": "await data.CopyToAsync(fileStream);",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_returns_63",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
        "relation": "returns",
        "label": "Return web-relative path with forward slash",
        "semanticLabel": "Return web-relative path with forward slash",
        "semanticTitle": "Return web-relative path with forward slash",
        "collapsedLabel": "Return web-relative path with forward slash",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 63,
        "sourceTargetKind": "return-source",
        "outputSummary": "return $\"covers/{uniqueFileName}\"",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_returns_63",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
        "relation": "returns",
        "label": "Returns result",
        "semanticLabel": "Returns result",
        "semanticTitle": "Returns result",
        "collapsedLabel": "Returns result",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 63,
        "sourceTargetKind": "return-source",
        "outputSummary": "return $\"covers/{uniqueFileName}\";",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66_invokes_66",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
        "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
        "relation": "calls",
        "label": "EnsureDirectoryExists",
        "semanticLabel": "EnsureDirectoryExists",
        "semanticTitle": "EnsureDirectoryExists",
        "collapsedLabel": "EnsureDirectoryExists",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 66,
        "sourceTargetKind": "call-site",
        "outputSummary": "Checks for the existence of a directory and creates it if missing.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68_evaluates_condition_68",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
        "relation": "calls",
        "label": "create-directory / continue",
        "semanticLabel": "create-directory / continue",
        "semanticTitle": "create-directory / continue",
        "collapsedLabel": "create-directory / continue",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 68,
        "sourceTargetKind": "call-site",
        "outputSummary": "Directory.CreateDirectory(path)",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68_evaluates_condition_68",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68",
        "relation": "calls",
        "label": "true / false",
        "semanticLabel": "true / false",
        "semanticTitle": "true / false",
        "collapsedLabel": "true / false",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 68,
        "sourceTargetKind": "call-site",
        "outputSummary": "if (!Directory.Exists(path))",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10_defines_type_10",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
        "to": "flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10",
        "relation": "transforms",
        "label": "model BookStorageService",
        "semanticLabel": "model BookStorageService",
        "semanticTitle": "model BookStorageService",
        "collapsedLabel": "model BookStorageService",
        "expandedLabel": "defines-type",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 10,
        "sourceTargetKind": "call-site",
        "outputSummary": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1_flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3_maps_dto_3",
        "diagramId": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1",
        "to": "flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3",
        "relation": "transforms",
        "label": "dto AiSettings",
        "semanticLabel": "dto AiSettings",
        "semanticTitle": "dto AiSettings",
        "collapsedLabel": "dto AiSettings",
        "expandedLabel": "maps-dto",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Configuration/AiSettings.cs",
        "sourceLine": 3,
        "sourceTargetKind": "call-site",
        "outputSummary": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Configuration/AiSettings.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19_invokes_19",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
        "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
        "relation": "calls",
        "label": "SaveEbookAsync",
        "semanticLabel": "SaveEbookAsync",
        "semanticTitle": "SaveEbookAsync",
        "collapsedLabel": "SaveEbookAsync",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 19,
        "sourceTargetKind": "call-site",
        "outputSummary": "Wraps a byte-array payload into a MemoryStream and delegates to the Stream overload to persist an ebook.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22_returns_22",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
        "relation": "returns",
        "label": "Returns result",
        "semanticLabel": "Returns result",
        "semanticTitle": "Returns result",
        "collapsedLabel": "Returns result",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 22,
        "sourceTargetKind": "return-source",
        "outputSummary": "return await SaveEbookAsync(stream, fileName);",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_22_22_invokes_22",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_22_22",
        "relation": "calls",
        "label": "Waits for async work",
        "semanticLabel": "Waits for async work",
        "semanticTitle": "Waits for async work",
        "collapsedLabel": "Waits for async work",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 22,
        "sourceTargetKind": "call-site",
        "outputSummary": "return await SaveEbookAsync(stream, fileName);",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25_invokes_25",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
        "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
        "relation": "calls",
        "label": "SaveEbookAsync",
        "semanticLabel": "SaveEbookAsync",
        "semanticTitle": "SaveEbookAsync",
        "collapsedLabel": "SaveEbookAsync",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 25,
        "sourceTargetKind": "call-site",
        "outputSummary": "Writes the provided stream to the uploads folder under web root with a GUID-prefixed unique filename and returns a web-relative path (forward-slash).",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28_evaluates_condition_28",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
        "relation": "calls",
        "label": "create-directory / continue",
        "semanticLabel": "create-directory / continue",
        "semanticTitle": "create-directory / continue",
        "collapsedLabel": "create-directory / continue",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 28,
        "sourceTargetKind": "call-site",
        "outputSummary": "EnsureDirectoryExists(uploadsFolder)",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35_invokes_35",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
        "relation": "calls",
        "label": "Waits for async work",
        "semanticLabel": "Waits for async work",
        "semanticTitle": "Waits for async work",
        "collapsedLabel": "Waits for async work",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 35,
        "sourceTargetKind": "call-site",
        "outputSummary": "await data.CopyToAsync(fileStream);",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_returns_40",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
        "relation": "returns",
        "label": "Return web-relative path with forward slash",
        "semanticLabel": "Return web-relative path with forward slash",
        "semanticTitle": "Return web-relative path with forward slash",
        "collapsedLabel": "Return web-relative path with forward slash",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 40,
        "sourceTargetKind": "return-source",
        "outputSummary": "return $\"uploads/{uniqueFileName}\"",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_returns_40",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
        "relation": "returns",
        "label": "Returns result",
        "semanticLabel": "Returns result",
        "semanticTitle": "Returns result",
        "collapsedLabel": "Returns result",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 40,
        "sourceTargetKind": "return-source",
        "outputSummary": "return $\"uploads/{uniqueFileName}\";",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43_invokes_43",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
        "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
        "relation": "calls",
        "label": "SaveCoverAsync",
        "semanticLabel": "SaveCoverAsync",
        "semanticTitle": "SaveCoverAsync",
        "collapsedLabel": "SaveCoverAsync",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 43,
        "sourceTargetKind": "call-site",
        "outputSummary": "Validates byte-array cover data and delegates to the Stream overload; returns null for empty input.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45_evaluates_condition_45",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
        "relation": "calls",
        "label": "exit / continue",
        "semanticLabel": "exit / continue",
        "semanticTitle": "exit / continue",
        "collapsedLabel": "exit / continue",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 45,
        "sourceTargetKind": "call-site",
        "outputSummary": "if (data == null || data.Length == 0) return null;",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47_returns_47",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
        "relation": "returns",
        "label": "Returns result",
        "semanticLabel": "Returns result",
        "semanticTitle": "Returns result",
        "collapsedLabel": "Returns result",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 47,
        "sourceTargetKind": "return-source",
        "outputSummary": "return await SaveCoverAsync(stream, fileName);",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_47_47_invokes_47",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_47_47",
        "relation": "calls",
        "label": "Waits for async work",
        "semanticLabel": "Waits for async work",
        "semanticTitle": "Waits for async work",
        "collapsedLabel": "Waits for async work",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 47,
        "sourceTargetKind": "call-site",
        "outputSummary": "return await SaveCoverAsync(stream, fileName);",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50_invokes_50",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
        "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
        "relation": "calls",
        "label": "SaveCoverAsync",
        "semanticLabel": "SaveCoverAsync",
        "semanticTitle": "SaveCoverAsync",
        "collapsedLabel": "SaveCoverAsync",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 50,
        "sourceTargetKind": "call-site",
        "outputSummary": "Writes the provided cover stream to the covers folder under web root with a GUID-prefixed unique filename and returns a web-relative path (nullable).",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53_evaluates_condition_53",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
        "relation": "calls",
        "label": "create-directory / continue",
        "semanticLabel": "create-directory / continue",
        "semanticTitle": "create-directory / continue",
        "collapsedLabel": "create-directory / continue",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 53,
        "sourceTargetKind": "call-site",
        "outputSummary": "EnsureDirectoryExists(coversFolder)",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60_invokes_60",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
        "relation": "calls",
        "label": "Waits for async work",
        "semanticLabel": "Waits for async work",
        "semanticTitle": "Waits for async work",
        "collapsedLabel": "Waits for async work",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 60,
        "sourceTargetKind": "call-site",
        "outputSummary": "await data.CopyToAsync(fileStream);",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_returns_63",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
        "relation": "returns",
        "label": "Return web-relative path with forward slash",
        "semanticLabel": "Return web-relative path with forward slash",
        "semanticTitle": "Return web-relative path with forward slash",
        "collapsedLabel": "Return web-relative path with forward slash",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 63,
        "sourceTargetKind": "return-source",
        "outputSummary": "return $\"covers/{uniqueFileName}\"",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_returns_63",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
        "relation": "returns",
        "label": "Returns result",
        "semanticLabel": "Returns result",
        "semanticTitle": "Returns result",
        "collapsedLabel": "Returns result",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 63,
        "sourceTargetKind": "return-source",
        "outputSummary": "return $\"covers/{uniqueFileName}\";",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66_invokes_66",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
        "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
        "relation": "calls",
        "label": "EnsureDirectoryExists",
        "semanticLabel": "EnsureDirectoryExists",
        "semanticTitle": "EnsureDirectoryExists",
        "collapsedLabel": "EnsureDirectoryExists",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 66,
        "sourceTargetKind": "call-site",
        "outputSummary": "Checks for the existence of a directory and creates it if missing.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68_evaluates_condition_68",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
        "relation": "calls",
        "label": "create-directory / continue",
        "semanticLabel": "create-directory / continue",
        "semanticTitle": "create-directory / continue",
        "collapsedLabel": "create-directory / continue",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 68,
        "sourceTargetKind": "call-site",
        "outputSummary": "Directory.CreateDirectory(path)",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68_evaluates_condition_68",
        "diagramId": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68",
        "relation": "calls",
        "label": "true / false",
        "semanticLabel": "true / false",
        "semanticTitle": "true / false",
        "collapsedLabel": "true / false",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 68,
        "sourceTargetKind": "call-site",
        "outputSummary": "if (!Directory.Exists(path))",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10_defines_type_10",
        "diagramId": "contracts_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
        "to": "flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10",
        "relation": "transforms",
        "label": "model BookStorageService",
        "semanticLabel": "model BookStorageService",
        "semanticTitle": "model BookStorageService",
        "collapsedLabel": "model BookStorageService",
        "expandedLabel": "defines-type",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 10,
        "sourceTargetKind": "call-site",
        "outputSummary": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1_flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3_maps_dto_3",
        "diagramId": "contracts_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1",
        "to": "flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3",
        "relation": "transforms",
        "label": "dto AiSettings",
        "semanticLabel": "dto AiSettings",
        "semanticTitle": "dto AiSettings",
        "collapsedLabel": "dto AiSettings",
        "expandedLabel": "maps-dto",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Configuration/AiSettings.cs",
        "sourceLine": 3,
        "sourceTargetKind": "call-site",
        "outputSummary": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Configuration/AiSettings.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22_returns_22",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
        "relation": "returns",
        "label": "Returns result",
        "semanticLabel": "Returns result",
        "semanticTitle": "Returns result",
        "collapsedLabel": "Returns result",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 22,
        "sourceTargetKind": "return-source",
        "outputSummary": "return await SaveEbookAsync(stream, fileName);",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28_evaluates_condition_28",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
        "relation": "calls",
        "label": "create-directory / continue",
        "semanticLabel": "create-directory / continue",
        "semanticTitle": "create-directory / continue",
        "collapsedLabel": "create-directory / continue",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 28,
        "sourceTargetKind": "call-site",
        "outputSummary": "EnsureDirectoryExists(uploadsFolder)",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_returns_40",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
        "relation": "returns",
        "label": "Return web-relative path with forward slash",
        "semanticLabel": "Return web-relative path with forward slash",
        "semanticTitle": "Return web-relative path with forward slash",
        "collapsedLabel": "Return web-relative path with forward slash",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 40,
        "sourceTargetKind": "return-source",
        "outputSummary": "return $\"uploads/{uniqueFileName}\"",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_returns_40",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
        "relation": "returns",
        "label": "Returns result",
        "semanticLabel": "Returns result",
        "semanticTitle": "Returns result",
        "collapsedLabel": "Returns result",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 40,
        "sourceTargetKind": "return-source",
        "outputSummary": "return $\"uploads/{uniqueFileName}\";",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45_evaluates_condition_45",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
        "relation": "calls",
        "label": "exit / continue",
        "semanticLabel": "exit / continue",
        "semanticTitle": "exit / continue",
        "collapsedLabel": "exit / continue",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 45,
        "sourceTargetKind": "call-site",
        "outputSummary": "if (data == null || data.Length == 0) return null;",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47_returns_47",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
        "relation": "returns",
        "label": "Returns result",
        "semanticLabel": "Returns result",
        "semanticTitle": "Returns result",
        "collapsedLabel": "Returns result",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 47,
        "sourceTargetKind": "return-source",
        "outputSummary": "return await SaveCoverAsync(stream, fileName);",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53_evaluates_condition_53",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
        "relation": "calls",
        "label": "create-directory / continue",
        "semanticLabel": "create-directory / continue",
        "semanticTitle": "create-directory / continue",
        "collapsedLabel": "create-directory / continue",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 53,
        "sourceTargetKind": "call-site",
        "outputSummary": "EnsureDirectoryExists(coversFolder)",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_returns_63",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
        "relation": "returns",
        "label": "Return web-relative path with forward slash",
        "semanticLabel": "Return web-relative path with forward slash",
        "semanticTitle": "Return web-relative path with forward slash",
        "collapsedLabel": "Return web-relative path with forward slash",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 63,
        "sourceTargetKind": "return-source",
        "outputSummary": "return $\"covers/{uniqueFileName}\"",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_returns_63",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
        "relation": "returns",
        "label": "Returns result",
        "semanticLabel": "Returns result",
        "semanticTitle": "Returns result",
        "collapsedLabel": "Returns result",
        "expandedLabel": "returns",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 63,
        "sourceTargetKind": "return-source",
        "outputSummary": "return $\"covers/{uniqueFileName}\";",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68_evaluates_condition_68",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
        "relation": "calls",
        "label": "create-directory / continue",
        "semanticLabel": "create-directory / continue",
        "semanticTitle": "create-directory / continue",
        "collapsedLabel": "create-directory / continue",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 68,
        "sourceTargetKind": "call-site",
        "outputSummary": "Directory.CreateDirectory(path)",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68_evaluates_condition_68",
        "diagramId": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
        "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
        "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68",
        "relation": "calls",
        "label": "true / false",
        "semanticLabel": "true / false",
        "semanticTitle": "true / false",
        "collapsedLabel": "true / false",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
        "sourceLine": 68,
        "sourceTargetKind": "call-site",
        "outputSummary": "if (!Directory.Exists(path))",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175_invokes_175",
        "diagramId": "method_flows_graph",
        "from": "flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1",
        "to": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175",
        "relation": "calls",
        "label": "CountWords",
        "semanticLabel": "CountWords",
        "semanticTitle": "CountWords",
        "collapsedLabel": "CountWords",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
        "sourceLine": 175,
        "sourceTargetKind": "call-site",
        "outputSummary": "Counts words in a text by splitting on whitespace characters; returns 0 for null/whitespace input.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177_evaluates_condition_177",
        "diagramId": "method_flows_graph",
        "from": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175",
        "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177",
        "relation": "calls",
        "label": "empty check",
        "semanticLabel": "empty check",
        "semanticTitle": "empty check",
        "collapsedLabel": "empty check",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
        "sourceLine": 177,
        "sourceTargetKind": "call-site",
        "outputSummary": "returns 0 if string.IsNullOrWhiteSpace",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs"
        ]
      },
      {
        "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_85_85_flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9_uses_service_87",
        "diagramId": "method_flows_graph",
        "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_85_85",
        "to": "flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9",
        "relation": "uses",
        "label": "ContentHasher.ComputeHash",
        "semanticLabel": "ContentHasher.ComputeHash",
        "semanticTitle": "ContentHasher.ComputeHash",
        "collapsedLabel": "ContentHasher.ComputeHash",
        "expandedLabel": "uses-service",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
        "sourceLine": 87,
        "sourceTargetKind": "call-site",
        "outputSummary": "normalizedText",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1_flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9_invokes_9",
        "diagramId": "method_flows_graph",
        "from": "flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1",
        "to": "flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9",
        "relation": "calls",
        "label": "ComputeHash",
        "semanticLabel": "ComputeHash",
        "semanticTitle": "ComputeHash",
        "collapsedLabel": "ComputeHash",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
        "sourceLine": 9,
        "sourceTargetKind": "call-site",
        "outputSummary": "Normalize the provided string and return its SHA-256 hash as a lower-case hex string; returns empty string for null/whitespace input.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_branch_11_11_evaluates_condition_11",
        "diagramId": "method_flows_graph",
        "from": "flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9",
        "to": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_branch_11_11",
        "relation": "calls",
        "label": "true / false",
        "semanticLabel": "true / false",
        "semanticTitle": "true / false",
        "collapsedLabel": "true / false",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
        "sourceLine": 11,
        "sourceTargetKind": "call-site",
        "outputSummary": "if (string.IsNullOrWhiteSpace(input))",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1_flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_21_invokes_21",
        "diagramId": "method_flows_graph",
        "from": "flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1",
        "to": "flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_21",
        "relation": "calls",
        "label": "BroadcastProgressAsync",
        "semanticLabel": "BroadcastProgressAsync",
        "semanticTitle": "BroadcastProgressAsync",
        "collapsedLabel": "BroadcastProgressAsync",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
        "sourceLine": 21,
        "sourceTargetKind": "call-site",
        "outputSummary": "Sends a 'ProgressUpdated' notification to all connected devices of a user (attempts to consider an excluded connection id but falls back to User-scoped broadcast).",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_21_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_guard_clause_30_30_evaluates_condition_30",
        "diagramId": "method_flows_graph",
        "from": "flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_21",
        "to": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_guard_clause_30_30",
        "relation": "calls",
        "label": "enter branch: attempts exclusion comment / else: normal send",
        "semanticLabel": "enter branch: attempts exclusion comment / else: normal send",
        "semanticTitle": "enter branch: attempts exclusion comment / else: normal send",
        "collapsedLabel": "enter branch: attempts exclusion comment / else: normal send",
        "expandedLabel": "evaluates-condition",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
        "sourceLine": 30,
        "sourceTargetKind": "call-site",
        "outputSummary": "If excludedConnectionId present the code enters the if-block but still uses Clients.User(userId).SendAsync (no actual exclusion implemented here).",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1_flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19_invokes_19",
        "diagramId": "method_flows_graph",
        "from": "flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1",
        "to": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19",
        "relation": "calls",
        "label": "UpdateProgress",
        "semanticLabel": "UpdateProgress",
        "semanticTitle": "UpdateProgress",
        "collapsedLabel": "UpdateProgress",
        "expandedLabel": "handles-route",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
        "sourceLine": 19,
        "sourceTargetKind": "call-site",
        "outputSummary": "If the connection is associated with an authenticated user, create and forward an UpdateReadingProgressCommand (including ConnectionId) to the application via MediatR.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19_flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_21_21_invokes_21",
        "diagramId": "method_flows_graph",
        "from": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19",
        "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_21_21",
        "relation": "calls",
        "label": "Reads repository or persistence state",
        "semanticLabel": "Reads repository or persistence state",
        "semanticTitle": "Reads repository or persistence state",
        "collapsedLabel": "Reads repository or persistence state",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
        "sourceLine": 21,
        "sourceTargetKind": "call-site",
        "outputSummary": "var userId = Context.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1_flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28_invokes_28",
        "diagramId": "method_flows_graph",
        "from": "flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1",
        "to": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28",
        "relation": "calls",
        "label": "OnConnectedAsync",
        "semanticLabel": "OnConnectedAsync",
        "semanticTitle": "OnConnectedAsync",
        "collapsedLabel": "OnConnectedAsync",
        "expandedLabel": "handles-route",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
        "sourceLine": 28,
        "sourceTargetKind": "call-site",
        "outputSummary": "When a client connects, add the connection to a per-user SignalR group if UserIdentifier is present, then call base.OnConnectedAsync.",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28_flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_30_30_invokes_30",
        "diagramId": "method_flows_graph",
        "from": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28",
        "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_30_30",
        "relation": "calls",
        "label": "Reads repository or persistence state",
        "semanticLabel": "Reads repository or persistence state",
        "semanticTitle": "Reads repository or persistence state",
        "collapsedLabel": "Reads repository or persistence state",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
        "sourceLine": 30,
        "sourceTargetKind": "call-site",
        "outputSummary": "var userId = Context.UserIdentifier;",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs"
        ]
      },
      {
        "id": "edge_flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1_flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38_invokes_38",
        "diagramId": "method_flows_graph",
        "from": "flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1",
        "to": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38",
        "relation": "calls",
        "label": "OnDisconnectedAsync",
        "semanticLabel": "OnDisconnectedAsync",
        "semanticTitle": "OnDisconnectedAsync",
        "collapsedLabel": "OnDisconnectedAsync",
        "expandedLabel": "handles-route",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
        "sourceLine": 38,
        "sourceTargetKind": "call-site",
        "outputSummary": "When a client disconnects, remove the connection from the per-user SignalR group if UserIdentifier is present, then call base.OnDisconnectedAsync(exception).",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs"
        ]
      },
      {
        "id": "edge_flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38_flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_40_40_invokes_40",
        "diagramId": "method_flows_graph",
        "from": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38",
        "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_40_40",
        "relation": "calls",
        "label": "Reads repository or persistence state",
        "semanticLabel": "Reads repository or persistence state",
        "semanticTitle": "Reads repository or persistence state",
        "collapsedLabel": "Reads repository or persistence state",
        "expandedLabel": "invokes",
        "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
        "sourceLine": 40,
        "sourceTargetKind": "call-site",
        "outputSummary": "var userId = Context.UserIdentifier;",
        "inputTypePaths": [],
        "outputTypePaths": [],
        "evidencePaths": [
          "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs"
        ]
      }
    ],
    "contextBagDebug": {
      "id": "infrastructure_services_md",
      "bagType": "checkout",
      "title": "Infrastructure Services (AI, Epub, Storage, Billing) context bag",
      "anchorFiles": [
        "NexusReader.Infrastructure/Services/BillingService.cs",
        "NexusReader.Infrastructure/Services/BookStorageService.cs",
        "NexusReader.Infrastructure/Services/EpubReaderService.cs"
      ],
      "includedFiles": [
        {
          "path": "NexusReader.Infrastructure/Services/BillingService.cs",
          "reason": "Selected as a high-value orchestration anchor within the document scope",
          "source": "convention"
        },
        {
          "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "reason": "Selected as a high-value orchestration anchor within the document scope",
          "source": "convention"
        },
        {
          "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "reason": "Selected as a high-value orchestration anchor within the document scope",
          "source": "convention"
        },
        {
          "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "reason": "Included because it likely participates in the core orchestration path",
          "source": "scope"
        },
        {
          "path": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "reason": "Included because it belongs to the resolved document scope",
          "source": "scope"
        },
        {
          "path": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "reason": "Included because it belongs to the resolved document scope",
          "source": "scope"
        },
        {
          "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "reason": "Included because it belongs to the resolved document scope",
          "source": "scope"
        },
        {
          "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "reason": "Included because it belongs to the resolved document scope",
          "source": "scope"
        },
        {
          "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "reason": "Included because it belongs to the resolved document scope",
          "source": "scope"
        },
        {
          "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "reason": "Included because it belongs to the resolved document scope",
          "source": "scope"
        },
        {
          "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "reason": "Included because it likely participates in the core orchestration path",
          "source": "scope"
        },
        {
          "path": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
          "reason": "Included because it likely participates in the core orchestration path",
          "source": "scope"
        }
      ],
      "relatedDomains": [],
      "relatedEntrypoints": [],
      "confidence": 0.75
    },
    "flowGraph": {
      "contextBagId": "infrastructure_services_md",
      "nodes": [
        {
          "id": "flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1",
          "label": "BillingService",
          "role": "service",
          "layer": "infrastructure",
          "kind": "file",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 1,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 1
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32",
          "label": "HandleSubscriptionUpdatedAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 32,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 32
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 34,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 34
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36",
          "label": "Reads repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 36,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 36
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 36,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 36
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 37,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 37
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37",
          "label": "Rejects if user not found",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 37,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 37
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_39_39",
          "label": "Logs runtime state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 39,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 39
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_40_40",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 40,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 40
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 46,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 46
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_51_51",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 51,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 51
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_51_51",
          "label": "Falls back to alternate path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 51,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 51
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_56_56",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 56,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 56
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_56_56",
          "label": "Falls back to alternate path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 56,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 56
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_58_58",
          "label": "Logs runtime state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 58,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 58
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_61_61",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 61,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 61
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_62_62",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 62,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 62
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_63_63",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 63,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 63
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_69_69",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 69,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 69
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_70_70",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 70,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 70
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_72_72",
          "label": "Logs runtime state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 72,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 72
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_74_74",
          "label": "Reads repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 74,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 74
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_74_74",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 74,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 74
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_77_77",
          "label": "Return success",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 77,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 77
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_catch_79_79",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 79,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 79
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_81_81",
          "label": "Logs runtime state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 81,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 81
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_82_82",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 82,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 82
            }
          ]
        },
        {
          "id": "flow_file_nexusreader_infrastructure_configuration_stripesettings_cs_file_1",
          "label": "StripeSettings",
          "role": "config",
          "layer": "infrastructure",
          "kind": "file",
          "filePath": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "sourcePath": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "sourceLine": 1,
          "evidencePaths": [
            "NexusReader.Infrastructure/Configuration/StripeSettings.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
              "line": 1
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_86",
          "label": "HandleSubscriptionDeletedAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 86,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 86
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_try_88_88",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 88,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 88
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_repository_read_90_90",
          "label": "Reads repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 90,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 90
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_90_90",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 90,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 90
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_91_91",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 91,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 91
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_guard_clause_91_91",
          "label": "Rejects if user not found",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 91,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 91
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_log_93_93",
          "label": "Logs runtime state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 93,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 93
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_94_94",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 94,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 94
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_97_97",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 97,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 97
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_98_98",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 98,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 98
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_99_99",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 99,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 99
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_105_105",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 105,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 105
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_106_106",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 106,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 106
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_log_108_108",
          "label": "Logs runtime state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 108,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 108
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_repository_read_110_110",
          "label": "Reads repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 110,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 110
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_110_110",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 110,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 110
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_113_113",
          "label": "Return success",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 113,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 113
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_catch_115_115",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 115,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 115
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_log_117_117",
          "label": "Logs runtime state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 117,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 117
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_118_118",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 118,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 118
            }
          ]
        },
        {
          "id": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "label": "BookStorageService",
          "role": "service",
          "layer": "infrastructure",
          "kind": "file",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 1,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 1
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
          "label": "SaveEbookAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 19,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 19
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 22,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 22
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_22_22",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 22,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 22
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
          "label": "SaveEbookAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 25,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 25
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
          "label": "Ensure uploads directory exists (create if missing)",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 28,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 28
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 35,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 35
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
          "label": "Return web-relative path with forward slash",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 40,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 40
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
          "label": "SaveCoverAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 43,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 43
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
          "label": "Guards early exit or rejection path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 45,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 45
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 47,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 47
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_47_47",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 47,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 47
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
          "label": "SaveCoverAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 50,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 50
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
          "label": "Ensure covers directory exists (create if missing)",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 53,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 53
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 60,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 60
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
          "label": "Return web-relative path with forward slash",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 63,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 63
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
          "label": "EnsureDirectoryExists",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 66,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 66
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
          "label": "Check directory existence and create if absent",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 68,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 68
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 68,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 68
            }
          ]
        },
        {
          "id": "flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10",
          "label": "BookStorageService",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "type",
          "filePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 10,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 10
            }
          ]
        },
        {
          "id": "flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1",
          "label": "EpubReaderService",
          "role": "service",
          "layer": "infrastructure",
          "kind": "file",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 1,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 1
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_30",
          "label": "GetEpubContentAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 30,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 30
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_try_36_36",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 36,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 36
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_39_39",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 39,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 39
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_repository_read_41_41",
          "label": "Reads repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 41,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 41
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_41_41",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 41,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 41
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_guard_clause_47_47",
          "label": "ebook not found",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 47,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 47
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_47_47",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 47,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 47
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_49_49",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 49,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 49
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_55_55",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 55,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 55
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_log_57_57",
          "label": "Logs runtime state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 57,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 57
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_58_58",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 58,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 58
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_62_62",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 62,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 62
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_65_65",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 65,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 65
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_guard_clause_65_65",
          "label": "no reading order",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 65,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 65
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_67_67",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 67,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 67
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_70_70",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 70,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 70
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_repository_read_77_77",
          "label": "Reads repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 77,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 77
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_81_81",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 81,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 81
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_loop_89_89",
          "label": "iterate paragraphs",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 89,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 89
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_guard_clause_92_92",
          "label": "Guards early exit or rejection path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 92,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 92
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_99_99",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 99,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 99
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_106_106",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 106,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 106
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_111_111",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 111,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 111
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_catch_113_113",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 113,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 113
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_log_115_115",
          "label": "Logs runtime state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 115,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 115
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_116_116",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 116,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 116
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_124",
          "label": "ResolvePath",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 124,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 124
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_loop_130_130",
          "label": "Repeats work over a collection or condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 130,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 130
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_guard_clause_133_133",
          "label": "Guards early exit or rejection path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 133,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 133
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_guard_clause_137_137",
          "label": "Guards early exit or rejection path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 137,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 137
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_return_142_142",
          "label": "not found",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 142,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 142
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_145",
          "label": "ExtractParagraphs",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 145,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 145
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_loop_153_153",
          "label": "Repeats work over a collection or condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 153,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 153
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_branch_158_158",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 158,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 158
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_return_163_163",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 163,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 163
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_sanitizeparagraph_166",
          "label": "SanitizeParagraph",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 166,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 166
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_sanitizeparagraph_return_172_172",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 172,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 172
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175",
          "label": "CountWords",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 175,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 175
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177",
          "label": "empty check",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 177,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 177
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_return_178_178",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 178,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 178
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_186",
          "label": "FindTitleInNavigation",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 186,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 186
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_repository_read_186_186",
          "label": "Reads repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 186,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 186
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_guard_clause_188_188",
          "label": "Guards early exit or rejection path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 188,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 188
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_loop_191_191",
          "label": "iterate navigation items",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 191,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 191
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_branch_193_193",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 193,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 193
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_return_194_194",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 194,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 194
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_branch_196_196",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 196,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 196
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_repository_read_198_198",
          "label": "Reads repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 198,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 198
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_guard_clause_199_199",
          "label": "Guards early exit or rejection path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 199,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 199
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_return_203_203",
          "label": "not found",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 203,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 203
            }
          ]
        },
        {
          "id": "flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1",
          "label": "KnowledgeService",
          "role": "service",
          "layer": "infrastructure",
          "kind": "file",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 1,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 1
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_knowledgeservice_38",
          "label": "KnowledgeService",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 38,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 38
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeasync_61",
          "label": "GetKnowledgeAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 61,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 61
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeasync_return_63_63",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 63,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 63
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeasync_await_63_63",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 63,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 63
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getgraphdataasync_66",
          "label": "GetGraphDataAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 66,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 66
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getgraphdataasync_return_68_68",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 68,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 68
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getgraphdataasync_await_68_68",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 68,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 68
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getsummaryandquizasync_71",
          "label": "GetSummaryAndQuizAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 71,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 71
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getsummaryandquizasync_return_73_73",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 73,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 73
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getsummaryandquizasync_await_73_73",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 73,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 73
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgemapasync_76",
          "label": "GetKnowledgeMapAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 76,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 76
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgemapasync_return_78_78",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 78,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 78
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgemapasync_await_78_78",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 78,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 78
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_81",
          "label": "GetKnowledgeInternalAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 81,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 81
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_guard_clause_83_83",
          "label": "Guards early exit or rejection path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 83,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 83
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_85_85",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 85,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 85
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_90_90",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 90,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 90
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_branch_93_93",
          "label": "cache hit and valid prompt version",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 93,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 93
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_try_96_96",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 96,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 96
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_guard_clause_99_99",
          "label": "Guards early exit or rejection path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 99,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 99
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_catch_101_101",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 101,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 101
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_log_103_103",
          "label": "Logs runtime state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 103,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 103
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_try_116_116",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 116,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 116
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_118_118",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 118,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 118
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_branch_122_122",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 122,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 122
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_fallback_122_122",
          "label": "remove failed active request so future attempts can retry",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 122,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 122
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_return_127_127",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 127,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 127
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_catch_129_129",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 129,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 129
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_throw_132_132",
          "label": "Throws exception",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 132,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 132
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_finally_134_134",
          "label": "Runs cleanup or finalization",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 134,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 134
            }
          ]
        },
        {
          "id": "flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1",
          "label": "ContentHasher",
          "role": "service",
          "layer": "infrastructure",
          "kind": "file",
          "filePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 1,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 1
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9",
          "label": "ComputeHash",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 9,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 9
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_140",
          "label": "ExecuteAiRequestAndCacheAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 140,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 140
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_try_149_149",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 149,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 149
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_151_151",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 151,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 151
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_retry_159_159",
          "label": "AI request executed via resilience pipeline",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 159,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 159
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_159_159",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 159,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 159
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_160_160",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 160,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 160
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_guard_clause_166_166",
          "label": "empty AI response handling",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 166,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 166
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_guard_clause_167_167",
          "label": "Guards early exit or rejection path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 167,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 167
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_try_173_173",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 173,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 173
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_guard_clause_176_176",
          "label": "Guards early exit or rejection path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 176,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 176
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_179_179",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 179,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 179
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_branch_193_193",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 193,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 193
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_repository_write_193_193",
          "label": "Writes repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 193,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 193
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_fallback_194_194",
          "label": "Falls back to alternate path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 194,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 194
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_202_202",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 202,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 202
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_204_204",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 204,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 204
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_return_205_205",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 205,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 205
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_catch_207_207",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 207,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 207
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_log_209_209",
          "label": "Logs runtime state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 209,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 209
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_return_210_210",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 210,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 210
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_catch_213_213",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 213,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 213
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_return_215_215",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 215,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 215
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_finally_217_217",
          "label": "Runs cleanup or finalization",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 217,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 217
            }
          ]
        },
        {
          "id": "flow_file_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_file_1",
          "label": "JsonRepairHelper",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "file",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 1,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 1
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_8",
          "label": "Repair",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 8,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 8
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_225",
          "label": "ProcessKnowledgeUnitsAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 225,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 225
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_await_234_234",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 234,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 234
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_repository_read_235_235",
          "label": "Reads repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 235,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 235
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_240_240",
          "label": "Repeats work over a collection or condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 240,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 240
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_branch_245_245",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 245,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 245
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_repository_write_248_248",
          "label": "Writes repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 248,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 248
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_266_266",
          "label": "create links",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 266,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 266
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_branch_271_271",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 271,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 271
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_repository_write_281_281",
          "label": "Writes repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 281,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 281
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_fallback_283_283",
          "label": "Falls back to alternate path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 283,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 283
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_log_285_285",
          "label": "Logs runtime state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 285,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 285
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_290",
          "label": "VerifyGroundednessAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 290,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 290
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_return_295_295",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 295,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 295
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_try_300_300",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 300,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 300
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_retry_308_308",
          "label": "invoke chat client via retry pipeline",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 308,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 308
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_await_308_308",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 308,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 308
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_await_309_309",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 309,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 309
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_return_320_320",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 320,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 320
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_catch_322_322",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 322,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 322
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_return_324_324",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 324,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 324
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_328",
          "label": "GetRelevantContextAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 328,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 328
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_try_330_330",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 330,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 330
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_await_332_332",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 332,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 332
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_await_333_333",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 333,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 333
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_336_336",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 336,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 336
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_337_337",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 337,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 337
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_339_339",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 339,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 339
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_342_342",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 342,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 342
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_345_345",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 345,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 345
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_347_347",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 347,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 347
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_350_350",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 350,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 350
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_354_354",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 354,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 354
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_try_355_355",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 355,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 355
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_await_357_357",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 357,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 357
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_catch_366_366",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 366,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 366
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_368_368",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 368,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 368
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_return_377_377",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 377,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 377
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_catch_379_379",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 379,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 379
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_return_381_381",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 381,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 381
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_385",
          "label": "SearchLibrarySemanticallyAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 385,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 385
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_387_387",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 387,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 387
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_390_390",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 390,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 390
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_391_391",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 391,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 391
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_399_399",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 399,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 399
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_400_400",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 400,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 400
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_402_402",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 402,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 402
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_405_405",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 405,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 405
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_408_408",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 408,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 408
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_410_410",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 410,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 410
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_413_413",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 413,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 413
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_417_417",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 417,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 417
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_418_418",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 418,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 418
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_420_420",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 420,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 420
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_429_429",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 429,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 429
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_log_431_431",
          "label": "Logs runtime state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 431,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 431
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_432_432",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 432,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 432
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_435_435",
          "label": "empty result fast path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 435,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 435
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_437_437",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 437,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 437
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_444_444",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 444,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 444
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_446_446",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 446,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 446
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_448_448",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 448,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 448
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_452_452",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 452,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 452
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_454_454",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 454,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 454
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_456_456",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 456,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 456
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_457_457",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 457,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 457
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_457_457",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 457,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 457
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_loop_460_460",
          "label": "Repeats work over a collection or condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 460,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 460
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_464_464",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 464,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 464
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_471_471",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 471,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 471
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_log_473_473",
          "label": "Logs runtime state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 473,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 473
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_repository_read_479_479",
          "label": "Reads repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 479,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 479
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_485_485",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 485,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 485
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_487_487",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 487,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 487
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_488_488",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 488,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 488
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_repository_read_489_489",
          "label": "Reads repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 489,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 489
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_501_501",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 501,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 501
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_507_507",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 507,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 507
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_513_513",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 513,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 513
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_515_515",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 515,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 515
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_519_519",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 519,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 519
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_533_533",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 533,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 533
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_538_538",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 538,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 538
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_541_541",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 541,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 541
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_543_543",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 543,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 543
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_545_545",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 545,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 545
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_549",
          "label": "AskQuestionAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 549,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 549
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_556_556",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 556,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 556
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_559_559",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 559,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 559
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_560_560",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 560,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 560
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_568_568",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 568,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 568
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_571_571",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 571,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 571
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_572_572",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 572,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 572
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_574_574",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 574,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 574
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_577_577",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 577,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 577
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_580_580",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 580,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 580
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_582_582",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 582,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 582
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_585_585",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 585,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 585
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_588_588",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 588,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 588
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_590_590",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 590,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 590
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_592_592",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 592,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 592
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_594_594",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 594,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 594
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_597_597",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 597,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 597
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_602_602",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 602,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 602
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_603_603",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 603,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 603
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_605_605",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 605,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 605
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_614_614",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 614,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 614
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_log_616_616",
          "label": "Logs runtime state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 616,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 616
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_617_617",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 617,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 617
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_620_620",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 620,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 620
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_guard_clause_620_620",
          "label": "no contexts fallback",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 620,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 620
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_622_622",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 622,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 622
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_624_624",
          "label": "Reads repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 624,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 624
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_636_636",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 636,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 636
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_638_638",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 638,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 638
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_640_640",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 640,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 640
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_645_645",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 645,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 645
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_648_648",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 648,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 648
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_650_650",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 650,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 650
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_651_651",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 651,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 651
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_651_651",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 651,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 651
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_654_654",
          "label": "Repeats work over a collection or condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 654,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 654
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_write_659_659",
          "label": "Writes repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 659,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 659
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_662_662",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 662,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 662
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_664_664",
          "label": "Repeats work over a collection or condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 664,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 664
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_671_671",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 671,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 671
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_write_673_673",
          "label": "Writes repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 673,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 673
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_680_680",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 680,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 680
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_log_682_682",
          "label": "Logs runtime state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 682,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 682
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_683_683",
          "label": "Repeats work over a collection or condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 683,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 683
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_write_687_687",
          "label": "Writes repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 687,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 687
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_694_694",
          "label": "Reads repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 694,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 694
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_700_700",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 700,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 700
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_702_702",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 702,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 702
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_703_703",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 703,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 703
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_704_704",
          "label": "Reads repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 704,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 704
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_715_715",
          "label": "Reads repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 715,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 715
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_716_716",
          "label": "Reads repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 716,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 716
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_717_717",
          "label": "Reads repository or persistence state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 717,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 717
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_retry_740_740",
          "label": "invoke Chat client with JSON response format",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 740,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 740
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_740_740",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 740,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 740
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_741_741",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 741,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 741
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_751_751",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 751,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 751
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_754_754",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 754,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 754
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_756_756",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 756,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 756
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_760_760",
          "label": "Repeats work over a collection or condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 760,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 760
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_762_762",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 762,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 762
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_771_771",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 771,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 771
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_773_773",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 773,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 773
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_log_775_775",
          "label": "Logs runtime state",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 775,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 775
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_776_776",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 776,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 776
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_779_779",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 779,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 779
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_781_781",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 781,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 781
            }
          ]
        },
        {
          "id": "flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1",
          "label": "AiSettings",
          "role": "config",
          "layer": "infrastructure",
          "kind": "file",
          "filePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "sourcePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "sourceLine": 1,
          "evidencePaths": [
            "NexusReader.Infrastructure/Configuration/AiSettings.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
              "line": 1
            }
          ]
        },
        {
          "id": "flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3",
          "label": "AiSettings",
          "role": "dto",
          "layer": "infrastructure",
          "kind": "type",
          "filePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "sourcePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "sourceLine": 3,
          "evidencePaths": [
            "NexusReader.Infrastructure/Configuration/AiSettings.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
              "line": 3
            }
          ]
        },
        {
          "id": "flow_type_nexusreader_infrastructure_configuration_stripesettings_cs_stripesettings_3",
          "label": "StripeSettings",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "type",
          "filePath": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "sourcePath": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "sourceLine": 3,
          "evidencePaths": [
            "NexusReader.Infrastructure/Configuration/StripeSettings.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
              "line": 3
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_branch_11_11",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 11,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 11
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_guard_clause_11_11",
          "label": "Rejects empty or whitespace input",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 11,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 11
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_return_13_13",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 13,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 13
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_return_21_21",
          "label": "Returns hash string",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 21,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 21
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_24",
          "label": "Normalize",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 24,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 24
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_branch_26_26",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 26,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 26
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_guard_clause_26_26",
          "label": "Rejects empty or whitespace input",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 26,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 26
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_return_28_28",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 28,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 28
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_return_35_35",
          "label": "Returns normalized string",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 35,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 35
            }
          ]
        },
        {
          "id": "flow_type_nexusreader_infrastructure_helpers_contenthasher_cs_contenthasher_7",
          "label": "ContentHasher",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "type",
          "filePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 7,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 7
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_10_10",
          "label": "Guards early exit or rejection path",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 10,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 10
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_14_14",
          "label": "Detects truncated JSON by final character",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 14,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 14
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_24_24",
          "label": "Evaluates branch condition",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 24,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 24
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_24_24",
          "label": "Prune trailing garbage if cutoff found",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 24,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 24
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_35_35",
          "label": "Iterate characters to rebuild structural stack",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 35,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 35
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_37_37",
          "label": "Guards early exit or rejection path",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 37,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 37
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_38_38",
          "label": "Guards early exit or rejection path",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 38,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 38
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_39_39",
          "label": "Guards early exit or rejection path",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 39,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 39
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_40_40",
          "label": "Guards early exit or rejection path",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 40,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 40
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_42_42",
          "label": "Evaluates branch condition",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 42,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 42
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_43_43",
          "label": "Evaluates branch condition",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 43,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 43
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_fallback_43_43",
          "label": "Falls back to alternate path",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 43,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 43
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_45_45",
          "label": "Evaluates branch condition",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 45,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 45
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_48_48",
          "label": "Evaluates branch condition",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 48,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 48
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_55_55",
          "label": "Evaluates branch condition",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 55,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 55
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_57_57",
          "label": "Append closing characters for remaining open brackets/braces",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 57,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 57
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_60_60",
          "label": "Evaluates branch condition",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 60,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 60
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_61_61",
          "label": "Evaluates branch condition",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 61,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 61
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_fallback_61_61",
          "label": "Falls back to alternate path",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 61,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 61
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_return_64_64",
          "label": "Return repaired JSON",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 64,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 64
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_return_67_67",
          "label": "Returns result",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 67,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 67
            }
          ]
        },
        {
          "id": "flow_type_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_jsonrepairhelper_6",
          "label": "JsonRepairHelper",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "type",
          "filePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 6,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 6
            }
          ]
        },
        {
          "id": "flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1",
          "label": "SignalRSyncBroadcaster",
          "role": "service",
          "layer": "infrastructure",
          "kind": "file",
          "filePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 1,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 1
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_21",
          "label": "BroadcastProgressAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 21,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 21
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_guard_clause_30_30",
          "label": "check excludedConnectionId presence",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 30,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 30
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_branch_30_30",
          "label": "Evaluates branch condition",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 30,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 30
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_await_32_32",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 32,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 32
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_external_call_34_34",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 34,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 34
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_fallback_40_40",
          "label": "Falls back to alternate path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 40,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 40
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_await_42_42",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 42,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 42
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_external_call_44_44",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 44,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 44
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastingestionprogressasync_49",
          "label": "BroadcastIngestionProgressAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 49,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 49
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastingestionprogressasync_await_57_57",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 57,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 57
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastingestionprogressasync_external_call_59_59",
          "label": "Calls external dependency",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 59,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 59
            }
          ]
        },
        {
          "id": "flow_type_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_signalrsyncbroadcaster_11",
          "label": "SignalRSyncBroadcaster",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "type",
          "filePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 11,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 11
            }
          ]
        },
        {
          "id": "flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1",
          "label": "SyncHub",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "file",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 1,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 1
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19",
          "label": "UpdateProgress",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 19,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 19
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_21_21",
          "label": "Reads repository or persistence state",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 21,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 21
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_guard_clause_21_21",
          "label": "Require authenticated user",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 21,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 21
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_branch_22_22",
          "label": "Evaluates branch condition",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 22,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 22
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_24_24",
          "label": "Reads repository or persistence state",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 24,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 24
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_await_24_24",
          "label": "Waits for async work",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 24,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 24
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28",
          "label": "OnConnectedAsync",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 28,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 28
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_30_30",
          "label": "Reads repository or persistence state",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 30,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 30
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_branch_31_31",
          "label": "Evaluates branch condition",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 31,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 31
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_guard_clause_31_31",
          "label": "Only add to user group if UserIdentifier present",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 31,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 31
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_33_33",
          "label": "Reads repository or persistence state",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 33,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 33
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_await_33_33",
          "label": "Waits for async work",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 33,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 33
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_await_35_35",
          "label": "Waits for async work",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 35,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 35
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38",
          "label": "OnDisconnectedAsync",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 38,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 38
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_40_40",
          "label": "Reads repository or persistence state",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 40,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 40
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_branch_41_41",
          "label": "Evaluates branch condition",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 41,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 41
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_guard_clause_41_41",
          "label": "Only remove from user group if UserIdentifier present",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 41,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 41
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_43_43",
          "label": "Reads repository or persistence state",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 43,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 43
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_await_43_43",
          "label": "Waits for async work",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 43,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 43
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_await_45_45",
          "label": "Waits for async work",
          "role": "endpoint",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 45,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 45
            }
          ]
        },
        {
          "id": "flow_type_nexusreader_infrastructure_realtime_synchub_cs_synchub_10",
          "label": "SyncHub",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "type",
          "filePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 10,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 10
            }
          ]
        },
        {
          "id": "flow_file_nexusreader_infrastructure_services_epubmetadataextractor_cs_file_1",
          "label": "EpubMetadataExtractor",
          "role": "service",
          "layer": "infrastructure",
          "kind": "file",
          "filePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 1,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
              "line": 1
            }
          ]
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_15",
          "label": "ExtractMetadataAsync",
          "role": "service",
          "layer": "infrastructure",
          "kind": "method",
          "filePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 15,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
              "line": 15
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_try_17_17",
          "label": "Begins protected execution",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 17,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
              "line": 17
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_await_19_19",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 19,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
              "line": 19
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_await_23_23",
          "label": "Waits for async work",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 23,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
              "line": 23
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_return_24_24",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 24,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
              "line": 24
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_catch_26_26",
          "label": "Handles exception path",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 26,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
              "line": 26
            }
          ]
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_return_28_28",
          "label": "Returns result",
          "role": "service",
          "layer": "infrastructure",
          "kind": "action",
          "filePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 28,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
              "line": 28
            }
          ]
        },
        {
          "id": "flow_type_nexusreader_infrastructure_services_epubmetadataextractor_cs_epubmetadataextractor_12",
          "label": "EpubMetadataExtractor",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "type",
          "filePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 12,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
              "line": 12
            }
          ]
        },
        {
          "id": "flow_file_nexusreader_infrastructure_services_promptregistry_cs_file_1",
          "label": "PromptRegistry",
          "role": "service",
          "layer": "infrastructure",
          "kind": "file",
          "filePath": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
          "sourceLine": 1,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/PromptRegistry.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
              "line": 1
            }
          ]
        },
        {
          "id": "flow_type_nexusreader_infrastructure_services_promptregistry_cs_promptregistry_3",
          "label": "PromptRegistry",
          "role": "unknown",
          "layer": "infrastructure",
          "kind": "type",
          "filePath": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
          "sourcePath": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
          "sourceLine": 3,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/PromptRegistry.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
              "line": 3
            }
          ]
        }
      ],
      "edges": [
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1_flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32_invokes_32",
          "from": "flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32",
          "kind": "invokes",
          "label": "HandleSubscriptionUpdatedAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 32,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 32
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34_invokes_34",
          "from": "flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 34,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 34
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36_invokes_36",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 36,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 36
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36_invokes_36",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 36,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 36
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37_evaluates-condition_37",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 37,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 37
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37_evaluates-condition_37",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37",
          "kind": "evaluates-condition",
          "label": "log-warning / return-fail",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 37,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 37
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_39_39_invokes_39",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_39_39",
          "kind": "invokes",
          "label": "Logs runtime state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 39,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 39
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_39_39_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_40_40_returns_40",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_39_39",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_40_40",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 40,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 40
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_40_40_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46_evaluates-condition_46",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_40_40",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 46,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 46
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_51_51_evaluates-condition_51",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_51_51",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 51,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 51
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_51_51_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_51_51_falls-back_51",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_51_51",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_51_51",
          "kind": "falls-back",
          "label": "fallback",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 51,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 51
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_51_51_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_56_56_evaluates-condition_56",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_51_51",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_56_56",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 56,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 56
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_56_56_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_56_56_falls-back_56",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_56_56",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_56_56",
          "kind": "falls-back",
          "label": "fallback",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 56,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 56
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_56_56_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_58_58_invokes_58",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_56_56",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_58_58",
          "kind": "invokes",
          "label": "Logs runtime state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 58,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 58
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_58_58_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_61_61_invokes_61",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_58_58",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_61_61",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 61,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 61
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_61_61_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_62_62_invokes_62",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_61_61",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_62_62",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 62,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 62
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_62_62_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_63_63_evaluates-condition_63",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_62_62",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_63_63",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 63,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 63
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_63_63_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_69_69_invokes_69",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_63_63",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_69_69",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 69,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 69
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_69_69_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_70_70_evaluates-condition_70",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_69_69",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_70_70",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 70,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 70
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_70_70_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_72_72_invokes_72",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_70_70",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_72_72",
          "kind": "invokes",
          "label": "Logs runtime state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 72,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 72
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_72_72_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_74_74_invokes_74",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_72_72",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_74_74",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 74,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 74
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_74_74_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_74_74_returns_74",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_74_74",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_74_74",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 74,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 74
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_74_74_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_77_77_returns_77",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_74_74",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_77_77",
          "kind": "returns",
          "label": "Return success",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 77,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 77
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_77_77_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_77_77_returns_77",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_77_77",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_77_77",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 77,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 77
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_77_77_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_catch_79_79_invokes_79",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_77_77",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_catch_79_79",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 79,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 79
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_catch_79_79_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_81_81_invokes_81",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_catch_79_79",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_81_81",
          "kind": "invokes",
          "label": "Logs runtime state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 81,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 81
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_81_81_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_82_82_returns_82",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_81_81",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_82_82",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 82,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 82
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46_flow_file_nexusreader_infrastructure_configuration_stripesettings_cs_file_1_uses-service_46",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46",
          "to": "flow_file_nexusreader_infrastructure_configuration_stripesettings_cs_file_1",
          "kind": "uses-service",
          "label": "ProProductId/BasicProductId/FreeProductId (property access)",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 46,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 46
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1_flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_86_invokes_86",
          "from": "flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_86",
          "kind": "invokes",
          "label": "HandleSubscriptionDeletedAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 86,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 86
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_86_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_try_88_88_invokes_88",
          "from": "flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_86",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_try_88_88",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 88,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 88
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_try_88_88_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_repository_read_90_90_invokes_90",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_try_88_88",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_repository_read_90_90",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 90,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 90
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_repository_read_90_90_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_90_90_invokes_90",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_repository_read_90_90",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_90_90",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 90,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 90
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_90_90_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_91_91_evaluates-condition_91",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_90_90",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_91_91",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 91,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 91
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_91_91_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_guard_clause_91_91_evaluates-condition_91",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_91_91",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_guard_clause_91_91",
          "kind": "evaluates-condition",
          "label": "log-warning / return-fail",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 91,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 91
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_guard_clause_91_91_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_log_93_93_invokes_93",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_guard_clause_91_91",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_log_93_93",
          "kind": "invokes",
          "label": "Logs runtime state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 93,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 93
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_log_93_93_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_94_94_returns_94",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_log_93_93",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_94_94",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 94,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 94
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_94_94_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_97_97_invokes_97",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_94_94",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_97_97",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 97,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 97
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_97_97_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_98_98_invokes_98",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_97_97",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_98_98",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 98,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 98
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_98_98_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_99_99_evaluates-condition_99",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_98_98",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_99_99",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 99,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 99
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_99_99_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_105_105_invokes_105",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_99_99",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_105_105",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 105,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 105
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_105_105_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_106_106_evaluates-condition_106",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_105_105",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_106_106",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 106,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 106
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_106_106_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_log_108_108_invokes_108",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_106_106",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_log_108_108",
          "kind": "invokes",
          "label": "Logs runtime state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 108,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 108
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_log_108_108_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_repository_read_110_110_invokes_110",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_log_108_108",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_repository_read_110_110",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 110,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 110
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_repository_read_110_110_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_110_110_returns_110",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_repository_read_110_110",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_110_110",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 110,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 110
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_110_110_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_113_113_returns_113",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_110_110",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_113_113",
          "kind": "returns",
          "label": "Return success",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 113,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 113
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_113_113_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_113_113_returns_113",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_113_113",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_113_113",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 113,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 113
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_113_113_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_catch_115_115_invokes_115",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_113_113",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_catch_115_115",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 115,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 115
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_catch_115_115_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_log_117_117_invokes_117",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_catch_115_115",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_log_117_117",
          "kind": "invokes",
          "label": "Logs runtime state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 117,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 117
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_log_117_117_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_118_118_returns_118",
          "from": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_log_117_117",
          "to": "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_return_118_118",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 118,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 118
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19_invokes_19",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
          "kind": "invokes",
          "label": "SaveEbookAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 19,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 19
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22_returns_22",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 22,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 22
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_22_22_invokes_22",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_22_22",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 22,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 22
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25_invokes_25",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
          "kind": "invokes",
          "label": "SaveEbookAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 25,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 25
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28_evaluates-condition_28",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
          "kind": "evaluates-condition",
          "label": "create-directory / continue",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 28,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 28
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35_invokes_35",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 35,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 35
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_returns_40",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
          "kind": "returns",
          "label": "Return web-relative path with forward slash",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 40,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 40
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_returns_40",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 40,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 40
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43_invokes_43",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
          "kind": "invokes",
          "label": "SaveCoverAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 43,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 43
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45_evaluates-condition_45",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
          "kind": "evaluates-condition",
          "label": "exit / continue",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 45,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 45
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47_returns_47",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 47,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 47
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_47_47_invokes_47",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_47_47",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 47,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 47
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50_invokes_50",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
          "kind": "invokes",
          "label": "SaveCoverAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 50,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 50
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53_evaluates-condition_53",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
          "kind": "evaluates-condition",
          "label": "create-directory / continue",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 53,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 53
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60_invokes_60",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 60,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 60
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_returns_63",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
          "kind": "returns",
          "label": "Return web-relative path with forward slash",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 63,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 63
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_returns_63",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 63,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 63
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66_invokes_66",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
          "kind": "invokes",
          "label": "EnsureDirectoryExists",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 66,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 66
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68_evaluates-condition_68",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
          "kind": "evaluates-condition",
          "label": "create-directory / continue",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 68,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 68
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68_evaluates-condition_68",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 68,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 68
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10_defines-type_10",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10",
          "kind": "defines-type",
          "label": "model BookStorageService",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 10,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 10
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_30_invokes_30",
          "from": "flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_30",
          "kind": "invokes",
          "label": "GetEpubContentAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 30,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 30
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_30_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_try_36_36_invokes_36",
          "from": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_30",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_try_36_36",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 36,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 36
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_try_36_36_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_39_39_invokes_39",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_try_36_36",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_39_39",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 39,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 39
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_39_39_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_repository_read_41_41_invokes_41",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_39_39",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_repository_read_41_41",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 41,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 41
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_repository_read_41_41_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_41_41_invokes_41",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_repository_read_41_41",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_41_41",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 41,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 41
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_41_41_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_guard_clause_47_47_evaluates-condition_47",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_41_41",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_guard_clause_47_47",
          "kind": "evaluates-condition",
          "label": "fail-return",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 47,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 47
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_guard_clause_47_47_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_47_47_evaluates-condition_47",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_guard_clause_47_47",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_47_47",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 47,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 47
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_47_47_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_49_49_returns_49",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_47_47",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_49_49",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 49,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 49
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_49_49_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_55_55_evaluates-condition_55",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_49_49",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_55_55",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 55,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 55
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_55_55_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_log_57_57_invokes_57",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_55_55",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_log_57_57",
          "kind": "invokes",
          "label": "Logs runtime state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 57,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 57
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_log_57_57_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_58_58_returns_58",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_log_57_57",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_58_58",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 58,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 58
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_58_58_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_62_62_invokes_62",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_58_58",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_62_62",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 62,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 62
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_62_62_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_65_65_evaluates-condition_65",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_62_62",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_65_65",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 65,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 65
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_65_65_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_guard_clause_65_65_evaluates-condition_65",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_65_65",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_guard_clause_65_65",
          "kind": "evaluates-condition",
          "label": "fail-return",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 65,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 65
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_guard_clause_65_65_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_67_67_returns_67",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_guard_clause_65_65",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_67_67",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 67,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 67
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_67_67_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_70_70_evaluates-condition_70",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_67_67",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_70_70",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 70,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 70
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_70_70_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_repository_read_77_77_invokes_77",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_70_70",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_repository_read_77_77",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 77,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 77
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_repository_read_77_77_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_81_81_invokes_81",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_repository_read_77_77",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_81_81",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 81,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 81
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_81_81_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_loop_89_89_loops-to_89",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_81_81",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_loop_89_89",
          "kind": "loops-to",
          "label": "iterate paragraphs",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 89,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 89
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_loop_89_89_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_loop_89_89_loops-to_89",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_loop_89_89",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_loop_89_89",
          "kind": "loops-to",
          "label": "var p in paragraphs",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 89,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 89
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_loop_89_89_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_guard_clause_92_92_evaluates-condition_92",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_loop_89_89",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_guard_clause_92_92",
          "kind": "evaluates-condition",
          "label": "exit / continue",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 92,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 92
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_guard_clause_92_92_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_99_99_evaluates-condition_99",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_guard_clause_92_92",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_99_99",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 99,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 99
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_99_99_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_106_106_evaluates-condition_106",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_99_99",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_106_106",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 106,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 106
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_106_106_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_111_111_returns_111",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_branch_106_106",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_111_111",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 111,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 111
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_111_111_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_111_111_returns_111",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_111_111",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_111_111",
          "kind": "returns",
          "label": "successful result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 111,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 111
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_111_111_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_catch_113_113_invokes_113",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_111_111",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_catch_113_113",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 113,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 113
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_catch_113_113_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_log_115_115_invokes_115",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_catch_113_113",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_log_115_115",
          "kind": "invokes",
          "label": "Logs runtime state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 115,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 115
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_log_115_115_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_116_116_returns_116",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_log_115_115",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_return_116_116",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 116,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 116
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_124_invokes_124",
          "from": "flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_124",
          "kind": "invokes",
          "label": "ResolvePath",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 124,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 124
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_124_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_loop_130_130_loops-to_130",
          "from": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_124",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_loop_130_130",
          "kind": "loops-to",
          "label": "currentDir != null",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 130,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 130
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_loop_130_130_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_loop_130_130_loops-to_130",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_loop_130_130",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_loop_130_130",
          "kind": "loops-to",
          "label": "walk parent directories",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 130,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 130
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_loop_130_130_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_guard_clause_133_133_evaluates-condition_133",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_loop_130_130",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_guard_clause_133_133",
          "kind": "evaluates-condition",
          "label": "exit / continue",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 133,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 133
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_guard_clause_133_133_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_guard_clause_137_137_evaluates-condition_137",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_guard_clause_133_133",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_guard_clause_137_137",
          "kind": "evaluates-condition",
          "label": "exit / continue",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 137,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 137
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_guard_clause_137_137_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_return_142_142_returns_142",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_guard_clause_137_137",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_return_142_142",
          "kind": "returns",
          "label": "not found",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 142,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 142
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_return_142_142_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_return_142_142_returns_142",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_return_142_142",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_return_142_142",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 142,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 142
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_145_invokes_145",
          "from": "flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_145",
          "kind": "invokes",
          "label": "ExtractParagraphs",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 145,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 145
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_145_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_loop_153_153_loops-to_153",
          "from": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_145",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_loop_153_153",
          "kind": "loops-to",
          "label": "Match match in matches",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 153,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 153
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_loop_153_153_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_branch_158_158_evaluates-condition_158",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_loop_153_153",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_branch_158_158",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 158,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 158
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_branch_158_158_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_return_163_163_returns_163",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_branch_158_158",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_return_163_163",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 163,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 163
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_sanitizeparagraph_166_invokes_166",
          "from": "flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_sanitizeparagraph_166",
          "kind": "invokes",
          "label": "SanitizeParagraph",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 166,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 166
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_sanitizeparagraph_166_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_sanitizeparagraph_return_172_172_returns_172",
          "from": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_sanitizeparagraph_166",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_sanitizeparagraph_return_172_172",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 172,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 172
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175_invokes_175",
          "from": "flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175",
          "kind": "invokes",
          "label": "CountWords",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 175,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 175
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177_evaluates-condition_177",
          "from": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177",
          "kind": "evaluates-condition",
          "label": "empty check",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 177,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 177
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_return_178_178_returns_178",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_return_178_178",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 178,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 178
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_186_invokes_186",
          "from": "flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_186",
          "kind": "invokes",
          "label": "FindTitleInNavigation",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 186,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 186
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_186_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_repository_read_186_186_invokes_186",
          "from": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_186",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_repository_read_186_186",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 186,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 186
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_repository_read_186_186_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_guard_clause_188_188_evaluates-condition_188",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_repository_read_186_186",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_guard_clause_188_188",
          "kind": "evaluates-condition",
          "label": "exit / continue",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 188,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 188
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_guard_clause_188_188_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_loop_191_191_loops-to_191",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_guard_clause_188_188",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_loop_191_191",
          "kind": "loops-to",
          "label": "iterate navigation items",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 191,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 191
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_loop_191_191_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_loop_191_191_loops-to_191",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_loop_191_191",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_loop_191_191",
          "kind": "loops-to",
          "label": "var item in navigation",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 191,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 191
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_loop_191_191_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_branch_193_193_evaluates-condition_193",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_loop_191_191",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_branch_193_193",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 193,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 193
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_branch_193_193_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_return_194_194_returns_194",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_branch_193_193",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_return_194_194",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 194,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 194
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_return_194_194_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_branch_196_196_evaluates-condition_196",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_return_194_194",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_branch_196_196",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 196,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 196
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_branch_196_196_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_repository_read_198_198_invokes_198",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_branch_196_196",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_repository_read_198_198",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 198,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 198
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_repository_read_198_198_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_guard_clause_199_199_evaluates-condition_199",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_repository_read_198_198",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_guard_clause_199_199",
          "kind": "evaluates-condition",
          "label": "exit / continue",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 199,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 199
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_guard_clause_199_199_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_return_203_203_returns_203",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_guard_clause_199_199",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_return_203_203",
          "kind": "returns",
          "label": "not found",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 203,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 203
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_return_203_203_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_return_203_203_returns_203",
          "from": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_return_203_203",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_return_203_203",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 203,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 203
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_knowledgeservice_38_invokes_38",
          "from": "flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_knowledgeservice_38",
          "kind": "invokes",
          "label": "KnowledgeService",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 38,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 38
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeasync_61_invokes_61",
          "from": "flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeasync_61",
          "kind": "invokes",
          "label": "GetKnowledgeAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 61,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 61
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeasync_61_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeasync_return_63_63_returns_63",
          "from": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeasync_61",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeasync_return_63_63",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 63,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 63
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeasync_return_63_63_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeasync_await_63_63_invokes_63",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeasync_return_63_63",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeasync_await_63_63",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 63,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 63
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getgraphdataasync_66_invokes_66",
          "from": "flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getgraphdataasync_66",
          "kind": "invokes",
          "label": "GetGraphDataAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 66,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 66
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getgraphdataasync_66_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getgraphdataasync_return_68_68_returns_68",
          "from": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getgraphdataasync_66",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getgraphdataasync_return_68_68",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 68,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 68
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getgraphdataasync_return_68_68_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getgraphdataasync_await_68_68_invokes_68",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getgraphdataasync_return_68_68",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getgraphdataasync_await_68_68",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 68,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 68
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getsummaryandquizasync_71_invokes_71",
          "from": "flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getsummaryandquizasync_71",
          "kind": "invokes",
          "label": "GetSummaryAndQuizAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 71,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 71
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getsummaryandquizasync_71_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getsummaryandquizasync_return_73_73_returns_73",
          "from": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getsummaryandquizasync_71",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getsummaryandquizasync_return_73_73",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 73,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 73
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getsummaryandquizasync_return_73_73_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getsummaryandquizasync_await_73_73_invokes_73",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getsummaryandquizasync_return_73_73",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getsummaryandquizasync_await_73_73",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 73,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 73
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgemapasync_76_invokes_76",
          "from": "flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgemapasync_76",
          "kind": "invokes",
          "label": "GetKnowledgeMapAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 76,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 76
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgemapasync_76_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgemapasync_return_78_78_returns_78",
          "from": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgemapasync_76",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgemapasync_return_78_78",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 78,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 78
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgemapasync_return_78_78_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgemapasync_await_78_78_invokes_78",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgemapasync_return_78_78",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgemapasync_await_78_78",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 78,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 78
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_81_invokes_81",
          "from": "flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_81",
          "kind": "invokes",
          "label": "GetKnowledgeInternalAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 81,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 81
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_81_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_guard_clause_83_83_evaluates-condition_83",
          "from": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_81",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_guard_clause_83_83",
          "kind": "evaluates-condition",
          "label": "exit / continue",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 83,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 83
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_guard_clause_83_83_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_85_85_invokes_85",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_guard_clause_83_83",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_85_85",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 85,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 85
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_85_85_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_90_90_invokes_90",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_85_85",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_90_90",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 90,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 90
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_90_90_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_branch_93_93_evaluates-condition_93",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_90_90",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_branch_93_93",
          "kind": "evaluates-condition",
          "label": "cache hit and valid prompt version",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 93,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 93
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_branch_93_93_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_try_96_96_invokes_96",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_branch_93_93",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_try_96_96",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 96,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 96
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_try_96_96_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_guard_clause_99_99_evaluates-condition_99",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_try_96_96",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_guard_clause_99_99",
          "kind": "evaluates-condition",
          "label": "exit / continue",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 99,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 99
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_guard_clause_99_99_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_catch_101_101_invokes_101",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_guard_clause_99_99",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_catch_101_101",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 101,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 101
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_catch_101_101_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_log_103_103_invokes_103",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_catch_101_101",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_log_103_103",
          "kind": "invokes",
          "label": "Logs runtime state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 103,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 103
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_log_103_103_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_try_116_116_invokes_116",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_log_103_103",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_try_116_116",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 116,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 116
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_try_116_116_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_118_118_invokes_118",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_try_116_116",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_118_118",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 118,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 118
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_118_118_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_branch_122_122_evaluates-condition_122",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_118_118",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_branch_122_122",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 122,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 122
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_branch_122_122_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_fallback_122_122_falls-back_122",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_branch_122_122",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_fallback_122_122",
          "kind": "falls-back",
          "label": "remove failed active request so future attempts can retry",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 122,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 122
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_fallback_122_122_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_return_127_127_returns_127",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_fallback_122_122",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_return_127_127",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 127,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 127
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_return_127_127_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_catch_129_129_invokes_129",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_return_127_127",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_catch_129_129",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 129,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 129
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_catch_129_129_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_throw_132_132_invokes_132",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_catch_129_129",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_throw_132_132",
          "kind": "invokes",
          "label": "Throws exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 132,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 132
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_throw_132_132_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_finally_134_134_invokes_134",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_throw_132_132",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_finally_134_134",
          "kind": "invokes",
          "label": "Runs cleanup or finalization",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 134,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 134
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_85_85_flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9_uses-service_87",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_85_85",
          "to": "flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9",
          "kind": "uses-service",
          "label": "ContentHasher.ComputeHash",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 87,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 87
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_140_invokes_140",
          "from": "flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_140",
          "kind": "invokes",
          "label": "ExecuteAiRequestAndCacheAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 140,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 140
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_140_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_try_149_149_invokes_149",
          "from": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_140",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_try_149_149",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 149,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 149
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_try_149_149_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_151_151_invokes_151",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_try_149_149",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_151_151",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 151,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 151
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_151_151_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_retry_159_159_retries_159",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_151_151",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_retry_159_159",
          "kind": "retries",
          "label": "AI request executed via resilience pipeline",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 159,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 159
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_retry_159_159_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_159_159_invokes_159",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_retry_159_159",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_159_159",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 159,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 159
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_159_159_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_160_160_invokes_160",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_159_159",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_160_160",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 160,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 160
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_160_160_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_guard_clause_166_166_evaluates-condition_166",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_160_160",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_guard_clause_166_166",
          "kind": "evaluates-condition",
          "label": "fail",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 166,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 166
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_guard_clause_166_166_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_guard_clause_167_167_evaluates-condition_167",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_guard_clause_166_166",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_guard_clause_167_167",
          "kind": "evaluates-condition",
          "label": "exit / continue",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 167,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 167
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_guard_clause_167_167_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_try_173_173_invokes_173",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_guard_clause_167_167",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_try_173_173",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 173,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 173
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_try_173_173_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_guard_clause_176_176_evaluates-condition_176",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_try_173_173",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_guard_clause_176_176",
          "kind": "evaluates-condition",
          "label": "exit / continue",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 176,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 176
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_guard_clause_176_176_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_179_179_invokes_179",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_guard_clause_176_176",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_179_179",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 179,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 179
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_179_179_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_branch_193_193_evaluates-condition_193",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_179_179",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_branch_193_193",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 193,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 193
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_branch_193_193_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_repository_write_193_193_invokes_193",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_branch_193_193",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_repository_write_193_193",
          "kind": "invokes",
          "label": "Writes repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 193,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 193
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_repository_write_193_193_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_fallback_194_194_falls-back_194",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_repository_write_193_193",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_fallback_194_194",
          "kind": "falls-back",
          "label": "fallback",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 194,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 194
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_fallback_194_194_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_202_202_invokes_202",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_fallback_194_194",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_202_202",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 202,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 202
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_202_202_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_204_204_invokes_204",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_202_202",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_204_204",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 204,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 204
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_204_204_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_return_205_205_returns_205",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_await_204_204",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_return_205_205",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 205,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 205
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_return_205_205_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_catch_207_207_invokes_207",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_return_205_205",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_catch_207_207",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 207,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 207
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_catch_207_207_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_log_209_209_invokes_209",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_catch_207_207",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_log_209_209",
          "kind": "invokes",
          "label": "Logs runtime state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 209,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 209
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_log_209_209_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_return_210_210_returns_210",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_log_209_209",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_return_210_210",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 210,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 210
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_return_210_210_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_catch_213_213_invokes_213",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_return_210_210",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_catch_213_213",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 213,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 213
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_catch_213_213_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_return_215_215_returns_215",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_catch_213_213",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_return_215_215",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 215,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 215
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_return_215_215_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_finally_217_217_invokes_217",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_return_215_215",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_finally_217_217",
          "kind": "invokes",
          "label": "Runs cleanup or finalization",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 217,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 217
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_guard_clause_167_167_flow_method_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_8_uses-service_171",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_executeairequestandcacheasync_guard_clause_167_167",
          "to": "flow_method_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_8",
          "kind": "uses-service",
          "label": "JsonRepairHelper.Repair",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 171,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 171
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_225_invokes_225",
          "from": "flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_225",
          "kind": "invokes",
          "label": "ProcessKnowledgeUnitsAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 225,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 225
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_225_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_await_234_234_invokes_234",
          "from": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_225",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_await_234_234",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 234,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 234
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_await_234_234_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_repository_read_235_235_invokes_235",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_await_234_234",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_repository_read_235_235",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 235,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 235
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_repository_read_235_235_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_240_240_loops-to_240",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_repository_read_235_235",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_240_240",
          "kind": "loops-to",
          "label": "var unitDto in packet.Units",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 240,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 240
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_240_240_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_240_240_loops-to_240",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_240_240",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_240_240",
          "kind": "loops-to",
          "label": "upsert each KnowledgeUnit",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 240,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 240
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_240_240_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_branch_245_245_evaluates-condition_245",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_240_240",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_branch_245_245",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 245,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 245
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_branch_245_245_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_repository_write_248_248_invokes_248",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_branch_245_245",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_repository_write_248_248",
          "kind": "invokes",
          "label": "Writes repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 248,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 248
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_repository_write_248_248_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_266_266_loops-to_266",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_repository_write_248_248",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_266_266",
          "kind": "loops-to",
          "label": "create links",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 266,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 266
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_266_266_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_266_266_loops-to_266",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_266_266",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_266_266",
          "kind": "loops-to",
          "label": "var linkDto in packet.Links",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 266,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 266
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_266_266_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_branch_271_271_evaluates-condition_271",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_loop_266_266",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_branch_271_271",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 271,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 271
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_branch_271_271_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_repository_write_281_281_invokes_281",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_branch_271_271",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_repository_write_281_281",
          "kind": "invokes",
          "label": "Writes repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 281,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 281
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_repository_write_281_281_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_fallback_283_283_falls-back_283",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_repository_write_281_281",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_fallback_283_283",
          "kind": "falls-back",
          "label": "fallback",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 283,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 283
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_fallback_283_283_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_log_285_285_invokes_285",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_fallback_283_283",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_processknowledgeunitsasync_log_285_285",
          "kind": "invokes",
          "label": "Logs runtime state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 285,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 285
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_290_invokes_290",
          "from": "flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_290",
          "kind": "invokes",
          "label": "VerifyGroundednessAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 290,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 290
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_290_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_return_295_295_returns_295",
          "from": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_290",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_return_295_295",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 295,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 295
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_return_295_295_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_try_300_300_invokes_300",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_return_295_295",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_try_300_300",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 300,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 300
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_try_300_300_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_retry_308_308_retries_308",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_try_300_300",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_retry_308_308",
          "kind": "retries",
          "label": "invoke chat client via retry pipeline",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 308,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 308
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_retry_308_308_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_await_308_308_invokes_308",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_retry_308_308",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_await_308_308",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 308,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 308
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_await_308_308_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_await_309_309_invokes_309",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_await_308_308",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_await_309_309",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 309,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 309
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_await_309_309_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_return_320_320_returns_320",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_await_309_309",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_return_320_320",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 320,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 320
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_return_320_320_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_catch_322_322_invokes_322",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_return_320_320",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_catch_322_322",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 322,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 322
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_catch_322_322_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_return_324_324_returns_324",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_catch_322_322",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_verifygroundednessasync_return_324_324",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 324,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 324
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_328_invokes_328",
          "from": "flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_328",
          "kind": "invokes",
          "label": "GetRelevantContextAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 328,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 328
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_328_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_try_330_330_invokes_330",
          "from": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_328",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_try_330_330",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 330,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 330
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_try_330_330_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_await_332_332_invokes_332",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_try_330_330",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_await_332_332",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 332,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 332
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_await_332_332_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_await_333_333_invokes_333",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_await_332_332",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_await_333_333",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 333,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 333
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_await_333_333_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_336_336_invokes_336",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_await_333_333",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_336_336",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 336,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 336
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_336_336_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_337_337_invokes_337",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_336_336",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_337_337",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 337,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 337
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_337_337_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_339_339_invokes_339",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_337_337",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_339_339",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 339,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 339
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_339_339_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_342_342_invokes_342",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_339_339",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_342_342",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 342,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 342
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_342_342_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_345_345_invokes_345",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_342_342",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_345_345",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 345,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 345
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_345_345_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_347_347_invokes_347",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_345_345",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_347_347",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 347,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 347
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_347_347_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_350_350_invokes_350",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_347_347",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_350_350",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 350,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 350
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_350_350_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_354_354_invokes_354",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_350_350",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_354_354",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 354,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 354
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_354_354_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_try_355_355_invokes_355",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_354_354",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_try_355_355",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 355,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 355
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_try_355_355_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_await_357_357_invokes_357",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_try_355_355",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_await_357_357",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 357,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 357
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_await_357_357_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_catch_366_366_invokes_366",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_await_357_357",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_catch_366_366",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 366,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 366
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_catch_366_366_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_368_368_invokes_368",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_catch_366_366",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_368_368",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 368,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 368
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_368_368_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_return_377_377_returns_377",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_external_call_368_368",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_return_377_377",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 377,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 377
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_return_377_377_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_catch_379_379_invokes_379",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_return_377_377",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_catch_379_379",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 379,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 379
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_catch_379_379_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_return_381_381_returns_381",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_catch_379_379",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getrelevantcontextasync_return_381_381",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 381,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 381
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_385_invokes_385",
          "from": "flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_385",
          "kind": "invokes",
          "label": "SearchLibrarySemanticallyAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 385,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 385
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_385_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_387_387_invokes_387",
          "from": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_385",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_387_387",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 387,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 387
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_387_387_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_390_390_invokes_390",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_387_387",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_390_390",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 390,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 390
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_390_390_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_391_391_invokes_391",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_390_390",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_391_391",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 391,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 391
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_391_391_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_399_399_invokes_399",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_391_391",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_399_399",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 399,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 399
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_399_399_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_400_400_invokes_400",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_399_399",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_400_400",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 400,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 400
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_400_400_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_402_402_invokes_402",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_400_400",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_402_402",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 402,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 402
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_402_402_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_405_405_invokes_405",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_402_402",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_405_405",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 405,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 405
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_405_405_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_408_408_invokes_408",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_405_405",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_408_408",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 408,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 408
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_408_408_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_410_410_invokes_410",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_408_408",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_410_410",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 410,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 410
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_410_410_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_413_413_invokes_413",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_410_410",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_413_413",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 413,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 413
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_413_413_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_417_417_invokes_417",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_413_413",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_417_417",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 417,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 417
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_417_417_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_418_418_invokes_418",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_417_417",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_418_418",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 418,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 418
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_418_418_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_420_420_invokes_420",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_418_418",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_420_420",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 420,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 420
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_420_420_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_429_429_invokes_429",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_420_420",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_429_429",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 429,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 429
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_429_429_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_log_431_431_invokes_431",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_429_429",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_log_431_431",
          "kind": "invokes",
          "label": "Logs runtime state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 431,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 431
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_log_431_431_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_432_432_invokes_432",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_log_431_431",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_432_432",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 432,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 432
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_432_432_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_435_435_evaluates-condition_435",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_external_call_432_432",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_435_435",
          "kind": "evaluates-condition",
          "label": "empty result fast path",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 435,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 435
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_435_435_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_437_437_returns_437",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_435_435",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_437_437",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 437,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 437
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_437_437_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_444_444_evaluates-condition_444",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_437_437",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_444_444",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 444,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 444
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_444_444_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_446_446_invokes_446",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_444_444",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_446_446",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 446,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 446
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_446_446_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_448_448_invokes_448",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_446_446",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_448_448",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 448,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 448
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_448_448_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_452_452_returns_452",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_448_448",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_452_452",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 452,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 452
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_452_452_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_454_454_invokes_454",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_452_452",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_454_454",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 454,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 454
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_454_454_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_456_456_invokes_456",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_454_454",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_456_456",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 456,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 456
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_456_456_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_457_457_returns_457",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_456_456",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_457_457",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 457,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 457
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_457_457_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_457_457_invokes_457",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_457_457",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_457_457",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 457,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 457
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_457_457_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_loop_460_460_loops-to_460",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_457_457",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_loop_460_460",
          "kind": "loops-to",
          "label": "var record in neoResult",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 460,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 460
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_loop_460_460_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_464_464_evaluates-condition_464",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_loop_460_460",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_464_464",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 464,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 464
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_464_464_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_471_471_invokes_471",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_464_464",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_471_471",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 471,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 471
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_471_471_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_log_473_473_invokes_473",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_471_471",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_log_473_473",
          "kind": "invokes",
          "label": "Logs runtime state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 473,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 473
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_log_473_473_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_repository_read_479_479_invokes_479",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_log_473_473",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_repository_read_479_479",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 479,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 479
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_repository_read_479_479_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_485_485_evaluates-condition_485",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_repository_read_479_479",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_485_485",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 485,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 485
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_485_485_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_487_487_invokes_487",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_485_485",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_487_487",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 487,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 487
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_487_487_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_488_488_invokes_488",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_487_487",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_488_488",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 488,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 488
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_488_488_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_repository_read_489_489_invokes_489",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_await_488_488",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_repository_read_489_489",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 489,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 489
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_repository_read_489_489_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_501_501_evaluates-condition_501",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_repository_read_489_489",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_501_501",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 501,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 501
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_501_501_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_507_507_evaluates-condition_507",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_501_501",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_507_507",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 507,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 507
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_507_507_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_513_513_evaluates-condition_513",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_507_507",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_513_513",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 513,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 513
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_513_513_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_515_515_invokes_515",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_513_513",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_515_515",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 515,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 515
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_515_515_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_519_519_invokes_519",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_try_515_515",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_519_519",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 519,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 519
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_519_519_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_533_533_evaluates-condition_533",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_519_519",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_533_533",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 533,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 533
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_533_533_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_538_538_returns_538",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_branch_533_533",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_538_538",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 538,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 538
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_538_538_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_541_541_returns_541",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_538_538",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_541_541",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 541,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 541
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_541_541_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_543_543_invokes_543",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_541_541",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_543_543",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 543,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 543
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_543_543_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_545_545_returns_545",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_catch_543_543",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_searchlibrarysemanticallyasync_return_545_545",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 545,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 545
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_549_invokes_549",
          "from": "flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_549",
          "kind": "invokes",
          "label": "AskQuestionAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 549,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 549
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_549_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_556_556_invokes_556",
          "from": "flow_method_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_549",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_556_556",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 556,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 556
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_556_556_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_559_559_invokes_559",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_556_556",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_559_559",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 559,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 559
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_559_559_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_560_560_invokes_560",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_559_559",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_560_560",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 560,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 560
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_560_560_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_568_568_invokes_568",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_560_560",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_568_568",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 568,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 568
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_568_568_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_571_571_invokes_571",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_568_568",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_571_571",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 571,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 571
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_571_571_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_572_572_invokes_572",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_571_571",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_572_572",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 572,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 572
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_572_572_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_574_574_invokes_574",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_572_572",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_574_574",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 574,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 574
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_574_574_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_577_577_invokes_577",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_574_574",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_577_577",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 577,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 577
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_577_577_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_580_580_invokes_580",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_577_577",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_580_580",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 580,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 580
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_580_580_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_582_582_invokes_582",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_580_580",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_582_582",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 582,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 582
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_582_582_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_585_585_invokes_585",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_582_582",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_585_585",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 585,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 585
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_585_585_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_588_588_invokes_588",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_585_585",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_588_588",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 588,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 588
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_588_588_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_590_590_evaluates-condition_590",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_588_588",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_590_590",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 590,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 590
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_590_590_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_592_592_invokes_592",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_590_590",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_592_592",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 592,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 592
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_592_592_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_594_594_invokes_594",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_592_592",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_594_594",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 594,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 594
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_594_594_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_597_597_invokes_597",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_594_594",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_597_597",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 597,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 597
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_597_597_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_602_602_invokes_602",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_597_597",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_602_602",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 602,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 602
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_602_602_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_603_603_invokes_603",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_602_602",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_603_603",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 603,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 603
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_603_603_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_605_605_invokes_605",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_603_603",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_605_605",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 605,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 605
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_605_605_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_614_614_invokes_614",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_605_605",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_614_614",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 614,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 614
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_614_614_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_log_616_616_invokes_616",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_614_614",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_log_616_616",
          "kind": "invokes",
          "label": "Logs runtime state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 616,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 616
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_log_616_616_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_617_617_invokes_617",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_log_616_616",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_617_617",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 617,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 617
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_617_617_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_620_620_evaluates-condition_620",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_external_call_617_617",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_620_620",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 620,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 620
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_620_620_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_guard_clause_620_620_evaluates-condition_620",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_620_620",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_guard_clause_620_620",
          "kind": "evaluates-condition",
          "label": "no contexts fallback",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 620,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 620
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_guard_clause_620_620_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_622_622_returns_622",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_guard_clause_620_620",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_622_622",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 622,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 622
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_622_622_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_624_624_invokes_624",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_622_622",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_624_624",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 624,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 624
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_624_624_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_636_636_evaluates-condition_636",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_624_624",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_636_636",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 636,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 636
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_636_636_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_638_638_invokes_638",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_636_636",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_638_638",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 638,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 638
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_638_638_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_640_640_invokes_640",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_638_638",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_640_640",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 640,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 640
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_640_640_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_645_645_returns_645",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_640_640",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_645_645",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 645,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 645
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_645_645_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_648_648_invokes_648",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_645_645",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_648_648",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 648,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 648
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_648_648_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_650_650_invokes_650",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_648_648",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_650_650",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 650,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 650
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_650_650_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_651_651_returns_651",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_650_650",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_651_651",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 651,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 651
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_651_651_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_651_651_invokes_651",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_651_651",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_651_651",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 651,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 651
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_651_651_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_654_654_loops-to_654",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_651_651",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_654_654",
          "kind": "loops-to",
          "label": "var record in neoResult",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 654,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 654
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_654_654_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_write_659_659_invokes_659",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_654_654",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_write_659_659",
          "kind": "invokes",
          "label": "Writes repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 659,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 659
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_write_659_659_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_662_662_evaluates-condition_662",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_write_659_659",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_662_662",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 662,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 662
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_662_662_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_664_664_loops-to_664",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_662_662",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_664_664",
          "kind": "loops-to",
          "label": "var relObj in relations",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 664,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 664
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_664_664_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_671_671_evaluates-condition_671",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_664_664",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_671_671",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 671,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 671
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_671_671_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_write_673_673_invokes_673",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_671_671",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_write_673_673",
          "kind": "invokes",
          "label": "Writes repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 673,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 673
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_write_673_673_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_680_680_invokes_680",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_write_673_673",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_680_680",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 680,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 680
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_680_680_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_log_682_682_invokes_682",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_680_680",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_log_682_682",
          "kind": "invokes",
          "label": "Logs runtime state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 682,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 682
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_log_682_682_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_683_683_loops-to_683",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_log_682_682",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_683_683",
          "kind": "loops-to",
          "label": "var point in searchResult",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 683,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 683
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_683_683_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_write_687_687_invokes_687",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_683_683",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_write_687_687",
          "kind": "invokes",
          "label": "Writes repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 687,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 687
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_write_687_687_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_694_694_invokes_694",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_write_687_687",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_694_694",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 694,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 694
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_694_694_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_700_700_evaluates-condition_700",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_694_694",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_700_700",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 700,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 700
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_700_700_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_702_702_invokes_702",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_700_700",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_702_702",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 702,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 702
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_702_702_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_703_703_invokes_703",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_702_702",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_703_703",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 703,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 703
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_703_703_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_704_704_invokes_704",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_703_703",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_704_704",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 704,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 704
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_704_704_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_715_715_invokes_715",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_704_704",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_715_715",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 715,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 715
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_715_715_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_716_716_invokes_716",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_715_715",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_716_716",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 716,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 716
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_716_716_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_717_717_invokes_717",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_716_716",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_717_717",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 717,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 717
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_717_717_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_retry_740_740_retries_740",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_repository_read_717_717",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_retry_740_740",
          "kind": "retries",
          "label": "invoke Chat client with JSON response format",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 740,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 740
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_retry_740_740_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_740_740_invokes_740",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_retry_740_740",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_740_740",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 740,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 740
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_740_740_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_741_741_invokes_741",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_740_740",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_741_741",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 741,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 741
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_741_741_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_751_751_invokes_751",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_741_741",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_751_751",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 751,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 751
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_751_751_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_754_754_evaluates-condition_754",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_try_751_751",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_754_754",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 754,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 754
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_754_754_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_756_756_returns_756",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_754_754",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_756_756",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 756,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 756
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_756_756_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_760_760_loops-to_760",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_756_756",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_760_760",
          "kind": "loops-to",
          "label": "var citation in groundedResult.Citations",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 760,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 760
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_760_760_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_762_762_evaluates-condition_762",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_loop_760_760",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_762_762",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 762,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 762
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_762_762_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_771_771_returns_771",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_branch_762_762",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_771_771",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 771,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 771
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_771_771_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_773_773_invokes_773",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_771_771",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_773_773",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 773,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 773
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_773_773_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_log_775_775_invokes_775",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_773_773",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_log_775_775",
          "kind": "invokes",
          "label": "Logs runtime state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 775,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 775
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_log_775_775_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_776_776_returns_776",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_log_775_775",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_776_776",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 776,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 776
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_776_776_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_779_779_invokes_779",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_776_776",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_779_779",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 779,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 779
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_779_779_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_781_781_returns_781",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_catch_779_779",
          "to": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_return_781_781",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 781,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 781
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_741_741_flow_method_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_8_uses-service_749",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_askquestionasync_await_741_741",
          "to": "flow_method_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_8",
          "kind": "uses-service",
          "label": "JsonRepairHelper.Repair",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 749,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/KnowledgeService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
              "line": 749
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1_flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3_maps-dto_3",
          "from": "flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3",
          "kind": "maps-dto",
          "label": "dto AiSettings",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "sourceLine": 3,
          "evidencePaths": [
            "NexusReader.Infrastructure/Configuration/AiSettings.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
              "line": 3
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_configuration_stripesettings_cs_file_1_flow_type_nexusreader_infrastructure_configuration_stripesettings_cs_stripesettings_3_defines-type_3",
          "from": "flow_file_nexusreader_infrastructure_configuration_stripesettings_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_configuration_stripesettings_cs_stripesettings_3",
          "kind": "defines-type",
          "label": "model StripeSettings",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "sourceLine": 3,
          "evidencePaths": [
            "NexusReader.Infrastructure/Configuration/StripeSettings.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
              "line": 3
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1_flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9_invokes_9",
          "from": "flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9",
          "kind": "invokes",
          "label": "ComputeHash",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 9,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 9
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_branch_11_11_evaluates-condition_11",
          "from": "flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9",
          "to": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_branch_11_11",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 11,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 11
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_branch_11_11_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_guard_clause_11_11_evaluates-condition_11",
          "from": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_branch_11_11",
          "to": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_guard_clause_11_11",
          "kind": "evaluates-condition",
          "label": "return-empty / continue",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 11,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 11
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_guard_clause_11_11_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_return_13_13_returns_13",
          "from": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_guard_clause_11_11",
          "to": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_return_13_13",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 13,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 13
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_return_13_13_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_return_21_21_returns_21",
          "from": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_return_13_13",
          "to": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_return_21_21",
          "kind": "returns",
          "label": "Returns hash string",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 21,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 21
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_return_21_21_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_return_21_21_returns_21",
          "from": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_return_21_21",
          "to": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_return_21_21",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 21,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 21
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1_flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_24_invokes_24",
          "from": "flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_24",
          "kind": "invokes",
          "label": "Normalize",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 24,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 24
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_24_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_branch_26_26_evaluates-condition_26",
          "from": "flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_24",
          "to": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_branch_26_26",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 26,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 26
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_branch_26_26_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_guard_clause_26_26_evaluates-condition_26",
          "from": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_branch_26_26",
          "to": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_guard_clause_26_26",
          "kind": "evaluates-condition",
          "label": "return-empty / continue",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 26,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 26
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_guard_clause_26_26_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_return_28_28_returns_28",
          "from": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_guard_clause_26_26",
          "to": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_return_28_28",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 28,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 28
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_return_28_28_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_return_35_35_returns_35",
          "from": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_return_28_28",
          "to": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_return_35_35",
          "kind": "returns",
          "label": "Returns normalized string",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 35,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 35
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_return_35_35_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_return_35_35_returns_35",
          "from": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_return_35_35",
          "to": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_normalize_return_35_35",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 35,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 35
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1_flow_type_nexusreader_infrastructure_helpers_contenthasher_cs_contenthasher_7_defines-type_7",
          "from": "flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_helpers_contenthasher_cs_contenthasher_7",
          "kind": "defines-type",
          "label": "model ContentHasher",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 7,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/ContentHasher.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
              "line": 7
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_file_1_flow_method_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_8_invokes_8",
          "from": "flow_file_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_8",
          "kind": "invokes",
          "label": "Repair",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 8,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 8
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_8_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_10_10_evaluates-condition_10",
          "from": "flow_method_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_8",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_10_10",
          "kind": "evaluates-condition",
          "label": "exit / continue",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 10,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 10
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_10_10_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_14_14_evaluates-condition_14",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_10_10",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_14_14",
          "kind": "evaluates-condition",
          "label": "attempt-repair / no-repair-needed",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 14,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 14
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_14_14_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_24_24_evaluates-condition_24",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_14_14",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_24_24",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 24,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 24
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_24_24_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_24_24_evaluates-condition_24",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_24_24",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_24_24",
          "kind": "evaluates-condition",
          "label": "prune-garbage / skip-pruning",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 24,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 24
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_24_24_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_35_35_loops-to_35",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_24_24",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_35_35",
          "kind": "loops-to",
          "label": "Iterate characters to rebuild structural stack",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 35,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 35
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_35_35_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_35_35_loops-to_35",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_35_35",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_35_35",
          "kind": "loops-to",
          "label": "char c in json",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 35,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 35
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_35_35_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_37_37_evaluates-condition_37",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_35_35",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_37_37",
          "kind": "evaluates-condition",
          "label": "exit / continue",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 37,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 37
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_37_37_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_38_38_evaluates-condition_38",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_37_37",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_38_38",
          "kind": "evaluates-condition",
          "label": "exit / continue",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 38,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 38
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_38_38_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_39_39_evaluates-condition_39",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_38_38",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_39_39",
          "kind": "evaluates-condition",
          "label": "exit / continue",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 39,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 39
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_39_39_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_40_40_evaluates-condition_40",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_39_39",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_40_40",
          "kind": "evaluates-condition",
          "label": "exit / continue",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 40,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 40
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_40_40_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_42_42_evaluates-condition_42",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_guard_clause_40_40",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_42_42",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 42,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 42
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_42_42_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_43_43_evaluates-condition_43",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_42_42",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_43_43",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 43,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 43
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_43_43_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_fallback_43_43_falls-back_43",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_43_43",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_fallback_43_43",
          "kind": "falls-back",
          "label": "fallback",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 43,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 43
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_fallback_43_43_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_45_45_evaluates-condition_45",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_fallback_43_43",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_45_45",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 45,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 45
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_45_45_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_48_48_evaluates-condition_48",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_45_45",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_48_48",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 48,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 48
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_48_48_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_55_55_evaluates-condition_55",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_48_48",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_55_55",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 55,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 55
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_55_55_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_57_57_loops-to_57",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_55_55",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_57_57",
          "kind": "loops-to",
          "label": "Append closing characters for remaining open brackets/braces",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 57,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 57
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_57_57_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_57_57_loops-to_57",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_57_57",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_57_57",
          "kind": "loops-to",
          "label": "stack.Count > 0",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 57,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 57
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_57_57_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_60_60_evaluates-condition_60",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_loop_57_57",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_60_60",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 60,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 60
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_60_60_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_61_61_evaluates-condition_61",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_60_60",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_61_61",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 61,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 61
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_61_61_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_fallback_61_61_falls-back_61",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_branch_61_61",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_fallback_61_61",
          "kind": "falls-back",
          "label": "fallback",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 61,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 61
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_fallback_61_61_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_return_64_64_returns_64",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_fallback_61_61",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_return_64_64",
          "kind": "returns",
          "label": "Return repaired JSON",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 64,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 64
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_return_64_64_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_return_64_64_returns_64",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_return_64_64",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_return_64_64",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 64,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 64
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_return_64_64_flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_return_67_67_returns_67",
          "from": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_return_64_64",
          "to": "flow_action_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_repair_return_67_67",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 67,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 67
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_file_1_flow_type_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_jsonrepairhelper_6_defines-type_6",
          "from": "flow_file_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_jsonrepairhelper_6",
          "kind": "defines-type",
          "label": "model JsonRepairHelper",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 6,
          "evidencePaths": [
            "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
              "line": 6
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1_flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_21_invokes_21",
          "from": "flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_21",
          "kind": "invokes",
          "label": "BroadcastProgressAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 21,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 21
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_21_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_guard_clause_30_30_evaluates-condition_30",
          "from": "flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_21",
          "to": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_guard_clause_30_30",
          "kind": "evaluates-condition",
          "label": "enter branch: attempts exclusion comment / else: normal send",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 30,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 30
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_guard_clause_30_30_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_branch_30_30_evaluates-condition_30",
          "from": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_guard_clause_30_30",
          "to": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_branch_30_30",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 30,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 30
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_branch_30_30_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_await_32_32_invokes_32",
          "from": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_branch_30_30",
          "to": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_await_32_32",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 32,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 32
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_await_32_32_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_external_call_34_34_invokes_34",
          "from": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_await_32_32",
          "to": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_external_call_34_34",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 34,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 34
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_external_call_34_34_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_fallback_40_40_falls-back_40",
          "from": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_external_call_34_34",
          "to": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_fallback_40_40",
          "kind": "falls-back",
          "label": "fallback",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 40,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 40
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_fallback_40_40_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_await_42_42_invokes_42",
          "from": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_fallback_40_40",
          "to": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_await_42_42",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 42,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 42
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_await_42_42_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_external_call_44_44_invokes_44",
          "from": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_await_42_42",
          "to": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_external_call_44_44",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 44,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 44
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1_flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastingestionprogressasync_49_invokes_49",
          "from": "flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastingestionprogressasync_49",
          "kind": "invokes",
          "label": "BroadcastIngestionProgressAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 49,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 49
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastingestionprogressasync_49_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastingestionprogressasync_await_57_57_invokes_57",
          "from": "flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastingestionprogressasync_49",
          "to": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastingestionprogressasync_await_57_57",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 57,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 57
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastingestionprogressasync_await_57_57_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastingestionprogressasync_external_call_59_59_invokes_59",
          "from": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastingestionprogressasync_await_57_57",
          "to": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastingestionprogressasync_external_call_59_59",
          "kind": "invokes",
          "label": "Calls external dependency",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 59,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 59
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1_flow_type_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_signalrsyncbroadcaster_11_defines-type_11",
          "from": "flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_signalrsyncbroadcaster_11",
          "kind": "defines-type",
          "label": "model SignalRSyncBroadcaster",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 11,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
              "line": 11
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1_flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19_invokes_19",
          "from": "flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19",
          "kind": "handles-route",
          "label": "UpdateProgress",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 19,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 19
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19_flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_21_21_invokes_21",
          "from": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_21_21",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 21,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 21
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_21_21_flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_guard_clause_21_21_evaluates-condition_21",
          "from": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_21_21",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_guard_clause_21_21",
          "kind": "evaluates-condition",
          "label": "skip (no userId) / continue (has userId)",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 21,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 21
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_guard_clause_21_21_flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_branch_22_22_evaluates-condition_22",
          "from": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_guard_clause_21_21",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_branch_22_22",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 22,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 22
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_branch_22_22_flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_24_24_invokes_24",
          "from": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_branch_22_22",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_24_24",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 24,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 24
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_24_24_flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_await_24_24_invokes_24",
          "from": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_24_24",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_await_24_24",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 24,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 24
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1_flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28_invokes_28",
          "from": "flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28",
          "kind": "handles-route",
          "label": "OnConnectedAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 28,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 28
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28_flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_30_30_invokes_30",
          "from": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_30_30",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 30,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 30
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_30_30_flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_branch_31_31_evaluates-condition_31",
          "from": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_30_30",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_branch_31_31",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 31,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 31
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_branch_31_31_flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_guard_clause_31_31_evaluates-condition_31",
          "from": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_branch_31_31",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_guard_clause_31_31",
          "kind": "evaluates-condition",
          "label": "skip (no UserIdentifier) / add-to-group",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 31,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 31
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_guard_clause_31_31_flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_33_33_invokes_33",
          "from": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_guard_clause_31_31",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_33_33",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 33,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 33
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_33_33_flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_await_33_33_invokes_33",
          "from": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_33_33",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_await_33_33",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 33,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 33
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_await_33_33_flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_await_35_35_invokes_35",
          "from": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_await_33_33",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_await_35_35",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 35,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 35
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1_flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38_invokes_38",
          "from": "flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38",
          "kind": "handles-route",
          "label": "OnDisconnectedAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 38,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 38
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38_flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_40_40_invokes_40",
          "from": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_40_40",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 40,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 40
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_40_40_flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_branch_41_41_evaluates-condition_41",
          "from": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_40_40",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_branch_41_41",
          "kind": "evaluates-condition",
          "label": "true / false",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 41,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 41
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_branch_41_41_flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_guard_clause_41_41_evaluates-condition_41",
          "from": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_branch_41_41",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_guard_clause_41_41",
          "kind": "evaluates-condition",
          "label": "skip (no UserIdentifier) / remove-from-group",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 41,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 41
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_guard_clause_41_41_flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_43_43_invokes_43",
          "from": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_guard_clause_41_41",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_43_43",
          "kind": "invokes",
          "label": "Reads repository or persistence state",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 43,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 43
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_43_43_flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_await_43_43_invokes_43",
          "from": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_43_43",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_await_43_43",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 43,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 43
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_await_43_43_flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_await_45_45_invokes_45",
          "from": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_await_43_43",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_await_45_45",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 45,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 45
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1_flow_type_nexusreader_infrastructure_realtime_synchub_cs_synchub_10_defines-type_10",
          "from": "flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_realtime_synchub_cs_synchub_10",
          "kind": "defines-type",
          "label": "model SyncHub",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 10,
          "evidencePaths": [
            "NexusReader.Infrastructure/RealTime/SyncHub.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
              "line": 10
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_epubmetadataextractor_cs_file_1_flow_method_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_15_invokes_15",
          "from": "flow_file_nexusreader_infrastructure_services_epubmetadataextractor_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_15",
          "kind": "invokes",
          "label": "ExtractMetadataAsync",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 15,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
              "line": 15
            }
          ]
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_15_flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_try_17_17_invokes_17",
          "from": "flow_method_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_15",
          "to": "flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_try_17_17",
          "kind": "invokes",
          "label": "Begins protected execution",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 17,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
              "line": 17
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_try_17_17_flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_await_19_19_invokes_19",
          "from": "flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_try_17_17",
          "to": "flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_await_19_19",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 19,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
              "line": 19
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_await_19_19_flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_await_23_23_invokes_23",
          "from": "flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_await_19_19",
          "to": "flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_await_23_23",
          "kind": "invokes",
          "label": "Waits for async work",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 23,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
              "line": 23
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_await_23_23_flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_return_24_24_returns_24",
          "from": "flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_await_23_23",
          "to": "flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_return_24_24",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 24,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
              "line": 24
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_return_24_24_flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_catch_26_26_invokes_26",
          "from": "flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_return_24_24",
          "to": "flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_catch_26_26",
          "kind": "invokes",
          "label": "handled exception",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 26,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
              "line": 26
            }
          ]
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_catch_26_26_flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_return_28_28_returns_28",
          "from": "flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_catch_26_26",
          "to": "flow_action_nexusreader_infrastructure_services_epubmetadataextractor_cs_extractmetadataasync_return_28_28",
          "kind": "returns",
          "label": "Returns result",
          "confidence": "medium",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 28,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
              "line": 28
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_epubmetadataextractor_cs_file_1_flow_type_nexusreader_infrastructure_services_epubmetadataextractor_cs_epubmetadataextractor_12_defines-type_12",
          "from": "flow_file_nexusreader_infrastructure_services_epubmetadataextractor_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_services_epubmetadataextractor_cs_epubmetadataextractor_12",
          "kind": "defines-type",
          "label": "model EpubMetadataExtractor",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 12,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
              "line": 12
            }
          ]
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_promptregistry_cs_file_1_flow_type_nexusreader_infrastructure_services_promptregistry_cs_promptregistry_3_defines-type_3",
          "from": "flow_file_nexusreader_infrastructure_services_promptregistry_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_services_promptregistry_cs_promptregistry_3",
          "kind": "defines-type",
          "label": "model PromptRegistry",
          "confidence": "high",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/PromptRegistry.cs",
          "sourceLine": 3,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/PromptRegistry.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
              "line": 3
            }
          ]
        }
      ],
      "flows": [
        {
          "id": "flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
          "name": "BookStorageService",
          "category": "backend-request",
          "entryNodeId": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "nodeIds": [
            "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
            "flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10",
            "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
            "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
            "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
            "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
            "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
            "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
            "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
            "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
            "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
            "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
            "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_22_22",
            "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
            "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
            "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
            "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68",
            "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
            "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_47_47",
            "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
            "flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1",
            "flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3"
          ],
          "edgeIds": [
            "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19_invokes_19",
            "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22_returns_22",
            "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_22_22_invokes_22",
            "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25_invokes_25",
            "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28_evaluates-condition_28",
            "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35_invokes_35",
            "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_returns_40",
            "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_returns_40",
            "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43_invokes_43",
            "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45_evaluates-condition_45",
            "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47_returns_47",
            "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_47_47_invokes_47",
            "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50_invokes_50",
            "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53_evaluates-condition_53",
            "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60_invokes_60",
            "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_returns_63",
            "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_returns_63",
            "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66_invokes_66",
            "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68_evaluates-condition_68",
            "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68_evaluates-condition_68",
            "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10_defines-type_10",
            "edge_flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1_flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3_maps-dto_3"
          ],
          "confidence": "high",
          "businessValue": 62,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BookStorageService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BookStorageService.cs",
              "line": 1
            }
          ],
          "businessSignals": [
            "validation-decision"
          ],
          "scoreBreakdown": {
            "entrypointQuality": 14,
            "crossLayerDepth": 0,
            "businessSignals": 16,
            "evidenceStrength": 20,
            "contractCoverage": 12,
            "total": 62
          },
          "validationIssues": [],
          "recommendedDiagramKinds": [
            "primary-runtime",
            "control-flow",
            "dependency-map",
            "class-diagram",
            "method-flow"
          ],
          "producedArtifacts": [
            {
              "id": "infrastructure_services_md_phase_inputs",
              "label": "Phase Inputs",
              "path": "machine/phase-inputs/infrastructure__infrastructure-services.phase-inputs.json",
              "producerPath": "src/documentation/v4/phase4Generation.ts",
              "status": "generated"
            },
            {
              "id": "infrastructure_services_md_context_bag",
              "label": "Context Bag",
              "path": "machine/context-bags/infrastructure_services.context-bag.json",
              "producerPath": "src/documentation/v4/buildContextBags.ts",
              "status": "generated"
            }
          ]
        },
        {
          "id": "flow_1_nexusreader_infrastructure_services_billingservice_cs",
          "name": "BillingService",
          "category": "backend-request",
          "entryNodeId": "flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1",
          "nodeIds": [
            "flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1",
            "flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32",
            "flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_86",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_try_88_88",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_repository_read_90_90",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_90_90",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_91_91",
            "flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1",
            "flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3"
          ],
          "edgeIds": [
            "edge_flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1_flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32_invokes_32",
            "edge_flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34_invokes_34",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36_invokes_36",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36_invokes_36",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37_evaluates-condition_37",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37_evaluates-condition_37",
            "edge_flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1_flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_86_invokes_86",
            "edge_flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_86_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_try_88_88_invokes_88",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_try_88_88_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_repository_read_90_90_invokes_90",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_repository_read_90_90_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_90_90_invokes_90",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_await_90_90_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_91_91_evaluates-condition_91",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_branch_91_91_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptiondeletedasync_guard_clause_91_91_evaluates-condition_91",
            "edge_flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1_flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3_maps-dto_3"
          ],
          "confidence": "high",
          "businessValue": 59,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 1
            }
          ],
          "businessSignals": [
            "validation-decision"
          ],
          "scoreBreakdown": {
            "entrypointQuality": 14,
            "crossLayerDepth": 0,
            "businessSignals": 16,
            "evidenceStrength": 20,
            "contractCoverage": 9,
            "total": 59
          },
          "validationIssues": [],
          "recommendedDiagramKinds": [
            "primary-runtime",
            "control-flow",
            "dependency-map",
            "class-diagram",
            "method-flow"
          ],
          "producedArtifacts": [
            {
              "id": "infrastructure_services_md_phase_inputs",
              "label": "Phase Inputs",
              "path": "machine/phase-inputs/infrastructure__infrastructure-services.phase-inputs.json",
              "producerPath": "src/documentation/v4/phase4Generation.ts",
              "status": "generated"
            },
            {
              "id": "infrastructure_services_md_context_bag",
              "label": "Context Bag",
              "path": "machine/context-bags/infrastructure_services.context-bag.json",
              "producerPath": "src/documentation/v4/buildContextBags.ts",
              "status": "generated"
            }
          ]
        },
        {
          "id": "flow_0_nexusreader_infrastructure_services_epubreaderservice_cs",
          "name": "EpubReaderService",
          "category": "backend-request",
          "entryNodeId": "flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1",
          "nodeIds": [
            "flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1",
            "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_30",
            "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_124",
            "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_145",
            "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_sanitizeparagraph_166",
            "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175",
            "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_186",
            "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_try_36_36",
            "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_loop_130_130",
            "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_loop_153_153",
            "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_sanitizeparagraph_return_172_172",
            "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177",
            "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_repository_read_186_186",
            "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_39_39",
            "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_guard_clause_133_133",
            "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_branch_158_158",
            "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_return_178_178",
            "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_guard_clause_188_188",
            "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_repository_read_41_41",
            "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_guard_clause_137_137",
            "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_return_163_163",
            "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_loop_191_191",
            "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_41_41",
            "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_return_142_142"
          ],
          "edgeIds": [
            "edge_flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_30_invokes_30",
            "edge_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_30_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_try_36_36_invokes_36",
            "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_try_36_36_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_39_39_invokes_39",
            "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_39_39_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_repository_read_41_41_invokes_41",
            "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_repository_read_41_41_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_41_41_invokes_41",
            "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_await_41_41_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_getepubcontentasync_guard_clause_47_47_evaluates-condition_47",
            "edge_flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_124_invokes_124",
            "edge_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_124_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_loop_130_130_loops-to_130",
            "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_loop_130_130_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_loop_130_130_loops-to_130",
            "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_loop_130_130_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_guard_clause_133_133_evaluates-condition_133",
            "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_guard_clause_133_133_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_guard_clause_137_137_evaluates-condition_137",
            "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_guard_clause_137_137_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_return_142_142_returns_142",
            "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_return_142_142_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_resolvepath_return_142_142_returns_142",
            "edge_flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_145_invokes_145",
            "edge_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_145_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_loop_153_153_loops-to_153",
            "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_loop_153_153_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_branch_158_158_evaluates-condition_158",
            "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_branch_158_158_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_extractparagraphs_return_163_163_returns_163",
            "edge_flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_sanitizeparagraph_166_invokes_166",
            "edge_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_sanitizeparagraph_166_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_sanitizeparagraph_return_172_172_returns_172",
            "edge_flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175_invokes_175",
            "edge_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177_evaluates-condition_177",
            "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_return_178_178_returns_178",
            "edge_flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_186_invokes_186",
            "edge_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_186_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_repository_read_186_186_invokes_186",
            "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_repository_read_186_186_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_guard_clause_188_188_evaluates-condition_188",
            "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_guard_clause_188_188_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_loop_191_191_loops-to_191",
            "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_loop_191_191_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_loop_191_191_loops-to_191",
            "edge_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_loop_191_191_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_findtitleinnavigation_branch_193_193_evaluates-condition_193"
          ],
          "confidence": "medium",
          "businessValue": 50,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/EpubReaderService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
              "line": 1
            }
          ],
          "businessSignals": [],
          "scoreBreakdown": {
            "entrypointQuality": 14,
            "crossLayerDepth": 0,
            "businessSignals": 16,
            "evidenceStrength": 20,
            "contractCoverage": 0,
            "total": 50
          },
          "validationIssues": [
            {
              "code": "missing-contract-node",
              "severity": "warn",
              "message": "Business flow is missing DTO or entity nodes that explain its data shape."
            }
          ],
          "recommendedDiagramKinds": [
            "primary-runtime",
            "control-flow",
            "method-flow"
          ],
          "producedArtifacts": [
            {
              "id": "infrastructure_services_md_phase_inputs",
              "label": "Phase Inputs",
              "path": "machine/phase-inputs/infrastructure__infrastructure-services.phase-inputs.json",
              "producerPath": "src/documentation/v4/phase4Generation.ts",
              "status": "generated"
            },
            {
              "id": "infrastructure_services_md_context_bag",
              "label": "Context Bag",
              "path": "machine/context-bags/infrastructure_services.context-bag.json",
              "producerPath": "src/documentation/v4/buildContextBags.ts",
              "status": "generated"
            }
          ]
        },
        {
          "id": "xref_infrastructure_services_md_knowledge_extraction_and_caching",
          "name": "Knowledge extraction and caching",
          "category": "backend-request",
          "entryNodeId": "flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1",
          "nodeIds": [
            "flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1",
            "flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_39_39",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_40_40",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_51_51",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_51_51"
          ],
          "edgeIds": [
            "edge_flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1_flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32_invokes_32",
            "edge_flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34_invokes_34",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36_invokes_36",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36_invokes_36",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37_evaluates-condition_37",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37_evaluates-condition_37",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_39_39_invokes_39",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_39_39_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_40_40_returns_40",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_40_40_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46_evaluates-condition_46",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_51_51_evaluates-condition_51",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_51_51_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_51_51_falls-back_51",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_51_51_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_56_56_evaluates-condition_56",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_56_56_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_56_56_falls-back_56",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_56_56_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_58_58_invokes_58",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_58_58_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_61_61_invokes_61",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_61_61_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_62_62_invokes_62"
          ],
          "confidence": "medium",
          "businessValue": 50,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 1
            }
          ],
          "businessSignals": [],
          "scoreBreakdown": {
            "entrypointQuality": 14,
            "crossLayerDepth": 0,
            "businessSignals": 16,
            "evidenceStrength": 20,
            "contractCoverage": 0,
            "total": 50
          },
          "validationIssues": [
            {
              "code": "missing-contract-node",
              "severity": "warn",
              "message": "Business flow is missing DTO or entity nodes that explain its data shape."
            }
          ],
          "recommendedDiagramKinds": [
            "primary-runtime",
            "control-flow",
            "method-flow"
          ],
          "producedArtifacts": [
            {
              "id": "infrastructure_services_md_phase_inputs",
              "label": "Phase Inputs",
              "path": "machine/phase-inputs/infrastructure__infrastructure-services.phase-inputs.json",
              "producerPath": "src/documentation/v4/phase4Generation.ts",
              "status": "generated"
            },
            {
              "id": "infrastructure_services_md_context_bag",
              "label": "Context Bag",
              "path": "machine/context-bags/infrastructure_services.context-bag.json",
              "producerPath": "src/documentation/v4/buildContextBags.ts",
              "status": "generated"
            }
          ]
        },
        {
          "id": "xref_infrastructure_services_md_epub_metadata_extraction_ingestion_ui",
          "name": "EPUB metadata extraction (ingestion UI)",
          "category": "backend-request",
          "entryNodeId": "flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1",
          "nodeIds": [
            "flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1",
            "flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_39_39",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_40_40",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_51_51",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_51_51"
          ],
          "edgeIds": [
            "edge_flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1_flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32_invokes_32",
            "edge_flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34_invokes_34",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36_invokes_36",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36_invokes_36",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37_evaluates-condition_37",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37_evaluates-condition_37",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_39_39_invokes_39",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_39_39_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_40_40_returns_40",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_40_40_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46_evaluates-condition_46",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_51_51_evaluates-condition_51",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_51_51_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_51_51_falls-back_51",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_51_51_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_56_56_evaluates-condition_56",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_56_56_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_56_56_falls-back_56",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_56_56_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_58_58_invokes_58",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_58_58_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_61_61_invokes_61",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_61_61_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_62_62_invokes_62"
          ],
          "confidence": "medium",
          "businessValue": 50,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 1
            }
          ],
          "businessSignals": [],
          "scoreBreakdown": {
            "entrypointQuality": 14,
            "crossLayerDepth": 0,
            "businessSignals": 16,
            "evidenceStrength": 20,
            "contractCoverage": 0,
            "total": 50
          },
          "validationIssues": [
            {
              "code": "missing-contract-node",
              "severity": "warn",
              "message": "Business flow is missing DTO or entity nodes that explain its data shape."
            }
          ],
          "recommendedDiagramKinds": [
            "primary-runtime",
            "control-flow",
            "method-flow"
          ],
          "producedArtifacts": [
            {
              "id": "infrastructure_services_md_phase_inputs",
              "label": "Phase Inputs",
              "path": "machine/phase-inputs/infrastructure__infrastructure-services.phase-inputs.json",
              "producerPath": "src/documentation/v4/phase4Generation.ts",
              "status": "generated"
            },
            {
              "id": "infrastructure_services_md_context_bag",
              "label": "Context Bag",
              "path": "machine/context-bags/infrastructure_services.context-bag.json",
              "producerPath": "src/documentation/v4/buildContextBags.ts",
              "status": "generated"
            }
          ]
        },
        {
          "id": "xref_infrastructure_services_md_ebook_reading_and_ai_trigger_insertion",
          "name": "Ebook reading and AI-trigger insertion",
          "category": "backend-request",
          "entryNodeId": "flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1",
          "nodeIds": [
            "flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1",
            "flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_39_39",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_40_40",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_51_51",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_51_51"
          ],
          "edgeIds": [
            "edge_flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1_flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32_invokes_32",
            "edge_flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34_invokes_34",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36_invokes_36",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36_invokes_36",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37_evaluates-condition_37",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37_evaluates-condition_37",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_39_39_invokes_39",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_39_39_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_40_40_returns_40",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_40_40_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46_evaluates-condition_46",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_51_51_evaluates-condition_51",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_51_51_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_51_51_falls-back_51",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_51_51_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_56_56_evaluates-condition_56",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_56_56_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_56_56_falls-back_56",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_56_56_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_58_58_invokes_58",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_58_58_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_61_61_invokes_61",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_61_61_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_62_62_invokes_62"
          ],
          "confidence": "medium",
          "businessValue": 50,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 1
            }
          ],
          "businessSignals": [],
          "scoreBreakdown": {
            "entrypointQuality": 14,
            "crossLayerDepth": 0,
            "businessSignals": 16,
            "evidenceStrength": 20,
            "contractCoverage": 0,
            "total": 50
          },
          "validationIssues": [
            {
              "code": "missing-contract-node",
              "severity": "warn",
              "message": "Business flow is missing DTO or entity nodes that explain its data shape."
            }
          ],
          "recommendedDiagramKinds": [
            "primary-runtime",
            "control-flow",
            "method-flow"
          ],
          "producedArtifacts": [
            {
              "id": "infrastructure_services_md_phase_inputs",
              "label": "Phase Inputs",
              "path": "machine/phase-inputs/infrastructure__infrastructure-services.phase-inputs.json",
              "producerPath": "src/documentation/v4/phase4Generation.ts",
              "status": "generated"
            },
            {
              "id": "infrastructure_services_md_context_bag",
              "label": "Context Bag",
              "path": "machine/context-bags/infrastructure_services.context-bag.json",
              "producerPath": "src/documentation/v4/buildContextBags.ts",
              "status": "generated"
            }
          ]
        },
        {
          "id": "xref_infrastructure_services_md_stripe_webhook_billing_handling",
          "name": "Stripe webhook billing handling",
          "category": "backend-request",
          "entryNodeId": "flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1",
          "nodeIds": [
            "flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1",
            "flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_39_39",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_40_40",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_51_51",
            "flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_51_51"
          ],
          "edgeIds": [
            "edge_flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1_flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32_invokes_32",
            "edge_flow_method_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_32_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34_invokes_34",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_try_34_34_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36_invokes_36",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_repository_read_36_36_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36_invokes_36",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_36_36_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37_evaluates-condition_37",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_37_37_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37_evaluates-condition_37",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_guard_clause_37_37_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_39_39_invokes_39",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_39_39_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_40_40_returns_40",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_return_40_40_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46_evaluates-condition_46",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_46_46_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_51_51_evaluates-condition_51",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_51_51_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_51_51_falls-back_51",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_51_51_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_56_56_evaluates-condition_56",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_branch_56_56_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_56_56_falls-back_56",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_fallback_56_56_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_58_58_invokes_58",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_log_58_58_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_61_61_invokes_61",
            "edge_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_61_61_flow_action_nexusreader_infrastructure_services_billingservice_cs_handlesubscriptionupdatedasync_await_62_62_invokes_62"
          ],
          "confidence": "medium",
          "businessValue": 50,
          "evidencePaths": [
            "NexusReader.Infrastructure/Services/BillingService.cs"
          ],
          "evidenceReferences": [
            {
              "path": "NexusReader.Infrastructure/Services/BillingService.cs",
              "line": 1
            }
          ],
          "businessSignals": [],
          "scoreBreakdown": {
            "entrypointQuality": 14,
            "crossLayerDepth": 0,
            "businessSignals": 16,
            "evidenceStrength": 20,
            "contractCoverage": 0,
            "total": 50
          },
          "validationIssues": [
            {
              "code": "missing-contract-node",
              "severity": "warn",
              "message": "Business flow is missing DTO or entity nodes that explain its data shape."
            }
          ],
          "recommendedDiagramKinds": [
            "primary-runtime",
            "control-flow",
            "method-flow"
          ],
          "producedArtifacts": [
            {
              "id": "infrastructure_services_md_phase_inputs",
              "label": "Phase Inputs",
              "path": "machine/phase-inputs/infrastructure__infrastructure-services.phase-inputs.json",
              "producerPath": "src/documentation/v4/phase4Generation.ts",
              "status": "generated"
            },
            {
              "id": "infrastructure_services_md_context_bag",
              "label": "Context Bag",
              "path": "machine/context-bags/infrastructure_services.context-bag.json",
              "producerPath": "src/documentation/v4/buildContextBags.ts",
              "status": "generated"
            }
          ]
        }
      ]
    },
    "testLinkMetadata": []
  },
  "generatedDiagrams": [
    {
      "id": "dependency_map_graph",
      "kind": "dependency-map",
      "title": "Dependency and Model Map",
      "direction": "TD",
      "nodes": [
        {
          "id": "flow_file_nexusreader_infrastructure_services_billingservice_cs_file_1",
          "kind": "service",
          "label": "BillingService",
          "sourcePath": "NexusReader.Infrastructure/Services/BillingService.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_file_nexusreader_infrastructure_configuration_stripesettings_cs_file_1",
          "kind": "dependency",
          "label": "StripeSettings",
          "sourcePath": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "kind": "service",
          "label": "BookStorageService",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10",
          "kind": "dependency",
          "label": "BookStorageService",
          "shape": "doc",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 10
        },
        {
          "id": "flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1",
          "kind": "service",
          "label": "EpubReaderService",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_file_nexusreader_infrastructure_services_knowledgeservice_cs_file_1",
          "kind": "service",
          "label": "KnowledgeService",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1",
          "kind": "service",
          "label": "ContentHasher",
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_file_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_file_1",
          "kind": "dependency",
          "label": "JsonRepairHelper",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1",
          "kind": "dependency",
          "label": "AiSettings",
          "sourcePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3",
          "kind": "dependency",
          "label": "AiSettings",
          "shape": "doc",
          "sourcePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "sourceLine": 3
        },
        {
          "id": "flow_type_nexusreader_infrastructure_configuration_stripesettings_cs_stripesettings_3",
          "kind": "dependency",
          "label": "StripeSettings",
          "shape": "doc",
          "sourcePath": "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "sourceLine": 3
        },
        {
          "id": "flow_type_nexusreader_infrastructure_helpers_contenthasher_cs_contenthasher_7",
          "kind": "dependency",
          "label": "ContentHasher",
          "shape": "doc",
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 7
        },
        {
          "id": "flow_type_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_jsonrepairhelper_6",
          "kind": "dependency",
          "label": "JsonRepairHelper",
          "shape": "doc",
          "sourcePath": "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 6
        },
        {
          "id": "flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1",
          "kind": "service",
          "label": "SignalRSyncBroadcaster",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_type_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_signalrsyncbroadcaster_11",
          "kind": "dependency",
          "label": "SignalRSyncBroadcaster",
          "shape": "doc",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 11
        },
        {
          "id": "flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1",
          "kind": "dependency",
          "label": "SyncHub",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_type_nexusreader_infrastructure_realtime_synchub_cs_synchub_10",
          "kind": "dependency",
          "label": "SyncHub",
          "shape": "doc",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 10
        },
        {
          "id": "flow_file_nexusreader_infrastructure_services_epubmetadataextractor_cs_file_1",
          "kind": "service",
          "label": "EpubMetadataExtractor",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_type_nexusreader_infrastructure_services_epubmetadataextractor_cs_epubmetadataextractor_12",
          "kind": "dependency",
          "label": "EpubMetadataExtractor",
          "shape": "doc",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 12
        },
        {
          "id": "flow_file_nexusreader_infrastructure_services_promptregistry_cs_file_1",
          "kind": "service",
          "label": "PromptRegistry",
          "sourcePath": "NexusReader.Infrastructure/Services/PromptRegistry.cs",
          "sourceLine": 1
        }
      ],
      "edges": [
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10_defines_type_10",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10",
          "semanticLabel": "model BookStorageService",
          "visibleLabel": "model BookStorageService",
          "relation": "transforms",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 10,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
            "expandedLabel": "defines-type"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1_flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3_maps_dto_3",
          "from": "flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3",
          "semanticLabel": "dto AiSettings",
          "visibleLabel": "dto AiSettings",
          "relation": "transforms",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "sourceLine": 3,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
            "expandedLabel": "maps-dto"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_configuration_stripesettings_cs_file_1_flow_type_nexusreader_infrastructure_configuration_stripesettings_cs_stripesettings_3_defines_type_3",
          "from": "flow_file_nexusreader_infrastructure_configuration_stripesettings_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_configuration_stripesettings_cs_stripesettings_3",
          "semanticLabel": "model StripeSettings",
          "visibleLabel": "model StripeSettings",
          "relation": "transforms",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "sourceLine": 3,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Holds Stripe product identifiers and exposes the configuration section name for binding.",
            "expandedLabel": "defines-type"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1_flow_type_nexusreader_infrastructure_helpers_contenthasher_cs_contenthasher_7_defines_type_7",
          "from": "flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_helpers_contenthasher_cs_contenthasher_7",
          "semanticLabel": "model ContentHasher",
          "visibleLabel": "model ContentHasher",
          "relation": "transforms",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 7,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Static helper class exposing normalization and hashing utilities for content.",
            "expandedLabel": "defines-type"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_file_1_flow_type_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_jsonrepairhelper_6_defines_type_6",
          "from": "flow_file_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_helpers_jsonrepairhelper_cs_jsonrepairhelper_6",
          "semanticLabel": "model JsonRepairHelper",
          "visibleLabel": "model JsonRepairHelper",
          "relation": "transforms",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "sourceLine": 6,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Static helper class that contains JSON repair utilities.",
            "expandedLabel": "defines-type"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1_flow_type_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_signalrsyncbroadcaster_11_defines_type_11",
          "from": "flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_signalrsyncbroadcaster_11",
          "semanticLabel": "model SignalRSyncBroadcaster",
          "visibleLabel": "model SignalRSyncBroadcaster",
          "relation": "transforms",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 11,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "SignalR-based implementation of ISyncBroadcaster that pushes sync and ingestion progress to a user's connected devices.",
            "expandedLabel": "defines-type"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1_flow_type_nexusreader_infrastructure_realtime_synchub_cs_synchub_10_defines_type_10",
          "from": "flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_realtime_synchub_cs_synchub_10",
          "semanticLabel": "model SyncHub",
          "visibleLabel": "model SyncHub",
          "relation": "transforms",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 10,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "SignalR Hub that handles real-time reading progress updates and per-user group membership.",
            "expandedLabel": "defines-type"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_epubmetadataextractor_cs_file_1_flow_type_nexusreader_infrastructure_services_epubmetadataextractor_cs_epubmetadataextractor_12_defines_type_12",
          "from": "flow_file_nexusreader_infrastructure_services_epubmetadataextractor_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_services_epubmetadataextractor_cs_epubmetadataextractor_12",
          "semanticLabel": "model EpubMetadataExtractor",
          "visibleLabel": "model EpubMetadataExtractor",
          "relation": "transforms",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "sourceLine": 12,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Infrastructure implementation of IEpubMetadataExtractor that reads EPUB metadata from a stream.",
            "expandedLabel": "defines-type"
          }
        }
      ],
      "metadata": {
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BillingService.cs",
          "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "NexusReader.Infrastructure/Services/PromptRegistry.cs"
        ]
      },
      "subgraphs": []
    },
    {
      "id": "primary_runtime_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
      "kind": "primary-runtime",
      "title": "BookStorageService Flow",
      "direction": "TD",
      "nodes": [
        {
          "id": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "kind": "service",
          "label": "BookStorageService",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
          "kind": "method",
          "label": "SaveEbookAsync",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 19
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
          "kind": "return",
          "label": "Returns result",
          "shape": "stadium",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 22
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_22_22",
          "kind": "step",
          "label": "Waits for async work",
          "shape": "rect",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 22
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
          "kind": "method",
          "label": "SaveEbookAsync",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 25
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
          "kind": "step",
          "label": "Ensure uploads directory exists (create if missing)",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 28
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
          "kind": "step",
          "label": "Waits for async work",
          "shape": "rect",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 35
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
          "kind": "return",
          "label": "Return web-relative path with forward slash",
          "shape": "stadium",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 40
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
          "kind": "method",
          "label": "SaveCoverAsync",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 43
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
          "kind": "step",
          "label": "Guards early exit or rejection path",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 45
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
          "kind": "return",
          "label": "Returns result",
          "shape": "stadium",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 47
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_47_47",
          "kind": "step",
          "label": "Waits for async work",
          "shape": "rect",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 47
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
          "kind": "method",
          "label": "SaveCoverAsync",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 50
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
          "kind": "step",
          "label": "Ensure covers directory exists (create if missing)",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 53
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
          "kind": "step",
          "label": "Waits for async work",
          "shape": "rect",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 60
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
          "kind": "return",
          "label": "Return web-relative path with forward slash",
          "shape": "stadium",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 63
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
          "kind": "method",
          "label": "EnsureDirectoryExists",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 66
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
          "kind": "step",
          "label": "Check directory existence and create if absent",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 68
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68",
          "kind": "step",
          "label": "Evaluates branch condition",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 68
        },
        {
          "id": "flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10",
          "kind": "dependency",
          "label": "BookStorageService",
          "shape": "doc",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 10
        },
        {
          "id": "flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1",
          "kind": "dependency",
          "label": "AiSettings",
          "sourcePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3",
          "kind": "dependency",
          "label": "AiSettings",
          "shape": "doc",
          "sourcePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "sourceLine": 3
        }
      ],
      "edges": [
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19_invokes_19",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
          "semanticLabel": "SaveEbookAsync",
          "visibleLabel": "SaveEbookAsync",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 19,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Wraps a byte-array payload into a MemoryStream and delegates to the Stream overload to persist an ebook.",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22_returns_22",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
          "semanticLabel": "Returns result",
          "visibleLabel": "Returns result",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 22,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return await SaveEbookAsync(stream, fileName);",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_22_22_invokes_22",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_22_22",
          "semanticLabel": "Waits for async work",
          "visibleLabel": "Waits for async work",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 22,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return await SaveEbookAsync(stream, fileName);",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25_invokes_25",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
          "semanticLabel": "SaveEbookAsync",
          "visibleLabel": "SaveEbookAsync",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 25,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Writes the provided stream to the uploads folder under web root with a GUID-prefixed unique filename and returns a web-relative path (forward-slash).",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28_evaluates_condition_28",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
          "semanticLabel": "create-directory / continue",
          "visibleLabel": "create-directory / continue",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 28,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "EnsureDirectoryExists(uploadsFolder)",
            "expandedLabel": "evaluates-condition"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35_invokes_35",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
          "semanticLabel": "Waits for async work",
          "visibleLabel": "Waits for async work",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 35,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "await data.CopyToAsync(fileStream);",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_returns_40",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
          "semanticLabel": "Return web-relative path with forward slash",
          "visibleLabel": "Return web-relative path with forward slash",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 40,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return $\"uploads/{uniqueFileName}\"",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_returns_40",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
          "semanticLabel": "Returns result",
          "visibleLabel": "Returns result",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 40,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return $\"uploads/{uniqueFileName}\";",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43_invokes_43",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
          "semanticLabel": "SaveCoverAsync",
          "visibleLabel": "SaveCoverAsync",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 43,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Validates byte-array cover data and delegates to the Stream overload; returns null for empty input.",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45_evaluates_condition_45",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
          "semanticLabel": "exit / continue",
          "visibleLabel": "exit / continue",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 45,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "if (data == null || data.Length == 0) return null;",
            "expandedLabel": "evaluates-condition"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47_returns_47",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
          "semanticLabel": "Returns result",
          "visibleLabel": "Returns result",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 47,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return await SaveCoverAsync(stream, fileName);",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_47_47_invokes_47",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_47_47",
          "semanticLabel": "Waits for async work",
          "visibleLabel": "Waits for async work",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 47,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return await SaveCoverAsync(stream, fileName);",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50_invokes_50",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
          "semanticLabel": "SaveCoverAsync",
          "visibleLabel": "SaveCoverAsync",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 50,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Writes the provided cover stream to the covers folder under web root with a GUID-prefixed unique filename and returns a web-relative path (nullable).",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53_evaluates_condition_53",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
          "semanticLabel": "create-directory / continue",
          "visibleLabel": "create-directory / continue",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 53,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "EnsureDirectoryExists(coversFolder)",
            "expandedLabel": "evaluates-condition"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60_invokes_60",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
          "semanticLabel": "Waits for async work",
          "visibleLabel": "Waits for async work",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 60,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "await data.CopyToAsync(fileStream);",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_returns_63",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
          "semanticLabel": "Return web-relative path with forward slash",
          "visibleLabel": "Return web-relative path with forward slash",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 63,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return $\"covers/{uniqueFileName}\"",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_returns_63",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
          "semanticLabel": "Returns result",
          "visibleLabel": "Returns result",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 63,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return $\"covers/{uniqueFileName}\";",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66_invokes_66",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
          "semanticLabel": "EnsureDirectoryExists",
          "visibleLabel": "EnsureDirectoryExists",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 66,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Checks for the existence of a directory and creates it if missing.",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68_evaluates_condition_68",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
          "semanticLabel": "create-directory / continue",
          "visibleLabel": "create-directory / continue",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 68,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Directory.CreateDirectory(path)",
            "expandedLabel": "evaluates-condition"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68_evaluates_condition_68",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68",
          "semanticLabel": "true / false",
          "visibleLabel": "true / false",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 68,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "if (!Directory.Exists(path))",
            "expandedLabel": "evaluates-condition"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10_defines_type_10",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10",
          "semanticLabel": "model BookStorageService",
          "visibleLabel": "model BookStorageService",
          "relation": "transforms",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 10,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
            "expandedLabel": "defines-type"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1_flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3_maps_dto_3",
          "from": "flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3",
          "semanticLabel": "dto AiSettings",
          "visibleLabel": "dto AiSettings",
          "relation": "transforms",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "sourceLine": 3,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
            "expandedLabel": "maps-dto"
          }
        }
      ],
      "subgraphs": [
        {
          "id": "flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
          "label": "BookStorageService"
        },
        {
          "id": "flow_1_nexusreader_infrastructure_services_billingservice_cs",
          "label": "BillingService"
        }
      ],
      "metadata": {
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BillingService.cs",
          "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "NexusReader.Infrastructure/Services/PromptRegistry.cs"
        ]
      }
    },
    {
      "id": "control_flow_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
      "kind": "control-flow",
      "title": "BookStorageService Execution Control Flow",
      "direction": "TD",
      "nodes": [
        {
          "id": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "kind": "service",
          "label": "BookStorageService",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
          "kind": "method",
          "label": "SaveEbookAsync",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 19
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
          "kind": "return",
          "label": "Returns result",
          "shape": "stadium",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 22
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_22_22",
          "kind": "step",
          "label": "Waits for async work",
          "shape": "rect",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 22
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
          "kind": "method",
          "label": "SaveEbookAsync",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 25
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
          "kind": "step",
          "label": "Ensure uploads directory exists (create if missing)",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 28
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
          "kind": "step",
          "label": "Waits for async work",
          "shape": "rect",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 35
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
          "kind": "return",
          "label": "Return web-relative path with forward slash",
          "shape": "stadium",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 40
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
          "kind": "method",
          "label": "SaveCoverAsync",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 43
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
          "kind": "step",
          "label": "Guards early exit or rejection path",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 45
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
          "kind": "return",
          "label": "Returns result",
          "shape": "stadium",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 47
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_47_47",
          "kind": "step",
          "label": "Waits for async work",
          "shape": "rect",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 47
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
          "kind": "method",
          "label": "SaveCoverAsync",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 50
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
          "kind": "step",
          "label": "Ensure covers directory exists (create if missing)",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 53
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
          "kind": "step",
          "label": "Waits for async work",
          "shape": "rect",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 60
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
          "kind": "return",
          "label": "Return web-relative path with forward slash",
          "shape": "stadium",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 63
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
          "kind": "method",
          "label": "EnsureDirectoryExists",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 66
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
          "kind": "step",
          "label": "Check directory existence and create if absent",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 68
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68",
          "kind": "step",
          "label": "Evaluates branch condition",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 68
        }
      ],
      "edges": [
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19_invokes_19",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
          "semanticLabel": "SaveEbookAsync",
          "visibleLabel": "SaveEbookAsync",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 19,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Wraps a byte-array payload into a MemoryStream and delegates to the Stream overload to persist an ebook.",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22_returns_22",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
          "semanticLabel": "Returns result",
          "visibleLabel": "Returns result",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 22,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return await SaveEbookAsync(stream, fileName);",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_22_22_invokes_22",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_22_22",
          "semanticLabel": "Waits for async work",
          "visibleLabel": "Waits for async work",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 22,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return await SaveEbookAsync(stream, fileName);",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25_invokes_25",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
          "semanticLabel": "SaveEbookAsync",
          "visibleLabel": "SaveEbookAsync",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 25,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Writes the provided stream to the uploads folder under web root with a GUID-prefixed unique filename and returns a web-relative path (forward-slash).",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28_evaluates_condition_28",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
          "semanticLabel": "create-directory / continue",
          "visibleLabel": "create-directory / continue",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 28,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "EnsureDirectoryExists(uploadsFolder)",
            "expandedLabel": "evaluates-condition"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35_invokes_35",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
          "semanticLabel": "Waits for async work",
          "visibleLabel": "Waits for async work",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 35,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "await data.CopyToAsync(fileStream);",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_returns_40",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
          "semanticLabel": "Return web-relative path with forward slash",
          "visibleLabel": "Return web-relative path with forward slash",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 40,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return $\"uploads/{uniqueFileName}\"",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_returns_40",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
          "semanticLabel": "Returns result",
          "visibleLabel": "Returns result",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 40,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return $\"uploads/{uniqueFileName}\";",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43_invokes_43",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
          "semanticLabel": "SaveCoverAsync",
          "visibleLabel": "SaveCoverAsync",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 43,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Validates byte-array cover data and delegates to the Stream overload; returns null for empty input.",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45_evaluates_condition_45",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
          "semanticLabel": "exit / continue",
          "visibleLabel": "exit / continue",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 45,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "if (data == null || data.Length == 0) return null;",
            "expandedLabel": "evaluates-condition"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47_returns_47",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
          "semanticLabel": "Returns result",
          "visibleLabel": "Returns result",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 47,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return await SaveCoverAsync(stream, fileName);",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_47_47_invokes_47",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_47_47",
          "semanticLabel": "Waits for async work",
          "visibleLabel": "Waits for async work",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 47,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return await SaveCoverAsync(stream, fileName);",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50_invokes_50",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
          "semanticLabel": "SaveCoverAsync",
          "visibleLabel": "SaveCoverAsync",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 50,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Writes the provided cover stream to the covers folder under web root with a GUID-prefixed unique filename and returns a web-relative path (nullable).",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53_evaluates_condition_53",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
          "semanticLabel": "create-directory / continue",
          "visibleLabel": "create-directory / continue",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 53,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "EnsureDirectoryExists(coversFolder)",
            "expandedLabel": "evaluates-condition"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60_invokes_60",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
          "semanticLabel": "Waits for async work",
          "visibleLabel": "Waits for async work",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 60,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "await data.CopyToAsync(fileStream);",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_returns_63",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
          "semanticLabel": "Return web-relative path with forward slash",
          "visibleLabel": "Return web-relative path with forward slash",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 63,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return $\"covers/{uniqueFileName}\"",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_returns_63",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
          "semanticLabel": "Returns result",
          "visibleLabel": "Returns result",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 63,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return $\"covers/{uniqueFileName}\";",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66_invokes_66",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
          "semanticLabel": "EnsureDirectoryExists",
          "visibleLabel": "EnsureDirectoryExists",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 66,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Checks for the existence of a directory and creates it if missing.",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68_evaluates_condition_68",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
          "semanticLabel": "create-directory / continue",
          "visibleLabel": "create-directory / continue",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 68,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Directory.CreateDirectory(path)",
            "expandedLabel": "evaluates-condition"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68_evaluates_condition_68",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68",
          "semanticLabel": "true / false",
          "visibleLabel": "true / false",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 68,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "if (!Directory.Exists(path))",
            "expandedLabel": "evaluates-condition"
          }
        }
      ],
      "subgraphs": [
        {
          "id": "NexusReader_Infrastructure_Services_BookStorageService",
          "label": "BookStorageService"
        }
      ],
      "metadata": {
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BillingService.cs",
          "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "NexusReader.Infrastructure/Services/PromptRegistry.cs"
        ]
      }
    },
    {
      "id": "contracts_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
      "kind": "class-diagram",
      "title": "BookStorageService Contracts and Entities",
      "direction": "LR",
      "nodes": [
        {
          "id": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "kind": "service",
          "label": "BookStorageService",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10",
          "kind": "dependency",
          "label": "BookStorageService",
          "shape": "doc",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 10
        },
        {
          "id": "flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1",
          "kind": "dependency",
          "label": "AiSettings",
          "sourcePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3",
          "kind": "dependency",
          "label": "AiSettings",
          "shape": "doc",
          "sourcePath": "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "sourceLine": 3
        }
      ],
      "edges": [
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1_flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10_defines_type_10",
          "from": "flow_file_nexusreader_infrastructure_services_bookstorageservice_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_services_bookstorageservice_cs_bookstorageservice_10",
          "semanticLabel": "model BookStorageService",
          "visibleLabel": "model BookStorageService",
          "relation": "transforms",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 10,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Infrastructure implementation for persisting book assets to local filesystem exposed via IBookStorageService.",
            "expandedLabel": "defines-type"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1_flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3_maps_dto_3",
          "from": "flow_file_nexusreader_infrastructure_configuration_aisettings_cs_file_1",
          "to": "flow_type_nexusreader_infrastructure_configuration_aisettings_cs_aisettings_3",
          "semanticLabel": "dto AiSettings",
          "visibleLabel": "dto AiSettings",
          "relation": "transforms",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "sourceLine": 3,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Holds AI integration configuration values (Google API key, model choices, token limits, retry and sampling settings) for options/config binding.",
            "expandedLabel": "maps-dto"
          }
        }
      ],
      "metadata": {
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BillingService.cs",
          "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "NexusReader.Infrastructure/Services/PromptRegistry.cs"
        ],
        "previewCompatibility": {
          "preferredSurface": "two-d",
          "fallback": "open-2d-preview",
          "reason": "class-diagram is preserved for 2D Mermaid rendering while 3D preview stays flowchart-only."
        }
      },
      "subgraphs": []
    },
    {
      "id": "failure_flow_2_nexusreader_infrastructure_services_bookstorageservice_cs",
      "kind": "control-flow",
      "title": "BookStorageService Guardrails and Failure Paths",
      "direction": "TD",
      "nodes": [
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
          "kind": "method",
          "label": "SaveEbookAsync",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 19
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
          "kind": "return",
          "label": "Returns result",
          "shape": "stadium",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 22
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
          "kind": "method",
          "label": "SaveEbookAsync",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 25
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
          "kind": "step",
          "label": "Ensure uploads directory exists (create if missing)",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 28
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
          "kind": "step",
          "label": "Waits for async work",
          "shape": "rect",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 35
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
          "kind": "return",
          "label": "Return web-relative path with forward slash",
          "shape": "stadium",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 40
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
          "kind": "method",
          "label": "SaveCoverAsync",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 43
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
          "kind": "step",
          "label": "Guards early exit or rejection path",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 45
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
          "kind": "return",
          "label": "Returns result",
          "shape": "stadium",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 47
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
          "kind": "method",
          "label": "SaveCoverAsync",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 50
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
          "kind": "step",
          "label": "Ensure covers directory exists (create if missing)",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 53
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
          "kind": "step",
          "label": "Waits for async work",
          "shape": "rect",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 60
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
          "kind": "return",
          "label": "Return web-relative path with forward slash",
          "shape": "stadium",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 63
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
          "kind": "method",
          "label": "EnsureDirectoryExists",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 66
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
          "kind": "step",
          "label": "Check directory existence and create if absent",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 68
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68",
          "kind": "step",
          "label": "Evaluates branch condition",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 68
        }
      ],
      "edges": [
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22_returns_22",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_19",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_22_22",
          "semanticLabel": "Returns result",
          "visibleLabel": "Returns result",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 22,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return await SaveEbookAsync(stream, fileName);",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28_evaluates_condition_28",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_25",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_guard_clause_28_28",
          "semanticLabel": "create-directory / continue",
          "visibleLabel": "create-directory / continue",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 28,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "EnsureDirectoryExists(uploadsFolder)",
            "expandedLabel": "evaluates-condition"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_returns_40",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_await_35_35",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
          "semanticLabel": "Return web-relative path with forward slash",
          "visibleLabel": "Return web-relative path with forward slash",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 40,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return $\"uploads/{uniqueFileName}\"",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40_returns_40",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_saveebookasync_return_40_40",
          "semanticLabel": "Returns result",
          "visibleLabel": "Returns result",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 40,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return $\"uploads/{uniqueFileName}\";",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45_evaluates_condition_45",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_43",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
          "semanticLabel": "exit / continue",
          "visibleLabel": "exit / continue",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 45,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "if (data == null || data.Length == 0) return null;",
            "expandedLabel": "evaluates-condition"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47_returns_47",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_45_45",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_47_47",
          "semanticLabel": "Returns result",
          "visibleLabel": "Returns result",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 47,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return await SaveCoverAsync(stream, fileName);",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53_evaluates_condition_53",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_50",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_guard_clause_53_53",
          "semanticLabel": "create-directory / continue",
          "visibleLabel": "create-directory / continue",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 53,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "EnsureDirectoryExists(coversFolder)",
            "expandedLabel": "evaluates-condition"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_returns_63",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_await_60_60",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
          "semanticLabel": "Return web-relative path with forward slash",
          "visibleLabel": "Return web-relative path with forward slash",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 63,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return $\"covers/{uniqueFileName}\"",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63_returns_63",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_savecoverasync_return_63_63",
          "semanticLabel": "Returns result",
          "visibleLabel": "Returns result",
          "relation": "returns",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 63,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "return $\"covers/{uniqueFileName}\";",
            "expandedLabel": "returns"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68_evaluates_condition_68",
          "from": "flow_method_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_66",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
          "semanticLabel": "create-directory / continue",
          "visibleLabel": "create-directory / continue",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 68,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Directory.CreateDirectory(path)",
            "expandedLabel": "evaluates-condition"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68_flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68_evaluates_condition_68",
          "from": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_guard_clause_68_68",
          "to": "flow_action_nexusreader_infrastructure_services_bookstorageservice_cs_ensuredirectoryexists_branch_68_68",
          "semanticLabel": "true / false",
          "visibleLabel": "true / false",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/BookStorageService.cs",
          "sourceLine": 68,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "if (!Directory.Exists(path))",
            "expandedLabel": "evaluates-condition"
          }
        }
      ],
      "subgraphs": [
        {
          "id": "NexusReader_Infrastructure_Services_BookStorageService",
          "label": "BookStorageService"
        }
      ],
      "metadata": {
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BillingService.cs",
          "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "NexusReader.Infrastructure/Services/PromptRegistry.cs"
        ],
        "warnings": []
      }
    },
    {
      "id": "method_flows_graph",
      "kind": "method-flow",
      "title": "Method Flow Details",
      "direction": "TD",
      "nodes": [
        {
          "id": "flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1",
          "kind": "service",
          "label": "EpubReaderService",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175",
          "kind": "method",
          "label": "CountWords",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 175
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177",
          "kind": "step",
          "label": "empty check",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 177
        },
        {
          "id": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_85_85",
          "kind": "step",
          "label": "Waits for async work",
          "shape": "rect",
          "sourcePath": "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 85
        },
        {
          "id": "flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1",
          "kind": "service",
          "label": "ContentHasher",
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9",
          "kind": "method",
          "label": "ComputeHash",
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 9
        },
        {
          "id": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_branch_11_11",
          "kind": "step",
          "label": "Evaluates branch condition",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 11
        },
        {
          "id": "flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1",
          "kind": "service",
          "label": "SignalRSyncBroadcaster",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_21",
          "kind": "method",
          "label": "BroadcastProgressAsync",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 21
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_guard_clause_30_30",
          "kind": "step",
          "label": "check excludedConnectionId presence",
          "shape": "diamond",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 30
        },
        {
          "id": "flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1",
          "kind": "dependency",
          "label": "SyncHub",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 1
        },
        {
          "id": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19",
          "kind": "method",
          "label": "UpdateProgress",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 19
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_21_21",
          "kind": "step",
          "label": "Reads repository or persistence state",
          "shape": "rect",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 21
        },
        {
          "id": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28",
          "kind": "method",
          "label": "OnConnectedAsync",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 28
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_30_30",
          "kind": "step",
          "label": "Reads repository or persistence state",
          "shape": "rect",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 30
        },
        {
          "id": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38",
          "kind": "method",
          "label": "OnDisconnectedAsync",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 38
        },
        {
          "id": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_40_40",
          "kind": "step",
          "label": "Reads repository or persistence state",
          "shape": "rect",
          "sourcePath": "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 40
        }
      ],
      "edges": [
        {
          "id": "edge_flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175_invokes_175",
          "from": "flow_file_nexusreader_infrastructure_services_epubreaderservice_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175",
          "semanticLabel": "CountWords",
          "visibleLabel": "CountWords",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 175,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Counts words in a text by splitting on whitespace characters; returns 0 for null/whitespace input.",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175_flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177_evaluates_condition_177",
          "from": "flow_method_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_175",
          "to": "flow_action_nexusreader_infrastructure_services_epubreaderservice_cs_countwords_guard_clause_177_177",
          "semanticLabel": "empty check",
          "visibleLabel": "empty check",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "sourceLine": 177,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "returns 0 if string.IsNullOrWhiteSpace",
            "expandedLabel": "evaluates-condition"
          }
        },
        {
          "id": "edge_flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_85_85_flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9_uses_service_87",
          "from": "flow_action_nexusreader_infrastructure_services_knowledgeservice_cs_getknowledgeinternalasync_await_85_85",
          "to": "flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9",
          "semanticLabel": "ContentHasher.ComputeHash",
          "visibleLabel": "ContentHasher.ComputeHash",
          "relation": "uses",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "sourceLine": 87,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "normalizedText",
            "expandedLabel": "uses-service"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1_flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9_invokes_9",
          "from": "flow_file_nexusreader_infrastructure_helpers_contenthasher_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9",
          "semanticLabel": "ComputeHash",
          "visibleLabel": "ComputeHash",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 9,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Normalize the provided string and return its SHA-256 hash as a lower-case hex string; returns empty string for null/whitespace input.",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9_flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_branch_11_11_evaluates_condition_11",
          "from": "flow_method_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_9",
          "to": "flow_action_nexusreader_infrastructure_helpers_contenthasher_cs_computehash_branch_11_11",
          "semanticLabel": "true / false",
          "visibleLabel": "true / false",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "sourceLine": 11,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "if (string.IsNullOrWhiteSpace(input))",
            "expandedLabel": "evaluates-condition"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1_flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_21_invokes_21",
          "from": "flow_file_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_21",
          "semanticLabel": "BroadcastProgressAsync",
          "visibleLabel": "BroadcastProgressAsync",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 21,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "Sends a 'ProgressUpdated' notification to all connected devices of a user (attempts to consider an excluded connection id but falls back to User-scoped broadcast).",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_21_flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_guard_clause_30_30_evaluates_condition_30",
          "from": "flow_method_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_21",
          "to": "flow_action_nexusreader_infrastructure_realtime_signalrsyncbroadcaster_cs_broadcastprogressasync_guard_clause_30_30",
          "semanticLabel": "enter branch: attempts exclusion comment / else: normal send",
          "visibleLabel": "enter branch: attempts exclusion comment / else: normal send",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "sourceLine": 30,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "If excludedConnectionId present the code enters the if-block but still uses Clients.User(userId).SendAsync (no actual exclusion implemented here).",
            "expandedLabel": "evaluates-condition"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1_flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19_invokes_19",
          "from": "flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19",
          "semanticLabel": "UpdateProgress",
          "visibleLabel": "UpdateProgress",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 19,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "If the connection is associated with an authenticated user, create and forward an UpdateReadingProgressCommand (including ConnectionId) to the application via MediatR.",
            "expandedLabel": "handles-route"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19_flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_21_21_invokes_21",
          "from": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_19",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_updateprogress_repository_read_21_21",
          "semanticLabel": "Reads repository or persistence state",
          "visibleLabel": "Reads repository or persistence state",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 21,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "var userId = Context.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value;",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1_flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28_invokes_28",
          "from": "flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28",
          "semanticLabel": "OnConnectedAsync",
          "visibleLabel": "OnConnectedAsync",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 28,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "When a client connects, add the connection to a per-user SignalR group if UserIdentifier is present, then call base.OnConnectedAsync.",
            "expandedLabel": "handles-route"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28_flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_30_30_invokes_30",
          "from": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_28",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_onconnectedasync_repository_read_30_30",
          "semanticLabel": "Reads repository or persistence state",
          "visibleLabel": "Reads repository or persistence state",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 30,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "var userId = Context.UserIdentifier;",
            "expandedLabel": "invokes"
          }
        },
        {
          "id": "edge_flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1_flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38_invokes_38",
          "from": "flow_file_nexusreader_infrastructure_realtime_synchub_cs_file_1",
          "to": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38",
          "semanticLabel": "OnDisconnectedAsync",
          "visibleLabel": "OnDisconnectedAsync",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 38,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "When a client disconnects, remove the connection from the per-user SignalR group if UserIdentifier is present, then call base.OnDisconnectedAsync(exception).",
            "expandedLabel": "handles-route"
          }
        },
        {
          "id": "edge_flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38_flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_40_40_invokes_40",
          "from": "flow_method_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_38",
          "to": "flow_action_nexusreader_infrastructure_realtime_synchub_cs_ondisconnectedasync_repository_read_40_40",
          "semanticLabel": "Reads repository or persistence state",
          "visibleLabel": "Reads repository or persistence state",
          "relation": "calls",
          "sourcePath": "c:/Users/micht/source/repos/Nexus.Reader/src/NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "sourceLine": 40,
          "includeInMetadata": true,
          "payload": {
            "outputSummary": "var userId = Context.UserIdentifier;",
            "expandedLabel": "invokes"
          }
        }
      ],
      "subgraphs": [
        {
          "id": "NexusReader_Infrastructure_Services_EpubReaderService",
          "label": "EpubReaderService"
        },
        {
          "id": "NexusReader_Infrastructure_Helpers_ContentHasher",
          "label": "ContentHasher"
        },
        {
          "id": "NexusReader_Infrastructure_RealTime_SignalRSyncBroadcaster",
          "label": "SignalRSyncBroadcaster"
        },
        {
          "id": "NexusReader_Infrastructure_RealTime_SyncHub",
          "label": "SyncHub"
        }
      ],
      "metadata": {
        "evidencePaths": [
          "NexusReader.Infrastructure/Services/BillingService.cs",
          "NexusReader.Infrastructure/Configuration/StripeSettings.cs",
          "NexusReader.Infrastructure/Services/BookStorageService.cs",
          "NexusReader.Infrastructure/Services/EpubReaderService.cs",
          "NexusReader.Infrastructure/Services/KnowledgeService.cs",
          "NexusReader.Infrastructure/Helpers/ContentHasher.cs",
          "NexusReader.Infrastructure/Helpers/JsonRepairHelper.cs",
          "NexusReader.Infrastructure/Configuration/AiSettings.cs",
          "NexusReader.Infrastructure/RealTime/SignalRSyncBroadcaster.cs",
          "NexusReader.Infrastructure/RealTime/SyncHub.cs",
          "NexusReader.Infrastructure/Services/EpubMetadataExtractor.cs",
          "NexusReader.Infrastructure/Services/PromptRegistry.cs"
        ]
      }
    }
  ]
}